状态通知时时间一样该如何保证设备状态的准确?

使用开源版的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 个赞

好的,谢谢!