AloT 物联网开发实战02 (二)

简介: AloT 物联网开发实战02 (二)

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

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


AloT 物联网开发实战02 (二)


2、实战

(1)协议

image.png

平台支持的协议,包含 MQTT、CoAP、HTTPS,以及在 web 和 APP上可以运行的MQTT over WebSocket 模式,还有 LoRa 的设备记录。

(2)MQTT 在物联网的应用

image.png

MQTT 协议在物联网平台上的应用。以电表为例,电表如果发送充电器协议有两个重要的点,一个叫 topic,一个配套的 topic 是一个消息主题或者一个消息类型搭配的是具体数据。或者可以认为是一个邮件的主题,配套的是邮件内容,当发邮件的时候,比如是周报的主题还是会议纪要,主题客户拜访的一个邮件,对应的内容格式是不一样的,一个主题会有自己固定的消息格式,MQTT 的报文发送到云端之后,如果没有人订阅消息就直接在云端消费掉,正常情况业务服务器会订阅固定的一些 topic,比如当前业务服务器比较关心 topic A类型的消息,一旦有这样的消息产生,物联网平台会把 payload 的消息发给订阅的服务器。同样物联网平台还会有其他设备来接入,其他的设备也可以订阅指定的 topic,比如电表发动的 topic c 风机来订阅, topic c 就可以直接流转到风机,设备不需要经过业务系统来处理。这是 M to M 的一个过程。阿里云在里面做了 topic 的约定,需要通过规则引擎模块做消息的流转过程。,在设备端上是可以通过topic A 来认证 loT server 的合法性,阿里云平台是通过三元组来认证设备的合法性,阿里云平台和服务器的交互通过 AK 认证的。

image.png

clientld  

id+"securemode=3signmethod=hmacsha1timestamp="+timestamp+"l'

id:表示客户端ID,64字符内。其中II内为扩展参数 securemode:安全模式;2为TLS加密,3为非加密 signmethod:签名算法类型。 timestamp:当前时间毫秒值。

username  

deviceName+"&"+productKey  

password  

sign_hmac(deviceSecretcontent)

sign_hmac 为 clientld 中的 signmethod 算法类型 content 为如下拼接字符串:"clientld${id}deviceName${deviceName}productKey${productKey}timestamp${timestamp}'

基于 MQTT 的通讯,第一个很关键的是 connect。在场景下设备是作为 MQTT 的 client,阿里云的物联网平台是作为 MQTT 的 Broker。Connect 的过程中会有 client ID、username 和 password 三个数值,文档也详细地给出 client ID 的一个生成规则,首先会有一个 ID,ID 是客户端自己来标识的,不需要和云端做约定,有了这样一个 ID 再加上鲜明的规范来生成 APP 的 ID,包含了安全模式,是否用 TLS 加密,签名算法是哪一个以及当前的时间戳能保证 Client ID 可以随着时间发生变化。Username 是通过 devicename 加 productkey 生成的。password 是由前面提到的 ID 加上 devicename、productkey、timestamp 拼接起来,按前边 Client ID里的签名算法做一个签名,签名直接用 devicesecert ,通过这样的规则可以生成 devicename、productkey、timestamp 把身份传递给云平台而不是三元组本身。云平台校验通过之后会返回 connect 的 ACK code 是0,如果是其他的比如是四,代表签名运算的逻辑有一些问题需要排查。当使用阿里云 LTSDK 整个过程不需要关心,SDK 已经实现,只需要把三元组丢给 SDK,SDK 会运算出来三个参数。

名字  值  报文流动方向 描述

CONNECT  1  Client-> Broker  device 连接 loT 平台

CONNACK  2  Broker-> Client  loT 平台确认连接结果

PUBLISH  3  双向  发布消息

PUBACK  4  双向  QoS=1消息发布收到确认

SUBSCRIBE  8  Client-> Broker device 订阅 loT 平台 Topic

SUBACK  9  Broker -> Client  loT 平台确认订阅结果

UNSUBSCRIBE  10  Client-> Broker  device取消订阅 loT 平台Topic

UNSUBACK  11  Broker -> Client  loT 平台确认取消订阅结果

PINGREQ  12  Client-> Broker  device 发送心跳请求到 loT 平台

PINGRESP  13  Broker -> Client  loT 平台响应 device 心跳

DISCONNECT  14  Client-> Broker  device 断开 loT 平台连接

包含连接的请求 connect 和connack,还有数据上报 publish puback,还有订阅消息的 subscribe ,suback 以及取消订阅的 unsubscribe,unsuback ,用于心跳的 pingreq、pingresp 以及主动断开连接的 disconnect。

image.png

Topic 可以里面查到,在产品的 topic 类型下面可以看到基础的通讯 topic、模型通讯topic,还可以自定义 topic 用来通讯。

(3)物模型(sys 开头系统 Topic)

物模型属性上报 Topic

/sys/(productKey}/{deviceName}/thing/event/property/post

物模型属性上报 payload 格式

{

"id": 3536123,  

"version": "1.0",

"params":{

"temperature": 23.7,

"humidity": 68

},

"method": "thing.event property.post"

}

loT 云端响应 replyTopic

