iot/docs/websocket.md
2023-08-14 23:23:46 +08:00

2.4 KiB
Raw Blame History

websocket通讯格式逻辑说明

消息体有四种格式

1. 主机发送的请求 (0x01)
2. 服务端对主机请求的响应 (0x02)
3. 服务端对主机的消息推送 (0x03)
4. 主机对服务器推送消息的响应 (0x04)

消息体的格式说明

<<消息体类型/1byte, PacketId/4byte, Packet/任意长度>> 

特殊说明

  • 服务器端处理异常时直接关闭websocket连接

消息类型说明

register消息

请求

<<0x01, PacketId:4, Method:1, Body:任意长度>>

PacketId: 4字节整数, 值必须大于0; Method: 0x00 Body: {uuid: string, salt: string, username: string, token: string}, json序列化后的二级制数据明文

响应

<<0x02, PacketId:4, Reply>> Reply: {code: 1, message: "ok"}

create_session消息

请求

<<0x01, PacketId:4, 0x01, PubKey:任意长度(公钥信息)>>

PacketId: 4字节整数, 值必须大于0;

响应

<<0x02, PacketId:4, Reply>> Reply: {a: bool, aes: "服务器生成的aes的值"}

data数据上传(无响应)

<<0x01, PacketId:4, 0x02, Body:任意长度>>

PacketId: 4字节整数, 值为0;

ping数据上传(无响应)

<<0x01, PacketId:4, 0x03, Body:任意长度>>

PacketId: 4字节整数, 值为0; Body: 公钥信息

inform数据上传(无响应)

<<0x01, PacketId:4, 0x04, Body:任意长度>>

PacketId: 4字节整数, 值为0; Body: 公钥信息

feedback_step数据上传(无响应)

<<0x01, PacketId:4, 0x05, Body:任意长度>>

PacketId: 4字节整数, 值为0; Body: 公钥信息

feedback_result数据上传(无响应)

<<0x01, PacketId:4, 0x06, Body:任意长度>>

PacketId: 4字节整数, 值为0; Body: 公钥信息

主机上传终端设备的相关事件

<<0x01, PacketId:4, 0x07, Body:任意长度>>

PacketId: 4字节整数, 值为0; Body: 事件内容AES加密


设备的离在线状态

{
   "event_type": 1,
   "params": {
      "device_uuid": "",
      "status": 0 // 1在线 0离线
   }
}

data北向数据上传 (无响应)

微服务产生的数据,点位信息为主机的点位信息

<<0x01, PacketId:4, 0x08, 0x00, Body:任意长度>> PacketId: 4字节整数, 值为0;

终端设备产生的数据,点位信息为设备信息点位信息

<<0x01, PacketId:4, 0x08, Type:1byte, Body:任意长度>> PacketId: 4字节整数, 值为0; Type: 第一bit为1后7个bit标识后面的device_uuid的长度, 即: <<1:1, Len:7>>, 总共8个bit