最近在做智能设备,设备跟服务器通信,用到Iot技术通信方式,先使用到电信iot平台,再使用移动oneNet平台,,期间遇到很多问题,不过在一次又一次的迭代,终于找到一个比较好的方法,兼容两个平台,可以数据统一,做到跟平台无关,兼容性比较好.
坑1:设备都需要在平台上注册,无论电信iot平台还是移动oneNet平台,当你注册完之后,使用它们的卡,设备才能跟平台通信,通信之后,平台有设置消息推送方式,把设备想要推送的消息给第三方平台(就是自己的服务器),由于刚开始先用电信iot平台,注册设备的时候,需要公司id,刚好我这边有两个公司id,那就需要用到两个插件,然后通信维护的时候,需要维护这两个插件,电信iot有两个平台,一个是开发环境,一个是生产环境,开发环境随便玩,插件随便用,接口随便写,但是生产环境不行,需要提测,每次提测都需要花几天时间,所有这个前期做的很痛苦,新增一个接口,提测一次,超级麻烦.后来接入移动oneNet平台的时候,直接修改另外一种方法,使用全透传,说白了,你平台对我来说,我只想你传输数据,其他不要干,你也不要管我,我也只传一个参数,就是一个String类型的json,这样子解决了两边的兼容问题,平台直接传送数据,设备直接跟服务器打交道,服务器去解析设备上报的二进制数.
设备类似的接口如下:
设备上报的数据,head,len,crc,都不加密,payload里面的数据都加密,这里加密方法找我之前的博客,https://mp.csdn.net/postedit/84971879
解密之后,先校验crc,当crc一致的时候,根据cmd来处理对应的逻辑关系.
对应电信来说,这个的所有数据,就是一个String类型的字符串,移动也是,这样子相当于全透传功能,电信和移动,也不知道我们什么数据,有什么接口等等,我们的数据也是加密的,数据的安全也掌握在自己手上.
坑2:对于注册设备,一般先去电信或者移动去注册设备,然后等电信以消息的形式来反馈给第三方服务器(自己的服务器),说注册设备成功了,这里肯定会遇到网络问题,导致数据没有推送过来,后来接入移动平台的时候,修改了一下逻辑,这里不需要平台的推送,你post请求注册设备,成功你再调自己服务器的设备添加,不要消息推送,这样子好很多.
坑3:对于数据解析层,这里移动跟电信都不一样,可以分开两个来写,但是具体的业务逻辑判断,我们这边自己的业务逻辑,最好用一个,可以调用dubbo服务器,这样子各干各的事,互补干扰,结构清晰.解析层就只单单解析数据.