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.

ZigBee 3.0.2组播如何实现多个组

一个协调器下面挂多个类型的终端(开关,插座,灯)

比如说我要控制所有的灯同时亮灭,可以在灯的初始化里面预设相同的组ID

那如果我要组播控制某几个灯亮,另外几个灯灭,这个怎么实现

因为灯默认的组ID都是一样的(不可能每个灯都下载不一样的程序),

能不能在协调器这边直接控制某个终端加如某个组和从某个组退出来?具体如何实现?

如果在在协调器这边直接控制某个终端加如某个组和从某个组退出来,终端这边要不要做什么初始化?

  • 协调器这边可以用 zclGeneral_SendGroupAdd/zclGeneral_SendGroupRemove來去控制某个终端加入某个组和从某个组退出来,终端这边要加上預編譯ZCL_GROUP
  • 一个设备可以加入多个组。

  • 关于GROUP和SENCE先去看下面的文档:
    dev.ti.com/.../node
    Part 2: Groups and Scenes Clusters
  • 请问睡眠的终端是否可以接收组播数据?
    看到文档描述睡眠的终端可以接收广播数据,但是没说是否可以接收组播数据?
    NWK_BROADCAST_SHORTADDR_DEVALL (0xFFFF) – the message will be sent to all devices in the network
    (includes sleeping devices). For sleeping devices, the message is held at its parent until the sleeping device polls for
    it or the message is timed out (NWK_INDIRECT_MSG_TIMEOUT in f8wConfig.cfg).
  • 睡眠的终端是否可以接收组播数据?

    如果剛好醒著的話可以收到,但是一般都會漏接

  • 睡眠设备无法接收任何信息。如果在发送端还在重发中刚好唤醒了可以拿到包。
    睡眠时关闭了RF跟 什么发送方式无关。如果要求实时性以及不丢包就直接不做低功耗设备,用ZR。
  • 我这边的睡眠终端是每秒POLL一次的,
    协调器默认的HOLD时间是7秒,所有我的睡眠终端应该能收到组播数据对吧?
    文档里说. For sleeping devices, the message is held at its parent until the sleeping device polls for
    it or the message is timed out
  • 你这样是可以的,如果超时就会被释放掉,但是感觉1s 一次poll rate 在功耗上意义不是很大。
  • HOLD时间是7秒是給indirect message的,不是broadcast跟groupcast
  • 那3.0.2里默认的broadcast跟groupcast 协调器端的hold时间是多长?
  • broadcast跟groupcast 协调器端不會hold住
  • broadcast 不会储存,会被发送后释放掉.

    NWK_INDIRECT_MSG_TIMEOUT仅使用于unicast
    /* Default indirect message holding timeout value:
    * 1-65535 (0 -> 65536) X CNT_RTG_TIMER X RTG_TIMER_INTERVAL
    */
    #ifndef NWK_INDIRECT_MSG_TIMEOUT
    #define NWK_INDIRECT_MSG_TIMEOUT 7
    #endif
  • 请教个问题(基于3.0.2)
    2530终端每10S会收到传感器的串口数据,收到后发给协调器
    有两种方法:
    1.串口收到后立即发给协调器
    大致代码如下
    case CMD_SERIAL_MSG:
    SampleApp_SerialCMD((mtOSALSerialData_t *)MSGpkt);
    break;
    //收到后发给协调器
    static void SampleApp_SerialCMD(mtOSALSerialData_t *cmdMsg)
    {
    zcl_SendReportCmd;//用该函数发给协调器
    osal_mem_free( pReportData ); //释放空间
    }
    2.类似1,把收到的数据缓存到一个数组,然后在定时器里面调用zcl_SendReportCmd发给协调器

    方式1有没有什么问题?我之前测了方式了发了几个小时就不再发了,必须重启才行,不知什么原因