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)。
规则链设计
规则链配置步骤
- 创建规则链:在 ThingsBoard 中进入 规则链 → 新增规则链,命名为“设备状态监控”。
- 添加消息类型节点:从节点库拖入 Message Type Switch,配置其消息类型为
DEVICE_CONNECTED和DEVICE_DISCONNECTED,分别连接到两个分支。 - 添加上线通知节点:在 Connected 分支添加 REST API Call 节点,配置如下:
- 请求方法:
POST - URL:
http://your-server:8080/device-up(替换为实际接收端) - 请求头:
Content-Type: application/json - 请求体模板:
{"deviceName": "${deviceName}", "event": "CONNECTED", "ts": ${ts}}
- 请求方法:
- 添加下线通知节点:在 Disconnected 分支添加另一个 REST API Call 节点,URL 改为
http://your-server:8080/device-down,请求体模板中event字段改为"DISCONNECTED"。 - 连接根规则链:将规则链保存后,进入 规则链 → 根规则链,添加 Rule Chain 节点,关联到“设备状态监控”,并设置消息类型过滤为
DEVICE_CONNECTED和DEVICE_DISCONNECTED。
验证方法
- 准备一个可接收 HTTP 请求的测试服务(如使用
webhook.site获取临时 URL,或本地运行nc -l 8080)。 - 在 ThingsBoard 中打开一个已配置 MQTT 或 HTTP 接入的设备。
- 使用 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_" - 观察测试服务是否收到
POST /device-up请求,请求体包含设备名称和CONNECTED事件。 - 断开 MQTT 连接(关闭客户端),等待约 30 秒(设备离线判定时间),观察是否收到
POST /device-down请求。
判定标准
- 设备上线后 10 秒内,测试服务收到包含
"event": "CONNECTED"的 POST 请求。 - 设备断开后 60 秒内,测试服务收到包含
"event": "DISCONNECTED"的 POST 请求。 - 请求体中的
deviceName与真实设备名称一致。
满足以上条件即视为规则链配置成功。若未收到通知,请检查 REST API Call 节点的 URL 可达性、消息类型路由配置以及设备接入凭证是否正确。