请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:LP-EM-CC2340R53 Thread 中讨论的其他器件:UNIFLASH、 SYSCONFIG
工具/软件:
您好、Ryan
根据 定制门锁的标准实例、全部执行了步骤 1 至 3。 但是、我没有看到步骤 4 的效果。 我想查看请求日志、其中包括锁的信标。 请帮助我检查哪个步骤出错。
使用的协调器是 onoff_light 的一个实例。
车门锁的实例代码如下:
/****** Application variables declarations ******/ zb_uint16_t g_dst_addr; zb_uint8_t g_addr_mode; zb_uint8_t g_endpoint; zb_bool_t perform_factory_reset = ZB_FALSE; zb_bool_t cmd_in_progress = ZB_FALSE; /****** Application function declarations ******/ /* Handler for specific ZCL commands */ zb_uint8_t zcl_specific_cluster_cmd_handler(zb_uint8_t param); void test_device_interface_cb(zb_uint8_t param); void send_toggle_req(zb_uint8_t param); void button_press_handler(zb_uint8_t param); void send_lock_req(zb_uint8_t param, zb_uint8_t lock_or_unlock); /****** Cluster declarations ******/ // THIS CODE REPLACES IT /* Door Lock cluster attributes data */ zb_uint8_t g_attr_door_lock_lock_state = 0; zb_uint8_t g_attr_door_lock_lock_type = 0; zb_bool_t g_attr_door_lock_actuator_enabled = ZB_FALSE; ZB_ZCL_DECLARE_DOOR_LOCK_ATTRIB_LIST(door_lock_attr_list, &g_attr_door_lock_lock_state, &g_attr_door_lock_lock_type, &g_attr_door_lock_actuator_enabled); /* Basic cluster attributes */ zb_uint8_t g_attr_zcl_version = ZB_ZCL_BASIC_ZCL_VERSION_DEFAULT_VALUE; zb_uint8_t g_attr_power_source = ZB_ZCL_BASIC_POWER_SOURCE_DEFAULT_VALUE; ZB_ZCL_DECLARE_BASIC_ATTRIB_LIST(basic_attr_list, &g_attr_zcl_version, &g_attr_power_source); /* Identify cluster attributes */ zb_uint16_t g_attr_identify_time = ZB_ZCL_IDENTIFY_IDENTIFY_TIME_DEFAULT_VALUE; ZB_ZCL_DECLARE_IDENTIFY_ATTRIB_LIST(identify_attr_list, &g_attr_identify_time); /* Groups cluster attributes */ zb_uint8_t g_attr_name_support = 0; ZB_ZCL_DECLARE_GROUPS_ATTRIB_LIST(groups_attr_list, &g_attr_name_support); #ifdef ZB_ZCL_SUPPORT_CLUSTER_SCENES /* Scenes cluster attributes */ zb_uint8_t g_attr_scenes_scene_count = ZB_ZCL_SCENES_SCENE_COUNT_DEFAULT_VALUE; zb_uint8_t g_attr_scenes_current_scene = ZB_ZCL_SCENES_CURRENT_SCENE_DEFAULT_VALUE; zb_uint16_t g_attr_scenes_current_group = ZB_ZCL_SCENES_CURRENT_GROUP_DEFAULT_VALUE; zb_uint8_t g_attr_scenes_scene_valid = ZB_ZCL_SCENES_SCENE_VALID_DEFAULT_VALUE; zb_uint16_t g_attr_scenes_name_support = ZB_ZCL_SCENES_NAME_SUPPORT_DEFAULT_VALUE; ZB_ZCL_DECLARE_SCENES_ATTRIB_LIST(scenes_attr_list, &g_attr_scenes_scene_count, &g_attr_scenes_current_scene, &g_attr_scenes_current_group, &g_attr_scenes_scene_valid, &g_attr_scenes_name_support); #else zb_zcl_attr_t scenes_attr_list[] = { ZB_ZCL_NULL_ID, 0, 0, NULL }; #endif /* Declare cluster list for the device */ ZB_HA_DECLARE_DOOR_LOCK_CLUSTER_LIST(door_lock_clusters, door_lock_attr_list, basic_attr_list, identify_attr_list, groups_attr_list, scenes_attr_list); ZB_HA_DECLARE_DOOR_LOCK_EP(door_lock_ep, ZB_OUTPUT_ENDPOINT, door_lock_clusters); ZB_HA_DECLARE_DOOR_LOCK_CTX(device_ctx, door_lock_ep); static zb_bool_t error_ind_handler(zb_uint8_t severity, zb_ret_t error_code, void *additional_info); /* test_device_interface_cb */ case ZB_ZCL_DOOR_LOCK_LOCK_DOOR_CB_ID: { zb_uint8_t lock_state = ZB_ZCL_ATTR_DOOR_LOCK_LOCK_STATE_LOCKED; uart2_printf("Lock the door"); ZVUNUSED(zb_zcl_set_attr_val(ZB_OUTPUT_ENDPOINT, ZB_ZCL_CLUSTER_ID_DOOR_LOCK, ZB_ZCL_CLUSTER_SERVER_ROLE, ZB_ZCL_ATTR_DOOR_LOCK_LOCK_STATE_ID, &lock_state, ZB_FALSE)); zb_osif_led_on(0); } break; case ZB_ZCL_DOOR_LOCK_UNLOCK_DOOR_CB_ID: { zb_uint8_t lock_state = ZB_ZCL_ATTR_DOOR_LOCK_LOCK_STATE_UNLOCKED; uart2_printf("Unlock the door"); ZVUNUSED(zb_zcl_set_attr_val(ZB_OUTPUT_ENDPOINT, ZB_ZCL_CLUSTER_ID_DOOR_LOCK, ZB_ZCL_CLUSTER_SERVER_ROLE, ZB_ZCL_ATTR_DOOR_LOCK_LOCK_STATE_ID, &lock_state, ZB_FALSE)); zb_osif_led_off(0); } break; /* in button_press_handler add */ void button_press_handler(zb_uint8_t param) { ZVUNUSED(param); uart2_printf("button is pressed, do nothing\r\n"); if (!param) { /* Button is pressed, gets buffer for outgoing command */ zb_buf_get_out_delayed(button_press_handler); } else { user_print("button_press_handler %d\r\n", param); // send_toggle_req(param); send_lock_req(param, ZB_ZCL_CMD_DOOR_LOCK_LOCK_ID); #ifndef ZB_USE_BUTTONS /* Do not have buttons in simulator - just start periodic on/off sending */ ZB_SCHEDULE_APP_ALARM(button_press_handler, 0, 7 * ZB_TIME_ONE_SECOND); #endif } } /*send lock message*/ void send_lock_req(zb_uint8_t param, zb_uint8_t lock_or_unlock) { zb_uint16_t addr = 0; ZB_ASSERT(param); if (ZB_JOINED() ) // && !cmd_in_progress { cmd_in_progress = ZB_TRUE; user_print("send_lock_req %d - sending %s command\r\n", param, "LOCK" ); /* Send Door Lock command via binding (destination unknown) */ // ZB_ZCL_DOOR_LOCK_SEND_LOCK_DOOR_REQ ZB_ZCL_DOOR_LOCK_SEND_LOCK_DOOR_REQ( param, addr, ZB_APS_ADDR_MODE_DST_ADDR_ENDP_NOT_PRESENT, 0, // no addr/endpoint needed because using binding ZB_SWITCH_ENDPOINT, // source endpoint ZB_FALSE, // no default response NULL); // command: 0x00 = LOCK, 0x01 = UNLOCK } else { user_print("send_lock_req %d - not joined or busy\r\n", param); zb_buf_free(param); } }
以下是请求的日志。


此致、
Yongjian
Yongjian