Skip to content

Latest commit

 

History

History
36 lines (17 loc) · 1.88 KB

device_discover.md

File metadata and controls

36 lines (17 loc) · 1.88 KB

设备发现与查询

##1. 网关设备发现(设备发现不加密)

设备发现用来在局域网中发现网关,使用组播 (ip: 224.0.0.50, peer_port: 4321) ,所有网关收到Whois命令都要应答、回复自己的IP信息:

  • PC 组播方式 ->网关: {"cmd":"whois"}
  • 网关 单播方式->PC:{"cmd":"iam","ip" : "192.168.0.42","port" : "9898","model" : "gateway",.....}

##2. 加密机制

采用key加密方式,默认不加密。如果用户想限制其他人对网关及其子设备的控制权限,可以在小米智能家庭APP上对网关设置密钥(使用AES-CBC 128 加密,app下发随机的16个字节长度的字符串密钥)。 若没有设置密钥(即app里设置密钥为空字符串””)则其他人均有权限可以控制网关及其子设备。

注: AES-CBC 128 初始向量定义为: unsigned char const AES_KEY_IV[16] = {0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28, 0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58, 0x56, 0x2e};

##3. 查询子设备id列表

命令以单播方式发送给网关的udp 9898端口,网关以单播方式回复,用来获取网关中有哪些设备(网关返回子设备的设备id)。

  • PC->网关: {"cmd" : "get_id_list"}
  • 网关->PC: {"cmd" : "get_id_list_ack","sid":"1022780","token":"1234567890abcdef","data":"[\"sid1\",\"sid2\",\"sid3\"]"}

其中的“sid”为网关did,“token”为网关生成的随机字符串,用于用户生成写设备时的“key”。

##4. 子设备状态上报

以组播方式发送给 (ip: 224.0.0.50, port: 9898) 。当子设备状态发生变化时,子设备会上报状态。例如窗磁上报open/close信息。用户可以拿这个状态去做联动。例如:开窗报警,开窗关空调。

网关->PC{"cmd":"report","model":"magnet","sid":"89234324","short_id":4343,"data":"{\"status\":\"open\"}"}