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.

[参考译文] LAUNCHXL-CC26X2R1:显示温度值并切换指示灯

Guru**** 2466550 points
Other Parts Discussed in Thread: SYSCONFIG, Z-STACK

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1115317/launchxl-cc26x2r1-display-temperature-values-and-toggle-the-light

器件型号:LAUNCHXL-CC26X2R1
Thread 中讨论的其他器件:SysConfigZ-stack

您好!

我将从项目 ZR_SW 开始。 我添加了 OMROM D6T-8L 温度传感器的代码、我将其用作占位传感器。 我创建了一个子菜单选项、希望在其中查看当前的温度、因此当我在该子菜单中时、我可以看到温度更新本身显示在 CUI 中。

在 zcl_sampleapps_ui.c 中、我创建了名为 uiActionSetSensorPrestencia 的函数。 我调用 readSensor、它会获取温度。 然后我调用 check乘员、如果它检测到一个人、它返回"1"、如果没有、它返回"0"。

这就是我要做的:

1.当我进入此子菜单时,我希望在第一行显示温度,直到我离开此子菜单。 此时、当我进入该子菜单时、我只会看到一次温度值。

在读取温度值并检查是否有人占用时、如果检测到"有人占用"、我想切换灯。 我不应该在这里使用"zclGeneral_SendOnOff_CmdTog"、但我不知道如何执行它。

我尝试添加 while 循环、但它不像这样工作。

谢谢你。

static void uiActionSetSensorPresencia(const char _input, char* _pLines[3], CUI_cursorInfo_t* _pCurInfo);

CUI_MENU_ITEM_INT_ACTION("< READ SENSOR >", (CUI_pFnIntercept_t) uiActionSetSensorPresencia)

