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. 无线联网
无线配网方式相对要复杂点,步骤如下:
- 使用手机/PC的无线网卡扫描IPC的AP热点,一般AP热点的名称为SUNMI_XXXX,其中XXXX为MAC地址最后2个字节的16进制数字,MAC地址可以通过设备机身后背的标贴或者包装盒的标贴查到,AP热点本身是无加密的。
- 使用手机/PC的无线网卡连接IPC的AP热点,此时手机/PC就会获取到IPC分配的IP地址,一般会是192.168.200.XXX,手机/PC的网关地址就是IPC的地址,一般会是192.168.200.1。
- 使用IPC的IP地址(一般是192.168.200.1),调用无线配置 API(见3.2.1一节的描述)设置IPC要连接的无线网络(例如无线路由器的SSID和密码),使得IPC能够从网关处获取到IP地址。
- 如果网络是可以正常上网的话,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报文。