2. 设备连接状态监控

任务说明

本案例目标是在 ThingsBoard 中实现一条规则链:当设备状态变为“上线”(Active)或“下线”(Inactive)时,触发对应事件,并通过邮件或 REST API 回调发送通知。你需要完成规则链的创建、配置与验证,最终达到“设备状态变化即触发通知”的效果。

实现方案

ThingsBoard 内置了设备生命周期事件(Device Lifecycle Events),当设备连接或断开时,系统会自动生成 DEVICE_CONNECTED 和 DEVICE_DISCONNECTED 事件消息。我们利用规则链中的 Message Type Switch 节点区分这两种事件,再分别接入 Send Email 或 REST API Call 节点完成通知发送。本案例以 REST API Call 方式为例(无需额外邮件服务器配置),通知目标为一个可访问的 HTTP 端点(如本地调试服务器或 webhook.site)。

规则链设计

消息入站 设备事件 消息类型 Message Type Switch DEVICE_CONNECTED / DEVICE_DISCONNECTED 上线处理 REST API Call POST /device-up 下线处理 REST API Call POST /device-down 成功 → 后续 成功 → 后续 Connected Disconnected

规则链配置步骤

  1. 创建规则链:在 ThingsBoard 中进入 规则链 → 新增规则链,命名为“设备状态监控”。
  2. 添加消息类型节点:从节点库拖入 Message Type Switch,配置其消息类型为 DEVICE_CONNECTED 和 DEVICE_DISCONNECTED,分别连接到两个分支。
  3. 添加上线通知节点:在 Connected 分支添加 REST API Call 节点,配置如下:
    • 请求方法:POST
    • URL:http://your-server:8080/device-up(替换为实际接收端)
    • 请求头:Content-Type: application/json
    • 请求体模板:{"deviceName": "${deviceName}", "event": "CONNECTED", "ts": ${ts}}
  4. 添加下线通知节点:在 Disconnected 分支添加另一个 REST API Call 节点,URL 改为 http://your-server:8080/device-down,请求体模板中 event 字段改为 "DISCONNECTED"。
  5. 连接根规则链:将规则链保存后,进入 规则链 → 根规则链,添加 Rule Chain 节点,关联到“设备状态监控”,并设置消息类型过滤为 DEVICE_CONNECTED 和 DEVICE_DISCONNECTED。

验证方法

  1. 准备一个可接收 HTTP 请求的测试服务(如使用 webhook.site 获取临时 URL,或本地运行 nc -l 8080)。
  2. 在 ThingsBoard 中打开一个已配置 MQTT 或 HTTP 接入的设备。
  3. 使用 MQTT 客户端(如 mosquitto_pub)连接设备:
    mosquitto_pub -d -q 1 -h localhost -p 1883 -t "v1/devices/me/telemetry" -m '{"temperature":25}' -i "test-device" -u "ACCESS_"
  4. 观察测试服务是否收到 POST /device-up 请求,请求体包含设备名称和 CONNECTED 事件。
  5. 断开 MQTT 连接(关闭客户端),等待约 30 秒(设备离线判定时间),观察是否收到 POST /device-down 请求。

判定标准

  • 设备上线后 10 秒内,测试服务收到包含 "event": "CONNECTED" 的 POST 请求。
  • 设备断开后 60 秒内,测试服务收到包含 "event": "DISCONNECTED" 的 POST 请求。
  • 请求体中的 deviceName 与真实设备名称一致。

满足以上条件即视为规则链配置成功。若未收到通知,请检查 REST API Call 节点的 URL 可达性、消息类型路由配置以及设备接入凭证是否正确。