4G+LoRa水表电表(Z005B)
[TOC]
一、实现功能简介
基于 FlexLua 《DTU01万能采集器》和《DTU02万能网关》实现 LoRa 无线采集多个水表电表数据,并将采集到的水表和电表数据(相电压/相电流/频率/功率因素/有功功率/有功电度累计值)通过 4G 无线传输的方式,以 Json 数据格式通过 Mqtt 上报给云服务器。
通信数据传输格式举例如下:
--LrAddr=1 的 DTU01 采集器上报电表1、电表2、水表1 的传感器数据(上报周期1分钟)
{"LrAddr":1,"Dev":"SENSOR_DB1","Data":{"ULNAvg":223.65,"IAvg":0.51,"F":50.12,"PF":0.0,"P":0.0,"Ep":0.05},"Err":null}
{"LrAddr":1,"Dev":"SENSOR_DB2","Data":{"ULNAvg":222.13,"IAvg":2.58,"F":50.22,"PF":0.0,"P":0.0,"Ep":0.05},"Err":null}
{"LrAddr":1,"Dev":"SENSOR_SB1","Data":{"Water":100.58},"Err":null}
--LrAddr=2 的 DTU01 采集器上报电表3的传感器数据(上报周期1分钟)
{"LrAddr":2,"Dev":"SENSOR_DB3","Data":{"ULNAvg":219.35,"IAvg":0.01,"F":50.49,"PF":0.0,"P":0.0,"Ep":0.05},"Err":null}
--LrAddr=3 的 DTU01 采集器上报水表2的传感器数据(上报周期1分钟)
--水表:用量:12345.67立方米
{"LrAddr":3,"Dev":"SENSOR_SB2","Data":{"Water":12345.67},"Err":null}
--LrAddr=4 的 DTU01 采集器上报电表4的传感器数据(上报周期1分钟)
--电表:相电压/相电流/频率/功率因素/有功功率/有功电度累计值
{"LrAddr":4,"Dev":"SENSOR_DB4","Data":{"ULNAvg":220.92,"IAvg":0.23,"F":50.11,"PF":0.0,"P":0.0,"Ep":0.05},"Err":null}
"LrAddr"
:可用来标识是哪一台 DTU01 LoRa 采集器
"Dev"
:可用来标识这台 DTU01 采集器采集的是什么传感器
"Data"
:中包含的是传感器结果数值
"Err"
:中包含的是故障信息,如果 "Data" = null,则 "Err" 中将包含错误信息,否则平时都是 null
二、实现方法
实现点 | 实现参考文档 |
---|---|
DTU01 万能采集器 + 电表 | M000A 文档:拓普瑞 TP613 电表(Lora主动传输章节) |
DTU01 万能采集器 + 水表 | M000D文档:正泰 LXSY 水表(Lora主动传输章节) |
DTU02 万能网关 | C000A 文档:Lora 转 4G 网关 Json 透传网 |
提示:如果 DTU01 需要由 12v 电池长期低功耗供电,除了在 DTU01 采集器源代码的配置信息中将 "SysSleepEn "参数设置成1外,还需要进一步参考《DTU01直流供电和电池低功耗供电说明》文档在硬件上做一些调整,该文档可在
{FlexLua开源网盘}
->{Hardware}
->{DTU01万能采集器}
->{DTU01硬件使用指导书}
文件夹中找到。
三、源代码
虽然参考上面给出的文档开发者即可以实现整个项目,但为了节省开发者时间,在{FlexLua开源网盘}
-> {Application}
-> {Z005B}
文件夹中也准备好了 DTU01 和 DTU02 的源代码以供开发者参考。
DTU01源代码
DTU01 文件夹中一共提供了四套 DTU01 源代码,这四套代码基本上相似,都是参考 {FlexLua开源网盘}
-> {Software}
-> {DTU01万能采集器}
-> {RS485}
-> {Lora主动发送}
-> main.lua
修改而来,这四个代码不同之处如下表:
源代码名称 | 配置信息不同处 | 代码不同处 |
---|---|---|
电表1 电表2 水表1 | LoraAddr = 1 SysDevName1 = "SENSOR_DB1" SysDevName2 = "SENSOR_DB2" SysDevName3 = "SENSOR_SB1" | 有三个采集函数: ModbusToJson_DB1(),ModbusToJson_DB2(),ModbusToJson_SB1(), 采集电表1/电表2/水表2,并在 while 大循环中分别调用了这三个采集函数 |
电表3 | LoraAddr = 2 SysDevName = "SENSOR_DB3" | 只有一个采集函数: ModbusToJson() 用来采集电表3, 并在 while 大循环中调用了这个采集函数 |
水表2 | LoraAddr = 3 SysDevName = "SENSOR_SB2" | 只有一个采集函数: ModbusToJson()) 用来采集水表2, 并在 while 大循环中调用了这个采集函数 |
电表4 | LoraAddr = 4 SysDevName = "SENSOR_DB4" | 只有一个采集函数: ModbusToJson()) 用来采集电表4, 并在 while 大循环中调用了这个采集函数 |
提示:当开发者需要增加新的采集器时,基于源代码参考上表修改即可。
DTU02源代码
DTU02 源代码完全复制了 {FlexLua开源网盘}
-> {Software}
-> {DTU02万能网关}
-> {LORA_4G_MQTT}
-> main.lua
代码文件,但开发者需要根据实际情况正确填写源代码中的 Mqtt 配置信息。
DTU01源代码 & DTU02源代码
如果有多个像本文章描述的 Lora 网络同时共存(既多个 DTU02 网关共存),为了实现多网络的共存,需要将 DTU01 和 DTU02 源代码中的 LoraSubNetID(Lora 子网 ID) 配置参数设置为其他值,但同一 Lora 网络中的 DTU01 和 DTU02 的 LoraSubNetID 值必须相同。