产品推荐:阿里云物联网开发者工具(IoT Studio),立刻免费体验吧!
通过规则引擎监听设备上下线状态变更
1.设备上下线状态消息
当设备连接到IoT物联网平台,设备离线,在线状态变更会生成特定topic的消息,我们服务端可以通过订阅这个topic获得设备状态变更信息。
**
设备的上下线状态流转的Topic格式:
/as/mqtt/status/{productKey}/{deviceName}
payload数据格式:
{
"status":"online|offline",
"productKey":"pk13543",
"deviceName":"deviceName1234",
"time":"2018-08-31 15:32:28.205",
"utcTime":"2018-08-31T07:32:28.205Z",
"lastTime":"2018-08-31 15:32:28.195",
"utcLastTime":"2018-08-31T07:32:28.195Z",
"clientIp":"123.123.123.123"
}
参数说明:
参数 | 类型 | 说明 |
---|---|---|
status | String | 设备状态,online上线,offline离线 |
productKey | String | 设备所属产品的唯一标识 |
deviceName | String | 设备名称 |
time | String | 此条消息发送的时间点 |
utcTime | String | 此条消息发送的UTC时间点 |
lastTime | String | 状态变更前最后一次通信时间 说明 可能是PUBLISH,PING等。 |
utcLastTime | String | 状态变更前最后一次通信的UTC时间 |
clientIp | String | 设备公网出口IP |
2.通过规则引擎流转设备状态
2.1 配置SQL
SELECT productKey,deviceName,
timestamp() as timestamp ,
status,
time as currentTime ,lastTime,clientIp
FROM "/as/mqtt/status/a1Xr8ofpSst/+" WHERE
这样我们就可以从消息体获取到设备的status,currentTime和lastTime了。
2.2 配置数据流转RDS
规则引擎数据流转操作界面
在device_status_history表中,执行SQL统计出来设备上下线情况:
2.3 设备当前状态
由于极端情况下频繁上下线,设备上下线的消息是乱序的,平台不保证上下线消息先后顺序,因此要根据lastTime排序,以最新时间的状态为准。
SELECT productKey,deviceName,status,lastTime,clientIp
FROM device_status_history
order by lastTime DESC