文档中心 物联网通信 快速入门 场景二:设备状态上报与状态设置

场景二:设备状态上报与状态设置

最近更新时间:2019-08-28 19:30:22

操作场景

假设一个智能家居的场景(非实际产品,仅用于阐述物联网通信功能),如果需实现设置设备及上报设备情况,本文档指导您如何设置设备目标温度和设备上报状态信息。

shadow_get_update

设置设备目标温度

解决方案

update_shadow
管理后台通过物联网通信提供的云 API 接口,更新设备影子的配置属性,设备注册相关属性和关联对应的回调函数执行本地配置更新处理。
通过云 API 操作设备影子的相关接口案例实现,请下载 iotcloud_RestAPI_python.zip,用户需根据《 RestAPI 操作说明》配置个人信息。通过修改 RestAPI 文件夹下 airConditionerCtrl.py 参数实现自定义功能。

C-SDK 操作步骤

程序实现

  1. 设备影子相关使用 sample/scenarized/aircond_shadow_sample_v2.c 的代码逻辑。它在 sample/scenarized/aircond_shadow_sample.c 添加如下逻辑:
  2. 作为样例,SDK 内部调用 IOT_Shadow_Register_Property 对 shadow 的配置类属性和回调函数进行绑定。当 shadow 有该属性的配置变更时候,SDK 底层会执行相应的回调处理。这里注册了 shadow 里面 “temperatureDesire” 字段,意味着当 app 对设备影子设置目标温度的时候,能通过回调函数更正本地的配置数据,调整期望温度。用户可实现自定义的配置型属性监听和回调绑定。
    rc = _register_config_shadow_property();

程序编译与执行

  1. 在 SDK 程序根目录下执行 make,编译得到 aircond_shadow_sample_v2 可执行程序。
  2. 在目录 ./output/release/bin 下执行 ./aircond_shadow_sample_v2,注意如果用 MQTT 非对称加密方式,请保证根证书、设备证书和设备密钥文件在 ../../certs 上层目录下。
  3. 在目录 ./output/release/bin 下执行 ./door_mqtt_sample come_home airConditioner1,让 airConditioner 处于运作状态。
     INF|2018-01-11 20:52:50|aircond_shadow_sample_v2.c|main(377): Cloud Device Construct Success
     INF|2018-01-11 20:52:50|aircond_shadow_sample_v2.c|main(389): Cloud Device Register Delta Success
  4. 调用 restAPI 模拟家电管理后台发布目标温度配置,具体操作详见发布设备目标温度配置,同时观察示例程序输出日志:

从输出的日志中,可以看到on_temperature_actuate_callback函数被调用,表示收到 shadow 下发的 delta topic,然后执行更新本地的设定温度操作 modify desire temperature to: 10.000000

    INF|2018-01-11 21:04:31|aircond_shadow_sample_v2.c|on_temperature_actuate_callback(181): actuate callback jsonString=10},"desired":{"temperatureDesire":10},"reported":{"energyConsumption":0.0}},"timestamp":1515675847609,"version":5},"result":0,"timestamp":1515675871,"type":"get"}|dataLen=2
    INF|2018-01-11 21:04:31|aircond_shadow_sample_v2.c|on_temperature_actuate_callback(184): modify desire temperature to: 10.000000
    INF|2018-01-11 21:04:31|aircond_shadow_sample_v2.c|on_request_handler(123): Method=GET|Ack=ACK_ACCEPTED
    INF|2018-01-11 21:04:31|aircond_shadow_sample_v2.c|on_request_handler(124): received jsonString={"clientToken":"EJSKHKIS1M-0","payload":{"metadata":{"delta":{"temperatureDesire":{"timestamp":1515675847609}},"desired":{"temperatureDesire":{"timestamp":1515675847609}},"reported":{"energyConsumption":{"timestamp":1515674881485}}},"state":{"delta":{"temperatureDesire":10},"desired":{"temperatureDesire":10},"reported":{"energyConsumption":0.0}},"timestamp":1515675847609,"version":5},"result":0,"timestamp":1515675871,"type":"get"}

