lorawan传感器协议解析

跟風遠走 提交于 2020-01-15 01:13:41

背景

公司采购了基于lorawan协议的网关和传感器设备,需要做一个业务系统来对iot设备做统计和分析,并进行一些操作;主要包括电表,温湿度传感器,烟感等;

准备阶段

业务服务通过socker长连接和网关保持连接,通过约定的命令去主动或者被动发送和接收数据;

核心点是每类传感器的协议;

关键概念

协议数据采用16进制编码的二进制流返回,一次上报可能包含多个传感器的数据,需要手动拆包;

上行
由 LoRaWAN 传感器向上层发命令
下行
由上层向 LoRaWAN 传感器发命令
功能码
0100:主动上报命令
高位在前,地位在后  

大端数据 

 
小端数据  

开始解析

第一步 拆包

样例数据:a8 94 11 0c 00 02 ee ee ee ee ee ee 12 01 00 00 88 1d c1 07 6f 16 a8.........

上面是温湿度传感器上报的数据

根据协议,起始帧为a8  结束为16

将16进制的数据按a8和16拆包

第二步 解析控制码

第二个字节 94为控制码  94解析为二进制数据:10010100

高位第一位  1  则为上行数据  3~D0   0100   分析为主动上报命令,应为温湿度传感器主动上班的温湿度数据

第三步 获取数据域长度

根据协议  ,第三个字节为数据域长度  11H  转成10进制为17   说明数据域长度为17个字节

第四步 判断传感器类型 

前两个字节  0c00代表传感器类型,由于采用的是高位在后,低位在前的编码方式  所以需要找000c对应的传感器

第五步 解析数据单元标识

数据单元标识的字节为02  ,根据文档02为传感器状态

第六步 获取数据单元,解析成想要的业务数据

数据单元的数据为ee ee ee ee ee ee 12 01 00 00 88 1d c1 07 

根据文档  ee为无效码  所以实际的有效数据为12 01 00 00 88 1d c1 07 

按照数据协议

12 01 00 00   低位在前 则为:00 00 01 12 转换为32位int  值为274  则光照度为274流明

88 1d   转换为int 值为 (7560 -5000)*0.01 =25.6摄氏度

湿度同理 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!