写在前面: 最近开始熟悉了wifi模块介入MQTT协议的一些认证方法和通信格式,本篇主要介绍影子设备和Json文档。欢迎大家共同交流,QQ:993650814.
正文:
二、影子设备
1、影子设备就是一个Json文档,用于存储设备上报状态,或者应用端期望状态信息。
2、每个设备有且只有一个影子设备,设备可以通过MQTT获取和设置自己对应的影子设备以此来达到设备跟影子设备的同步。
3、应用端也可以通过获取或设置影子设备,来达到获取设备最新状态或者下发期望状态的作用。
三、设备影子数据流
1、物联网平台为为每个设备定义了两个Topic,来实现数据流转
(1)、topic/shadow/update/${productKey}/${deviceName} 设备和应用程序发送消息到此Topic,物联网平台收到消息后,会将消息中的状态更新到影子设备中。
(2)、topic/shadow/get/${productKey}/${deviceName} 设备影子更新状态到此Topic,设备订阅此Topic的消息后,就会收到此Topic发过来的消息。
2、下面以灯泡举例,productkey:10000;deviceName:lightbulb,设备以QoS=1发布订阅定义的两个Topic,举例说明设备、设
备影子以及应用程序之间的通信。
第一步、设备主动上报状态:
当灯泡联网后,设备使用Topic/shadow/update/10000/lightbulb上报最新消息到影子设备,Jason格式如下:
第二步、设备影子接收到灯泡上报的消息后,更新Jason文档
第三步,影子设备更新状态后,会返回结果给灯泡,发送消息到 topic /shadow/get/10000/lightbulb,灯泡订阅此Topic。
若更新成功,发送到Topic的消息为:
更新失败,发送到Topic的消息:
2、应用程序改变设备状态
第一步、 应用程序发送消息到 Topic /shadow/update/10000/lightbulb/
中,消息码流如下:
第二步、设备影子更新文档,为
第三步、设备影子更新完成后,交给消息发送到topic/shadow/get/10000/lightbulb
中,返回结果给设备。消息如下:
第四步、灯泡在线,并且订阅了topic/shadow/get/10000/lightbulb
,就会收到消息,并根据请求文档中desired的值更新状态,将灯泡颜色变成绿色。
第五步、更新完之后,发消息到topic/shadow/update/10000/lightbulb
中上报最新状态,消息如下:
第六步、上报状态成功后,设备影子会同步更新,此时的影子文档如下:
3、 设备主动获取影子设备内容
第一步、灯泡获取设备影子中保存的灯泡最新状态,发送固定消息到topic/shadow/update/10000/lightbulb
中,具体的消息如下:
第二步、当设备影子收到这条消息时,发送消息到topic/shadow/get/10000/lightbulb
中,灯泡订阅该topic,获得消息,消息内容如下: