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
相关文章
|
3月前
|
物联网 区块链 vr&ar
未来已来:探索区块链、物联网与虚拟现实技术的融合与应用安卓与iOS开发中的跨平台框架选择
【8月更文挑战第30天】在科技的巨轮下,新技术不断涌现,引领着社会进步。本文将聚焦于当前最前沿的技术——区块链、物联网和虚拟现实,探讨它们各自的发展趋势及其在未来可能的应用场景。我们将从这些技术的基本定义出发,逐步深入到它们的相互作用和集成应用,最后展望它们如何共同塑造一个全新的数字生态系统。
|
2月前
|
物联网 C# C语言
物联网开发中C、C++和C#哪个更好用
在物联网(IoT)开发中,C、C++和C#各有优缺点,适用场景不同。C语言性能高、资源占用低,适合内存和计算能力有限的嵌入式系统,但开发复杂度高,易出错。C++支持面向对象编程,性能优秀,适用于复杂应用,但学习曲线陡峭,编译时间长。C#易于学习,与.NET框架结合紧密,适合快速开发Windows应用,但性能略低,平台支持有限。选择语言需根据具体项目需求、复杂性和团队技术栈综合考虑。
|
2月前
|
存储 传感器 物联网
结合物联网开发探讨C语言的变量
在物联网(IoT)开发中,C语言的变量起着至关重要的作用。由于物联网设备资源有限,C语言的高效性和对硬件的直接控制使其成为开发嵌入式系统的首选。
|
2月前
|
传感器 安全 物联网
物联网安全实战:保护你的智能设备免受攻击
【9月更文挑战第3天】物联网安全是一项复杂而艰巨的任务,需要我们共同努力来应对。通过采取上述实战措施,我们可以有效保护智能设备免受攻击,保障用户的数据隐私和网络安全。在未来的物联网发展中,我们将继续面临新的安全挑战和威胁,但只要我们保持警惕和不断创新,就一定能够构建一个更加安全、可靠的物联网生态系统。
|
4月前
|
安全 物联网 区块链
云端防御:云计算时代的网络安全策略与实战《未来已来:探索区块链、物联网与虚拟现实的融合革新》
【7月更文挑战第31天】在数字化转型的浪潮中,云计算已成为推动企业增长的核心动力。然而,随着数据和应用逐渐迁移到云端,网络安全问题也愈发严峻。本文将探讨云计算环境中的安全挑战,并提出相应的防御策略。通过分析云服务模型、安全威胁及信息安全技术的应用,结合代码示例,本文旨在为读者提供一套实用的云端安全防护方案。
48 1
|
6月前
|
监控 物联网
LabVIEW开发基于物联网的多功能功率分析仪
LabVIEW开发基于物联网的多功能功率分析仪
48 2
|
6月前
|
传感器 机器学习/深度学习 算法
LabVIEW开发工业物联网状态监测
LabVIEW开发工业物联网状态监测
69 2
|
6月前
|
传感器 安全 物联网
C语言:物联网开发利器
C语言:物联网开发利器
|
19天前
|
存储 供应链 物联网
探索未来:区块链、物联网与虚拟现实技术的融合与创新
【10月更文挑战第15天】本文深入探讨了新兴技术如区块链、物联网(IoT)和虚拟现实(VR)的发展趋势及其在现代社会的应用。通过分析这些技术的独特属性和它们如何相互补充,我们揭示了一个由高度互联、智能化和沉浸式体验定义的未来图景。文章不仅讨论了这些技术当前的挑战,还展望了它们在未来可能带来的转变,旨在为读者提供对这些令人兴奋的技术趋势的全面理解。
|
19天前
|
安全 物联网 区块链
未来已来:探索区块链技术、物联网与虚拟现实的融合趋势
【10月更文挑战第15天】 在数字化浪潮中,区块链、物联网(IoT)和虚拟现实(VR)技术正引领着一场革命。本文将深入探讨这三种技术的发展趋势和相互融合的潜力,以及它们如何共同塑造我们的未来。我们将从基本概念入手,逐步揭示这些技术如何影响经济、社会和日常生活,同时提供具体应用场景以展示其变革力量。

相关产品

  • 物联网平台