物联网 command 原型设计及框架

在另一篇文章讲述了client API设计(IOT command (based on sip)client API设计 for java )。

前段时间梳理了command设计及框架,其实狭义上即设备控制、管理,即可以家庭局域网内进行管理,也可以远程管理(通过开源的sip server: opensips),当然也包含了设备联动规则的原型实现(即物联网的ITTT).

command包含两部分:即client和server(eg. 手机上的client app,gateway上的server)

流程如下图所示:

1. 手机发送远程请求:对房间内hue开灯

2. 物联网cloud平台接收到请求转发给相应的gateway

3. command_svr接收,解析发送给hue模块,hue模块进行本设备类型协议的通信,实现开灯请求

4-5. command_svr将操作结果发送回去,由opensips转发给client, client获知开灯成功结果。

client主要功能:

1. 请求gateway的设备列表,设备功能,状态

2. 发送设备操作请求,并接收设备操作结果

3. 订阅, 接收设备消息通知

sever主要功能:

1. 管理接入到gateway的不同设备类型列表,设备插件以动态库形式接入,方便第三方接入。

2. 接收client的设备操作请求,转发给相应的设备模块(eg 上图ip_camera),由该模块进行协议转换,进行实际的设备控制,然后接收操作结果,并将其转换为command协议,返回给client response.

3. 接收设备模块的主动推送的消息,并推送给相应的client.

4. ittt功能:接收并存储client制定的设备联动规则,检查client的设备控制请求,如符合if, 则触发then的设备控制。

目前command的实现是基于sip来实现的,对sip的方法进行扩展,即增加一个定制的方法sip-command,并在其基础上实现

设备控制层,command在pjsip开源库基础上实现,而远程管理借助开源的opensips服务器,达到快速原型目的; 另外一个原因是项目中流媒体传输播放需求是基于sip/rtp来实现,统一在sip下,减少学习投入成本,尽快出原型。

下图是一个command框架图,底层是sip层,在pjsip基础上增加了command方法;cmd_mng定义了两个主要接口(cmd_send_inf, cmd_recv_inf)来和sip层进行通信, 考虑将来方便替换或兼容不同的协议,达到模块间松耦合。cmd_mng上层分别是dev_mng和iot_cmd_proc两个模块,dev_mng包含了

command server端的管理、加载设备插件,即设备的function功能和设备元数据文件解析导入(通过定义plugin_interface接口,提供给第三方开发为gateway接入新设备类型),以及供client查询设备元信息的内部接口。iot_cmd_proc模块则包含了client, server的收发command消息的处理框架,和提供给第三方开发client端的接口(即开头讲到的client API设计)。

1. 下面介绍server端的供第三方接入新设备类型开发的接口定义(第三方实现,并以动态库的方式提供给gateway command-svr)

plugin_interface接口:

typedef struct dev_func
{
 const char * funcname;
 int (* dev_method)(cmd_arg * param_list[], uint8_t plist_size);
}dev_func;

typedef struct dev_plugin {

 char dev_pluginname[NAME_MAXSIZE];  //设备类型名称,具有唯一性
 const dev_func * pt_func_array;     //函数列表,设备实际执行函数,供command-svr回调。
 char dev_metafile[NAME_MAXSIZE];    //设备元数据文件

}dev_plugin;

typedef int   (* init_devplugin)(dev_plugin * pt_plugin, dev_cmd_interface * pt_inf);

command-svr通过init_devplugin函数,会读取到该设备插件的上面信息, gateway便知晓该设备类型具有的属性和功能。

(后续还需要有设备插件的热更新,删除,运行时加载等功能)

2. 下面介绍iot_cmd_proc模块,它是command的逻辑处理核心

以client端为例,

采用内存消息队列形式(使用mini_mq)来解耦业务层(cli_proxy),command层(cmdhandler_proc),承载msg的协议层(sip_proxy)

原型开发完后,总结了下开发,使用时碰到的各种问题:

1. command的设备控制设计,是以设备的动作为目标,如下test设备类型的元数据定义

<device type="test_plugin">
<method name="test1">
<param name="a" type="int" direction="IN"/>
<param name="b" type="string" direction="IN"/>
<param name="c" type="float" direction="OUT"/>
<param name="d" type="string" direction="OUT"/>
</method>
</device>

如果加入设备propery属性,可以很好的契合下个阶段command的协议采用http的restful风格,以设备资源属性为目标,简单通过

set, get来实现对设备的操作(当然正如不是所有的web服务都能完美的采用restful, 设备控制操作可以采用属性,动作均定义的方式)。

2. 正如上面描述到的,我考虑command的协议采用http,在gateway使用web服务方式,client端就采用hybrid方式,即避免command

的client, server更新问题,又使用原生来避免web的不足,目前已经在调研中。

3. 设计一个的iot_cloud原型,暂定功能主要为方便用户远程管理设备,以及存储用户设备数据,及简单的数据分析。

时间: 2024-10-28 11:49:05

物联网 command 原型设计及框架的相关文章

原型设计实践

      在教师管理系统这个项目中.開始学习并使用Axure进行原型设计.虽然如今能够用Axure来进行一些简单的界面设计和交互设计.仍认为自己掌握的仅仅是Axure强大功能的微小的一部分.       提到原型设计.不得不提一个词:UCD(User Centered Design). 即以用户为中心的设计,是在设计过程中以用户体验作为设计决策的中心,强调用户优先.       我们开发软件产品的第一步就是需求分析.在需求分析阶段常常出现的问题就是:       1.用户描写叙述的需求和开发者

