在我们物联网开发中,设备每增加一条指令,就要编写对应的编解码过程,以及编解码生成的对应模型,和一个暴露给前端使用的接口!而且如果在代码中,完成这件事,那还要重新发布,设备量如果不多还好,如果成千上万,用户体验感很不好。而且上面说的,都是一次通过的场景,如果运行中又存在指令解析编码错误,这个时候二进制可读性又非常差,往往分析问题都是两小时起步,可太难了!
我在编解码过程中发现有时候同一种设备,它的数据类型解析的方法都是固定的。不同的指令,只是不同解析类型的组装。而且设备的一个属性,往往对应两种指令,即读和写。
由此,我们编码的时候,能不能只编写该设备数据类型的解析过程,他们的组合关系暴露到Web层,由用户处理即可!
前端与我们交互的时候,需要给我们一个数据模型,一般是json格式,我们为了确定通道,往往会写一个api提供给前端,一条指令,一个api,功能都是和硬件交互,这一步是不是有点重复,我们可以设计成一个接口,供前端使用。或许你说,我不知道前端需要什么数据,那我们思考的点不要在前端身上,前端属于上层,上层变化太多,封装不起来。我们考虑硬件,硬件的指令是确定的,解析的数据模型也是确定的,我们把编解码的数据模型描述好即可!
Web地址: http://sf.zxqnywlw.cn/web/login
H5 地址: http://sf.zxqnywlw.cn/h5/login
项目地址: https://gitee.com/zxq341
联系方式: 284231703(qq群)
主要就是编号,产品
主要是数据包和端口,数据包描述设备所有属性,端口为硬件与大衍物联网的通讯端口!
类似与文件夹的作用,用来分类的!
描述智能硬件的属性信息,例如土壤温湿度传感器,属性对应的即是土壤温度,土壤湿度!
注意发起方,和指令类型两个属性。
发起方是平台,我们要把json转成对应的数据帧。
发起方是设备,我们要把数据帧转成对应的json。
指令类型通常分三种,请求,回复,通知!
请求下发后,要根据resultId来获取返回值。
回复反馈时,要上报自己的resultId。
通知较为简单,发过去即可!
指令与属性字段,序列号代表属性在数据帧中的位置!
指令与属性字段,序列号代表属性在数据帧中的位置,j截获类型与参数来截取数据帧内的字节数组。
指令编解码关系组合好后,对应的json数据信息,用于设备交互。统一api后,根据json内的值,生成与硬件的交互帧!
设备指定产品!
产品与属性包一一对应!
属性指定属性包!
指令选择属性包后,获取属性包下的属性!
指令发起方是平台,点击生成会弹出对话框,在对话框内选择属性。序号不可编辑,1选好后,会变为2, 顺序递增,如果字段点击确定后发现错误,点击撤销刚刚选择的字段会被移除!
指令发起方是设备,设备提供的是数据帧信息即二进制数组!在解析之前我们要把大的数据帧数组分成小的字段数组!选择字段,会带出字段长度填入到截获参数中!截获类型目前有三种,按长度解析,正序。倒数解析,倒叙。直到某某字节逻辑判断了。默认是按长度解析,代码里自由扩展!
与前端交互的json模型!根据指令的生成操作生成!
设备在下拉框选择指令(通知和请求类型),弹出对应的json数据!
结果:
目前没有硬件接入,返回没回复!