设备事件虚拟外设
设备事件 type 60 不占 GPIO,定义可供规则订阅的本地事件 ID。显式事件动作、规则完成事件和采集变化事件是不同的触发源。
事件定义
json
{
"id": "evt_alarm",
"name": "自定义报警",
"type": 60,
"enabled": false,
"pinCount": 0,
"pins": [],
"params": {}
}先保存禁用草稿,确认联动目标后启用事件外设及相应规则。调度器只分发已启用的设备事件定义;未知 ID 不能作为正常本地事件联动证据。
发射与订阅
动作 21 的 targetPeriphId 是事件 ID,actionValue 是事件数据。新配置必须显式填写目标,不能把事件 ID 放在数据中代替目标。勾选 useReceivedValue 时只替换数据,目标仍固定。
json
{
"targetPeriphId": "evt_alarm",
"actionType": 21,
"actionValue": "温度超限",
"useReceivedValue": false,
"syncDelayMs": 0,
"execMode": 0
}订阅同一显式事件的触发器:
json
{
"triggerType": 4,
"triggerPeriphId": "",
"eventId": "evt_alarm",
"operatorType": 0,
"compareValue": ""
}本地事件分发不受发射规则的 reportAfterExec 控制;MQTT DEVICE_EVENT 发布要求该规则启用上报且未被外部执行路径抑制,同时具备可用的 MQTT 连接及相应主题配置。发布事件不证明订阅规则已执行成功。
与其他事件区分
| 来源 | 订阅标识 | 说明 |
|---|---|---|
| 动作 21 显式设备事件 | evt_alarm 等设备事件 ID | 数据由动作提供 |
| 规则完成事件 | 实际规则 ID,如 exec_temp_check | 不能用它替代动作 21 的事件目标 |
| 采集源变化 | ds:dht1_temperature | 读取产生有效采集结果后匹配条件 |
例如高温联动须先建立 DHT 的定时读取规则,再订阅 ds:dht1_temperature 并比较数值,符合条件时发射 evt_alarm。平台触发器收到云指令才工作,不能用它代替本地温度采集。
保存规则时检查本地事件图和环路,动态事件目标被拒绝;不要设计 A→B→A 循环。规则完成事件路径的 500ms 限制不能推广成“所有设备事件统一每 500ms 去重”。队列拒绝、输出失败及 MQTT 发布失败仍须查看执行结果。
系统事件的具体来源与条件见 事件触发器,不要仅创建相同名称的外设就认为系统会主动生成故障或低电量事件。