推荐两个界面原型设计工具--GUIDesignStudio 和 Mockups For Desktop

前段时间,有幸参加一次高级软件架构师的培训,授课老师介绍了两个很好玩的界面原型设计工具:GUIDesignStudio 和 Mockups For Desktop,现分享一下,截图说明,洗洗眼球,权当娱乐. 以前在做界面原型设计的时候(不多,但有时候要做的),印象中多数用Visio或者一些UML工具来大致描述一下,效果及交互性较差,不知您是否做过这方面的工作,不管有没有,我们来了解下这两个比较有意思的东西吧.GUIDesignStudio 运行后,随便画上几个控件,界面如下: 运行设计好的内容后

Android--五款国外APP原型设计工具的优缺点对比

1.Proto.io 基于Web界面,带有IOS和安卓下的调试器 Proto.io这个web应用强大得令人吃惊,它有很多很多的功能.不过,因为所有工作都是依靠拖放.点击按钮和选择列表的值,有时候想找到需要的设定会让人有点儿不知所措. 鉴于IF原型的本质特点——不同的对象以不同的速度移动——我不得不增加一些自定义的JavaScript计算脚本.Proto.io提供的单行文本框对于冗长的计算脚本来说太小了.为了能够概览脚本,我得把它们保存在我电脑上的文本文件里.特别需要注意是,这些JavaScrip

分享比较热门的原型设计工具

交互设计师的一项重要工作就是进行产品原型设计(Prototype Design).而产品原型设计最基础的工作,就是画出站点的大体wireframe(框架图)并结合批注.大量的说明以及流程图等,将自己的产品原型完整而准确的表述给产品.UI.重构/开发工程师等等,并通过沟通反复修改prototype 直至最终确认,然后进入后续的设计开发流程. 要完成以上复杂的设计和沟通工作,需要一个好的原型设计工具.这里就目前常用的和比较热门的工具来分享一下:Word(产品经理比较常用)Fireworks(交互组内

如何应用AxureRP做原型设计

什么是原型呢?这个在之前介绍为什么需要进行原型设计当中有提到,原型是产品的最初形态,确认用户对产品界面和操作功能可用性的需求,高保真的原型接近于产品的最终形态,但仍只是原型.产品原型简单的说就是产品设计成形之前的一个大体框架,对网站来讲,就是将页面模块.元素进行粗放式的排版和布局,深入一些,还会加入一些交互性的元素,使其更加具体.形象和生动. 一般在进行主要页面原型设计之前,设计师需要了解设计需求,如果身兼了需求分析或产品分析等角色,设计过程就会稍微简单一些,因为已经了解了从用户需求到转化成可实

NET架构设计、框架设计系列文章总结

NET架构设计.框架设计系列文章总结 从事.NET开发到现在已经有七个年头了.慢慢的可能会很少写.NET文章了.不知不觉竟然走了这么多年,热爱.NET热爱c#.突然想对这一路的经历进行一个总结. 是时候开始下一阶段的旅途,希望这些文章可以在发挥点价值作用. 架构设计: ElasticSearch大数据分布式弹性搜索引擎使用 (推荐) DDD实施经验分享-价值导向.从上往下进行(圈内第一个吃螃蟹DDD实施方案)(推荐) 软件工程-思考项目开发那些事(一)(推荐) SOA架构设计经验分享-架构.职责

常用快速原型设计工具大比拼、原型设计工具哪个好用

原型设计是交互设计师与PD.PM.网站开发工程师沟通的最好工具.而该块的设计在原则上必须是交互设计师的产物,交互设计以用户为中心的理念会贯穿整个产品.利用交互设计师专业的眼光与经验直接导至该产品的可用性. 简单说,“原型”是在项目前期阶段的重要设计步骤,主要以发现新想法和检验设计为目的,重点在于直观体现产品主要界面风格以及结构.并展示主要功能模块以及之间相互关系,不断确认模糊部分,为后期的视觉设计和代码编写提供准确的产品信息. 目的: 下列角色使用用户界面原型: 用例阐释者,用来了解用例的用户界

用Axure RP做整体原型设计的步骤

信息架构确定了之后,就需要对每一个页面进行元素的排版,排版之前,一般都会先对页面进行一个布局设计的考虑.我们需要对这些内容块进行一定的设计布局,这里的布局结构取决于设计人员对内容编排的把握,不同的布局会产生不同的效果. 其实这个应该较早的提出来,因为已经发布过很多关于用Axure RP设计原型实例的文章,不过大部分都是关于单个功能或者交互效果的演示实例,而没有将其串联起来形成一个整体,比如一个网站或者是一个互联网产品.用 Axure RP设计一个实例的步骤和用其设计一个整体产品的步骤还是不一样的

结队项目--需求分析与原型设计

结对者:031402324 巫振格 031402338 解宇虹 pdf文件:http://files.cnblogs.com/files/gzwu/作业.pdf 工具:Axure Up 8.0 烦恼:1.过程繁琐,数据信息多级传递,费时费力,过程不透明2.大部分学生与老师都只能被动分配,难有自由选择3.学生无法与老师沟通,难以清楚的了解到导师的研究方向与项目,也为之后毕设埋下隐患4.难以时时了解到选每个导师的学生数,可能导致学生扎堆选某一个老师,而有的导师却少有人问津5.每个导师对于期望的学生数