更新时间:2024-11-20 08:51:24下载pdf
Zigbee 设备创建和对应的网络行为是密不可分的,这部分需要您实现 dev_power_on_init()
。
Zigbee 路由设备的创建,以一个继电器开关为例:
const attr_t g_group_attr_list[] = {
GROUP_ATTR_LIST
};
const attr_t g_scene_attr_list[] = {
SCENE_ATTR_LIST
};
#define ON_OFF_PRIVATE_ATTR_LIST \
{ 0x0000, ATTR_BOOLEAN_ATTRIBUTE_TYPE, 1, (ATTR_MASK_TOKEN_FAST), (uint8_t*)0x00 }, \
const attr_t g_light_attr_list[] = {
ON_OFF_PRIVATE_ATTR_LIST
};
const cluster_t g_server_cluster_id[] = {
DEF_CLUSTER_GROUPS_CLUSTER_ID(g_group_attr_list)
DEF_CLUSTER_SCENES_CLUSTER_ID(g_scene_attr_list)
DEF_CLUSTER_ON_OFF_CLUSTER_ID(g_light_attr_list)
};
#define SERVER_CLUSTER_LEN get_array_len(g_server_cluster_id)
/**
* @note 代表一个ON_OFF_LIGHT 设备,1个endpoint,
* 支持 Server端 group、scene、onoff cluster。
* 分别支持GROUP_ATTR_LIST、SCENE_ATTR_LIST、ON_OFF_PRIVATE_ATTR_LIST属性
*/
const dev_description_t g_dev_des[] = {
{ 0x01, ZHA_PROFILE_ID, ZG_DEVICE_ID_ON_OFF_LIGHT, SERVER_CLUSTER_LEN, (cluster_t *)&g_server_cluster_id[0], 0, NULL},
};
void dev_power_on_init(void)
{
zg_dev_config_t g_zg_dev_config;
join_config_t cfg;
/**
* @note 描述是一个什么设备,多少 endpoint,每个 endpoint 有什么 cluster 和 attributes。
*/
dev_register_zg_ep_infor((dev_description_t *)g_dev_des, EP_SUMS);
/**
* @note 把 Zigbee 设备设置配成一个路由设备。
*/
memset(&g_zg_dev_config, 0, sizeof(zg_dev_config_t));
g_zg_dev_config.dev_type = ZG_ROUTER;
dev_register_zg_dev_config(&g_zg_dev_config);
/**
* @note 配置上电或者远程删除后立即进入组网状态,组网超时1分钟。
*/
memset(&cfg, 0, sizeof(cfg));
cfg.auto_join_power_on_flag = TRUE;
cfg.auto_join_remote_leave_flag = TRUE;
cfg.join_timeout = 60000;
dev_zg_join_config(&cfg);
return;
}
Zigbee 低功耗设备的创建,以一个单火开关为例:
#define ON_OFF_PRIVATE_ATTR_LIST \
{ 0x0000, ATTR_BOOLEAN_ATTRIBUTE_TYPE, 1, (ATTR_MASK_TOKEN_FAST), (uint8_t*)0x00 }, \
const attr_t g_light_attr_list[] = {
ON_OFF_PRIVATE_ATTR_LIST
};
const cluster_t g_server_cluster_id[] = {
DEF_CLUSTER_ON_OFF_CLUSTER_ID(g_light_attr_list)
};
#define SERVER_CLUSTER_LEN get_array_len(g_server_cluster_id)
/**
* @note 代表一个ON_OFF_LIGHT 设备,1个endpoint,
* 仅仅支持 Server端 onoff cluster。同时也支持ON_OFF_PRIVATE_ATTR_LIST属性
*/
const dev_description_t g_dev_des[] = {
{ 0x01, ZHA_PROFILE_ID, ZG_DEVICE_ID_ON_OFF_LIGHT, SERVER_CLUSTER_LEN, (cluster_t *)&g_server_cluster_id[0], 0, NULL},
};
void dev_power_on_init(void)
{
zg_dev_config_t zg_dev_config;
join_config_t cfg;
/**
* @note 描述是一个什么设备,多少 endpoint,每个 endpoint 有什么 cluster 和 attributes。
*/
dev_register_zg_ep_infor((dev_description_t *)g_dev_des, EP_SUMS);
/**
* @note 把 Zigbee 设备设置配成一个路由设备。
*/
memset(&zg_dev_config, 0, sizeof(zg_dev_config_t));
zg_dev_config.dev_type = ZG_SLEEPY_END_DEVICE;
zg_dev_config.config.sleep_dev_cfg.poll_conifg.poll_failed_times = 3; ///< 3次poll失败后进入NET_LOST状态(父节点失联)
zg_dev_config.config.sleep_dev_cfg.poll_conifg.poll_forever_flag = TRUE; ///< 设备保持poll
zg_dev_config.config.sleep_dev_cfg.poll_conifg.poll_interval = 250; ///< poll间隔是250ms
zg_dev_config.config.sleep_dev_cfg.poll_conifg.wait_app_ack_time = 1000; ///< 发送应用数据后跟(2+wait_app_ack_time/poll_interval)个poll,对poll_forever_flag为FALSE有效
zg_dev_config.config.sleep_dev_cfg.rejoin_config.auto_rejoin_send_data = TRUE; ///< 当发送数据失败后自动rejoin
zg_dev_config.config.sleep_dev_cfg.rejoin_config.next_rejoin_time = 5000; ///< 这次rejoin失败后,过5s后再进行下次rejoin
zg_dev_config.config.sleep_dev_cfg.rejoin_config.power_on_auto_rejoin_flag = TRUE; ///< 程序启动后自动rejoin
zg_dev_config.config.sleep_dev_cfg.rejoin_config.rejoin_try_times = 5; ///< 一次rejoin尝试的beacon request的次数
zg_dev_config.config.sleep_dev_cfg.rejoin_config.wake_up_time_after_join = 30000; ///< 组网成功后poll持续的时间,对poll_forever_flag为FALSE有效
zg_dev_config.config.sleep_dev_cfg.rejoin_config.wake_up_time_after_rejoin = 5000; ///< rejoin成功后poll持续的时间,对poll_forever_flag为FALSE有效
zg_dev_config.beacon_send_interval_for_join = 300; ///< 组网发送beacon request的间隔
zg_dev_config.beacon_send_interval_for_rejoin = 300; ///< 尝试rejoin 时,发送beacon request的间隔
zg_dev_config.zb_scan_duration = ZB_SCAN_DURATION_3; ///< 发送beacon request后持续接收的时间
dev_register_zg_dev_config(&zg_dev_config);
/**
* @note 配置上电不进行自组网,远程删除后自动组网,组网超时1分钟。
*/
memset(&cfg, 0, sizeof(cfg));
cfg.auto_join_power_on_flag = FALSE;
cfg.auto_join_remote_leave_flag = TRUE;
cfg.join_timeout = 60000;
dev_zg_join_config(&cfg);
return;
}
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