本系列主要目的在于记录腾讯云物联网设备端的学习笔记,并且对设备端SDK进行补充说明。
数据模板相关概念,请参见数据模板
数据模板功能实现,请参见数据模板功能及实现
以下介绍如何基于数据模板进行应用开发,主要包括数据模板代码化、下行数据处理、上行数据上报。
源码请参见:
https://github.com/xyfancy/iot-hub-device-c-sdk/tree/master/app/data_template
核心思想:将数据模板定义转换成相应的C代码数据类型,比如整数型->int,提供通用的接口根据索引访问(该实现处于beta版本,后续采用脚本自动化生成)。
源码:data_template_config.c 和 data_template_config.h
以灯开关属性为例:
1.初始化
属性包括:
struct DataTemplateProperty {
DataTemplatePropertyType type;
const char* key;
DataTemplatePropertyValue value;
int need_report;
};
根据控制台上数据模板的定义,初始化开关属性:
sg_usr_data_template_property[USR_PROPERTY_INDEX_POWER_SWITCH].value.value_bool = 0;
sg_usr_data_template_property[USR_PROPERTY_INDEX_POWER_SWITCH].key = "power_switch";
sg_usr_data_template_property[USR_PROPERTY_INDEX_POWER_SWITCH].type = DATA_TEMPLATE_TYPE_BOOL;
sg_usr_data_template_property[USR_PROPERTY_INDEX_POWER_SWITCH].need_report = 1;
2.接口调用
通过将数据模板建立索引,通过索引进行访问相应的数据模板
typedef enum {
USR_PROPERTY_INDEX_POWER_SWITCH = 0, // 开关索引
USR_PROPERTY_INDEX_COLOR,
USR_PROPERTY_INDEX_BRIGHTNESS,
USR_PROPERTY_INDEX_NAME,
USR_PROPERTY_INDEX_POSITION,
USR_PROPERTY_INDEX_POWER,
} UsrPropertyIndex;
//初始化
void usr_data_template_init(void);
//获取非结构体类型的数据模板值
DataTemplatePropertyValue usr_data_template_property_value_get(UsrPropertyIndex index);
//设置非结构体类型的数据模板值
void usr_data_template_property_value_set(UsrPropertyIndex index, DataTemplatePropertyValue value);
//获取结构体类型的数据模板值
DataTemplatePropertyValue usr_data_template_property_struct_value_get(UsrPropertyIndex struct_index,
int property_index);
//设置结构体类型的数据模板值
void usr_data_template_property_struct_value_set(UsrPropertyIndex struct_index, int property_index,
DataTemplatePropertyValue value);
//获取行为中输入参数的数据模板值
DataTemplatePropertyValue usr_data_template_action_input_value_get(UsrActionIndex index, int property_index);
// 通过解析control或者get_status中control消息中的params设置相应的属性
void usr_data_template_property_parse(UtilsJsonValue params);
// 上报所有需要上报的属性,need_report为1
int usr_data_template_property_report(void* client, char* buf, int buf_len);
// 上报事件,此处用户自行构造json,灵活度更高
void usr_data_template_event_post(void* client, char* buf, int buf_len, UsrEventIndex id, const char* params);
// 通过解析action消息中的输入参数设置相应的属性
int usr_data_template_action_parse(UtilsJsonValue action_id, UtilsJsonValue params, UsrActionIndex* index);
// 行为的回复
int usr_data_template_action_reply(void* client, char* buf, int buf_len, UsrActionIndex index,
UtilsJsonValue client_token, int code, const char* response);
下行数据主要包括:
上线行数据主要包括:
本文提供的方法针对以往的业务进行总结设计,有以下限制,请根据业务进行修改:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。