如果开启高级版,推荐使用高级版物模型能力,已经提供了更完整的能力用于替代“设备影子”功能。

功能介绍

设备影子是一个JSON文档,用于存储设备上报状态、应用程序期望状态信息。

  • 每个设备有且只有一个设备影子,设备可以通过MQTT获取和设置设备影子以此来同步状态,该同步可以是影子同步给设备,也可以是设备同步给影子。
  • 应用程序通过物联网平台的SDK获取和设置设备影子,获取设备最新状态或者下发期望状态给设备。

SDK使用

版本需求

Aliyun IoT Python SDK version ≥ 1.1.0

主动更新影子

通过thing_update_shadow的接口可以更新影子状态

reported = {"color":"red"}
# reported - 上报的影子数据
# version - 影子数据的版本号,例子中为1
res = linkkit.thing_update_shadow(reported, 1)
if res == 0:
    print('success')
            

该接口主要异步化向云平台上报影子数据。

执行结果将异步返回,可以通过设置回调函数on_thing_shadow_get获得相关结果,范例如下:

linkkit.on_thing_shadow_get = on_thing_shadow_get

...

def on_thing_shadow_get(self, payload, userdata):
        print("on_thing_shadow_get:", payload)

            

如果影子设置成功,回调中payload对象数据如下:

{
"method": "reply",
"payload": {
    "status": "success",
    "version": 1
},
"timestamp": 1544686266
}
            

查询影子数据

通过thing_get_shadow的接口可以查询最新的影子数据,范例如下:

res = linkkit.thing_get_shadow()
if res == 0:
    print('success')
            

该接口主要异步化向云平台提交一个查询影子的请求,返回rc。rc为0标识请求成功,可以在异步的回调函数中关联该ID获取最终的结果。

执行结果将异步返回,可以通过设置回调函数on_thing_shadow_get获得相关结果,范例如下:

linkkit.on_thing_shadow_get = on_thing_shadow_get

...

def on_thing_shadow_get(self, payload, userdata):
        print("on_thing_shadow_get:", payload)

            

对于正确的get操作,异步返回的on_thing_shadow_get回调中payload对象数据范例如下:



{
    "method": "reply",
    "payload": {
        "status": "success",
        "state": {
            "reported": {
                "color": "red"
            }
        },
        "metadata": {
            "reported": {
                "color": {
                    "timestamp": 1544701176
                }
            }
        }
    },
    "timestamp": 1544784614,
    "version": 1
}

            

为了更方便的获取影子信息,SDK也会本地缓存一份/shadow/get/{pk}/{dn}topic里面的影子数据,可以通过local_get_latest_shadow来读取。

监听影子变更

  • 影子的作用是允许云端去更新影子desired状态,设备端可以通过设置回调函数。
  • on_thing_shadow_get获得desired状态的变更。
  • 执行结果将异步返回,可以通过设置回调函数on_thing_shadow_get获得相关结果,示例如下:
linkkit.on_thing_shadow_get = on_thing_shadow_get

...

def on_thing_shadow_get(self, payload, userdata):
        print("on_thing_shadow_get:", payload)

            

对于desired状态的变更,on_thing_shadow_get回调中payload对象数据示例如下:



{
    "method": "control",
    "payload": {
        "status": "success",
        "state": {
            "reported": {
                "color": "red"
            },
          "desired": {
              "color": "green"
           }
        },
        "metadata": {
            "reported": {
                "color": {
                    "timestamp": 1544701176
                }
            },
            "desired": {
                "color": {
                    "timestamp": 1544702121
                }
            }
        }
    },
    "timestamp": 1544702121,
    "version": 3
}