Replies: 8 comments 5 replies
-
Hi @fumanchi ,
Based on the information above, the |
Beta Was this translation helpful? Give feedback.
-
Let's install a sinffer to identify which process is failing. The install steps can refer to https://docs.espressif.com/projects/esp-zigbee-sdk/en/latest/esp32/developing.html#sniffer-and-wireshark |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
So, there are two questions: (1) a default response failure to the Poll Control Check-in Response, and (2) a long backoff time when the coordinator sends buffered messages to the sleepy device. Let’s focus on the second one:
Typically, a parent (coordinator) only sends messages to its sleepy children after receiving a request from them (e.g., a Data Request). I’m confused about why the coordinator would attempt to send messages during the device’s rejoin process. Could you please share the complete sniffer capture (in .zip) for analysis? |
Beta Was this translation helpful? Give feedback.
-
Based on the sniffer log, everything works fine except for the default response failure to the Poll Control Check-in Response. Let’s summarize this issue again: You intend to use the Poll Control cluster to adjust the poll rate of the sleep device in order to reduce the rejoin time when it wakes up, correct? Are you sure that the 2-second backoff is caused by a buffered message from the coordinator? It might actually be triggered by an incorrect configuration on the sleep device (for example, scanning all channels). From what I observed in the log, the time from the Rejoin Request to the Device Annce is only about 0.5 seconds, which is normal. |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
Not exactly... I do not think that the rejoin time changes due to pending/buffered messages... the rejoin time itself is quite consistent... but pending messages will not be send right after rejoining but after some backoff time as the coordinator tried to send them while my end device was asleep. So I tried to ensure that the coordinator always waits for the end device polling for its messages by utilizing the poll control cluster. I expected (if everything is set up correctly) the coordinator then does not try to send message while the endpoint is in deep sleep but waits for the device to send its poll control cluster checkin request. Lets take a look into the logs... maybe I can clear up things by pointing out the lines. The following lines of Zigbee2MQTT log shows the coordinator gets some "set" commands via MQTT and enqueues corresponding requests (here: window covering cluster messages) into the endpoints sending queue:
Later, the coodinator finds its request has not been answered correctly (reason: the end device was asleep) so it backs off and waits for 2 seconds:
After some retries, the device woke up and announced itself:
The the coordinator received the devices checkin request and answers with its checkin response:
And it takes about 2 precious seconds before the coordinator sends the pending window covering cluster commands:
Afterwards the coordinator sends its pending checkin response message:
Now the sniffer log of the conversation... It gets rejoin and checking messages:
But it takes almost 3 seconds before the window coverage cluster (clusterid=0x0102) commands are send:
Afterwards the checkin response will be send... so might have been enqueued in the sending queue even after the commands:
|
Beta Was this translation helpful? Give feedback.
-
Understood. As you mentioned, the issue seems to originate from Zigbee2MQTT. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
I opened a new discussion on that topic as I was not able to reopen discussion #635.
@xieqinan closed the previous discussion as he implemented poll cluster support. But i still was not able to set up a sleepy endpoint with poll control :(
I do this to create and add the poll control cluster to the endpoints cluster list:
and
esp_zb_cluster_list_add_poll_control_cluster(cluster_list, esp_zb_poll_control_cluster_create(&zb_zcl_poll_cfg), SP_ZB_ZCL_CLUSTER_SERVER_ROLE);
before
Then, when my device is safely joined (signal
ESP_ZB_BDB_SIGNAL_DEVICE_REBOOT
orESP_ZB_BDB_SIGNAL_DEVICE_FIRST_START
), i do:to send a check-in request to the coordinator (here zigbee2mqtt). I sadly get my registered action handler not called for the coordinators check-in response. And the zigbee-sdk does not (at least not transparently) react correctly on the response message, as far as the coordinator log suggests:
Could you please provide some hints or even an example how to correctly implement the now supported poll control cluster using the zigbee-sdk only? Or do i need to mix ZBoss and zigbee-sdk anyhow?
My current environment is:
But i am using the newest esp-zigbee-sdk (at least the esp-zigbee-lib is at 1.6.6):
Beta Was this translation helpful? Give feedback.
All reactions