轮询触发(POLL_TRIGGER)
轮询触发(triggerType=5)同时涉及周期调度和本地数据匹配,配置时必须区分二者。
周期采集与条件判断
含采集动作的轮询规则到达 intervalSec 后,调度器执行这条规则的动作。例如动作 18 读取 Modbus,动作 19 读取传感器。它不会先用本轮结果检查触发器条件,再决定是否执行同一规则里的报警动作;采集后紧接输出会成为周期输出。
本地数据到达时,另一路匹配使用 triggerPeriphId 和比较条件。空串或 "null" 不匹配任何数据。为避免 Modbus 采集规则用自己的结果重入,含采集动作的规则在 modbus_poll 数据匹配路径会被排除。推荐把采集与告警分成两条规则,告警用 triggerType=4、eventId="ds:<实际缓存键>"。
轮询参数
| 字段 | 范围与单位 |
|---|---|
intervalSec | 5~86400 秒 |
pollResponseTimeout | 100~5000 毫秒,协议读取的响应预算 |
pollMaxRetries | 0~3,读取重试;不表示输出可自动重发 |
pollInterPollDelay | 20~1000 毫秒 |
等待总线、资源拒绝、采样及上报还各有边界,响应预算不是整个规则完成时间。首次到期可立即准入,准入失败不会把未执行的周期计作成功。
示例:DHT 采集与高温告警
采集规则每 5 秒执行一次温度读取:
json
{
"id": "exec_temperature_read",
"name": "exec_temperature_read",
"enabled": false,
"execMode": 0,
"triggers": [
{
"triggerType": 5,
"intervalSec": 5,
"pollResponseTimeout": 1000,
"pollMaxRetries": 2,
"pollInterPollDelay": 100
}
],
"actions": [
{
"targetPeriphId": "dht_room",
"actionType": 19,
"actionValue": "{\"periphId\":\"dht_room\",\"sensorCategory\":\"dht22\",\"channelField\":\"temperature\",\"dataField\":\"temperature\",\"unit\":\"°C\"}",
"syncDelayMs": 0,
"execMode": 0
}
],
"reportAfterExec": false,
"allowPanelControl": false,
"recordHistory": false
}第二条规则监听读取动作形成的 dht_room_temperature 缓存项:
json
{
"id": "exec_temperature_alarm",
"name": "exec_temperature_alarm",
"enabled": false,
"execMode": 0,
"triggers": [
{
"triggerType": 4,
"eventId": "ds:dht_room_temperature",
"operatorType": 2,
"compareValue": "30"
}
],
"actions": [
{
"actionType": 21,
"targetPeriphId": "device_alarm",
"actionValue": "temperature_high"
}
],
"reportAfterExec": false,
"allowPanelControl": false,
"recordHistory": false
}以上 device_alarm 是内置设备事件。自定义事件须先保存为 DEVICE_EVENT 外设,不能凭空填写任意事件名。每次有效读数超过阈值都可能产生告警,仍受数据源冷却限制;这不是只在越界沿触发一次。

