This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2340R5:如何为 3 组智能交换机声明多个端点

Guru**** 2392905 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1535280/cc2340r5-how-to-declare-multiple-endpoints-for-a-3-gang-smart-switch

器件型号:CC2340R5

工具/软件:

我正在构建一个 3 组智能开关、这意味着它控制三 个不同的输出、我假设使用 ON_OFF_OUTPUT 集群控制不同的 3 个输出、然后我将具有 3 个不同的端点、每个输出一个。 但是根据 ZBOSS 文档、我最多可以做 1 个端点、如何处理此类问题或者是否有任何其他解决方法?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Abdelrahman:

    可以使用多个端点、下面是我对 onoff_light 进行的一些更改/添加:

    #define ZB_LOCK_ENDPOINT            11
    //...
    ZB_HA_DECLARE_DOOR_LOCK_CONTROLLER_CLUSTER_LIST(door_lock_controller_clusters,
                                                    basic_attr_list,
                                                    identify_attr_list);
    ZB_HA_DECLARE_DOOR_LOCK_CONTROLLER_EP(door_lock_controller_ep, ZB_LOCK_ENDPOINT, door_lock_controller_clusters);
    
    /* Declare application's device context for single-endpoint device */
    //ZB_HA_DECLARE_ON_OFF_OUTPUT_CTX(on_off_output_ctx, on_off_output_ep);  //MAKE SURE TO REPLACE THIS
    ZBOSS_DECLARE_DEVICE_CTX_2_EP(on_off_output_ctx, on_off_output_ep, door_lock_controller_ep);
    //...
      ZB_AF_SET_ENDPOINT_HANDLER(ZB_LOCK_ENDPOINT, zcl_specific_cluster_cmd_handler);

    当然、您应该改用 ZBOSS_DECLATE_DEVICE_CTX_3_EP 、并修改应用程序回调以确定命令用于哪个端点。

    此致、
    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、我明白了。 但我在为同一 ON_OFF_OUTPUT 集群定义 3 个终点时遇到了问题。 问题是 3 ZB_af_simple_desc_5 在定义 3 个端点时多次声明、因为它在 zboss_api_af.h 中的定义如下:

    typedef ZB_PACKED_PRE struct zb_af_simple_desc_ ## in_clusters_count ## _ ## out_clusters_count ## _s \
      {                                                                                       \
        zb_uint8_t    endpoint;                 /* Endpoint */                                \
        zb_uint16_t   app_profile_id;           /* Application profile identifier */          \
        zb_uint16_t   app_device_id;            /* Application device identifier */           \
        zb_bitfield_t app_device_version:4;     /* Application device version */              \
        zb_bitfield_t reserved:4;               /* Reserved */                                \
        zb_uint8_t    app_input_cluster_count;  /* Application input cluster count */         \
        zb_uint8_t    app_output_cluster_count; /* Application output cluster count */        \
        /* Application input and output cluster list */                                       \
        zb_uint16_t   app_cluster_list[(in_clusters_count) + (out_clusters_count)]; \
        zb_uint8_t    cluster_encryption[((in_clusters_count) + (out_clusters_count) + 7)/8]; \
      } ZB_PACKED_STRUCT     

    ON_OFF_OUTPUT 集群的 in_clusters_COUNT 和 OUT_clusters_COUNT 分别为 5 和 0。 这使我得到错误 ZB_af_simple_desc_5 被多次定义

    这是用于声明集群的代码

    /***** Trace related defines *****/
    #define ZB_TRACE_FILE_ID 40124
    
    /****** Application defines ******/
    #define ZB_SWITCH1_ENDPOINT          1
    #define ZB_SWITCH2_ENDPOINT          2
    #define ZB_SWITCH3_ENDPOINT          3
    
    #include <ti/log/Log.h>
    
    #include "ti_zigbee_config.h"
    #include "zboss_api.h"
    #include "zb_led_button.h"
    #include "zboss_api_error.h"
    
    #include <ti/devices/DeviceFamily.h>
    #include DeviceFamily_constructPath(inc/hw_fcfg.h)
    #include DeviceFamily_constructPath(inc/hw_memmap.h)
    
    /* for button handling */
    #include <ti/drivers/GPIO.h>
    #include "ti_drivers_config.h"
    
    #ifdef ZB_CONFIGURABLE_MEM
    #include "zb_mem_config_lprf3.h"
    #endif
    
    #if !defined ZB_ED_FUNC
    #error define ZB_ED_ROLE to compile the tests
    #endif
    
    
    // TODO: adjust transmit power
    
    /****** Application variables declarations ******/
    /* IEEE address of the device */
    zb_bool_t cmd_in_progress = ZB_FALSE;
    zb_bool_t perform_factory_reset = ZB_FALSE;
    zb_uint16_t g_dst_addr;
    zb_uint8_t g_addr_mode;
    zb_uint8_t g_endpoint;
    
    /****** Application function declarations ******/
    zb_uint8_t zcl_specific_cluster_cmd_handler(zb_uint8_t param);
    void on_off_read_attr_resp_handler(zb_bufid_t cmd_buf);
    void send_toggle_req(zb_uint8_t param);
    void button_press_handler(zb_uint8_t param);
    
    /****** Cluster declarations ******/
    
    // on-off attributes for the light switch
    zb_bool_t g_attr_on_off1 = ZB_ZCL_ON_OFF_ON_OFF_DEFAULT_VALUE;
    zb_bool_t g_attr_on_off2 = ZB_ZCL_ON_OFF_ON_OFF_DEFAULT_VALUE;
    zb_bool_t g_attr_on_off3 = ZB_ZCL_ON_OFF_ON_OFF_DEFAULT_VALUE;
    
    ZB_ZCL_DECLARE_ON_OFF_ATTRIB_LIST(on_off_attr_list1, &g_attr_on_off1);
    ZB_ZCL_DECLARE_ON_OFF_ATTRIB_LIST(on_off_attr_list2, &g_attr_on_off2);
    ZB_ZCL_DECLARE_ON_OFF_ATTRIB_LIST(on_off_attr_list3, &g_attr_on_off3);
    
    /* Basic cluster attributes */
    zb_uint8_t attr_power_source = ZB_ZCL_BASIC_POWER_SOURCE_MAINS_SINGLE_PHASE;
    zb_uint8_t attr_zcl_version  = 0x03;
    zb_uint8_t attr_app_version = 0x40;
    zb_uint8_t attr_stack_version = 0x02;
    zb_uint8_t attr_hardware_version = 0x01;
    zb_uint8_t attr_application_version = 0x40;
    zb_uint16_t attr_cluster_rev = 0x0001;
    zb_uint8_t attr_manufacturer_name[16];
    zb_uint8_t attr_model_id[16];
    zb_uint8_t attr_data_code = ZB_ZCL_BASIC_MODEL_IDENTIFIER_DEFAULT_VALUE;
    zb_uint8_t attr_location_id = ZB_ZCL_BASIC_LOCATION_DESCRIPTION_DEFAULT_VALUE;
    zb_uint8_t attr_ph_env = ZB_ZCL_BASIC_PHYSICAL_ENVIRONMENT_DEFAULT_VALUE;
    zb_uint8_t attr_sw_build_id[] = ZB_ZCL_BASIC_SW_BUILD_ID_DEFAULT_VALUE;
    
    ZB_ZCL_DECLARE_BASIC_ATTRIB_LIST_EXT(basic_attr_list, 
                                        &attr_zcl_version,
                                        &attr_app_version,
                                        &attr_stack_version,
                                        &attr_hardware_version,
                                        &attr_manufacturer_name,
                                        &attr_model_id,
                                        &attr_data_code,
                                        &attr_power_source,
                                        &attr_location_id,
                                        &attr_ph_env,
                                        &attr_sw_build_id);
    
    /* Identify cluster attributes */
    zb_uint16_t attr_identify_time = 0;
    ZB_ZCL_DECLARE_IDENTIFY_ATTRIB_LIST(identify_attr_list, &attr_identify_time);
    /* Declare cluster list for the device */
    
    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);
    
    
    zb_uint8_t g_attr_name_support = 0;
    ZB_ZCL_DECLARE_GROUPS_ATTRIB_LIST(groups_attr_list, &g_attr_name_support);
    
    
    ZB_HA_DECLARE_ON_OFF_OUTPUT_CLUSTER_LIST(on_off_output_clusters1,
                                             on_off_attr_list1,
                                             basic_attr_list,
                                             identify_attr_list,
                                             groups_attr_list,
                                             scenes_attr_list);
    
    ZB_HA_DECLARE_ON_OFF_OUTPUT_CLUSTER_LIST(on_off_output_clusters2,
                                             on_off_attr_list2,
                                             basic_attr_list,
                                             identify_attr_list,
                                             groups_attr_list,
                                             scenes_attr_list);
    
    ZB_HA_DECLARE_ON_OFF_OUTPUT_CLUSTER_LIST(on_off_output_clusters3,
                                             on_off_attr_list3,
                                             basic_attr_list,
                                             identify_attr_list,
                                             groups_attr_list,
                                             scenes_attr_list);
    
    /* Declare endpoint */
    ZB_HA_DECLARE_ON_OFF_OUTPUT_EP(on_off_output_ep1, ZB_SWITCH1_ENDPOINT, on_off_output_clusters1);
    ZB_HA_DECLARE_ON_OFF_OUTPUT_EP(on_off_output_ep2, ZB_SWITCH2_ENDPOINT, on_off_output_clusters2);
    ZB_HA_DECLARE_ON_OFF_OUTPUT_EP(on_off_output_ep3, ZB_SWITCH3_ENDPOINT, on_off_output_clusters3);
    
    /* Declare application's device context for single-endpoint device */
    ZBOSS_DECLARE_DEVICE_CTX_3_EP(on_off_output_ctx, on_off_output_ep1, on_off_output_ep2, on_off_output_ep3)

    我希望这 3 个端点属于 ON_OFF_OUTPUT 集群类型。   

    这是一个相关的问题,但它在北欧方面: https://devzone.nordicsemi.com/f/nordic-q-a/84787/zigbee-multiple-same-type-endpoints-conflict-and-proposed-fix 这是 3 年前。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    实际上,我已经编辑了 ZBOSS 源代码,如前面提到的链接(它是大量的编辑,代码构建成功,可以被识别为一个 3-gang 智能开关在 Tuya 端.