什么是设备影子?
物联网平台提供设备影子功能,用于缓存设备状态。设备在线时,可以直接获取云端指令;设备离线后,再次上线可以主动拉取云端指令。
设备影子是一个 JSON 文档,用于存储设备上报状态、应用程序期望状态信息。
每个设备有且只有一个设备影子,设备可以通过MQTT获取和设置设备影子来同步状态,该同步可以是影子同步给设备,也可以是设备同步给影子。
应用场景
- 1、网络不稳定,设备频繁上下线
使用设备影子机制存储设备最新状态,一旦设备状态产生变化,设备会将状态同步到设备影子。应用程序在请求设备当前状态时,只需要获取影子中的状态即可,不需要关心设备是否在线 - 2、场景2:多程序同时请求获取设备状态
使用设备影子机制,设备只需要主动同步状态给设备影子一次,多个应用程序请求设备影子获取设备状态,即可获取设备最新状态,做到应用程序和设备的解耦 - 3、场景3:设备掉线
- 设备网络不稳定,导致设备频繁上下线,应用程序发送控制指令给设备时,设备掉线,指令无法下达到设备。
- 设备真实掉线,指令发送失败。设备再上线时,设备影子功能通过指令加时间戳的模式,保证设备不会执行过期指令。
云端获取期望属性值
云端获取设备影子需要使用云端开发的SDK,这里我们使用的是python SDK中的QueryDeviceDesiredProperty,其中set_Identifiers传入的是一个数组,由需要查看的属性的标识符组成。
#!/usr/bin/env python
#coding=utf-8
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkiot.request.v20180120.QueryDeviceDesiredPropertyRequest import QueryDeviceDesiredPropertyRequest
client = AcsClient('*************', '*************R', 'cn-shanghai')
request = QueryDeviceDesiredPropertyRequest()
request.set_accept_format('json')
# request.set_IotId("IotId")
request.set_DeviceName("*************")
request.set_ProductKey("*************")
request.set_Identifiers(["deviceswitch",])
response = client.do_action_with_exception(request)
# python2: print(response)
print(response)

Version:4代表了当前设备影子的版本经过了几次更新或者上报
新建设备的最新属性值和期望属性值都为null,期望属性值版本为0
云端期望属性值的设置
在进行期望属性值设置之前,首先要通过期望属性值的查询,获取到当前设备影子的版本号,在设置属性值的参数中需要填写。
#!/usr/bin/env python
#coding=utf-8
from aliyunsdkcore.client import AcsClient
from

最低0.47元/天 解锁文章
738

被折叠的 条评论
为什么被折叠?



