更新时间:2024-11-20 08:51:25下载pdf
当增加情景时,保存用户自定义数据,调用情景时读取该数据给用户,网络收到增加场景命令时调用 dev_scene_add_callback
接口。
static uint8_t g_onoff_status = 0; //假定代表开关状态
void dev_scene_add_callback(uint8_t endpoint, uint8_t *out_data, uint8_t *in_out_len)
{
out_data[0] = g_onoff_status;
*in_out_len = 1;
//TODO:保存设备状态,增加场景时调用该函数
}
void dev_scene_recall_callback(uint8_t endpoint, const scene_save_data_t *in_data)
{
//TODO:执行场景
switch(in_data->type) {
case SCENE_DATA_TYPE_USER_DEFINE: {
if(in_data->data[0] == 1) {
g_onoff_status = 1;
//TODO:执行开
}
else if(in_data->data[0] == 0) {
g_onoff_status = 1;
//TODO:执行关
}
break;
}
default: {
break;
}
}
return;
}
对于设备是一个场景面板,而不是是执行设备时,需要如下特殊操作。
添加场景之前是否移除 endpoint 下所有场景, 用于场景开关添加场景时使用,返回 FALSE
代表不移除所有, 返回 TRUE
代表移除所有,默认返回 FALSE
。
bool_t zigbee_sdk_scene_remove_before_add(uint8_t endpoint)
{
return TRUE; //场景面板需要实现固定返回TRUE
}
场景开关需要 recall scene
时使用 dev_scene_recall_send_command
接口:
bool_t devGetSceneCallback(uint16_t endpoint, uint16_t* groupId, uint8_t* sceneId);
bool_t dev_scene_recall_send_command(uint8_t endpoint, uint16_t groupId, uint8_t sceneId);
static void __scene_panel_demo(void)
{
bool_t result = FALSE;
uint16_t group_id = 0;
uint8_t scene_id = 0;
result = devGetSceneCallback(1, &group_id, &scene_id); ///< 获取 endpoint=1 的场景 id 和组 id
if(result) {
dev_scene_recall_send_command(1, group_id, scene_id); ///< 发送 endpoint=1 的场景
}
}
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