开发者学堂课程【阿里云 AIoT 物联网开发实战:快速学习 AIoT 企业物联网平台实战03】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/754/detail/13231
AIoT 企业物联网平台实战03
内容介绍:
一、物联网平台的回顾
二、异步下行和同步下行
三、广播消息和设备影子
一、物联网平台的回顾
1、通用方案:
企业自身的设备端可以 MQTT 协议接入到云上的互联网平台上的云产品,云产品会把数据实时的推送到云上的其他云产品上(数据库、那消息队列以及实时计算),也可以实时推送到企业购买的服务器上。
象形的电路或者在外表控制台上发送一条配置信息或者是比充电宝的弹出一个充电宝或者是共享单车怎么开锁指令,通过联网平台推送到指定的充电宝机柜或者是单车上面的过程群。
二、异步下行和同步下行
1、MQTT 协议详解:
最底层是以太网的报文,最顶端上边是企业自己的业务的报文,整个过程从上到下,当业务系统采集到业务数据后,首先把业务数据打包到 MQTT 协议报文里,SDK 会把 MQTT 报文再封装到 TCP 的报文里,TCP 转到网络层会有 IP 的转换成 IP 的报文,整个 TCP 的数据会变成 IP 报文的一部分,最终到以太网物理电路层传输会转化成以太网的报文传输出去。
设备端传递到阿里云的物联网平台,物联网平台会反向的解出来,解到 MQTT 报文,最终物联网平台可以通过规则引擎的流转,把客户的业务报文直接流转到数据库、消息队列里去。
如果使用阿里云物联网平台的设备端 SDK,感知到的就只有业务报文,云上业务系统拿到的是业务报文,不需要感知中间的网络打包的过程。
这是数据下行的场景,web 或者 APP 发一条指令,通过HTTP的方式发到后台的业务上,调用阿里云提供的 API,open API,(同样提供了多语言的 SDK),通过API 调用,就把指定发到了物联网平台,物联网平台会查找到对应的设备的链接,通过这条长连接把数据推送到订阅的设备上。
2、下行数据步骤:
①设备订阅 Topic A
②云端业务系统通过 Pub API给指定设备发送消息
③LoT 平台收到 Pub API 请求,给设备 publish Topic A 消息
④设备通过 MOTT 监听到指定 Topic A 的消息
web 或者 app 发送指令通过HTTP的方式发到后台的业务上server,这时候是调用阿里云 API,也叫 open API,这里提供了多语言的 sdk,比如说是在用 JAVA 或者php,Python nodjs 都可以,都有对应的 API 的 sdk,通过调用就把指定发到了物联网平台,互联网平台会查找到对应的设备的链接,通过这条 mqtt 连接,把数据推送到订阅的设备上,首先是设备端和云平台建立一个 MQTT 强链接,这里设备首先要订个 Topic,就是这个设备会关心哪些 topic,如果没有订阅,有这样的消息过来的时候,物联网平台就不会推送到 Topic 上,所以首先设备会订阅 Topic A,有了这样订阅后,云端的业务系统就可以通过 pub API 给 Topic A 这个主题发送消息,接下来你调用 API 的时候,物联网平台会收到业务系统推过来的这 API 调用请求,互联网平台会把这一条 HTTP 的请求业务请求转化成 MQTT 通讯的 Topic,转化成 Topic A,然后 publish 到设备端,那这个 publish 过程中是可以设置 QOS 的,QOS 等于零就代表平台会尽量的推送一次,但并不会保证设备一定会收到,如果设置 QOS 等于一,就代表是希望设备一定要收到的,那物联网平台会尽量保障消息的出达,当你的设备在线的时候,物联网平台会先把这个消息存储下来,然后给设备推消息,设备端收到了消息之后,他会回复 PUB ac k,确认设备收到了这样一条消息,同样也有可能由于网络原因导致设备端没有收到这条消息或者是设备端回复PUB ac k 在网络过程中丢失了,那物联网平台会在一定的时间内发现没有收到 PUB ac k,会重复的推送刚刚这条消息给到设备端,一直到设备端回复了 PUB ac k,还有一个情况就是设备当前不在线,这时候物联网平台同样会把这个消息存下来,等设备上线之后,物联网平台会第一时间把这个消息推送到设备上,同样设备也可以做选择,通过参数来告知联网平台是否要推用这种不在线的消息,如果设置成 true,就是要把前面的清理掉,在不在线的调节也不需要发送了,那如果是 folse,就是还要保持原来的绘画,就意味着我不在线的时候收到的消息也需要补偿回来。
3、实战
(1)、首先来到物联网平台,来到控制台,找到设备模拟器,选择自己一台设备,通过启动模拟器的方式让设备上线。
(2)、设备要接收指令,首先要订阅 topic,设备会发送订阅的请求到互联网平台,再物联网平台的设备的情里,可以看到设备的已订阅列表里已经有 topic,说明订阅成功。
(3)、发布的消息:可以通过控制台给设备主题发送一条消息,选择 Qs1,点击确定,就可以看到发送的消息。
(4)、模拟器的效果:收到了一条消息以及消息的内容。
(5)、日志服务消息发送过程:调用 API 给设备发消息,同样云端会给设备下行一个消息,因为是 QS 等于一的,所以我们还可以看到设备端回复了 PUB ac k,这个是 MQTT 报文里的消息 ID。
找到阿里云物联网平台,以下图片做参考做填写
调用成功后可以在模拟器上看到收到了 topic,在日志中也可以看到Pub的日志,平台发送了 Pub,设备端回复了 Pub ack。
以上是通过 API 调用的方式来下行的过程。
同时在线的 API 也展示了各种语言完整的示例代码,方便云端做开发。
4、匹配异步响应的结果:
(1)、服务端:APP 发送了一条指令到服务器,服务器要做的是把这个指令保存,通过 pub 接口把指令再发给物联网平台,互联网平台会把消息推送到设备上,设备收到了消息,执行了对应的动作之后,他会托 MQTT 发送一条响应,这条响应会通过配置的规则引擎把这个响应推送给业务服务器,业务服器通过进到内部来查询,来匹配当前的响反应和哪一个请求是相关的,匹配上后会把结果存取过来。