lorawan传感器协议解析

背景

公司采购了基于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拆包

第二步 解析控制码

lorawan传感器协议解析_第1张图片

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

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

第三步 获取数据域长度

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

第四步 判断传感器类型 

lorawan传感器协议解析_第2张图片

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

lorawan传感器协议解析_第3张图片

第五步 解析数据单元标识

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

lorawan传感器协议解析_第4张图片

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

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

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

按照数据协议

lorawan传感器协议解析_第5张图片

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

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

湿度同理 

你可能感兴趣的:(lora,传感器解析)