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拆包

第二步 解析控制码

第二个字节 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摄氏度

湿度同理 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值