首次配置

1.有线联网
2.无线联网
3.获取设备IP地址
4.设备发现协议

需要使用IPC的API就要求对接系统能够获取到IPC的IP地址,然后通过IP与IPC通信,调用相关的API来获取对应的服务。

因此调用IPC前需要先获取到IPC的IP地址,故第一步是把IPC接入网络,IPC连接网络的方式有有线连接和无线连接两种方式。

由于有线网络相对不容易受到环境干扰,稳定性和可靠性较高,故首选是有线方式接入网络。

1. 有线联网

对于有以太网网口的IPC设备,可以使用以太网线连接IPC设备和网关(例如无线路由器),使得IPC通过DHCP服务获取到IP地址。

如果连接的网络是可以正常上网的话,IPC获取到IP后很快就会亮蓝灯,此时表明IPC可以正常连接Internet了。

2. 无线联网

无线配网方式相对要复杂点,步骤如下:

  1. 使用手机/PC的无线网卡扫描IPC的AP热点,一般AP热点的名称为SUNMI_XXXX,其中XXXX为MAC地址最后2个字节的16进制数字,MAC地址可以通过设备机身后背的标贴或者包装盒的标贴查到,AP热点本身是无加密的。
  2. 使用手机/PC的无线网卡连接IPC的AP热点,此时手机/PC就会获取到IPC分配的IP地址,一般会是192.168.200.XXX,手机/PC的网关地址就是IPC的地址,一般会是192.168.200.1。
  3. 使用IPC的IP地址(一般是192.168.200.1),调用无线配置 API(见3.2.1一节的描述)设置IPC要连接的无线网络(例如无线路由器的SSID和密码),使得IPC能够从网关处获取到IP地址。
  4. 如果网络是可以正常上网的话,IPC取到IP地址后很快就会亮蓝灯,此时表明IPC可以正常连接Internet了。

3. 获取设备IP地址

完成IPC的网络接入后,接下来就是要获取到IPC的IP地址。

商米提供一套协议,用于发现同一局域网内所有支持此协议的设备,以获取到设备的基本信息,其中包括SN和IP地址。此协议叫设备发现协议。

4. 设备发现协议

商米发现协议简单来说,就是通过在局域网内广播UDP报文来询问同一局域网内有哪些商米设备,支持此协议的商米设备会在收到询问报文后单播响应报文,响应报文中就包括了设备的基本信息。这样就完成了一次设备发现的过程。

4.1 协议报文格式

UDP报文的载荷部分,格式如下图所示,整个协议报文有报头Head、载荷Payload和CRC校验和组成。

  • Header

协议报头,包括标记为Flag、协议版本Version、报文类型 Type和长度Len。

Flag:为报文的开头部分,是一个标记,目前固定为0xFFFF33FF。

Version:为协议版本,目前只支持版本号0x1。

Type:为报文类型,发起方一般Type为0x01,表示发现请求,Discovery Request;响应方回复的报文Type为0x02,表示Discovery Response。

Len: 表示Payload部分的长度,要求是原始的数据部分进行base64编码前的长度。

  • Payload

真正的载荷部分,原始的数据采用json格式,json数据需要进行base64编码,然后放到Payload上。

接收方接收到后,需要进行base64解码才能还原为json数据。

  • CRC

发送的数据需要进行简单的CRC32校验,校验字段包括Header和Payload。

接收方接收到数据后,会对CRC进行校验,支持校验通过才能使用。

4.2 协议通信端口

端口号10001,发送端和接收端双方使用相同的端口号。

4.3 Discovery Request

当发送方想知道局域网内有哪些设备,就需要发送UDP广播报文,报文内容如下:

类型为0x01,长度为0x0,即没有载荷部分。

4.4 Discovery Response

由响应方回复,告诉发送方自己的设备信息,类型为0x02,长度根据实际情况计算。

回复的载荷内容如下图所示,也即是json格式的设备信息,具体含义解析如下。

ip:设备的IP地址。

mac:设备的MAC地址。

firmware:设备的固件版本,如1.0.0。

name:设备名称标记,目前固定为SUNMI。

model:设备型号,如FM020。

type:设备类型,IPC设备回复的值为IPC。

network:发送端的网络连接方式,如果发送端连接的是IPC的AP热点则值为AP,如果发送端与IPC同时连接在另一个路由器的局域网内,则值为LAN。

deviceid:设备序列号SN。

4.5 超时处理

建议发送端发送Discovery Request报文后,间隔1s再次发送,最多发送3次,每次间隔都是1s。之所以发送3次,是防止丢失有些设备没有收到的情况。

发送完3次后,设置超时时间为2s,2s后不再接收Discovery Response报文,即从发送第一个Discovery Request后,5s内接收Discovery Response报文,并解析所有设备的信息。

接收端接收到Discovery Request报文后,立即单播回复Discovery Response报文。