AloT 企业物联网业务平台实战03(一)|学习笔记

简介: 快速学习 AloT 企业物联网业务平台实战03

开发者学堂课程【阿里云 AIoT 物联网开发实战:AloT 企业物联网业务平台实战03】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/328/detail/3696


AloT 企业物联网业务平台实战03(一)


内容介绍:

一、物联网平台的回顾

二、异步下行和同步下行

三、广播消息和设备影子


一、物联网平台的回顾

1、企业 loT 业务架构大图

企业基于物联网平台产品做自己的物联网业务架构,通用的方案企业自身的设备端可以通过 MQTT 协议接入到云上的物联网平台,云产品会把数据实时的推送到云上的其他云产品,比如数据库类的,消息队列类的以及实时计算类的,同样也可以实时推送到企业购买的 4S服务器上。下行的链路APP或者是在 web 控制台上发送一条配置信息,或者是比如充电宝弹出一个充电宝,或者是共享单车开锁的指令,通过物联网平台推送到指定的充电宝,机柜或者是单车上面。

2、loT 物联网 MQTT 协议详解

MQTT 协议的技术分享,从网络传输来说最底层是以太网的报文,最上面是企业关心的自己的业务的报文。整个过程从上到下是这样的,当业务系统或者是设备采集到业务数据之后,首先要把业务数据打包到 MQTT 协议报文里面,前面封装 MQTT 通讯用的 header。之后系统或者 SDK 会把 MQTT 报文再封装到用于 TCP 通讯的 TCP 报文里,会追加 TCP 的 header,TCP 在传输中又会到网络层,会有一个 IP 转化成 IP 的报文,整个 TCP 的数据会变成 IP 报文的一部分,需要追加 IP 的 header,最终到以太网物理第二层传输的时候会转发成以太网的报文传输出去,设备端传递到阿里云的物联网平台,物联网平台会反向的一个个解出来,只解到 MQTT 报文,最终互联网平台可以通过飞机引擎的流转数据流转,把客户的业务报文直接转到比如数据库消息队列里边去。所以如果使用物联网平台的设备端 SDK,感知到的只有一个业务报文,同样云上业务系统拿到的是业务报文,不需要感知中间网络打包的整个过程。

3、云端业务系统下行指令到 loT 设备

下行数据步骤:

(1)设备订阅 TopicA

(2)云端业务系统通过 PubAPI 给指定设备发送消息

(3)loT 平台收到 PubAPI 请求,给设备 publish TopicA 消息

(4)设备通过 MQTT 监听到指定 TopicA 的消息

数据下行的场景 web 或者 APP 发一条指令,通过 HTTP 的方式发到后台的业务 server 上,调用阿里云提供的 API叫 open API。同样提供了多语言的 SDK,可以比如在用 Java 或者 php python notes 都可以,都有对应的 API 的 SDK。通过 API 调用把它制定发到物联网平台,物联网平台会查找到对应设备的链接,通过 MQTT长链接把数据推送到订阅的设备上,首先是设备端和云平台建立一个MQTT 长链接,设备首先要订阅 topic,是设备会关心哪些 topic,如果没有订阅有消息过来的时候,物联网平台不会推送到设备上,所以首先设备会订阅一个 topic a,有了订阅之后云端的业务系统就可以通过 API 给 topic a 主题发送消息。

接下来调用 API 的时候,物联网平台会收到业务系统推过来的 API 调用请求。物联网平台会把 HTTP 的请求业务转化成 MQTT 通讯的 topic 和配套的转化成topic a,pubilc 到设备端,publish 过程中可以设置 QS ,QS等于零代表平台会尽量的推送一次,但并不会保证设备一定会收到,如果设置 QS 等于一代表希望设备一定要收到的,物联网平台会尽量保证消息的触达,当设备在线的时候物联网平台会把消息存储下来,然后给设备推送消息。

设备端收到了消息之后,会回复 Pub ACK,确认设备收到消息,同样有可能由于网络原因导致设备端没有收到消息,或者是设备端回复 Pub ACK 在网络过程中丢失,物联网平台会在一定的时间内发现没有收到 Pub ACK 会重复的推送,消息给到设备端,一直到设备端回复 Pub ACK,还有一个情况是设备当前不在线,物联网平台同样会把消息存下来,等设备上线之后物联网平台会第一时间把消息推送到设备上,同样设备也可以做选择,通过connect 的参数来告知互联网平台是否要推送不在线的消息,叫clean session的概念。如果设置成处要把前面的 session 清理掉,不在线的消息不需要发,如果 clean session 是 force还要保持原来的绘画,意味着不在线的时候收到的消息也需要补偿。

4、实战

物联网平台,看到有创建的未激活设备,来到控制台找到设备模拟器,选设备。

启动模拟器设备上线

当前设备处于在线状态,设备接收指令订阅一个 topic  

点击订阅,设备会发送订阅的请求到物联网平台。

来到物联网平台设备详情里面,来到设备的订阅列表,topic 列表

设备的已订阅列表有了 topic ,说明设备可以订阅 topic,有 topic 系统默认订阅的,设备影子、物模型配置信息,

有发布消息的功能,可以通过控制台给设备主题发送消息。

发送的消息可以在模拟器看到效果,收到消息消息内容是 from lt console 。

