Skip to content

轮询触发(POLL_TRIGGER) ​

轮询触发(triggerType=5)同时涉及周期调度和本地数据匹配,配置时必须区分二者。

周期采集与条件判断 ​

含采集动作的轮询规则到达 intervalSec 后,调度器执行这条规则的动作。例如动作 18 读取 Modbus,动作 19 读取传感器。它不会先用本轮结果检查触发器条件,再决定是否执行同一规则里的报警动作;采集后紧接输出会成为周期输出。

本地数据到达时,另一路匹配使用 triggerPeriphId 和比较条件。空串或 "null" 不匹配任何数据。为避免 Modbus 采集规则用自己的结果重入,含采集动作的规则在 modbus_poll 数据匹配路径会被排除。推荐把采集与告警分成两条规则,告警用 triggerType=4、eventId="ds:<实际缓存键>"。

轮询参数 ​

字段范围与单位
intervalSec5~86400 秒
pollResponseTimeout100~5000 毫秒,协议读取的响应预算
pollMaxRetries0~3,读取重试;不表示输出可自动重发
pollInterPollDelay20~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 外设,不能凭空填写任意事件名。每次有效读数超过阈值都可能产生告警,仍受数据源冷却限制;这不是只在越界沿触发一次。

持续风扇、制热或制冷控制请使用本地温控规则,以处理失鲜、最小开停时间和故障关闭。Modbus 示例见设备监控。

蜂信物联 | fastbee.cn