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.

[参考译文] CC2562P:如何实现可选属性

Guru**** 2510095 points
Other Parts Discussed in Thread: CC2531EMK

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1085536/cc2562p-how-to-implement-optional-attributes

“线程:CC2531EMK测试”中讨论的其它部件

您好,

我一直在咨询 Danfoss 数据表,我发现一些有趣的命令/属性,但它们被标记为可选。

事实上,当我尝试读取属性时,我得到0x86作为返回值。

要实现可选属性或访问该属性,我需要做些什么?

(我正在编写的源代码是 Java。)

硬件:

  • CC2562P 声输出转换器
  • Danfoss 恒温器

固件:

  • ZStack 3.0.x (购买加密狗时默认获得)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我认为您需要获得自定义命令/属性的完整规范,以便您知道如何在应用程序中处理这些命令/属性。

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

    “完整规格”是什么意思?

    Danfoss 数据表: Danfoss

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

    您读取并获取0x86的属性是什么?

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

    群集 ID:0x0201属性 ID:0x4015

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

    Danfoss 数据表的群集 ID 0x0201中没有属性 ID 0x4015,因此您将获得不受支持的0x86。

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

    第5页您可以找到“外部测量室传感器”属性。其值为0x4015

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

    您确定您的丹麦人是否实施了此属性? 您可以设置嗅探器以检查它是否返回不受支持的。

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

    在 ZigBee2MQTT 上工作正常。

    所以我想知道如何实施可选的属性/命令。

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

    你好 Luca,

    ZNP 没有 ZCL 层,不知道远程设备上哪些属性是可选的。  您可以检查 Zigbee2MQTT 和您的设置之间的嗅探器日志,以确定属性读取命令中的哪些差异可能导致不受支持的属性响应。

    此致,
    瑞安

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

    您是否使用 ZTool 执行 ZCL 读取属性?

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

    是的,我确实使用 ZTool 使用 AF_DATA_REGISTER 执行读取。  

    有效负载数据为:10 01 00 15 40 (也曾尝试过:01 01 00 15 40)

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

    我认为  AF_DATA_REGISTER 命令不正确。 它应该是 AF_DATA_REQUEST。

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

    是的,我指的是 AF_DATA_Request,匆忙写下答案。 我的坏了。

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

    尝试使用“4001 00 40 15”作为有效负载。

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

    答案: 数据:...@ (0x08,0x01,0x01,0x40,0x15, 0x86)

    所以,什么也没有。 以下哪一项是奇怪的,因为如果达福斯网关未实施,它如何与之通信?

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

    我现在不记得准确的有效负载。 也许您可以再次尝试 “01 00 40 15”。 验证有效负载的最佳方法是设置嗅探器以检查准确通过空气发送的内容。

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

    不幸的是,我无法设置嗅探器。  

    但是,是否可以实施可选属性,或者直接在终端设备固件上执行某些操作?

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

    如果设备实施了可选属性,则使用 ZTool AF_DATA_Request 发送 ZCL 读取属性以获得正确响应不会有问题。 请设置嗅探器,这样可以节省大量调试时间。

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

    明天我将尝试寻找一种设置嗅探器的方法。  

    我明天会为你更新。

    如果不实施该属性,则是 Danfoss 阀的问题,我无法对此采取任何措施?

    注意:AF_ING_MSG 的成分很奇怪。 无法理解报告制造商代码时始终存在的[0x0C 0x46]和0x1C。  

    fe 1d 
    44 81 --> INCOMING MSG
    0 0 1 2 67 87 1 1 0 3f 0 71 f0 16 0 0 --> VARIOUS DATA
    9 --> LEN OF PAYLOAD
    c 46 --> DON'T KNOW WHAT IT IS
    
    12 19 a --> ZIGBEE ATTRIBUTE REPORT COMMAND
    31 40 --> OPTIONAL ATTRIBUTE
    10 1 --> VALUE
    
    cf b1  --> END-DEVICE NWK ADDR
    1c ---> DON'T KNOW WHAT IT IS
    d3 --> FCS
    

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

    是的, 如果属性未实现,您无法对此采取任何措施。

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

    如果该属性适用于 Zigbee2MQTT 和 Danfoss 网关,则您需要嗅探器来了解有关用于获取信息的正确通信协议和数据包结构的更多信息。  由于 AF_incoming_MSG 正在中继 ZCL 信息,我认为第一个数据字节0x0c 是帧控制(服务器到客户端方向,制造商特定),0x46是事务序列号。  有了这些制造商代码,您需要向制造商询问更多信息。

    此致,
    瑞安

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

    在检查 ZCL 规范并使用 ZTool 进行测试后,我认为正确的有效负载应为“00 01 00 15 40”

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

    您好,

    试过这条命令,但仍然是0x86。

    现在将使用 CC2531EMK 卡设置嗅探器。 您是否更喜欢 Wireshark 或 TI 数据包监听器?

    巴西,

    卢卡·维特里

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

    以下是嗅探器日志:对制造商属性进行多次读取和写入。  

    0x90C1是恒温器的网络地址

    我使用了 TI 数据包监听器。 (不是版本2)

    e2e.ti.com/.../Danfoss.psd

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

    根据嗅探器日志,您成功发送了 read 命令并获得了 read 属性响应。 在哪里可以看到0x86?

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

    当我尝试使用 Z-Tool 时,我收到0x86。 ZigBee2MQTT 工作正常。 这就是为什么我感到困惑。

    (另外:您使用的软件是什么? 看起来不错)

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

    我使用 Ubiqua 协议分析器对嗅探器日志进行解码。 使用 ZigBee2MQTT 或 Z-Tool 时捕获 Danfoss.PSD?  您能否执行屏幕截图以告诉我如何使用 Z-Tool 发送读取命令以及您获得了什么0x86?

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

    嗅探器日志正在使用 ZigBee2MQTT。

    现在将使用 Z-Tool 并将其截屏。 10分钟内即可抵达。  

    感谢您的耐心等待。

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

    就在这里。

    *** WARNING ***
        Unsupported or unformatted message received.  Raw data: 
        0C 45 CA 36 18 41 56 39 FE FF CC CC CC 00 00 
    
    *** WARNING ***
        Unsupported or unformatted message received.  Raw data: 
        0C 45 CA 36 18 41 56 39 FE FF CC CC CC 00 00 
    
    *** WARNING ***
        Unsupported or unformatted message received.  Raw data: 
        0C 45 CA 36 18 41 56 39 FE FF CC CC CC 00 00 
    
    <RX>11:24:36.19 COM4 ZDO_END_DEVICE_ANNCE_IND (0x45C1)
        SrcAddr: 0x1836
        NwkAddr: 0x1836
        IEEEAddr: 0xCCCCCCFFFE395641
        Capabilities: 0x80
    
    <TX>11:25:46.67 COM4 AF_DATA_REQUEST (0x2401)
        DstAddr: 0x1836
        DestEndpoint: 0x01
        SrcEndpoint: 0x01
        ClusterID: 0x0201
        TransID: 0x01
        Options: 0x00
        Radius: 0x1E
        Len: 0x05
        Data: ....@ (0x00, 0x01, 0x00, 0x15, 0x40)
    
    <RX>11:25:46.68 COM4 AF_DATA_REQUEST_SRSP (0x6401)
        Status: afStatus_SUCCESS (0x0)
    
    <RX>11:25:46.7 COM4 AF_DATA_CONFIRM (0x4480)
        Status: afStatus_SUCCESS (0x0)
        Endpoint: 0x01
        TransID: 0x01
    
    <RX>11:25:46.72 COM4 AF_INCOMING_MSG (0x4481)
        GroupID: 0x0000
        ClusterID: 0x0201
        SrcAddr: 0x1836
        SrcEndpoint: 0x01
        DstEndpoint: 0x01
        WasBroadcast: 0x00
        LinkQuality: 0x56
        SecurityUse: 0x00
        Timestamp: 0x0007F6D8
        TransSeqNumber: 0x00
        Len: 0x06
        Data: ....@. (0x08, 0x01, 0x01, 0x15, 0x40, 0x86) <-- HERE.

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

    测试时是否有嗅探器日志?

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

    不幸的是,没有

    Z-Tool 仅适用于 CC2531EMK 子卡,而不适用于声输出转换器。 (可能是因为硅谷实验室桥?)

    因此,我可以用它来进行 Z-Tool 或嗅探。

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

    我可以做的是运行 ZigBee2MQTT,通过使用软件进行 USB 嗅探,我可以看到 Z2M 向协调员发送的内容。

    我今天无法设置它,所以我需要等待一天或两天。  不能承受这么多时间,但出于必要,我可能可以这样做。

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

    尝试使用“14 46 12 17 00 15 40”作为有效载荷从 ZTool 发送,以查看其是否有效。

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

    当然。 5分钟后会再回来

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

    我模仿 ZigBee2MQTT 的有效负载 ,因此我认为它应该起作用。

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

    实际上它是有效的! 不知道 Z2M 是如何制作数据包的,但它是有效的。

    看起来,当您读取数据时,开头会显示0xC 0x46。

    同时,如果要更改值,则必须在开头添加0x14和0x46。 很奇怪,不会说谎哈哈

    <TX>11:50:30.36 COM4 AF_DATA_REQUEST (0x2401)
        DstAddr: 0x1836
        DestEndpoint: 0x01
        SrcEndpoint: 0x01
        ClusterID: 0x0201
        TransID: 0x01
        Options: 0x00
        Radius: 0x1E
        Len: 0x07
        Data: .F....@ (0x14, 0x46, 0x12, 0x17, 0x00, 0x15, 0x40)
    
    <RX>11:50:30.37 COM4 AF_DATA_REQUEST_SRSP (0x6401)
        Status: afStatus_SUCCESS (0x0)
    
    <RX>11:50:32.39 COM4 AF_DATA_CONFIRM (0x4480)
        Status: afStatus_SUCCESS (0x0)
        Endpoint: 0x01
        TransID: 0x01
    
    <RX>11:50:32.4 COM4 AF_INCOMING_MSG (0x4481)
        GroupID: 0x0000
        ClusterID: 0x0201
        SrcAddr: 0x1836
        SrcEndpoint: 0x01
        DstEndpoint: 0x01
        WasBroadcast: 0x00
        LinkQuality: 0x59
        SecurityUse: 0x00
        Timestamp: 0x0006D70F
        TransSeqNumber: 0x00
        Len: 0x0B
        Data: .F....@.).. (0x0C, 0x46, 0x12, 0x17, 0x01, 0x15, 0x40, 0x00, 0x29, 0xC0, 0xE0)

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

    我现在将检查代码0x14 0x46是否也适用于 write 命令。

    编辑:也可以使用写入命令

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

    0x0C 是帧控制字节,0x1246是 制造商代码。 既然它现在起作用,你还有其他问题吗?

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

    非常感谢!

    最后一个问题:当我要访问制造商特定属性/命令时,是否需要将0x0c 和制造商代码添加到每个 AF_DATA_Request 中?

    帧控制的工作是什么? 为什么不总是添加它?

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

    制造商 ID 可在  Danfoss 数据表中找到: Danfoss

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

    考虑到帧控制是 ZCL 数据包的第一个字节,这些结果是有意义的。

    // ZCL header - frame control field
    /// The frame control field is 8 bits in length and contains information defining
    /// the command type and other control flags.
    typedef struct
    {
      unsigned int type:2; //!< Frame type
      unsigned int manuSpecific:1; //!< Manufacturer specific
      unsigned int direction:1; //!< Direction
      unsigned int disableDefaultRsp:1; //!< Disable Default Response
      unsigned int reserved:3; //!< Reserved
    } zclFrameControl_t;

    传感器要求设置手动规格位,在这种情况下,ZCL 帧头的下两个字节需要为手动代码

    // ZCL header
    /// The ZCL frame format is composed of a ZCL header and a ZCL payload
    typedef struct
    {
      zclFrameControl_t fc; //<! The frame control field is 8 bits in length and contains information defining the command type and other control flags.
      uint16_t            manuCode; //<! The manufacturer code field is 16 bits in length and specifies the assigned manufacturer code for proprietary extensions.
      uint8_t             transSeqNum; //<! The Transaction Sequence Number field is 8 bits in length and specifies an identification number for a single transaction that includes one or more frames in both directions.
      uint8_t             commandID; //<! The Command Identifier field is 8 bits in length and specifies the cluster command being used.
    } zclFrameHdr_t;

    接下来是 ZCL 有效负载本身之前的 transSeqNum 和命令 ID。

    此致,
    瑞安

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

    非常感谢!  

    现在我完全理解了。 它还帮助我刷新了有关帧控制的记忆。