从上面 airConditioner1 输出日志,可见配置操作生效,airConditioner 调节本地的配置温度。

Android-SDK 操作步骤

程序实现

com/qcloud/iot/samples/shadow/ShadowSample.java 是设备影子类,主要功能有:

  1. 建立 Shadow 连接:connect(),内部调用 TXShadowConnect 的 connect() 接口。
  2. 断开 Shadow 连接:closeConnect(),内部调用 TXShadowConnection 的 disconnect() 接口。
  3. 注册设备属性:registerProperty(),内部调用 TXShadowConnection 的 registerProperty() 接口。
  4. 获取设备影子:getDeviceShadow(), 内部调用 TXShadowConnection 的 get() 接口。
  5. 定时更新设备影子:loop(),内部调用 TXShadowConnection 的 update() 接口。

程序编译与执行

在运行 App 前,请先填入之前创建产品和设备步骤中得到的 PRODUCT_ID, DEVICE_NAMEDEVICE_CERT_NAMEDEVICE_KEY_NAME,并将设备证书、设备私钥文件放置在 assets 目录中:

  1. 填入设备相关信息后,即可运行 Demo,单击 Android Studio Run 【App】 按钮安装运行 Demo。
  2. 切换底部 Tab 到设备影子 Fragment,便可操作 Shadow 相关功能。
  3. 各功能均有对应的操作按钮,单击相应按钮,观察 Demo 及 logcat 日志输出。
  4. restAPI 接口操作说明,若为发布目标温度配置详见 发布目标温度配置;若为查询获取设备信息详见 查询获取设备信息

发布目标温度配置

调用 restAPI 接口 UpdateDeviceShadow 模拟家电管理后台发布目标温度配置,
restAPI 请求参数:deviceName=airConditioner1, state={"desired" : {"temperatureDesire": 10}}, productName=AirConditioner, 期望调整控制温度为 10°。

设备上报状态信息

解决方案

get_device_shadow
设备通过上报自身状态数据到设备影子,家电管理后台通过 restAPI 接口直接从设备影子获取数据。

C-SDK 操作步骤

程序实现

作为样例,SDK 代码 sample/scenarized/aircond_shadow_sample_v2.c 里面,通过下面函数调用 IOT_Shadow_Update 对能耗状态上报到设备影子。并且注册相应的回调函数处理设备影子的回应。用户可在此自定义上报属性。

_do_report_energy_consumption(...)
...
IOT_Shadow_Update(...)

程序编译与执行

  1. 执行 ./aircond_shadow_sample_v2,注意如果用 MQTT 非对称加密方式,请保证根证书和设备证书和设备密钥文件在 ../../certs 上层目录下。
  2. 调用 restAPI 相关接口获取 shadow 的状态数据,具体操作详见“查询获取设备信息”,同时观察示例程序输出日志:
    get_device_shadow_v1
  3. 执行 ./door_mqtt_sample come_home/leave_home airConditioner1,door1 与 airConditioner1 通信通过规则引擎驱动 airConditioner1 开启运作。能从日志观察能耗和室温相关的上报变化,再次通过 restAPI 获取 shadow 数(具体操作如第2步所示):
    get_device_shadow_v2

可见当 airConditioner1 运作后,空调能耗被动态上报到了 shadow 中,可顺利通过 restAPI 查询获取数据。

Android-SDK 操作步骤

程序实现

请参照 Android-SDK 操作步骤 - 程序实现 中功能说明。

程序编译与执行

请参照 Android-SDK 操作步骤 - 程序编译与执行 中功能说明。

查询获取设备信息

调用 restAPI 接口 GetDeviceShadow 可获取到 shadow 的状态数据,用于 app 展示设备能耗状态。
restAPI 请求参数:deviceName=airConditioner1, productName=AirConditioner