CU606 LoRaWAN 空气质量监测仪用户手册

设备信息:型号 CU606,devEui ffffff100004e982,网关 IP 192.168.31.193,Modbus Slave ID 4,BACnet Device ID 103

1 协议概览

CU606 在 Fport 210 上报 CO₂、PM2.5、TVOC、甲醛、温度、湿度、大气压及信号质量。

1.1 上行数据协议(Fport 210)

载荷格式(Fport 210):

字节位置 字段 说明
0 保留 固定 0x00(协议版本)
1 … N TLV 对 [Type(1 B)][Value(N B)] … 循环至结束

每个 Type 字节决定字段名称和后续 value 字节数:

Type Value字节数 字段名称 编码方式 换算 单位 说明
0x01 1 model uint8 型号码 = 0x4B
0x52 2 pm25 uint16 BE μg/m³ PM2.5 浓度
0x9F 2 formaldehyde uint16 BE μg/m³ 甲醛浓度
0x49 2 co2 uint16 BE ppm CO₂ 浓度
0xA0 2 tvoc uint16 BE μg/m³ TVOC 浓度
0x10 2 temperature int16 BE ÷100 °C 如 0x09F6=2550 → 25.50 °C
0x12 2 humidity uint16 BE ÷10 %RH 如 0x023F=575 → 57.5 %RH
0x57 4 atmosphericPressure uint32 BE Pa 如 101325 Pa
0x04 2 batteryVoltage uint16 BE ÷1000 V mV 原始值 ÷1000 = V

JavaScript 解码示例:

// CU606 Air Quality Monitor — Fport 210 uplink decoder
function decodeUplink(bytes) {
  var i = 1, r = {};
  function u16(b,o){ return (b[o]<<8)|b[o+1]; }
  function i16(b,o){ var v=u16(b,o); return v>32767?v-65536:v; }
  function u32(b,o){ return ((b[o]<<24)|(b[o+1]<<16)|(b[o+2]<<8)|b[o+3])>>>0; }
  while (i < bytes.length) {
    var t = bytes[i++];
    switch (t) {
      case 0x01: r.model               = bytes[i++]; break;
      case 0x04: r.batteryVoltage      = u16(bytes,i)/1000; i+=2; break;
      case 0x10: r.temperature         = i16(bytes,i)/100; i+=2; break; // °C
      case 0x12: r.humidity            = u16(bytes,i)/10;  i+=2; break; // %RH
      case 0x49: r.co2                 = u16(bytes,i); i+=2; break; // ppm
      case 0x52: r.pm25                = u16(bytes,i); i+=2; break; // μg/m³
      case 0x57: r.atmosphericPressure = u32(bytes,i); i+=4; break; // Pa
      case 0x9F: r.formaldehyde        = u16(bytes,i); i+=2; break; // μg/m³
      case 0xA0: r.tvoc                = u16(bytes,i); i+=2; break; // μg/m³
      default:   i++; break;
    }
  }
  return r;
}
// Example payload (hex): 00 01 4B 52 00 12 49 01 90 A0 00 08 9F 00 05 10 09 F6 12 02 3F 57 00 01 86 A5
// → { model:75, pm25:18, co2:400, tvoc:8, formaldehyde:5, temperature:25.5, humidity:57.5, atmosphericPressure:100005 }

脚本下载:LPP.zip

版本说明: LPP.js 基于 ChirpStack v4.17.0 开发和测试。不同版本的 ChirpStack JavaScript 编解码器 API 可能存在差异——如果您使用的是其他版本,请在部署前检查并根据需要调整脚本。

2 获取上行数据

⚠️ 以下示例中的 IP 地址(192.168.31.205 / 192.168.31.193)、ChirpStack API token、Slave ID、BACnet Device ID 及 devEui 均为演示示例,请替换为实际网关 IP、ChirpStack API token 及设备参数。

2.1 ChirpStack MQTT 订阅

订阅 MQTT topic 以接收实时上行数据:

应用 ID3ef9e6b9-ec54-4eda-86b8-a5fb46899f39 是网关内置的出厂默认 ChirpStack 应用。
如果您创建了其他应用,请替换为实际的应用 ID。

网关 IP192.168.31.193 为示例网关 WAN 口 IP,
请替换为您实际的网关 IP 地址。

设备 EUIffffff100004e982 为示例设备 EUI,
请替换为网关设备列表中显示的实际 EUI;
也可用 + 通配符一次订阅所有设备的数据。
# 订阅指定设备
mosquitto_sub -h 192.168.31.193 -p 1883 \
  -u gateway -P mqtt88888888 \
  -t "application/3ef9e6b9-ec54-4eda-86b8-a5fb46899f39/device/ffffff100004e982/event/up"

# 订阅所有应用下所有设备(通配符)
mosquitto_sub -h 192.168.31.193 -p 1883 \
  -u gateway -P mqtt88888888 \
  -t "application/+/device/+/event/up"

上行数据载荷示例(JSON):