/sys/{productKey}/{deviceName/thing/event/property/post_reply云端响应 payload 格式

{

"id": 3536123,

"code": 200,"

data":{}

}

当使用某一个具体的 topic,都会对应一个固定配套的格式。当使用系统开头的 topic,都会有一个固定的配套格式,需要通过文档来了解,如果使用自定义的 topic,可以完全按照自己的规则来定义配套的,不需要参考阿里云的规则,如果用系统的 topic,比如物联通讯一定要保证数据格式是一致的。当使用阿里云 SDK 的时候,整个数据格式的包装是不需要关心的,SDK 已经做了这一部分工作,这里是模型的一个属性,上报之后云端同样会响应一个给到设备端,告知设备端是否业务处理了。

(4)设备订阅 service 的 Topic

注意:服务订阅 Topic 这里不支持+通配符/sys/(productKey]/[deviceName}/thing/service/{tslserviceidentifier

loT 云端下行的 payload 格式

{

"id": 3536123

"version": "1.0",

"params":{

"入参 key1":"入参 value1"

"入参 key2":"入参 value2"

},

"method":"thing.service.{tsl.service.identifier}"

}

设备响应 replyTopic/sys/{productKey)/{deviceName}/thing/service/{tslservice.identifier)_reply

设备响应 payload 格式

{

"id": 3536123,

"code": 200,

"data": {

"出参 key1":"出参 value1"

"出参 key2":"出参 value2"

}

}

是物模型的服务,对于设备来说是订阅了一个服务的主题,云端一旦有人发起服务调用,设备端就可以收到的服务请求,可以做相应的处理,服务会包含入参和出参,在监听到云端指令的时候会收到云端给的执行入参,执行完成之后需要给云端一个 reply,服务执行的结果出参上报到云端。

设备上 报 pubTopic/sys/{productKey}/{deviceName}/thing/event/{tsl.event.identifier/post

设备上报 payload 格式

(

"id": 3536123,

"version":"1.0"

"params":{

"入参 key1":"入参 value1",

"入参 key2":"入参 value2"

},

"method":"thing.event.{tslevent.identifier}.post”

}  

loT 云端响应 replyTopic  

/sys/{productKey}/{deviceName}/thing/event/{tsleventidentifier}/postreply

云端响应 payload 格式  

{

"id": 3536123,

"code": 200,

"data": {}

}

如果是事件只有一个云端的上报,只包含入参没有返回值的,云端不会给设备返回值,但是云端会给设备端一个响应,是否收到事件或者告警。

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
1月前
|
物联网
STC51单片机-实验开发装置仿真-物联网应用系统设计
STC51单片机-实验开发装置仿真-物联网应用系统设计
77 0
|
1月前
|
存储 物联网 大数据
助力工业物联网,工业大数据之脚本开发【五】
助力工业物联网,工业大数据之脚本开发【五】
46 0
|
1月前
|
监控 物联网
LabVIEW开发基于物联网的多功能功率分析仪
LabVIEW开发基于物联网的多功能功率分析仪
26 2
|
1月前
|
传感器 机器学习/深度学习 算法
LabVIEW开发工业物联网状态监测
LabVIEW开发工业物联网状态监测
30 2
|
1月前
|
传感器 安全 物联网
C语言:物联网开发利器
C语言:物联网开发利器
|
1月前
|
传感器 存储 物联网
【C 言专栏】基于 C 语言的物联网开发
【5月更文挑战第6天】C 语言在物联网发展中扮演关键角色,适用于开发嵌入式系统、通信协议及云平台后端服务。其高效、灵活、可移植的特性适应资源有限的环境,确保设备兼容性。尽管开发挑战较大,如代码可读性,但借助辅助工具可改善。随着物联网技术进步,C 语言将持续发挥重要作用,塑造智能未来。
【C 言专栏】基于 C 语言的物联网开发
|
1月前
|
存储 安全 数据管理
构建智慧家庭的未来:物联网平台与智能家居系统的开发
在数字化时代,物联网平台和智能家居系统的开发日益受到关注。本文将探讨物联网平台和智能家居系统的定义、优势以及开发过程中的挑战与解决方案。通过对智能家居系统的构建和物联网平台的应用,我们可以实现更加智能、高效和安全的生活环境。
187 3
|
9天前
|
供应链 监控 物联网
未来技术的潮流:区块链、物联网与虚拟现实的融合与创新
【6月更文挑战第20天】在技术不断进步的时代,新兴技术如区块链、物联网(IoT)和虚拟现实(VR)正在逐渐改变我们的生活和工作方式。本文将深入探讨这些技术的发展趋势和应用场景,以及它们如何相互融合,创造出新的商业模式和用户体验。我们将看到,随着这些技术的成熟和应用,未来的世界将变得更加智能、互联和沉浸。
|
2天前
|
传感器 安全 物联网
物联网(IoT)设备的硬件选型与集成技术博文
【6月更文挑战第28天】物联网设备硬件选型与集成聚焦关键要素:功能匹配、性能稳定性、兼容扩展及成本效益。嵌入式系统、通信协议、数据处理和安全性技术确保集成效果,支撑高效、智能的IoT系统,驱动家居、城市与工业自动化变革。
|
2天前
|
供应链 物联网 区块链
新技术趋势与应用:探讨新兴技术如区块链、物联网、虚拟现实等的发展趋势和应用场景
在科技日新月异的今天,新兴技术的发展趋势和应用成为我们关注的焦点。本文将深入探讨区块链技术、物联网以及虚拟现实等新兴技术的发展趋势和应用场景。我们将从数据导向的角度出发,引用权威的研究和统计数据,科学严谨地分析这些技术的发展现状和未来前景。同时,我们也将逻辑严密地探讨这些技术在不同领域的实际应用,以期为读者提供一个全面而深入的理解。

相关产品

  • 物联网平台