产品开发过程说明
更新时间:2018-10-23 21:16:03
应用范围:
本文仅针对集成Link Kit SDK进行开发的设备来描述设备的开发过程,让设备厂商对如何接入阿里云物联网平台有个大概的了解。如果设备厂商的设备开发基于阿里云的其它集成了Link Kit SDK的产品(比如AliOS、LinkEdge),那么请参考相应产品的开发说明文档进行产品开发。
产品开发过程
一个设备要接入阿里云物联网平台,主要包含三个主要过程:
- 云端产品定义:主要在阿里云物联网平台上进行产品功能定义(设备的属性、服务、事件等),本文不描述如何在云端进行产品定义,请登录阿里云IoT官网进行产品创建
- 设备端开发:在设备端集成Link Kit SDK进行设备功能开发,实现在云端定义的产品功能
- 设备上下行调试:在云平台上申请测试设备的三元组(可以理解为该设备上云的身份账号),将其写入设备端,就可以进行设备和云端的上下行调试,确保设备能够连上云平台。本文不描述如何调试,将在后续的章节中进行说明
设备调试通过后,就可以在阿里云物联网平台上批量申请三元组,进行设备批量生产。
设备端开发过程
设备端集成Link Kit SDK的通用开发过程为:
- 设备身份认证
任何一个设备连接到阿里云IoT物联网平台均需要进行身份认证,阿里云IoT物联网平台目前提供了两种方式对设备进行身份认证:
* 一机一密
每个设备均需要烧写不一样的身份信息用于身份认证,设备厂商需要实现相关的HAL用于让SDK获取到相应身份信息
* 一型一密
每个型号的设备烧写一样的身份信息用于身份认证,设备厂商需要实现相关的HAL用于让SDK获取到相应身份信息。为了确保设备安全,需要将每个设备的唯一标识上传到阿里云IoT物联网平台,当使用一型一密的设备在阿里云IoT物联网平台进行身份认证时,设备预先上传的唯一标识将会参与相关计算。
注:身份信息如何烧写由设备厂商自行决定,但是为了避免被黑客攻陷,设备厂商应该尽可能的保证相关信息被加密后以某种安全的方法烧写到Flash中。
- 云端定义功能实现
阿里云物联网平台支持厂家对产品的功能通过物模型进行定义,物模型包括:
* 属性
即设备支持的可读和/或可设置的参数功能。以一个灯为例,灯的开关就可以定义为一个属性,用户可以读取该属性的当前数值来得知灯的开关状态,也可以通过对该属性进行设置来打开或者关闭这个灯。
* 服务
如果设备的某个功能只能设置、不能获取,那么可以将其定义为一个服务。比如一个支持调色的灯可以提供一个reset服务,当设置该服务时,将灯的颜色恢复为白色。
* 事件
当设备发生某种状态并希望将其上报到阿里云物联网平台时,可以为其定义一个事件。以一个支持防暴力开锁的智能门锁为例,如果该门锁发现有人在撬门,即可以发送一个“暴力开锁”事件到云端,从而可以让用户知道门是什么时候被撬的。
当设备厂商在阿里云物联网平台定义了产品的物模型之后,需要在设备上对定义的物模型进行实现,从而让云端可以对设备进行远程控制(属性设置或者服务调用),以及正确的接收和处理来自设备的属性变化上报和事件上报。
注:如果设备厂商只是将阿里云IoT物联网作为一个数据通道,也即把设备的数据上传到阿里云IoT物联网平台之后再把数据透明的推送到设备厂商在云端的服务,那么可以不用支持物模型。
- 其它功能实现
比如固件OTA、子设备接入等。
不同类型的产品的在集成Link Kit SDK的开发过程存在差异,下面描述不同类型的产品集成SDK时的比较通用的过程:
使用WiFi接入的产品
使用WiFi接入到网络的设备,开发过程为:
- WiFi配网
WiFi配网: WiFi设备必须通过SSID和密码才能连接到一个WiFi AP,阿里云将SSID/密码传输给设备的过程称为WiFi配网。
对于有键盘、触摸屏、串口或者Web Server的设备,设备厂商可以设计自己的方案用于将AP的SSID/密码发送给WiFi设备;如果一个WiFi设备没有上述输入手段,Link Kit SDK提供了配网方案用于通过手机或者其它设备将SSID/密码传输给设备。
使用以太网接入的产品
使用以太网接入的产品,其开发过程与设备通用开发过程一致。
同时具备WiFi以及以太网接口的产品
由于设备具有WiFi以及以太网两种接口,所以也需要实现WiFi配网的功能,设备厂商可以选择设计自有WiFi配网或者使用阿里云提供的WiFi配网方案。
使用蜂窝网接入的产品
使用蜂窝网接入的产品指设备的上行网络接口支持GPRS/3G/4G接入电信运营商网络并继而连接阿里云的情况。对于这种应用场景设备厂商的开发过程与设备通用开发过程一致,但是由于使用蜂窝网接入的产品的硬件形态具有以下几种形态,所以设备厂商的开发存在一些差异:
模组SoC方案
即在SoC上集成Link Kit SDK、产品业务逻辑、蜂窝网通信,对于这种场景,设备厂商需要将所有软件功能都在SoC上进行实现,设备厂商(或者模组商)需要将Link Kit SDK集成到设备上。
MCU+蜂窝网模组
根据Link Kit SDK位于MCU还是蜂窝网模组,可以分为下面几种场景:
MCU + 集成Link Kit SDK的模组
这种场景是蜂窝网的模组厂商已经完成了Link Kit SDK的集成,设备厂商的软件开发集中在MCU上,在MCU上实现对设备身份认证信息的获取、设备信息采集与上报、云端下发数据处理。MCU + 具备MQTT支持的模组
这种场景中的模组并没有集成Link Kit SDK,阿里云提供MCU上的SDK用于实现对模组上MQTT进行控制,实现让模组连接到阿里云IoT物联网平台、身份认证、设备属性变化上报、云端下发数据接收。设备厂商的软件开发集中在MCU上。MCU + 只具备TCP/UDP支持的模组
这种场景中的模组没有集成Link Kit SDK,阿里云提供MCU上的SDK用于实现对模组上的TCP/UDP进行控制,实现让模组连接到阿里云IoT物联网平台、身份认证、设备属性变化上报、云端下发数据接收。设备厂商的软件开发集中在MCU上。
网关类产品
网关指的是该设备将会代理某些设备连接到阿里云IoT物联网平台,特别是代理一些不支持TCP/IP的设备,比如zigbee、433、KNX这样的设备,被代理的设备称为子设备。
网关产品需要通过WiFi、以太网、或者蜂窝网连接到阿里云,因此设备开发商首先需要根据前面描述的网络接口连接方式完成产品的开发,然后再实现对子设备的接入功能。网关产品的开发过程如下图所示:
在网关上需要实现的与子设备的功能包括:
子设备发现
网关需要能够发现与识别子设备的身份信息,并维护子设备的在线、离线状态。子设备添加、删除
由于子设备不直接建立与云端的连接,网关需要云端添加子设备、删除子设备,并代理子设备与云端进行子设备身份认证子设备物模型管理
当子设备属性发送变化或者事件信息给网关后,网关需要代理子设备向云端发送属性变化或者事件报告;当网关收到来自云端的对子设备进行属性设置或者服务调用时,网关需要将命令转换为子设备识别的数据格式并发送给子设备。
子设备
子设备通过网关接入阿里云IoT物联网平台,在子设备上不需要集成Link Kit SDK,但是子设备也需要在阿里云IoT物联网平台进行产品定义,申请设备身份信息。子设备的开发过程为:
注:通常子设备不集成Link Kit SDK,也不会烧写子设备的身份信息,所以会采用一型一密的身份认证方式,因此需要将子设备的唯一标识上传到阿里云IoT物联网平台。
产品生产
对于集成了Link Kit SDK的产品来说,每个设备都需要从云端申请身份信息并在产线上烧写到设备,身份信息的烧写方法由每个设备厂商自行决定。与设备身份认证相关的参数包括:
ProductKey
由阿里云IoT物联网平台为每个产品创建的产品唯一标识(型号),该参数最大长度为11字节。DeviceName
产品的每个实例被称为设备,每个设备都需要在该产品内唯一的设备标识,该标识可以由阿里云IoT物联网平台自动生成,也可以由设备厂商定义后上传到阿里云IoT物联网平台;该参数的长度为4-32个字节。DeviceSecret
由阿里云IoT物联网平台为每个产品创建的设备密钥,该密钥将参与设备身份认证以及设备与云平台间的安全通信,因此设备厂商需要避免产品的DeviceSecret泄露;该参数的最大长度为32字节。ProductSecret
由阿里云IoT物联网平台为每个产品创建的密钥,当设备身份认证方案选择一型一密时将被使用到,因此设备厂商也需要避免产品ProductSecret的泄露;该参数的最大长度为32字节。</span>
注:文档中有时为了简化,会使用“设备三元组”来代表ProductKey、DeviceName、DeviceSecret,使用“设备四元组”来代表ProductKey、DeviceName、DeviceSecret和ProductSecret。