来到日志服务里看消息发送的过程,时间点调用 Pub API 给设备发消息。也可以看消息的内容 from lt council,同样云端会给设备下行消息publish message topic,因为是 QS 等于一,所以还可以看到设备端回复 Pub ACK ,Pub ACK from device 是 MQTT 报文里的消息 ID,这是一个完整的 Pub 过程。

业务开发的时候不是通过控制台来发送消息,是通过 API,也有一个可视化的 API 调试叫 api.aliyun.com,找到阿里云物联网平台,找到 Pub API,首先会选 region 比如是在上海,topic 的 FulName 以及内容还有 productkey,topicFulName 把它 copy 过去,同样 product key、QS 同样写一,看 message content 是 BASE64 编码过的内容。输入这 BASE64 的编码,编码是 hello iot 文本的 BASE64 编码,发起调用。

调用成功有 message id,来到平台上模拟器设备收到了 topic 是 hello iot。

刷新日志,有 Pub 日志,平台发送 Pub 设备端回复 Pub ACK,通过 API 调用的方式来实现下行的完整过程。

在线的 API 调试工具展示完整的示例代码

import com.aliyuncs.CommonRequest;  

import com.aliyuncs.CommonResponse:  

import com.aliyuncs.DefaultAcsClient;  

import com.aliyuncs.IAcsClient;

import com.aliyuncs.exceptions.ClientException;  

import com.aliyuncs.exceptions.ServerException;  

import com.aliyuncs.http.MethodType;

import com.aliyuncs.profileDefaultProfile;/*

pom.xml

<dependency>

<groupId>com.aliyun</groupId>

<artifactld>aliyun-java-sdk-core</artifactid> <version>4.5.3</version>

</dependency>

*/

public class Pub{

public static void main(Stringl] args){

DefaultProfile profile=DefaultProfile.getProfile("cn-shanghai" "<accessKeyId:"." cacces IAcsClient client=new DefaultAcsClie nt(profile);

CommonRequest request=newCommonRequest();

request.setSysMethod(MethodTypePOST);

request.setSysDomain("iot.cn-shanghai.aliyuncs.com"); request.setSysVersion("2018-01-20"); request.setSysAction(“Pub");

request.putQueryParameter("RegionId","cn-shanghai"):

request.putQueryParameter("TopicFulIName”,“/a1kRdXDgNBv/abcd0001/user/get"); request.putQueryParameter("MessageContent","aGVsbG8gaW90");

request.putQueryParameter"ProductKey" “a1kRdXDqN0v");

request.putQueryParameter("Qos",“1");  

try{

CommonResponse response=client.getCommonResponse(request); System.out.println(response.getData());  

}catch(ServerException e){

e.printStackTrace():

}catch(clientException e){

e.printStackTracel);

}

}

}

在线的 API 调试工具,展示了完整的示例代码,比如如果用 Java开发有一个request,入参,是上海的 region,然后是 Pub action,Message content 以及 QS=1。

Node.js 也会有示例代码,Go语言、PHP、Python、Net、Ruby 都有对应的示例代码,方便开发研调。

相关实践学习
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
容器
Unreal Niagara粒子入门1
Unreal Niagara粒子入门1
364 1
Unreal Niagara粒子入门1
|
前端开发 JavaScript Java
基于Vue+ElementUI框架实现学生管理系统前端页面设计
基于Vue+ElementUI框架实现学生管理系统前端页面设计
516 1
|
边缘计算 Cloud Native 数据管理
【阿里云云原生专栏】云原生背景下的AIoT布局:阿里云Link平台解析
【5月更文挑战第29天】阿里云Link平台,作为阿里云在AIoT领域的核心战略,借助云原生技术,为开发者打造一站式物联网服务平台。平台支持多协议设备接入与标准化管理,提供高效数据存储、分析及可视化,集成边缘计算实现低延时智能分析。通过实例代码展示,平台简化设备接入,助力智能家居等领域的创新应用,赋能开发者构建智能生态系统。
467 3
|
SQL Oracle 关系型数据库
MySQL必知必会:MySQL中的Schema与DataBase
MySQL必知必会:MySQL中的Schema与DataBase
|
传感器 数据采集 安全
物联网的五层架构分析
物联网五层架构,包括感知层、网络层、数据层、应用层和业务层,扮演着关键的角色。
3639 2
|
Java 开发工具 数据库
从mybatis-plus-generator看如何编写代码生成器
velocity模板引擎分三步,1.初始化 配置模板加载地址;2.放置上下文变量velocityContext;3.渲染模板。
905 0
从mybatis-plus-generator看如何编写代码生成器
|
算法
Gzip的文件格式规范
【4月更文挑战第29天】Gzip的文件格式规范
538 1
|
存储 传感器 运维
AloT 企业物联网平台入门01|学习笔记(一)
快速学习 AloT 企业物联网平台入门01
995 17
AloT 企业物联网平台入门01|学习笔记(一)
|
Java 应用服务中间件 Shell
Tomcat 安装配置教程及成功后,启动失败报错解决方案
Tomcat 安装配置教程及成功后,启动失败报错解决方案
411 0
|
算法 安全 物联网
AloT 物联网开发实战02 (二)
AloT 物联网开发实战02 (二)
588 0
AloT 物联网开发实战02 (二)

相关产品

  • 物联网平台