资源描述
网关局域网通讯命令V1.0.4一、设备发现与查询21. 网关设备发现(设备发现不加密)22. 加密机制23. 查询子设备id列表24. 子设备状态上报2二、对设备进行读写操作31. 读设备32. 写设备3三、设备心跳41.网关怀跳42.子设备心跳4四、设备上报和控制报文格式4五、传感器上报属性和心跳5a. 窗磁传感器5b.人体传感器5c.无线开关传感器5d.智能插座6e.86单火开关单键6f.86单火开关双键7g.86无线开关单键7h.86无线开关双键7i.温湿度传感器:8j.LUMI.LIGHT.RGBW8一、设备发现与查询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_IV16 = 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:abcdef,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 二、对设备进行读写操作1. 读设备 命令以单播方式发送给网关的udp 9898端口。顾客可以积极读取墙壁开关,插座的属性状态,网关返回设备的所有属性信息。cmd:read,sid:158d网关以单播方式答复格式:cmd:read_ack,model:ctrl_neutral2,sid:158d,short_id:4343,data:channel_0:on,channel_1:off2. 写设备命令以单播方式发送给网关的udp 9898端口。当顾客需要控制墙壁开关,插座等设备时使用write命令。cmd:write,model:ctrl_neutral1,sid:158d,short_id:4343,data:channel_0:on,key:3EB43E37C20AFF4C5872CC0D04D81314 网关以单播方式答复格式:cmd:write_ack,model:ctrl_neutral2,sid:158d,short_id:4343,data:channel_0:on,channel_1:off ,该write_ack只是代表网关收到了write命令,data里的属性状态为目前的设备最新状态,不是write之后的最后设备状态。最后的设备状态靠report报文进行上报。注:其中的“key”为32个字节长度的字符串。当网关启用了加密模式时,会对该key进行解密并校验,以验证写命令的合法性。该“key”的生成规则是:顾客收到“heartbeat”里的16个字节的“token”字符串之后,对该字符串进行AES-CBC 128加密,生成16个字节的密文后,再转换为32个字节的ASCII码字符串。例如:顾客配备16个字符长度的密钥为“qwerty“, ”token”为”abcdef”,加密后密文是:0x3E,0xB4,0x3E,0x37,0xC2,0x0A,0xFF,0x4C,0x58,0x72,0xCC,0x0D,0x04,0xD8,0x13,0x14。那么,”key”为:”3EB43E37C20AFF4C5872CC0D04D81314”。三、设备心跳1.网关怀跳网关怀跳以组播方式发送给 (ip: 224.0.0.50, port: 9898)。网关每10秒钟发送一次心跳报文,用来告诉PC网关正常工作。cmd:heartbeat,model:gateway,sid:1022780,short_id:0,token:abcdef,data:ip:172.22.4.130 ,其中的“token”为网关生成的随机字符串,用于顾客生成写设备时的“key”。2.子设备心跳子设备心跳以组播方式发送给 (ip: 224.0.0.50, port: 9898),格式:cmd:heartbeat,model:magnet,sid:158d000065a271,short_id:25719,data:status:open。子设备通过心跳告诉PC:子设备正常工作(心跳上报频率,一般睡眠设备是一种钟头一次,插电设备是每10分钟一次)。子设备心跳中也许涉及子设备的状态。注意这个状态值得解决要看具体的使用场景。例如:开窗关空调场景时可以使用这个心跳(有也许正常的report状态报文丢失,心跳报文可以补救)。例如:关窗开空调场景这个就不能使用心跳。有也许人走了,走时把空调关了。 心跳报文又让空调打开会挥霍电。总之,心跳报文的使用根据场景需要顾客自己决定与否用心跳做触发。添加子设备,删除子设备,修改子设备的名字等操作目前不提供,如果开发者需要可以提供。 四、设备上报和控制报文格式Json报文格式:cmd : write, /命令类型model : ctrl_neutral1, /设备类型sid : 112316, /设备的idshort_id : 4343, /zigbee设备的短idtoken : 8, /用来辨别是报文是第几条,可以先忽视这个属性data : channel_0:on /设备状态等信息,再次解开字符串获取其中属性其中data的内容是个字符串, 我们对这个字符串再次转成json,从中提取属性五、传感器上报属性和心跳a. 窗磁传感器(60分钟每次),窗磁传感器贴在窗户上或门上感知窗户的状态,每动作一次发送一次report。属性阐明statusopen/close (开/关)battery0-100电池电量属性上报:cmd:report,model:magnet,sid:89234324,short_id:4343,token:3,data:status:open 心跳上报:cmd:report,model:motion,sid:89234324,short_id:4345,token:4,data:battery:62 magnet代码是窗磁, 89234324代表的设备的ID(64位的长16进制字符串),status 是窗磁的开关状态,token是一种变化的字符串(不用管这个字段)。b.人体传感器人体传感器探测到人会立即上报一次report信息。在始终有人的状况下为了省电人体传感器最快一分钟发送一次report。 属性阐明battery0-100电池电量statusmotion探测到有人属性上报:cmd:report,model:motion,sid:112316,short_id:4343,token:4,data:status:motion 心跳上报 (60分钟每次):cmd:report,model:motion,sid:112316,short_id:4343,token:4,data:battery:71 c.无线开关传感器无线开关传感器每按键一次上报一种报文。400ms内按两次上报的报文是双击 属性阐明statusclick/double_click (单击/双击)battery0-100电池电量属性上报:cmd:report,model:switch,sid:112316,short_id:4343,token:5,data:status:click cmd:report,model:switch,sid:112316,short_id:4343,token:6,data:status:double_click 心跳上报(60分钟每次):cmd:report,model:motion,sid:112316,short_id:4343,token:4,data:battery:65 d.智能插座属性阐明status on/off (开/关)load_voltage负载电压,单位是毫伏 mVload_power负载功率,单位是瓦 Wpower_consumed负载消耗电量, 单位是千瓦时kWh属性上报:cmd:report,model:plug,sid:112316,short_id:4343,token:7,data:status:on 心跳上报(10分钟每次):cmd:heartbeat,model:plug,sid:112316,short_id:4343,token:7,data: load_voltage : 234300 , load_power :9.57, power_consumed :0.57cmd:write,model:plug,sid:112316,short_id:4343,token:8,data:status:on e.86单火开关单键属性阐明channel_0 on/off (开/关)属性上报:cmd:report,model: ctrl_neutral1,sid:112316,short_id:4343,token:7,data: channel_0:on cmd:report,model: ctrl_neutral1,sid:112316,short_id:4343,token:7,data: channel_0:click 单火开关单键控制(写命令): cmd:write,model: ctrl_neutral1,sid:112316,short_id:4343,token:8,data: channel_0:on cmd:write,model: ctrl_neutral1,sid:112316,short_id:4343,token:8,data: channel_0:off f.86单火开关双键属性阐明channel_0 on/off (开/关)channel_1on/off (开/关)属性上报:cmd:report,model: ctrl_neutral2,sid:112316,short_id:4343,token:7,data: channel_0:on cmd:report,model:ctrl_neutral2,sid:112316,short_id:4343,token:7,data: channel_1:on 单火开关双键控制(写命令): cmd:write,model: ctrl_neutral2,sid:112316,short_id:4343,token:8,data:channel_0:on cmd:write,model: ctrl_neutral2,sid:112316,short_id:4343,token:8,data:channel_1:off g.86无线开关单键 属性阐明channel_0 click/double_click 单击/双击属性上报:cmd:report,model:86sw1,sid:112316,short_id:4343,token:7,data:channel_0:click h.86无线开关双键 属性阐明channel_0click 左键单击double_click 左键双击channel_1click 右键单击double_click 右键双击dual_channelboth_click 左右键同步按属性上报:cmd:report,model:86sw2,sid:112316,short_id:4343,token:7,data:channel_0:click i.温湿度传感器:温湿度传感器如果温度变化达到0.5度或者湿度变化达到6%上报一种报文。属性阐明temperature温度humidity湿度属性上报:cmd:report,model:sensor_ht,sid:112316,short_id:4343,token:5,data: temperature :”2333” cmd:report,model:sensor_ht,sid:112316,short_id:4343,token:6,data: humidity :”6678” 以上例子相应的温度为23.33,湿度为66.78%j.LUMI.LIGHT.RGBW属性阐明status on/off (开/关)level亮度color_temperatureColor Temperature MiredxCurrent XyCurrent YsaturationCurrent SaturationhueCurrent Hue状态部分开关状态上报:cmd:report,model:rgbw_light,sid: 158d0000f2ac34,short_id:8390,token:7,data:status:on 亮度上报:cmd:report,model:rgbw_light,sid: 158d0000f2ac34,short_id:8390,token:7,data:level:126 颜色上报cmd:report,model:rgbw_light,sid:158d0000f2ac34,short_id:26033,token:2,data:hue:170,saturation:254, color_temperature:65279, x:10, y:10
展开阅读全文