简单一篇文章,讲一下 消息队列(Message Queue)是干什么的?
2026/1/16 22:30:49
Provision Complete 之后会上报设备的节点信息和provision状态。
<0030>10:05:42:626 [INFO]:(GATEWAY)HCI_GATEWAY_CMD_SEND_NODE_INFO : 91 8d 02 00 02 ff 89 8d d2 4e ff 54 a3 c4 84 55 87 a6 82 95 b4 21 provision完成后会上报设备的节点信息(NODE_INFO)。 格式为:TSCRIPT_GATEWAY_DIR_RSP+ HCI_GATEWAY_CMD_SEND_NODE_INFO+ VC_node_info_t。即:91 + 89 + gateway_prov_event_t typedef struct{ u16 node_adr; // primary address → 02 00 → 设备的地址:0x0002 u8 element_cnt; // → 02 → 2个element u8 rsv; // → FF u8 dev_key[16]; // → 89 8d d2 4e ff 54 a3 c4 84 55 87 a6 82 95 b4 21 → Device Key }VC_node_info_t; 🔐 Device Key 作用: 用于加密 Configuration 消息(如绑定 AppKey、设置模型等),只有 Provisioner(网关)和该设备知道,保证配置安全。 <0031>10:05:42:642 [INFO]:(GATEWAY)HCI_GATEWAY_CMD_PROVISION_EVT : 91 89 01 02 00 20 19 11 22 ff 11 d8 1e 92 20 c3 d0 f2 3f 9b f2 3c 5c 43 7e 75 cf Provision完成后会上报 Provisioning 成功事件。 格式为:TSCRIPT_GATEWAY_DIR_RSP+HCI_GATEWAY_CMD_PROVISION_EVT+ gateway_prov_event_t。即:91 + 89 + gateway_prov_event_t。 gateway_prov_event_t → 01 02 00 20 19 11 22 ff 11 d8 1e 92 20 c3 d0 f2 3f 9b f2 3c 5c 43 7e 75 cf typedef struct{ u8 eve; // → 01 → 1 表示成功 u16 adr; // → 02 00 → 设备的地址:0x0002 u8 mac[6]; // → 20 19 11 22 ff 11 → 设备的MAC地址 u8 uuid[16]; // → d8 1e 92 20 c3 d0 f2 3f 9b f2 3c 5c 43 7e 75 cf → 设备唯一 UUID(128-bit) }gateway_prov_event_t; 🆔 UUID 作用: 在 Provisioning 过程中由设备广播,Provisioner 用它识别待配网设备,全局唯一,用于防止重复配网 <0032>10:05:42:658 [INFO]:(log_win32)json_add_net_info_doc 表示网关正在将网络信息(NetKey、AppKey、设备列表等)打包成 JSON 格式,准备通过串口/USB/网络上报给上位机。通常包含:NetKey 列表,AppKey 列表,已配网设备列表(含地址、UUID、MAC、Models 等),当前网关状态,这是 配置工具(如 Telink 的 PC Tool)显示设备列表的来源。从工具目录下找到了json文件,如下图:
json文件里存储了刚刚加入网络的设备信息:
... "UUID": "d81e9220c3d0f23f9bf23c5c437e75cf", "macAddress": "11ff22111920", "name": "", "deviceKey": "898dd24eff54a3c4845587a68295b421", "unicastAddress": "0002", "sno": "00000000", "security": "secure", "cid": "0211", "pid": "0001", "vid": "3333", "crpl": "0069", "features": { "relay": 1, "proxy": 1, "friend": 1, "lowPower": 0 }, "relayRetransmit": { "count": 5, "interval": 30 }, "networkTransmit": { "count": 5, "interval": 30 }, "netKeys": [ { "index": 0, "updated": false } ], "appKeys": [ { "index": 0, "updated": false } ], "elements": [ ...