本文介绍如何基于生活物联网SDK开发接入生活物联网平台的网关。
术语解释
- 网关设备:也叫主设备,是指可以挂载子设备的直连设备,网关具有子设备管理模块,维持子设备的拓扑关系,并且可以将拓扑关系同步到云端。
- 子设备:本质上也是设备,但子设备不能直接连接到云端,只能通过挂接到网关上,通过网关间接连云,例如使用zigbee协议联网的设备。
- 设备ID:设备句柄,在网关SDK中用于标识一个具体的设备。
- 设备证书:指设备的ProductKey、DeviceName和DeviceSecret,用于唯一标识设备。
- 拓扑关系:子设备和网关的关联关系为拓扑关系,子设备与网关建立拓扑关系后,便可以复用网关的物理通道进行数据通信。
- 子设备动态注册:子设备无需烧录一机一密(设备证书),只需要烧录ProductKey、ProductSecret,然后基于子设备的唯一标识作为设备证书中的DeviceName(例如SN),再使用网关SDK到云端动态注册获取DeviceSecret,从而得到完整的设备证书。子设备就可以使用该设备证书到云端进行设备的身份认证,并进而被云端统一管理。
- TSL:Thing Specification Language,基于JSON格式,用于描述设备所具备的功能和能力,详细说明参见物模型介绍。
网关开发流程
网关产品的开发流程如下图所示。
- 底色为蓝色的步骤表示该步骤中的功能完全由网关厂商自己定义与实现。
- 网关如何去发现以及连接子设备是由网关厂商与子设备厂商去协商和定义的,平台并不参与网关与子设备之间的通信过程和数据格式定义。但是当网关添加一个子设备后,需要使用平台提供的子设备验证机制来验证子设备的合法性。
- 当手机App对子设备进行控制时,命令将会通过手机发送到云端、再由云端发送到网关设备后转发给子设备。网关与子设备之间的数据格式由网关厂商和子设备厂商定义,因此网关需要进行数据格式从平台格式到厂商数据格式的转换。
- 平台提供的网关SDK并不包含网关如何获取IP地址的功能。网关可能使用以太网、WiFi、或者蜂窝网技术(GRPS、3G、4G等)方式连网,网关上如何通过DHCP获取IP地址、域名服务器地址、下一跳路由器的IP地址等功能由网关厂商实现。
- 如果网关使用WiFi接入网络,并且网关具有串口、或者web server这样的功能可以让用户输入WiFi热点的SSID/密码,那么网关厂商可以不用适配与集成SDK中的WiFi配网功能。
下载SDK与网关编程说明
在生活物联网平台定义网关产品
终端用户添加子设备的交互示意图
本节介绍用户添加子设备的整个交互示意,以让网关厂商了解子设备添加到云端的整体过程。设备用户购买了网关和子设备之后,需要先添加网关,再将子设备添加到网关。完成后才能对子设备进行控制。下面是已添加网关后,添加子设备的多端交互示意图。
当用户发起子设备添加时,手机App将会向云端发送PermitJoin命令,之后云端会将该命令转发给网关,此时网关需要去发现与连接子设备,网关如何去发现与连接子设备是由网关厂商与子设备厂商来定义和实现的。当网关收到PermitJoin后,将发现的子设备上报到云端。
说明 如果网关没有收到来自云端的permitJoin消息,即使子设备已连接到网关,也不要向云端添加子设备;可以等到收到permitJoin之后再将已连接的子设备通知云端。
云端与网关之间数据格式由阿里云IoT定义,网关与子设备之间的数据格式是网关厂商与子设备厂商定义,因此网关需要实现阿里云IoT数据格式与子设备之间数据格式的转换工作。
当云端添加子设备到网关之后,将会发送消息到手机端,从而让用户可以看见添加的子设备,继而对子设备进行控制。
SDK应用于网关时的推荐配置
解压获取到的SDK包后,在主目录下的make.settings文件,定义功能模块的需求。对网关而言,除了不同联网方式(WiFi,以太网、蜂窝网)的不同配置之外,还需要配置以下参数的使能。
FEATURE_DEVICE_MODEL_GATEWAY=y