物联网平台提供的设备影子功能,用于缓存设备上报的状态和下发的指令。设备在线时,可以直接获取物联网平台指令;设备离线后,再次上线可以主动获取物联网平台的指令。本文介绍通过配置C Link SDK,设备实现影子功能。
前提条件
背景信息
- 设备影子是保存在物联网平台上的JSON文档,用于缓存设备上报属性(
reported
)数据和云上应用期望属性(desired
)数据。更多信息,请参见设备影子概览。
- 设备影子的JSON格式表达方法,请参见设备影子JSON详解。
- 设备影子的数据流转过程,请参见设备影子数据流。
使用流程
如下功能时序图,以设备的应用程序demos/shadow_basic_demo.c
为例,介绍设备影子的使用流程。
步骤一:设备初始化
创建设备句柄,完成设备建连。
static void* demo_device_init(char *product_key, char *device_name, char *device_secret, char *host, uint16_t port)
{
int32_t res = STATE_SUCCESS;
/* 创建设备 */
void *device = aiot_device_create(product_key, device_name);
....
....
res = aiot_device_connect(device);
....
....
return device;
}
步骤二:设置设备影子模块回调函数
/* 设置设备影子模块回调函数 */
aiot_device_shadow_set_callback(device, demo_shadow_recv_callback, NULL);
步骤三:上报状态到设备影子
使用如下示例代码上报状态到影子。
/* 更新设备影子中的reported值, 同时将version重置为0 */
aiot_device_shadow_update(device, "{\"LightSwitch\":1}", 0);
参数说明
参数 | 说明 |
| 设备句柄。 |
| 上报的影子属性状态。 |
| 设备影子的目标版本,版本号会随着更新影子增加。 |
步骤四:应用程序更新期望状态
接收应用状态。
/* 当设备在线时, 若用户应用程序调用云端API主动更新设备影子, 设备便会收到此消息 */ case AIOT_SHADOWRECV_CONTROL: { const aiot_shadow_recv_control_t *control = &recv->data.control; printf("payload = \"%.*s\", version = %ld\r\n", control->payload_len, control->payload, (unsigned long)control->version); } break;
上报最新状态。
/* 更新设备影子中的reported值, 同时将version重置为0 */ aiot_device_shadow_update(device, "{\"LightSwitch\":1}", 0);
设备清除期望属性。
/* 清除设备影子中的desired值, 同时将version设置为1 */ aiot_device_shadow_clean_desired(device, 1);
步骤五:获取设备影子属性
/* 发送请求拉取设备影子, 设备影子将在demo_shadow_recv_callback回调函数中返回 */
aiot_device_shadow_get(device);
步骤六:删除设备影子属性
/* 删除设备影子中特定的reported值, 同时将version设置为2 */
aiot_device_shadow_delete_reported(device, "{\"LightSwitch\":\"null\"}", 2);
步骤七:设备反初始化
/* 断开设备连接,并回收设备资源 */
demo_device_deinit(device);
文档内容是否对您有帮助?