时光清风 - 万物互联IoT-001 MQTT基本示例

万物互联IoT-001 MQTT基本示例

极速小旋风5年前问道7258

MQTT(Message Queuing Telemetry Transport Protocol)的全称是消息队列遥感传输协议的缩写,是一种基于轻量级代理的发布/订阅模式的消息传输协议,运行在TCP协议栈之上,为其提供有序、可靠、双向连接的网络连接保证。


发布/订阅的关系可以简单理解为:我订了一份人民日报,以后每一期的人民日报我都能读到,但是我没订中国日报,虽然中国日报在不断发行,但是我永远也读不到中国日报。你没订人民日报,你也永远读不到人民日报。假如有一天人民日报不再发行,虽然我订了人民日报,我也没法继续读到人民日报。(好像成了绕口令~~)。人民日报和读者的关系替换成智能设备和监控工具就行了。


MQTT的相关概念:

endpoint(实例)物接入IoT Hub的服务实例,每一个实例代表一个完整的物接入服务。

principal(身份)principal即身份,是一个抽象概念,表示连接设备(thing)的身份,基于身份可以对设备进行权限管理。每个设备thing可以绑定一个身份principal,每个身份principal拥有一个策略policy。

policy(策略)策略,表示每个身份对于对应设备所具备的权限,可以为身份principal设置对应的策略policy,一个principal对应一个policy。

topic(主题)每一个策略policy都需要指定一个主题topic,在进行使用物接入服务之前,需要先为我们即将开展的订阅发布信息创建一个主题名称,该主题应用于MQTT客户端。

找了几张图以方便理解:

IOT001-1.jpg

IOT001-2.jpg

IOT001-3.jpg

请注意:以上介绍纯粹是为了凑字数,关键内容在后面


以下以百度云物接入和物管理为例了解如何在云平台上监控设备。

物接入的目的是建立设备和云的关系,具体的数据传输和设备监控需要自己用SDK实现。

物管理的目的更进一步,虽然数据仍然需要自己传输,但是云平台提供了模型、影子、参数的管理方式,还提供了时序数据库。


物接入(IoT Hub)可以免费使用100万条/月。只需要创建实例,会自动生成TCP、SSL、WSS三种连接方式,接下来就是订阅、发布、数据传输了。

IOT001-4.jpg

先订阅

IOT001-5.jpg


然后发布一条数据试试

IOT001-6.jpg

回到订阅,可以看到已经接收到了数据

IOT001-7.jpg

中的QoS标志位代表含义:

  • QoS=0,协议对此等级应用信息不要求回应确认,也没有重发机制,这类信息可能会发生消息丢失或重复,取决于TCP/IP提供的尽最大努力交互的数据包服务。

  • 最少一次(At least once delivery):QoS=1,确保信息到达,但消息重复可能发生,发送者如果在指定时间内没有收到PUBACK控制报文,应用信息会被重新发送。

  • 仅仅一次(Exactlyonce delivery):QoS=2,最高级别的服务质量,消息丢失和重复都是不可接受的。

在云平台上可以看到订阅、发布信息量

IOT001-8.jpg

信息是默认不存储的。


物管理(IoT Device)功能更丰富,比如我要监控环境的温度、湿度、静电,可以通过以下步骤实现。

1.建立物模型,设置属性

IOT001-9.jpg

2.建立物影子

IOT001-10.jpg

其中的数据存储需要开通时序数据库TSDB(2元/月)


3.订阅


4.以JSON格式发布数据

IOT001-11.jpg

reported为可选字段,代表物影子中设备上报的最新状态。

desired为可选字段,代表控制端期望设备变换到的目标状态。

“profileVersion”为可选字段,当未指定profileVersion时,物管理接收设备影子更新请求后,会将profileVersion自动加1;若指定profileVersion,物管理会检查请求中的profileVersion是否大于当前的profileVersion。只有在大于的情况,物管理才会接受设备端的请求,更新设备影子,并将profileVersion更新到相应的版本。


5.在云平台上查看已接收到的订阅消息

IOT001-12.jpg

其中的数据来源于发布者,已经更新。


6.分析时序数据

可以在已经开通的TSDB上查看图表或导出数据

IOT001-13.jpg

7.更进一步的可以使用物可视(IoT Visualization)设计可视化结果

IOT001-14.jpg

(支持自动刷新)

相关文章

[AS005] Android 成语辞典查询小助手

[AS005] Android 成语辞典查询小助手

先看效果:原理:成语辞典,csv文件作为数据源->读取数据源转为实体类List->以实体类属性一作为判断依据,依次判断是否满足输入的查询条件->removeall不满足条件的List...

BTP-001 SAC

BTP-001 SAC

SAC analytic主要基于故事和模型,先后顺序是dataset-model-story-predictionstory提供了丰富的元素(即时可视)和模板所有类型的产出都以文件方式存在story可...

万物互联IoT-002 SDK实现订阅、发布

万物互联IoT-002 SDK实现订阅、发布

假设已经将智能设备接入了云平台(参考上一篇),如何通过SDK订阅、发布消息?只需要引用MQTT Client Library for M2M communication,然后using uPLibra...

AI-002 试用百度AI-车牌识别、人脸对比

AI-002 试用百度AI-车牌识别、人脸对比

车牌识别与上一篇文字识别类似,host参数不同注意:其中Encoding应改为UTF8,以识别中文字符效果:人脸对比也需要开通应用,但人脸识别相关的API可以无限免费调用效果:得分80以上可以认为是同...

安卓01-ZXing扫码功能

安卓01-ZXing扫码功能

ZXing是谷歌推出用于识别多种格式条形码的开源项目,使用起来非常方便。有这些包以后,只需要调用ZXing的activity然后再获得扫码内容,对内容进行自定义处理就行了。效果:扫描的参数都是可以调整...

[AS004]我给自己定了个位

[AS004]我给自己定了个位

用百度地图SDK->给自己定位->用webservice存起来->后台持续定位结果挺准的...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。