平台触发 (PLATFORM_TRIGGER)
大约 3 分钟
平台触发 (PLATFORM_TRIGGER)
概述
平台触发(triggerType = 0)用于响应 IoT 平台通过 MQTT 下发的数据命令。当平台下发的数据匹配触发条件时,执行对应规则的动作列表。
平台触发只在平台消息到达时评估条件,不会主动读取本地传感器。若需要按固定频率读取外设,请改用定时或轮询触发。
触发机制
- 平台通过 MQTT 下发数据命令:
[{"id":"xxx","value":"yyy"}] - 系统解析命令中的
id和value - 匹配规则中
triggerPeriphId== 下发数据的id - 使用
operatorType和compareValue评估条件 - 条件满足则触发规则执行
字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| triggerType | 0 | 平台触发 |
| triggerPeriphId | String | 数据源外设 ID(匹配下发数据中的 item.id) |
| operatorType | uint8 | 条件操作符(见下表) |
| compareValue | String | 比较值 |
条件操作符
| 操作符 | 值 | 说明 | 示例 |
|---|---|---|---|
| EQ | 0 | 等于 | value == "1" |
| NEQ | 1 | 不等于 | value != "0" |
| GT | 2 | 大于 | value > "30" |
| LT | 3 | 小于 | value < "10" |
| GTE | 4 | 大于等于 | value >= "50" |
| LTE | 5 | 小于等于 | value <= "100" |
| BETWEEN | 6 | 区间内 | "20" <= value <= "80" |
| NOT_BETWEEN | 7 | 区间外 | value < "20" 或 value > "80" |
| CONTAIN | 8 | 包含 | value 包含 "alarm" |
| NOT_CONTAIN | 9 | 不包含 | value 不包含 "ok" |
区间操作符的 compareValue 格式为
"min,max",如"20,80"
配置示例
方式1:Web界面配置(推荐)
外设执行页面如下。平台触发配置时重点核对 MQTT/平台下发内容、比较值和目标动作,避免误触发现场外设。
示例1:精确匹配(等于)
场景:当平台下发 [{"id":"gpio_button","value":"0"}] 时触发
配置步骤:
点击左侧菜单 外设配置 → 切换到 外设执行管理 标签
点击 新增规则 按钮
填写基础配置:
- 规则名称:
平台按钮触发 - 上报数据:根据需求启用
- 启用:✅ 启用
- 规则名称:
配置触发器:
- 触发类型:选择 平台触发
- 目标外设ID:填写
gpio_button(匹配下发数据的id) - 运算符:选择
等于 (=) - 比较值:填写
0
配置动作(根据需求添加)
点击 保存 按钮
测试方法:通过MQTT发送 [{"id":"gpio_button","value":"0"}]
示例2:阈值判断(大于)
场景:当温度传感器上报值 > 35 时触发
配置步骤:
- 创建规则,名称:
温度超标报警 - 触发器配置:
- 触发类型:选择 平台触发
- 目标外设ID:填写
dht1 - 运算符:选择
大于 (>) - 比较值:填写
35
- 配置动作:添加报警相关动作
- 点击 保存
测试方法:通过MQTT发送 [{"id":"dht1","value":"40"}]
示例3:区间判断
场景:当湿度值在 20~80 范围内时触发
配置步骤:
- 创建规则,名称:
湿度正常范围 - 触发器配置:
- 触发类型:选择 平台触发
- 目标外设ID:填写
humidity - 运算符:选择
区间内 (BETWEEN) - 比较值:填写
20,80(格式:最小值,最大值)
- 配置动作
- 点击 保存
测试方法:通过MQTT发送 [{"id":"humidity","value":"50"}]
方式2:JSON配置文件导入
完整规则示例
平台下发重启命令时执行系统重启:
{
"id": "exec_platform_restart",
"name": "平台远程重启",
"enabled": false,
"execMode": 0,
"triggers": [
{
"triggerType": 0,
"triggerPeriphId": "sys_restart",
"operatorType": 0,
"compareValue": "1",
"timerMode": 0,
"intervalSec": 60,
"timePoint": "",
"eventId": "",
"pollResponseTimeout": 1000,
"pollMaxRetries": 2,
"pollInterPollDelay": 100
}
],
"actions": [
{
"targetPeriphId": "",
"actionType": 6,
"actionValue": "",
"useReceivedValue": false,
"syncDelayMs": 500,
"execMode": 0
}
],
"protocolType": 0,
"scriptContent": "",
"reportAfterExec": false
}注意事项
- ID 匹配:
triggerPeriphId必须与平台下发数据中的id字段精确匹配 - 数值比较:compareValue 会被解析为浮点数进行数值比较
- 字符串比较:CONTAIN/NOT_CONTAIN 为字符串子串匹配
- handleDataCommand:平台触发通过
handleDataCommand方法处理,同步执行并立即返回结果