static void uiActionSetSensorPresencia(const char _input, char* _pLines[3], CUI_cursorInfo_t* _pCurInfo)
{
    if (CUI_ITEM_INTERCEPT_START == _input) {

        char tmpPtat[8] = ""; char tmp1[8] = ""; char tmpInt[8] = "";
        
        zstack_getZCLFrameCounterRsp_t Rsp;
        //Zstackapi_getZCLFrameCounterReq(appServiceTaskId, &Rsp);

        char tmpEntera[8] = ".";char tmpDouble[8];
        
        double *value = readSensor();
        int occupied = checkOccupancy();
        
        if (occupied == 1) {
            strcpy(tmpInt, "OCUPADO");
        } else {
            strcpy(tmpInt, "NO_OCUP");
        }
        doubleToString(value[0], tmpPtat, tmpEntera, tmpDouble);
        doubleToString(value[1], tmp1, tmpEntera, tmpDouble);

        strncpy(_pLines[0], "Mostrando valores:", MAX_MENU_LINE_LEN);
        strncpy(_pLines[1], value[0], MAX_MENU_LINE_LEN);
        strncpy(_pLines[2], tmpInt, MAX_MENU_LINE_LEN);
        
        if (occupied == 1) {
            zclGeneral_SendOnOff_CmdToggle( SAMPLESW_ENDPOINT, &listBulbs[FBBulbsFound-1], TRUE, Rsp.zclFrameCounter );
        }


    }

}

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

    尊敬的 Dani:

    我 建议学习使用 示例项目中所示的 CUI_statusLinePrintf、以根据需要更新该值。  应从 zcl 应用程序代码文件执行此操作、而不是从修改后的 UI 代码执行此操作。

    示例项目还使用  zclGeneral_SendOnOff_CmdToggle 进行演示、该示应通过 zcl 应用程序代码进行处理。  如果 不使用此 API、我不确定您要实现的目标是什么。

    此致、
    Ryan  

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

    您好、Ryan、

    1.是的,我所做的事情与你几个月前提出的类似。 但我不要求提供新的信息行、如绑定信息或应用信息、我想知道我是否可以获得子菜单、其中我显示的只是温度。 例如:菜单父菜单"Set Config Sensor Prestencia"、子菜单"Read sensor"、在该子菜单中仅显示温度值。 我现在在 zcl_samplesw.c 上尝试该操作、而不是在 ui 文件上尝试该操作。

    2.是的,我的差 我在 zcl_samplesw.c 中创建了一个新函数来处理它。

    谢谢你。

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

    在这种情况 下、更改新菜单项的 UI 将需要在 CUI_menu_item_int_action 周围添加一个 CUI_sub_menu。  cui.h 评论中提供了有关如何解决此问题的示例。  您还可以选择创建新的 CUI_INPUT__*(不基于按键操作),并使用 CUI_dispMenu 刷新现有显示。

    此致、
    Ryan

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

    大家好、我有点迷路了、我创建了菜单。 我不知道如何使用新的 CUI_INPUT_*刷新现有显示。

    我可以在 cui.h 中创建一个新的#define CUI_INPUT_TOOUT_0xDD (例如)。uiActionSetSensorPrestencia 位于 zcl_samplesw.c 上 那么、在该函数内、我应该使用 CUI_dispMenu (false)和新的 CUI_input 吗?

    很抱歉、我不知道如何在任何时候检查是否有人入住。 我创建了 zcl_ocupit_data.c 来获取该信息、但我不知道如何将其附加到代码中。

    我会附加应用文件夹、以防您对我有一些指导。 谢谢你。

    CUI_SUB_MENU(zclSubmenuSensor, "<   SET CONFIG SENSOR DE PRESENCIA   >", SENSOR_SUBMENUS, zclMenuMain)
        CUI_MENU_ITEM_INT_ACTION("< READ SENSOR >", (CUI_pFnIntercept_t) uiActionSetSensorPresencia)
        CUI_MENU_ITEM_INT_ACTION("< OPTION 2 >", (CUI_pFnIntercept_t) uiActionListDevices)
        CUI_MENU_ITEM_INT_ACTION("< OPTION 3 >", (CUI_pFnIntercept_t) uiActionListDevices)
    CUI_SUB_MENU_END
    
    
    e2e.ti.com/.../6102.Application.zip

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

    是否建议从 ZR 温度传感器而非 ZR 开关起动? 我从 ZR_SW 开始、因为首先我只需要从 ZR 切换光线。 我的意思是、此时重新启动所有内容并使用 ZR 温度传感器项目。

    谢谢你。

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

    具体来说,它甚至不必是 CUI_INPUT_*,因为通常从接收 UART 字符开始刷新。  它作为一个常见示例提供、 您可以在计时器回调到期后触发的事件期间使用 CUI_dispMenu。  您可以从 ZR 温度传感器开始,但如果您计划使用此设备来切换远程光线,则可能还需要携带 ZR _samplesw_data.c 并创建多个端点。

    此致、
    Ryan

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

    谢谢你。 我不应提出超过2个非相关问题。 现在、我将把重心放在占位传感上。

    我正在关注温度传感器项目。 我创建了一个新端点

    我是否应该像温度传感器示例那样使其可报告? ( uint8_t 报告可更改[]={0x2C、0x01、0x00、0x00};// 0x2C01在 Int16_t 中为300)

    我知道我要检查的值是 ATTRID_LOAD_SAGITY_RACITY_LOAD_LOADCITATE。 但我不知道如何附加传感器给出的值。 在项目示例中、它不会调用任何函数来获取温度或类似的温度。

    谢谢你。

      // *** Temperature Measurement Attriubtes ***
      {
        ZCL_CLUSTER_ID_MS_OCCUPANCY_SENSING,
        { // Attribute record
          ATTRID_OCCUPANCY_SENSING_OCCUPANCY,
          ZCL_DATATYPE_BITMAP8,
          ACCESS_CONTROL_READ | ACCESS_REPORTABLE,
          (void *)&zclSampleOccupancy_sensor_occupancy
        }
      },

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

    您可以导入 ZR SampleApp 项目并将 SysConfig -> Z-stack -> Zigbee Application Endpoint -> Zigbee Device Type 更改为 Occupancy Sensor、然后查看生成的 zcl_config.c/h 文件、以更好地了解应如何初始化占位传感器。  您还可以参考 ZCL 规范(ZCL v6供参考)、以更好地了解可报告的占用属性详细信息。   

    4.8.2.1.1.1占用属性
    占位属性是位图。
    位0按如下方式指定感测到的占用:1 =占用、0 =未占用。
    所有其它位被保留。

    此致、
    Ryan

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

    是的、我有一个更好的想法、但我仍然有一些疑问。 我想我现在已经了解了足够多的端点、绑定和这些东西来实现它。

    我有一个与附加的 zcl_config.c 类似的 zcl_ocup_data.c。 使用该文件、我应该能够使用 OMROM D6T-8L 检测占用情况? 我不需要 D6T-8L 代码? (我只讨论传感器的代码) PD:该文件可能会有错误、我将讨论 file.e2e.ti.com/.../zcl_5F00_occupancy_5F00_data.c 的概念

    谢谢你。

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

    使用包含并正确注册端点的文件,您应该能够发送 ZCL_CLUSTER_ID_MS_LOAD_Sensing 群集的 ATTRID_REGACTION_SING__*属性。  您的应用程序(例如手动绑定)和调试过程(例如 查找和绑定)将确定 OMROM D6T-8L 如何 CC26X2R1器件通信并准备发送占用数据。  您应联系产品制造商以了解有关此器件预期运行情况的更多信息。

    此致、
    Ryan

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

    好的。 如果我设置了数据包监听器、当注册了端点的 CC26X2R1加入网络时、能否查看是否所有端点和群集都定义良好?

    使用灯泡、当它接入网络时、我可以在日志中看到他的信息、但 D6T-8L 接入网络的方式是通过 I2C 连接一个 CC26X2R1、对吧?

    谢谢你。

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

    您可以在加入器件时执行器件发现、以了解有关支持的端点和简单描述符的更多信息。  Zigbee 基础知识 SimpleLink Academy 实验对此进行了演示。  为了清晰起见、我编辑了我之前的帖子。  接收  ATTRID_LOAD_Sensing_*的目标节点需要 将 ZCL_CLUSTER_ID_MS_LOAD_SICATION 存储在 该设备上注册的端点的*_OutClusterList 中。   SWRA615的第6.2节进一步说明了此群集类型关系

    此致、
    Ryan

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

    是的、我没有意识到我必须修改协调器节点上的群集列表。 正如我在 ZCL 规范中发现的、在目标节点(客户端)中、我只需在 OutClusterList 中添加 ZCL_CLUSTER_ID_MS_LOAD_SAGATION、我不需要添加任何属性、对吧? 仅在服务器端。

    谢谢你。

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

    您 还应在     zc 的 ZCL_CLUSTER_ID_MS_LOAD_SINGLE_Sensing 属性记录中添加所需的 ATTRID_LOAD_SINGLE_Sensing_*作为 ACCESS_CONTRAING_READ。

    此致、
    Ryan

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

    我尝试将属性添加到 zc、但显示了错误"error #20:identifier "ATTRID_LOAD_SAGITY_RACITY_LOAD" is undefined"。 我添加了 zcl_ms.h、因此我不知道为什么它找不到它。

    /**************************************************************************************************
      Filename:       zcl_samplesw_data.c
      Revised:        $Date: 2014-07-30 12:57:37 -0700 (Wed, 30 Jul 2014) $
      Revision:       $Revision: 39591 $
    
    
      Description:    Zigbee Cluster Library - sample device application.
    
    
      Copyright 2006-2014 Texas Instruments Incorporated. All rights reserved.
    
      IMPORTANT: Your use of this Software is limited to those specific rights
      granted under the terms of a software license agreement between the user
      who downloaded the software, his/her employer (which must be your employer)
      and Texas Instruments Incorporated (the "License").  You may not use this
      Software unless you agree to abide by the terms of the License. The License
      limits your use, and you acknowledge, that the Software may not be modified,
      copied or distributed unless embedded on a Texas Instruments microcontroller
      or used solely and exclusively in conjunction with a Texas Instruments radio
      frequency transceiver, which is integrated into your product.  Other than for
      the foregoing purpose, you may not use, reproduce, copy, prepare derivative
      works of, modify, distribute, perform, display or sell this Software and/or
      its documentation for any purpose.
    
      YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
      PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
      INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
      NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
      TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
      NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
      LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
      INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
      OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
      OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
      (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
    
      Should you have any questions regarding your right to use this Software,
      contact Texas Instruments Incorporated at www.TI.com.
    **************************************************************************************************/
    
    /*********************************************************************
     * INCLUDES
     */
    #include "zcomdef.h"
    #include "zcl.h"
    #include "zcl_general.h"
    #include "zcl_ha.h"
    #include "zcl_poll_control.h"
    #include "zcl_electrical_measurement.h"
    #include "zcl_diagnostic.h"
    #include "zcl_meter_identification.h"
    #include "zcl_appliance_identification.h"
    #include "zcl_appliance_events_alerts.h"
    #include "zcl_power_profile.h"
    #include "zcl_appliance_control.h"
    #include "zcl_appliance_statistics.h"
    #include "zcl_hvac.h"
    #include "zcl_ll.h"
    #include "zcl_ms.h"
    
    
    #ifdef OTA_CLIENT_INTEGRATED
    #include "ota_client.h"
    #include "zcl_ota.h"
    #endif
    
    #include "zcl_samplesw.h"
    
    /*********************************************************************
     * CONSTANTS
     */
    
    #define SAMPLESW_DEVICE_VERSION     1
    #define SAMPLESW_FLAGS              0
    
    #define SAMPLESW_HWVERSION          0
    #define SAMPLESW_ZCLVERSION         BASIC_ZCL_VERSION
    
    #define DEFAULT_IDENTIFY_TIME 0
    
    /*********************************************************************
     * TYPEDEFS
     */
    
    /*********************************************************************
     * MACROS
     */
    
    /*********************************************************************
     * GLOBAL VARIABLES
     */
    
    //global attributes
    const uint16_t zclSampleSw_basic_clusterRevision = 0x0002;
    const uint16_t zclSampleSw_identify_clusterRevision = 0x0001;
    const uint16_t zclSampleSw_onoff_clusterRevision = 0x0001;
    const uint16_t zclSampleSw_onoffswconfig_clusterRevision = 0x0001;
    const uint16_t zclSampleSw_onoff_onoff = 0x0000;
    
    // Basic Cluster
    const uint8_t zclSampleSw_HWRevision = SAMPLESW_HWVERSION;
    const uint8_t zclSampleSw_ZCLVersion = SAMPLESW_ZCLVERSION;
    const uint8_t zclSampleSw_ManufacturerName[] = { 16, 'T','e','x','a','s','I','n','s','t','r','u','m','e','n','t','s' };
    const uint8_t zclSampleSw_PowerSource = POWER_SOURCE_MAINS_1_PHASE;
    uint8_t zclSampleSw_PhysicalEnvironment = PHY_UNSPECIFIED_ENV;
    
    // Identify Cluster
    uint16_t zclSampleSw_IdentifyTime = 0;
    
    // Occupancy Cluster
    uint16_t zclSampleOccupancy_clusterRevision = 0x0001;
    uint16_t zclSampleOccupancy_sensor_occupancy = 0x0000;
    uint16_t zclSampleOccupancy_sensor_type = 0x0000;
    uint16_t zclSampleOccupancy_sensor_type_bitmap = 0x0000;
    
    #ifdef OTA_CLIENT_INTEGRATED
    // global attributes
    const uint16_t zclSampleSw_ota_clusterRevision = 0x0001;
    // OTA Client Cluster
    static uint16_t zclSampleSw_ImageType = OTA_TYPE_ID;
    static uint8_t  zclSampleSw_ImageUpgradeStatus = 0;
    static uint8_t  zclSampleSw_UpgradeServerID[Z_EXTADDR_LEN] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
    static uint16_t zclSampleSw_MinBlockReqDelay = 0;
    static uint32_t zclSampleSw_FileOffset = 0xFFFFFFFF;
    static uint32_t zclSampleSw_CurrentFileVersion = OTA_APP_VERSION;
    static uint16_t zclSampleSw_CurrentZigBeeStackVersion = OTA_STACK_VER_PRO;
    static uint32_t zclSampleSw_DownloadedFileVersion = 0xFFFFFFFF;
    static uint16_t zclSampleSw_DownloadedZigBeeStackVersion = 0xFFFF;
    static uint16_t zclSampleSw_ManufacturerID = OTA_MANUFACTURER_ID;
    #endif
    
    /*********************************************************************
     * ATTRIBUTE DEFINITIONS - Uses REAL cluster IDs
     */
    
      // NOTE: The attributes listed in the AttrRec must be in ascending order
      // per cluster to allow right function of the Foundation discovery commands
    
    CONST zclAttrRec_t zclSampleSw_Attrs[] =
    {
      // *** General Basic Cluster Attributes ***
      {
        ZCL_CLUSTER_ID_GENERAL_BASIC,
        { // Attribute record
          ATTRID_BASIC_ZCL_VERSION,
          ZCL_DATATYPE_UINT8,
          ACCESS_CONTROL_READ,
          (void *)&zclSampleSw_ZCLVersion
        }
      },
      {
        ZCL_CLUSTER_ID_GENERAL_BASIC,             // Cluster IDs - defined in the foundation (ie. zcl.h)
        {  // Attribute record
          ATTRID_BASIC_HW_VERSION,            // Attribute ID - Found in Cluster Library header (ie. zcl_general.h)
          ZCL_DATATYPE_UINT8,                 // Data Type - found in zcl.h
          ACCESS_CONTROL_READ,                // Variable access control - found in zcl.h
          (void *)&zclSampleSw_HWRevision  // Pointer to attribute variable
        }
      },
      {
        ZCL_CLUSTER_ID_GENERAL_BASIC,
        { // Attribute record
          ATTRID_BASIC_MANUFACTURER_NAME,
          ZCL_DATATYPE_CHAR_STR,
          ACCESS_CONTROL_READ,
          (void *)zclSampleSw_ManufacturerName
        }
      },
      {
        ZCL_CLUSTER_ID_GENERAL_BASIC,
        { // Attribute record
          ATTRID_BASIC_POWER_SOURCE,
          ZCL_DATATYPE_ENUM8,
          ACCESS_CONTROL_READ,
          (void *)&zclSampleSw_PowerSource
        }
      },
      {
        ZCL_CLUSTER_ID_GENERAL_BASIC,
        { // Attribute record
          ATTRID_BASIC_PHYSICAL_ENVIRONMENT,
          ZCL_DATATYPE_ENUM8,
          (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE),
          (void *)&zclSampleSw_PhysicalEnvironment
        }
      },
      {
        ZCL_CLUSTER_ID_GENERAL_BASIC,
        {  // Attribute record
          ATTRID_CLUSTER_REVISION,
          ZCL_DATATYPE_UINT16,
          ACCESS_CONTROL_READ,
          (void *)&zclSampleSw_basic_clusterRevision
        }
      },
    
      // *** Identify Cluster Attribute ***
      {
        ZCL_CLUSTER_ID_GENERAL_IDENTIFY,
        { // Attribute record
          ATTRID_IDENTIFY_IDENTIFY_TIME,
          ZCL_DATATYPE_UINT16,
          (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE),
          (void *)&zclSampleSw_IdentifyTime
        }
      },
      {
        ZCL_CLUSTER_ID_GENERAL_IDENTIFY,
        {  // Attribute record
          ATTRID_CLUSTER_REVISION,
          ZCL_DATATYPE_UINT16,
          ACCESS_CONTROL_READ | ACCESS_GLOBAL,
          (void *)&zclSampleSw_identify_clusterRevision
        }
      },
      // *** On / Off Cluster *** //
      {
        ZCL_CLUSTER_ID_GENERAL_ON_OFF,
        {  // Attribute record
          ATTRID_CLUSTER_REVISION,
          ZCL_DATATYPE_UINT16,
          ACCESS_CONTROL_READ | ACCESS_CLIENT,
          (void *)&zclSampleSw_onoff_clusterRevision
        }
      },
      {
        ZCL_CLUSTER_ID_GENERAL_ON_OFF,
        {  // Attribute record
          ATTRID_ON_OFF_ON_OFF,
          ZCL_DATATYPE_BOOLEAN,
          ACCESS_CONTROL_READ | ACCESS_REPORTABLE,
          (void *)&zclSampleSw_onoff_onoff
        }
      },
      // *** Temperature Measurement Attriubtes ***
       {
         ZCL_CLUSTER_ID_MS_OCCUPANCY_SENSING,
         { // Attribute record
           ATTRID_OCCUPANCY_SENSING_OCCUPANCY,
           ZCL_DATATYPE_BITMAP8,
           ACCESS_CONTROL_READ | ACCESS_REPORTABLE,
           (void *)&zclSampleOccupancy_sensor_occupancy
         }
       },
       {
         ZCL_CLUSTER_ID_MS_OCCUPANCY_SENSING,
         { // Attribute record
           ATTRID_OCCUPANCY_SENSING_OCCUPANCY_SENSOR_TYPE,
           ZCL_DATATYPE_ENUM8,
           ACCESS_CONTROL_READ,
           (void *)&zclSampleOccupancy_sensor_type
         }
       },
       {
         ZCL_CLUSTER_ID_MS_OCCUPANCY_SENSING,
         { // Attribute record
           ATTRID_OCCUPANCY_SENSING_OCCUPANCY_SENSOR_TYPE_BITMAP,
           ZCL_DATATYPE_BITMAP8,
           ACCESS_CONTROL_READ,
           (void *)&zclSampleOccupancy_sensor_type_bitmap
         }
       },
    
       {
         ZCL_CLUSTER_ID_MS_OCCUPANCY_SENSING,
         {  // Attribute record
           ATTRID_CLUSTER_REVISION,
           ZCL_DATATYPE_UINT16,
           ACCESS_CONTROL_READ | ACCESS_GLOBAL,
           (void *)&zclSampleOccupancy_clusterRevision
         }
       }
    #if defined (OTA_CLIENT_INTEGRATED)
      ,{
        ZCL_CLUSTER_ID_OTA,
        {
          ATTRID_OTA_UPGRADE_UPGRADE_SERVER_ID,
          ZCL_DATATYPE_IEEE_ADDR ,
          ACCESS_CONTROL_READ | ACCESS_CLIENT,
          ( void * ) &zclSampleSw_UpgradeServerID
        }
      },
      {
        ZCL_CLUSTER_ID_OTA,
        {
          ATTRID_OTA_UPGRADE_FILE_OFFSET,
          ZCL_DATATYPE_UINT32,
          ACCESS_CONTROL_READ | ACCESS_CLIENT,
          ( void * ) &zclSampleSw_FileOffset
        }
      },
      {
        ZCL_CLUSTER_ID_OTA,
        {
          ATTRID_OTA_UPGRADE_CURRENT_FILE_VERSION,
          ZCL_DATATYPE_UINT32,
          ACCESS_CONTROL_READ | ACCESS_CLIENT,
          ( void * ) &zclSampleSw_CurrentFileVersion
        }
      },
      {
        ZCL_CLUSTER_ID_OTA,
        {
          ATTRID_OTA_UPGRADE_CURRENT_ZIG_BEE_STACK_VERSION,
          ZCL_DATATYPE_UINT16,
          ACCESS_CONTROL_READ | ACCESS_CLIENT,
          ( void * ) &zclSampleSw_CurrentZigBeeStackVersion
        }
      },
      {
        ZCL_CLUSTER_ID_OTA,
        {
          ATTRID_OTA_UPGRADE_DOWNLOADED_FILE_VERSION,
          ZCL_DATATYPE_UINT32,
          ACCESS_CONTROL_READ | ACCESS_CLIENT,
          ( void * ) &zclSampleSw_DownloadedFileVersion
        }
      },
      {
        ZCL_CLUSTER_ID_OTA,
        {
          ATTRID_OTA_UPGRADE_DOWNLOADED_ZIG_BEE_STACK_VERSION,
          ZCL_DATATYPE_UINT16,
          ACCESS_CONTROL_READ | ACCESS_CLIENT,
          ( void * ) &zclSampleSw_DownloadedZigBeeStackVersion
        }
      },
      {
        ZCL_CLUSTER_ID_OTA,
        {
          ATTRID_OTA_UPGRADE_IMAGE_UPGRADE_STATUS,
          ZCL_DATATYPE_ENUM8,
          ACCESS_CONTROL_READ | ACCESS_CLIENT,
          ( void * ) &zclSampleSw_ImageUpgradeStatus
        }
      },
      {
        ZCL_CLUSTER_ID_OTA,
        {
          ATTRID_OTA_UPGRADE_MANUFACTURER_ID,
          ZCL_DATATYPE_UINT16,
          ACCESS_CONTROL_READ | ACCESS_CLIENT,
          ( void * ) &zclSampleSw_ManufacturerID
        }
      },
      {
        ZCL_CLUSTER_ID_OTA,
        {
          ATTRID_OTA_UPGRADE_IMAGE_TYPE_ID,
          ZCL_DATATYPE_UINT16,
          ACCESS_CONTROL_READ | ACCESS_CLIENT,
          ( void * ) &zclSampleSw_ImageType
        }
      },
      {
        ZCL_CLUSTER_ID_OTA,
        {
          ATTRID_OTA_UPGRADE_MINIMUM_BLOCK_PERIOD,
          ZCL_DATATYPE_UINT16,
          ACCESS_CONTROL_READ | ACCESS_CLIENT,
          ( void * ) &zclSampleSw_MinBlockReqDelay
        }
      },
      {
        ZCL_CLUSTER_ID_OTA,
        {
          ATTRID_CLUSTER_REVISION,
          ZCL_DATATYPE_UINT16,
          ACCESS_CONTROL_READ | ACCESS_CLIENT,
          ( void * ) &zclSampleSw_ota_clusterRevision
        }
      }
    #endif
    };
    
    uint8_t CONST zclSampleSw_NumAttributes = ( sizeof(zclSampleSw_Attrs) / sizeof(zclSampleSw_Attrs[0]) );
    
    /*********************************************************************
     * SIMPLE DESCRIPTOR
     */
    // This is the Cluster ID List and should be filled with Application
    // specific cluster IDs.
    const cId_t zclSampleSw_InClusterList[] =
    {
      ZCL_CLUSTER_ID_GENERAL_BASIC,
      ZCL_CLUSTER_ID_GENERAL_IDENTIFY,
    };
    
    #define ZCLSAMPLESW_MAX_INCLUSTERS    ( sizeof( zclSampleSw_InClusterList ) / sizeof( zclSampleSw_InClusterList[0] ))
    
    const cId_t zclSampleSw_OutClusterList[] =
    {
      ZCL_CLUSTER_ID_GENERAL_IDENTIFY,
      ZCL_CLUSTER_ID_GENERAL_ON_OFF,
      ZCL_CLUSTER_ID_GENERAL_GROUPS,
      ZCL_CLUSTER_ID_MS_OCCUPANCY_SENSING,
    #if defined (OTA_CLIENT_INTEGRATED)
      ZCL_CLUSTER_ID_OTA
    #endif
    };
    
    #define ZCLSAMPLESW_MAX_OUTCLUSTERS   ( sizeof( zclSampleSw_OutClusterList ) / sizeof( zclSampleSw_OutClusterList[0] ))
    
    SimpleDescriptionFormat_t zclSampleSw_SimpleDesc =
    {
      SAMPLESW_ENDPOINT,                  //  int Endpoint;
      //ZLL_PROFILE_ID,                  //  uint16_t AppProfId[2];
      ZCL_HA_PROFILE_ID,                  //  uint16_t AppProfId[2];
      ZCL_DEVICEID_ON_OFF_LIGHT_SWITCH,//  uint16_t AppDeviceId[2];
      SAMPLESW_DEVICE_VERSION,            //  int   AppDevVer:4;
      SAMPLESW_FLAGS,                     //  int   AppFlags:4;
      ZCLSAMPLESW_MAX_INCLUSTERS,         //  byte  AppNumInClusters;
      (cId_t *)zclSampleSw_InClusterList, //  byte *pAppInClusterList;
      ZCLSAMPLESW_MAX_OUTCLUSTERS,        //  byte  AppNumInClusters;
      (cId_t *)zclSampleSw_OutClusterList //  byte *pAppInClusterList;
    };
    
    /*********************************************************************
     * GLOBAL FUNCTIONS
     */
    
    /*********************************************************************
     * LOCAL FUNCTIONS
     */
    
    /*********************************************************************
     * @fn      zclSampleLight_ResetAttributesToDefaultValues
     *
     * @brief   Reset all writable attributes to their default values.
     *
     * @param   none
     *
     * @return  none
     */
    void zclSampleSw_ResetAttributesToDefaultValues(void)
    {
    
      zclSampleSw_PhysicalEnvironment = PHY_UNSPECIFIED_ENV;
      zclSampleSw_IdentifyTime = DEFAULT_IDENTIFY_TIME;
    
    #ifdef OTA_CLIENT_INTEGRATED
      zclSampleSw_ImageUpgradeStatus = 0;
      memset(zclSampleSw_UpgradeServerID, 0xFF, Z_EXTADDR_LEN);
      zclSampleSw_MinBlockReqDelay = 0;
      zclSampleSw_FileOffset = 0xFFFFFFFF;
      zclSampleSw_DownloadedFileVersion = 0xFFFFFFFF;
      zclSampleSw_DownloadedZigBeeStackVersion = 0xFFFF;
    #endif
    }
    
    /****************************************************************************
    ****************************************************************************/
    
    
    

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

    从 CCS 工程工作区中打开 Common/zcl 文件夹、右键单击 zcl_ms.c/h 并选择 Resource Configurations -> Exclude from Build 以删除排除项(或从 SDK 目录 的 source\ti\Zstack\zcl 中删除并复制/粘贴)、 并在 Stack/Config/f8wrouter.opts 或 Project Properties -> Build -> Arm Compiler -> Predefined Symbols 中定义了 ZCL_MS。  然后清理并重新构建您的项目。

    此致、
    Ryan

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

    我已经尝试过、现在没有错误。 我想打开数据包监听器来查看协调器端点、但在 Wireshark 中找不到该信息。 一旦我在 Ubiqua 上看到该信息、但我的免费试用已过期、我无法提供该信息。 Wireshark 不会显示该信息、或者我有任何问题吗?

    我遵循了文档、可以看到信息、但不能看到这种信息。

    谢谢你。

    e2e.ti.com/.../1907.zip

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

    数据包已加密、  在监听之前、您是否已在"编辑">"首选项">"协议">"Zigbee 中加载了 Zigbee TC Link Key (5a69674265416c6c69616e63653039)?  捕获的数据包是有效的、可以在 Ubiqua 中解释。  无论如何,只有活动端点和简单描述符响应来自路由器,而不是协调器,尽管这可能是您的目的。

    此致、
    Ryan

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

    是的、我加载了 Zigbee TC Link 密钥、我不知道是否必须更改安全级别。

    Active Enpoint 和 Simple Descriptor 响应是如何来自路由器的? 我只有两个 LaunchPad、其中一个用作数据包监听器、另一个则必须用作协调器、但我想将其用作路由器。

    谢谢你。

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

    我假设您需要另一个 LaunchPad 作为设备来加入网络、以便协调器可以从设备请求端点。

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

    安全级别正常。  https://dev.ti.com/tirex/content/simplelink_cc13xx_cc26xx_sdk_6_10_00_29/docs/zigbee/html/zigbee/packet_sniffer.html#id6 

    如果不是 LaunchPad、我不知道您的路由器设备是什么、但它似乎并不像协调器那样请求信息。  因此、这是根据每个节点的应用要求进行器件发现的问题。

    此致、
    Ryan

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

    我可以获得另一个 LaunchPad、因此我有一个用作路由器、另一个用作协调器、最后一个用作数据包监听器。

    我仍然无法像在 Ubiqua 中看到的那样正确地看到日志。 不过、如我之前所示、引入了链接密钥。

    文件已附加。

    e2e.ti.com/.../2007.zip

    现在、我看到在路由器的终端中、我可以看到对应于 ZCL_CLUSTER_ID_MS_LOAD_sensing 的群集0x406。 但显示的端点是 ON_OFF 端点、用于占用的端点是端点9。

    在路由器中、我检查了 Yikai 的指南中的分步添加另一个端点、似乎我已经正确执行了。

    您能否通过数据包监听器的日志告诉我一切是否正确?

    谢谢你。

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

    ZC 现在发送一个简单的描述符响应:

    仅请求端点0x08。  以下是路由器0x09的简单描述符响应:

    您需要能够解读自己的监听器日志。  您是否正在使用 Wireshark 3.0.X?  考虑 联系 Wireshark 支持 以解决您的问题。

    此致、
    Ryan

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

    谢谢!

    我猜是在协调器中正确添加了群集、因为只有一个端点、但添加了最新的群集。 但在路由器中有2个端点、我认为占位的端点注册的很好、但它也应该显示端点8、对吧?

    那么、此时、下一步能够报告占用数据、对吧? 我应该了解如何发送 ATTRID_LOAD_SENSEING_*属性,以及如何将它们放在协调器中?

    我正在使用 Wireshark 3.0.14。 我几个月前就开始了这个问题、您建议我安装3.0.X 版本。 我想我还联系了 Wireshark、他们无法提供帮助。 我将再次尝试从 Wireshark 配置所有内容。

    谢谢你。

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

    每个端点都有简单描述符请求。  您要求输入我提供的占用端点。  我也没有提供针对0x08端点的简单描述符请求。  如果您的路由器占用传感器服务器(类型2群集的输入群集列表)的属性设置为 ACCESS_REPORTING、则使用 Zstackapi_BdbRepAddAttrCfgRecordDefaultToListReq 初始化功能、并在调试期间启用 BDB 查找和绑定、则应自动进行报告。  您可以参考温度传感器示例进行演示。  您还可以尝试手动绑定 、如上述 Zigbee 基础 SLA 中所述。

    此致、
    Ryan

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

    啊、好的。 我认为该属性设置为 ACCESS_REportable、我正在尝试下一个建议、但出现以下错误:

    "ATTRID_LOAD_SAGICG_LOAD"未定义。 我尝试模仿温度传感器项目、但我不知道我必须在预定义符号中定义什么(如果这是问题)。

    #ifdef BDB_REPORTING
      //Adds the default configuration values for the temperature attribute of the ZCL_CLUSTER_ID_MS_TEMPERATURE_MEASUREMENT cluster, for endpoint SAMPLETEMPERATURESENSOR_ENDPOINT
      //Default maxReportingInterval value is 10 seconds
      //Default minReportingInterval value is 3 seconds
      //Default reportChange value is 300 (3 degrees)
      Req.attrID = ATTRID_OCCUPANCY_SENSING_OCCUPANCY;
      Req.cluster = ZCL_CLUSTER_ID_MS_OCCUPANCY_SENSING;
      Req.endpoint = SAMPLEOCCUPANCY_ENDPOINT;
      Req.maxReportInt = 10;
      Req.minReportInt = 3;
      OsalPort_memcpy(Req.reportableChange,reportableChange,BDBREPORTING_MAX_ANALOG_ATTR_SIZE);
    
      Zstackapi_bdbRepAddAttrCfgRecordDefaultToListReq(appServiceTaskId,&Req);
    #endif

    谢谢你。

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

    您可能需要在 zcl_samples*。c 中#include "zcl_ms.h"、因为 这是定义 ATTRID_LOAD_sensing_ocitation"的位置。

    此致、
    Ryan

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

    是的、我必须清理项目才能运行该程序。

    我监听了我的 zc_SW、zr_SW (通过 I2C 连接到占位传感器)和灯泡之间的连接。 您能再给我一些有关日志的信息吗? 在某些时候、我触摸了传感器、以便它可以"被占用"、我不知道这是否反映在日志中。

    谢谢你。

    e2e.ti.com/.../2207.zip

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

    ZR 正在报告感应占位属性,ZC 对未知群集命令的响应成功。  应确保 ZC 应用程序已定义 BDB_REPORTING 和 ZCL_REPORT_DESTINATION_DEVICE。

    此致、
    Ryan

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

    没有定义 ZCL_REPORT_DESTINATION_DEVICE、我就这样做了。 现在、两个属性都已定义。 此时、路由器应发送属性、以便我不知道应用程序是否无法检测是否已占用。 感谢 you.e2e.ti.com/.../16082022.zip

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

    监 听器日志中的行为似乎没有改变。  您应该能够在 zclSample*_ProcessInReportCmd 中接收报告。

    此致、
    Ryan