使用开源版的EMQX的5.7.1版本。
设备状态更新使用的Webhook的连接断开事件与连接建立事件。
现在发现当设备切换网络时离线原因是takenover会出现,disconnected_at的时间戳与connected_at一模一样。 两条通知的timestamp也是一样的。
这种情况该如何判断设备状态呢?
{
"disconnected_at": 1748591279615,
"disconn_props": {
"User-Property": {
}
},
"proto_ver": 4,
"proto_name": "MQTT",
"clientid": "clientId",
"username": "username",
"event": "client.disconnected",
"metadata": {
"rule_id": "T_WH_D"
},
"sockname": "xxx.xxx.xxx.xxx:1883",
"peername": "aa.aa.aa.aa:38752",
"timestamp": 1748591279615,
"reason": "takenover",
"node": "emqx@xxx.xxx.xxx.xxx"
}
{
"receive_maximum": 32,
"conn_props": {
"User-Property": {
}
},
"expiry_interval": 7200,
"clean_start": false,
"mountpoint": "undefined",
"is_bridge": false,
"proto_ver": 4,
"proto_name": "MQTT",
"connected_at": 1748591279615,
"clientid": "clientId",
"username": "username",
"event": "client.connected",
"metadata": {
"rule_id": "T_WH_D"
},
"keepalive": 60,
"sockname": "xxx.xxx.xxx.xxx:1883",
"peername": "aa.aa.aa.aa:34268",
"timestamp": 1748591279615,
"node": "emqx@xxx.xxx.xxx.xxx"
}
你需要用 V5.8.6 或者 v5.9.0
#14869 Added the
connected_at
timestamp field to the$events/client_disconnected
event payload. This enhancement enables tracking the original connection session time for disconnected clients, preventing outdated disconnect events from overriding newer connection states.
这样 disconnected 事件里面有也有连接时间(connected_at),那你就可以判断他到底是和哪一个 connected 事件是一对了。
1 个赞
好的,谢谢!