消息规则常见问题
消息规则常见问题
消息规则概述
什么是消息规则?有哪些用途?
消息规则是 ThingsCloud 平台中用于对设备和云平台之间传递的消息进行各种计算、处理、流转等操作的功能模块。
消息规则应用场景
消息规则可以实现以下功能:
- 对设备上报的原始数据进行处理,生成最终数据保存在设备属性中
- 将设备上报的属性或事件转发到第三方 MQTT 服务器或 URL
- 当设备上报数据触发条件时,向另一个设备下发属性或命令,实现设备联动
- 解析 Modbus RTU 或自定义二进制协议,生成设备属性
- 将属性下发自动转换为设备能识别的二进制报文
- GPS 位置坐标转换和电子围栏检查
详细说明请浏览 消息规则基础
消息规则有哪些类型?
ThingsCloud 支持 6 种消息规则类型,触发时机和用途各不相同:
规则类型一览
| 规则类型 | 触发时机 | 主要用途 |
|---|---|---|
| 属性上报预处理 | 接收属性后、更新属性前 | 数据格式处理、二次计算、转化、合并 |
| 属性上报 | 更新属性后 | 设备联动、数据流转 |
| 属性下发预处理 | 向设备下发前 | 属性内容增减、格式转换 |
| 属性下发 | 向设备下发后 | 自动生成自定义数据下发 |
| 事件上报 | 收到事件后 | 设备联动、数据流转 |
| 自定义上报 | 收到自定义数据后 | 解析二进制/JSON/文本数据 |
详细说明请浏览 消息规则基础 - 规则类型
规则的「设备来源」有什么区别?
消息规则支持两种设备来源类型:
设备来源选择
- 设备:将规则限定在指定的一个或多个设备,适合针对特定设备的规则
- 设备类型:将规则应用到设备类型下的所有设备,适合批量设备的统一规则
例如:
- 让某个智能开关控制另一个设备 → 选择 设备
- 为某类传感器支持 Modbus 消息解析 → 选择 设备类型
详细说明请浏览 消息规则基础 - 设备来源
规则执行
我的设备创建了多个规则,为什么只会执行一个规则?
设备在一个消息生命周期中,可以同时执行不同类型的规则(如属性上报预处理和属性上报规则),但对于同一类型的多个规则,根据一致性原则,只会随机执行一个。
属性上报预处理和属性上报规则有什么区别?
两者触发时机不同,用途也不同:
对比说明
| 对比项 | 属性上报预处理 | 属性上报 |
|---|---|---|
| 触发时机 | 接收属性后、更新属性前 | 更新属性后 |
| 操作方式 | 同步执行,串行处理 | 异步执行 |
| 主要用途 | 数据处理、计算、转换 | 设备联动、数据流转 |
| 能否修改属性 | 可以修改上报的属性值 | 不能修改,只能读取 |
例如:
- 需要将温度值乘以系数 → 使用属性上报预处理
- 需要温度超标时控制风机 → 使用属性上报
详细说明请浏览:
能否通过一个设备的上报数据,自动控制另一个设备?
可以,这是消息规则实现设备联动的核心功能。
设备联动方式
属性上报规则支持多种联动方式:
- 向指定设备下发属性:根据当前设备上报的属性,向目标设备下发属性
- 向指定设备下发命令:向目标设备下发命令消息
- 向指定设备下发自定义数据:向目标设备下发二进制/文本/JSON 数据
例如:温度传感器超过 30℃ 时自动开启风机设备。
详细说明请浏览 属性上报规则 - 向指定设备下发属性
云函数开发
云函数需要使用什么编程语言?
ThingsCloud 云函数使用标准的 JavaScript 脚本语言,您需要具备一定的编程基础。
内置函数库
为了简化开发,ThingsCloud 提供了丰富的内置函数库:
- 设备信息查询:
Cloud.getDeviceInfo()、Cloud.getCurrentAttributes() - 数据类型转换:HEX/JSON/Base64/Buffer 互转
- 日期时间处理:格式化、时区转换、日期计算
- Modbus RTU:构造 Modbus 指令
- GPS 位置:坐标系转换、电子围栏检查
详细说明请浏览 云函数内置函数库
如何在云函数中获取设备的当前属性?
使用内置函数 Cloud.getCurrentAttributes() 可以读取设备所有属性的当前值。
使用示例
module.exports = function (report_attributes) {
// 获取设备当前的所有属性
const attrs = Cloud.getCurrentAttributes();
// 结合上报属性和当前属性进行判断
if (report_attributes.temperature > 30 && attrs.controlMode == "auto") {
// 自动控制逻辑
report_attributes.fan = true;
}
return report_attributes;
}
详细说明请浏览 Cloud.getCurrentAttributes()
云函数支持在线测试吗?如何调试?
支持,您可以在编辑云函数的过程中随时进行在线测试。
数据解析
我的设备使用自定义协议,可以通过消息规则来解析吗?
可以,任何设备发送到平台的数据报文都可以通过消息规则解析。
支持的数据格式
自定义数据上报规则 支持解析多种格式:
- 二进制/HEX:使用
Buffer解析或内置 Modbus RTU 解析 - JSON:使用
Cloud.Utils.jsonDecode()解析 - 纯文本 Plaintext:使用字符串分割解析
例如:LoRaWAN 设备上报 base64 格式数据、Modbus 传感器上报 HEX 报文、设备上报 JSON 键值对数据。
详细说明请浏览 自定义数据上报规则 - 属性解析函数
如何解析 Modbus RTU 报文?
ThingsCloud 提供了三种 Modbus RTU 解析方式:
Modbus RTU 解析方式
方式一:使用 Modbus 智能解析(推荐)
- 在设备类型中配置 Modbus 寄存器,实现自动解析
- 支持属性下发自动转换为 Modbus 写指令
- 支持多种数据类型和字节序
- 无需编写代码,配置简单高效
方式二:使用消息规则 Modbus RTU 解析操作
- 可视化配置解析规则
- 支持功能码 01/02/03/04
- 提供在线测试验证
- 适合通过自定义数据流上报的 Modbus 消息
方式三:使用属性解析函数
- 适合非标准 Modbus 协议
- 支持复杂的解析逻辑
- 可使用内置 Modbus RTU 函数构造指令
详细说明请浏览:
如何处理设备上报的 GPS 位置?
ThingsCloud 提供了完整的 GPS 位置处理方案:
GPS 位置处理
坐标系转换:将 WGS84 坐标转换为 GCJ02 或 BD09,适配国内地图平台
电子围栏检查:
- 圆形围栏:
Cloud.isPointInCircle() - 多边形围栏:
Cloud.isPointInPolygon()
属性上报预处理操作:
- GPS 位置坐标系转换
- GPS 位置电子围栏检查(圆形)
- GPS 位置电子围栏检查(多边形)
详细说明请浏览:
数据流转
如何将设备数据转发到第三方系统?
消息规则支持多种数据流转方式:
数据流转方式
1. 推送到外部 MQTT
- 将设备属性/事件直接转发到第三方 MQTT 服务器
- 需要填写 MQTT 主机名、端口、身份验证信息
2. 推送到外部 URL (Webhook)
- 通过 HTTP POST 将数据转发到第三方 URL
- 请求体为 JSON 格式,包含设备信息和数据内容
3. MQTT 应用端订阅
- 第三方应用通过 MQTT 订阅设备实时消息
- 支持属性、事件、告警等多种消息类型
详细说明请浏览:
属性下发
如何在属性下发时自动生成自定义报文?
使用属性下发规则或属性下发预处理规则可以实现。
属性下发转换
属性下发规则中的 自定义数据下发函数 可以:
- 根据下发的属性动态生成 HEX/JSON/Plaintext 格式报文
- 选择 MQTT 或 TCP 推送方式
- 使用内置 Modbus RTU 函数快速构造指令
例如:将开关量属性自动转为 Modbus RTU 06 指令、将温度设置值转为空调控制器自定义报文。
详细说明请浏览 属性下发规则 - 自定义数据下发函数