1、前言
内容:物联网平台概论、设备接入以及消息通信 官网地址
时长:建议学习时长整体50分钟,理论40分钟,实战10分钟
代码:设备端demo、服务端demo
约定:物联网平台已经开通并登陆 https://iot.console.aliyun.com
导航:下一课
2、概论
2.1、物联网平台是什么、能干什么
阿里云物联网平台为设备提供安全可靠的连接通信能力,向下连接海量设备,支撑设备数据采集上云;向上提供Open API,服务端通过调用Open API将指令下发至设备端,实现远程控制。
物联网平台也提供了其他增值能力,如设备管理、规则引擎等,为各类IoT场景和行业开发者赋能。
2.2、设备接入
物联网平台支持海量设备连接上云,进行稳定可靠地双向通信。
• 支持蜂窝(2G/3G/4G/5G)、NB-IoT、LoRaWAN、Wi-Fi等不同网络设备接入,解决企业异构网络设备接入管理痛点。
• 支持MQTT、CoAP、HTTP/S等多种协议的接入,既满足长连接的实时性需求,也满足短连接的低功耗需求。
• 开源多种平台设备端SDK,提供跨平台移植指导,赋能企业基于多种平台做设备接入。
2.3、设备管理
物联网平台提供完整的设备生命周期管理功能,支持设备注册、功能定义、数据解析、在线调试、远程配置、固件升级、远程维护、实时监控、分组管理、设备删除等功能。
• 提供设备物模型,简化应用开发。
• 提供数据存储能力,方便用户海量设备数据的存储及实时访问。
• 提供OTA升级能力,赋能设备远程升级。
• 提供设备影子缓存机制,将设备与应用解耦,解决不稳定网络下的通信不可靠痛点。
2.4、规则引擎
物联网平台规则引擎包含以下功能:
• 服务端订阅:订阅某产品下所有设备的某个或多个类型消息,您的服务端可以通过AMQP客户端或消息服务(MNS)客户端获取订阅的消息。
• 云产品流转:物联网平台根据您配置的数据流转规则,将指定Topic消息的指定字段流转到目的地,进行存储和计算处理。
• 场景联动:配置简单规则,即可将设备数据无缝流转至其他设备,实现设备联动。
2.5、Open API
物联网平台提供丰富的API接口,方便您管理设备或者给设备发送控制指令。同样的,Open API 也有多种语言版本的SDK。
3、基础概念
3.1、设备三元组
• 一个设备包含4个信息:productKey、productSecret、deviceName、deviceSecret,其中productKey、deviceName、deviceSecret我们称为三元组信息,也叫做设备证书,在创建设备时由物联网平台颁发。
• productKey、productSecret 是产品信息,产品是一类设备的集合,productKey 是产品的唯一性标识符,productSecret 是产品密钥,后面动态注册会用到。
• deviceName、deviceSecret 是设备信息,创建产品后创建设备,productKey+deviceName 是设备的唯一性标识符,deviceSecret 是设备密钥,设备接入时进行身份验证要用到。
• 三元组这个概念是我们在使用物联网平台的过程中一直会出现的概念,也是阿里云iot最重要、最基础的概念。三元组是平台唯一的,是物联网平台识别一个设备的重要标识。
3.2、接入协议
物联网平台支持MQTT、CoAP、HTTP/S等多种协议的接入,其中MQTT是使用最广泛的一种接入协议,本次讲解设备接入就是基于MQTT来接入的。
MQTT 接入的几个概念
• host:设备接入的域名,${YourProductKey}.iot-as-mqtt.${YourRegionId}.aliyuncs.com:1883
• keepalive:心跳时间,30秒~1200秒,物联网平台 1.5 倍心跳时间内没有收到心跳会断开设备连接
• cleanSession:会话清除,0 或 1,设置为 1 时无法接收离线消息
3.3、通信机制
MQTT 是基于对 topic 的订阅和发布(sub/pub)来通信的。
• topic:物联网平台提供 topic 定义功能,用户可以自定义topic的字段,也可以使用平台默认定义好的topic。消息发布者往topic发送消息,消息订阅者从topic接收消息,两者是异步的。物联网平台的topic包含productKey和deviceName,所以可以做到设备粒度的权限控制。设备只能往自己的topic发布消息,也只能订阅自己的topic。topic有发布权限和订阅权限,这个是针对设备视角的。
• qos:消息质量,物联网平台支持 qos=0 和 qos=1 的消息质量。qos=0 意味着消息最多到达一次,可能丢失,设备离线无法接收;qos=1 意味着消息至少到达一次,可能收到多次,设备离线期间的消息在设备上线后可以接收到。当设备端接入时设置了cleanSession=1,那么即使qos=1的消息,设备重新上线后也是收不到的。
4、设备接入及消息通信
本例将完成如下步骤,涉及的demo代码包通过课程【前言】提供的链接下载即可。开发环境的搭建不再赘述,是普通 maven 工程。
设备端代码:com.aliyun.alink.demo.devicesdk.chapter01.HelloWorld
服务端代码:com.aliyun.alink.demo.openapi.chapter01.MessageDownlink
• 创建一个产品,名为:一个HelloWorld
• 创建一个设备,名为:device_0
• 使用设备端SDK让设备 device_0 上线
• 使用设备端SDK让设备 device_0 发送消息给物联网平台
• 使用 Open API 发送消息给设备 device_0
4.1、创建产品
官网文档:https://help.aliyun.com/document_detail/73728.html
4.2、创建设备
官网文档:https://help.aliyun.com/document_detail/73729.html
4.3、设备端 SDK 接入
启动:com.aliyun.alink.demo.devicesdk.chapter01.HelloWorld,填写设备三元组信息后直接启动。
整体流程:初始化设备信息-->注册下行监听-->初始化SDK-->等待初始化完成-->订阅topic。
注意:最后一步订阅的topic是/${productKey}/${deviceName}/user/get,下面 Open API 消息下行要用到。
设备状态:
• 未激活:设备刚创建,从来没有连接过平台是未激活状态;设备连接到平台即可激活
• 在线:设备和平台建立连接
• 离线:设备从平台断开连接
4.4、设备端 SDK 消息上报
接上一步,设备端调用publish接口上报消息,本例发送的topic=/${productKey}/${deviceName}/user/update,消息内容为 hello iot。
整体流程:初始化设备信息-->注册下行监听-->初始化SDK-->等待初始化完成-->发布消息到topic
发送消息后查看日志。
4.5、Open API 消息下行
启动:com.aliyun.alink.demo.openapi.chapter01.MessageDownlink,填写账号信息和设备信息后直接启动。
整体流程:初始化账号信息-->初始化SDK-->发送消息给设备。
本例发送的topic=/${productKey}/${deviceName}/user/get,消息内容为 hello world。
发送消息后查看日志。
5、开源接入
针对不能够使用物联网平台提供的 SDK 来完成设备接入和消息通信的用户,物联网平台也提供了开源 MQTT SDK 接入以及基于 http 请求的 Open API 调用的指导。
5.1、基于开源 paho 的设备端接入
官网文档 https://help.aliyun.com/document_detail/73742.html
5.2、基于 http 请求的 Open API 调用
官网文档 https://help.aliyun.com/document_detail/30560.html
6、总结
本次课程对物联网平台及部分基础概念做了简单的介绍,对设备接入、设备消息上报(绿色线路)、Open API 消息下行(蓝色线路)的开发链路做了详细的说明。实现了一个最基本的物联网场景。
7、后续
• 设备通过物联网平台上报了消息,那么消息如何展示到我的网页上呢?
• 设备只能往自己的topic发送消息,那么设备A如何发送消息给设备B呢?