本文描述以太网设备如何接入物联网平台LP(Link Platform)。

以太网设备接入LP

下面是需要设备商在产品上实现,而不是SDK提供的功能:通过DHCP Client从路由器获取IP地址,或者手动指定IP地址功能。

开发过程

云端开发

  • 创建以太网产品

    开发者需要在云端创建产品,定义产品功能,产品联网方式指定“以太网”,云平台会自动为产品生成产品标识(ProductKey)以及产品密钥(ProductSecret),ProductKey的长度为11字节。 详细内容请参见创建以太网产品操作过程

    注意 开发者开发时需要将产品的ProductKey复制保存以备用。
  • 创建调试设备

    开发者需要在云端创建调试设备,云平台会自动为产品生成设备密钥(DeviceSecret)和设备标识(DeviceName),这两个数值的长度最长为32字节。详细内容请参见创建调试设备操作过程

    注意 开发者开发时需要将设备的DeviceSecret、DeviceName复制保存以备用。

    在本文中使用“设备身份认证信息”统称ProductKey、ProductSecret、DeviceName、DeviceSecret。

  • 云端数据处理

    设备上报数据到物联网平台之后,开发者可以将数据转发到自己的业务服务器;需要发送数据给设备时,开发者需要调用物联网平台提供的接口将数据发送给设备。

设备端开发

开发者需要设计如何保存设备的产品标识(ProductKey)、产品密钥(ProductSecret)、设备标识(DeviceName)、设备密钥(DeviceSecret)到每个设备上,建议开发者可以将这些信息加密之后存放到设备的Flash的某个位置、或者某个文件中,当设备上电后将这些信息从指定的地方读取出来之后传递给SDK。

开发者开发设备有以下几种方式。

基于Topic进行数据收发

开发者在物联网平台产品定义时添加Topic,指定Topic用于数据发布(指设备数据上报)、订阅(设备从云端接收数据)或者“发布和订阅”,开发者根据产品的需要进行Topic的定义以及数据格式的定义。

因此设备固件逻辑如下:

  • 获取设备的身份认证信息(身份信息可能保存在Flash中的某个位置、或者某个文件中)。
  • 当设备已经获取到IP地址之后,调用SDK提供的API将设备连接到物联网平台并进行认证。
  • 当设备连接到阿里云物联网平台并通过认证后,调用SDK的接口订阅相关Topic接收来自云端的数据,并编写接收到数据后的处理函数。
  • 若设备有数据需要上报时,调用SDK提供的接口将数据发送到用于数据上报的Topic。
  • 编写设备连接异常断开时的异常处理。注:若SDK已连接到物联网平台之后再断开,SDK会自动发起重连。

基于物模型方式开发设备

开发者在物联网平台可以使用物模型来定义产品,也即定义产品支持的属性、服务、事件,其中:

  • 属性表示设备支持的某个可读、或者可读可写的参数,例如灯的亮度。
  • 服务表示一个设备支持的功能,例如让一个设备重启。
  • 事件是设备主动上报的某种情况发生的信息,例如有人在撬锁时智能锁可以上报一个暴力撬锁的事件到云端进行报警。

因此开发者在设备端程序的大体流程为:

  • 获取设备的身份认证信息。
  • 当设备已经获取到IP地址之后,调用SDK提供的API将设备连接到物联网平台并进行认证。
  • 当设备连接到阿里云物联网平台并通过认证后,调用SDK提供的API将设备属性的最新数据上报云端。
  • 当设备的属性发生变化时,调用SDK提供的API将设备属性的最新数值上报云端。
  • 向SDK注册服务处理函数,对收到的服务进行处理。
  • 编写设备连接异常断开时的异常处理。
    注意 若SDK已连接到物联网平台之后再断开,SDK会自动发起重连。

使用物模型开发设备的好处在于设备的功能以JSON格式进行了格式化,设备与云端交互数据的可读性较好,并且对云端服务来说编程比较友好,阿里云IoT也对常见的产品进行了物模型定义,开发者可以使用阿里云定义的物模型进行设备开发,这样当有应用服务商想对设备进行管理时,只要将物模型定义告知服务商即可。

开发者需要根据设备开发使用的语言/平台进行设备的功能开发,不同语言SDK的使用方式存在差异,下面是支持的语言/平台的SDK:

示例参考

基于Ubuntu + C + MQTT Topic的数据收发实现

请参见快速体验中的“以MQTT Topic方式接入设备”,该章节描述了设备在Ubuntu上使用C SDK将数据发送到物联网平台、然后将该数据接收回来的实现案例。

相关细节请参见自定义MQTT Topic编程

基于Ubuntu + C + MQTT + 物模型的加法器实现

请参见快速体验中的“以物模型编程方式接入设备”,该章节描述了在Ubuntu上使用C SDK实现的一个支持加法运算的设备逻辑。

有关API说明请参见C语言的物模型编程指南

基于Windows + C + MQTT Topic的数据收发实现

点击本示例了解使用Eclipse+MSYS2在Windows上移植SDK中的“mqtt_example.c”的完整过程,其中提供了HAL的参考实现。

基于Windows + C + 设备模型的产品实现

点击本示例了解Eclipse+MSYS2在Windows上移植SDK中的“linkkit_example_solo.c”的完整过程,其中提供了HAL的参考实现。

基于Ubuntu + C + MQTT的OTA实现

OTA用于设备固件升级,C SDK的目录src\ota\examples\ota_example_mqtt.c描述了OTA的实现示例。有关API说明请参见C语言OTA的说明文档

基于Ubuntu + C + MQTT的动态注册实现

如果在产线上给每个设备烧录ProductKey、ProductSecret、DeviceName、DeviceSecret,由于每个设备的DeviceName和DeviceSecret每个设备烧写的内容都是不一样的,厂商需要对产线进行改造。有的厂商不愿意进行产线工具改造,因此阿里云IoT提供了动态注册用于解决该问题,设备上烧写ProductKey、ProductSecret,并使用设备的MAC地址、或者序列号作为设备标识(DeviceName),来避免对产线工具进行改造。

C SDK的目录src\dynamic_register\examples\dynreg_example.c示例了如何动态获取设的DeviceSecret,然后再连接阿里云物联网平台。

可参见C语言的[设备认证编程文档](https://help.aliyun.com/document_detail/96627.html)中的“一型一密”了解细节。

设备量产

当设备功能调试运行正常之后,设备进入量产阶段。设备量产是指设备厂商将产品的固件烧录到每个设备,并将每个设备的身份认证信息烧录到每个设备的过程。

开发者需要自行设计在产线上将设备身份信息快速烧录至设备的方法。

开发者需要在阿里云物联网平台为所有的设备申请设备身份信息,操作步骤为在设备管理 > 设备,选中相应产品后单击批量添加批量获取设备身份信息。