{
  "devEui": "ffffff100004e982",
  "fPort": 210,
  "object": {
    ...  (已解码的 LPP 字段)
  }
}

2.2 IoT Hub HTTP API

发送 GET 请求获取设备最新状态:

curl -s "http://192.168.31.193:8070/api/getStatus?devEui=ffffff100004e982"
{
  "success": true,
  "result": {
    "temperature": 26.6,
    "humidity": 53.5,
    "co2": 642,
    "pm25": 13,
    "formaldehyde": 6,
    "tvoc": 810,
    "model": "CU606"
  }
}

2.3 IoT Hub Modbus TCP — Python 脚本

脚本下载:modbus_tcp_read.py

使用 modbus_tcp_read.py 一次性读取所有寄存器:

python3 modbus_tcp_read.py --ip 192.168.31.193 --port 502 \
    --slaveId 4 --sensorType CU606
Target: 192.168.31.193:502 | Slave ID: 4 | Sensor: CU606
================================================================================================================================================================
Attribute                | Addr   | FC  | Format     | Order        | Cnt | Scale    | Raw(Hex)            | Value              | Unit
----------------------------------------------------------------------------------------------------------------------------------------------------------------
online                   | 6      | 03  | Bit/Bool   | Big(ABCD)    | 1   | x1       | 0001                | true               | none
lastOnlineTime           | 7      | 03  | UnixTime   | Big(ABCD)    | 2   | x1       | 69CC CE73           | 1775029875         | second
temperature              | 9      | 03  | Int16(S)   | Big(ABCD)    | 1   | /100     | 0A64                | 26.6               | celsius
humidity                 | 10     | 03  | Int16(S)   | Big(ABCD)    | 1   | /100     | 14E6                | 53.5               | percent
batteryVoltage           | 11     | 03  | Int16(S)   | Big(ABCD)    | 1   | /100     | 0000                | 0.00               | volt
batteryVoltageState      | 12     | 03  | Int16      | Big(ABCD)    | 1   | x1       | 0000                | 0.0                | none
co2                      | 13     | 03  | Int16      | Big(ABCD)    | 1   | x1       | 0282                | 642.0              | none
pm25                     | 14     | 03  | Int16      | Big(ABCD)    | 1   | x1       | 000D                | 13.0               | none
formaldehyde             | 15     | 03  | Int16      | Big(ABCD)    | 1   | x1       | 0006                | 6.0                | none
tvoc                     | 16     | 03  | Int16      | Big(ABCD)    | 1   | x1       | 032A                | 810.0              | none
model                    | 41     | 03  | String(24B) | ASCII        | 12  | x1       | 4355 3630 3600 0000 ... | CU606              | none
rssi                     | 53     | 03  | Int16      | Big(ABCD)    | 1   | x1       | FFBF                | -65.0              | none
... (13 fields total)

2.4 IoT Hub Modbus TCP — Modbus Poll

工具下载:Modbus Poll 9.5.0.1507.zip

  1. 打开 Modbus Poll,连接 192.168.31.193:502,Slave ID 4
  2. 菜单 Setup → Read/Write Definition,功能码选 FC03,起始地址 6,长度 49
  3. 点击 OK — 数值实时刷新

2.5 IoT Hub BACnet BIP — Python 脚本

脚本下载:bacnet_read.py

使用 bacnet_read.py 读取所有 BACnet 对象:

python3 bacnet_read.py --ip 192.168.31.193 --port 47808 --id 103
Target: 192.168.31.193:47808 | BACnet ID: 103 | Scan: 10300-10399
------------------------------------------------------------
Type | Instance | Offset | Value                    | Object Name
------------------------------------------------------------
BI   | 10302    | 2      | active                   | ffffff100004e982.online
AI   | 10303    | 3      | 1775030016.00            | ffffff100004e982.lastOnlineTime
AI   | 10304    | 4      | 26.60                    | ffffff100004e982.temperature
AI   | 10305    | 5      | 53.10                    | ffffff100004e982.humidity
AI   | 10306    | 6      | 0.00                     | ffffff100004e982.batteryVoltage
AI   | 10307    | 7      | 0.00                     | ffffff100004e982.batteryVoltageState
AI   | 10308    | 8      | 643.00                   | ffffff100004e982.co2
AI   | 10309    | 9      | 12.00                    | ffffff100004e982.pm25
AI   | 10310    | 10     | 6.00                     | ffffff100004e982.formaldehyde
AI   | 10311    | 11     | 838.00                   | ffffff100004e982.tvoc
CV   | 10315    | 15     | CU606                    | ffffff100004e982.model
AI   | 10316    | 16     | -63.00                   | ffffff100004e982.rssi
... (13 objects total)

2.6 IoT Hub BACnet BIP — YABE

工具下载:SetupYabe_v2.1.0.exe

  1. 打开 YABE,连接 192.168.31.193:47808
  2. 在设备树中展开设备 103
  3. 浏览 AI/BI/AV/BV/CV 对象,查看实时数值