-
Notifications
You must be signed in to change notification settings - Fork 7.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(Zigbee): Recall bounded devices after reboot + IEEE address option for commands #10676
feat(Zigbee): Recall bounded devices after reboot + IEEE address option for commands #10676
Conversation
👋 Hello P-R-O-C-H-Y, we appreciate your contribution to this project! Click to see more instructions ...
Review and merge process you can expect ...
|
Test Results 61 files 61 suites 5m 33s ⏱️ Results for commit 3ee00ea. ♻️ This comment has been updated with latest results. |
78c6725
to
97643ec
Compare
Memory usage test (comparing PR against master branch)The table below shows the summary of memory usage change (decrease - increase) in bytes and percentage for each target.
Click to expand the detailed deltas report [usage change in BYTES]
|
97643ec
to
d45a267
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe just a log_i() left behind...
libraries/Zigbee/src/ZigbeeEP.cpp
Outdated
log_i("Bound devices:"); | ||
for ([[maybe_unused]] | ||
const auto &device : _bound_devices) { | ||
log_i("Device on endpoint %d, short address: 0x%x, ieee address: %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x", device->endpoint, device->short_addr, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
log_i("Device on endpoint %d, short address: 0x%x, ieee address: %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x", device->endpoint, device->short_addr, | |
log_d("Device on endpoint %d, short address: 0x%x, ieee address: %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x", device->endpoint, device->short_addr, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's keep log_i for this scenario. If user calls printBoundDevices, and do not provide the Serial where to print, it will be printed with Log Info.
libraries/Zigbee/src/ZigbeeEP.cpp
Outdated
const auto &device : _bound_devices) { | ||
log_i("Device on endpoint %d, short address: 0x%x", device->endpoint, device->short_addr); | ||
print_ieee_addr(device->ieee_addr); | ||
void ZigbeeEP::printBoundDevices(Print *print) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Such functions in Arduino should use Print & print
instead.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@me-no-dev But can I then use a default parameter? So if there is nothing passed, it will print in log_i?
void printBoundDevices(Print *print = nullptr);
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
PR is OK, but please fix the Print function |
9319ce5
to
21409b4
Compare
|
Ready now. |
@@ -191,6 +190,6 @@ void loop() { | |||
static uint32_t lastPrint = 0; | |||
if (millis() - lastPrint > 10000) { | |||
lastPrint = millis(); | |||
zbSwitch.printBoundDevices(); | |||
zbSwitch.printBoundDevices(&Serial); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
should be zbSwitch.printBoundDevices(Serial);
with the new API
* fix(zigbee): Increase timeout, commision again on failure + setScanDuration (espressif#10651) * fix(zigbee): Increase timeout, commision again on failure * fix(zigbee): Update library keywords * feat(Matter): add new MatterColorLight endpoint (espressif#10654) * feat(matter): adds Matter Color Light endpoint * feat(matter): New example => Wifi Prov within Matter as alternative for wireless network provisioning (espressif#10658) * feat(matter): Arduino WiFi Prov example for Matter * feat(matter): Adds Matter Enhanced Color Light Endpoint (CW/WW/RGB) (espressif#10657) * feat(matter): created enhanced color light new matter endpoint and example * feat(matter): Adds a new Matter Endpoint: Generic Switch (smart button) (espressif#10662) * feat(matter): adds new matter generic switch endpoint * fix(matter): no need of arduino preferences here * ci(pre-commit): Apply automatic fixes --------- Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> * BLECharacteristic optimization (espressif#10665) * BLECharacteristic::notify() optimization GeneralUtils::hexDump() doesn't output anything if the log level is not "VERBOSE". Additionally, it is very CPU intensive, even when it doesn't output anything. So it is much better to *not* call it at all if not needed. In a simple program which calls BLECharacteristic::notify() every 50 ms, the performance gain of this little optimization is 37% in release mode (-O3) and 57% in debug mode. Of course, the "#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_VERBOSE" guard could also be put inside the GeneralUtils::hexDump() function itself. But it's better to put it here also, as it is clearer (indicating a verbose log thing) and it allows to remove the "m_value.getValue().c_str()" call, which is in itself quite CPU intensive. * BLECharacteristic optimization Calls to BLEUtils::buildHexData() don't output anything when the log level is not "VERBOSE" or "DEBUG". As this function is quite CPU intensive, it is better to not call it when not needed. * Remove 3rd party references in code and documentation (espressif#10666) * feat(support): documentation adjustment * feat(support): readme files, commentaries and examples * fix(template): Fix Issue Report Template ----------------------------- Co-authored-by: Lucas Saavedra Vaz <[email protected]> * Tasmota changes * optional Ethernet support (JL1101 driver added) * esp-modem only esp32, esp32s2 and esp32s3 * remove `OpenThread` * remove all BT BLE libraries * remove zigbee * remove SPIFFS * remove Client Secure * remove Provisioning * remove TfLite, Insights and Rainmaker * make GPIOViewer working see arendst/Tasmota@9696118 * remove FS log which is just littering * refactor(uart): Refactor UART test to work with any number of UARTs (espressif#10593) * refactor(uart): Refactor UART test to work with any number of UARTs Co-authored-by: Rodrigo Garcia <[email protected]> * fix(uart): Set CPU freq on ESP32 * ci(pre-commit): Apply automatic fixes * fix(spelling): Fix codespell error --------- Co-authored-by: Rodrigo Garcia <[email protected]> Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> * feat (Variants) Added custom boards variants GLYPH C3, GLYPHC6 & GLYPHH2 (espressif#10671) * Added custom boards GLYPH C3, GLYPHC6 & GLYPHH2 based on ESP32C3, ESP32C6 & ESP32H2 * feat(Variants) : Added custom boards GLYPH C3, GLYPHC6 & GLYPHH2 Added custom boards variants from PCBCUPID - GLYPH C3, GLYPHC6 & GLYPHH2 based on ESP32C3, ESP32C6 & ESP32H2 * added required fix : moved the variants to end and fixed build.board * ci(pre-commit): Apply automatic fixes --------- Co-authored-by: srini <[email protected]> Co-authored-by: Jan Procházka <[email protected]> Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> * feat(Zigbee): Recall bounded devices after reboot + IEEE address option for commands (espressif#10676) * feat(zigbee): Recall bound devices after reboot * fix(zigbee): Add missing locks + allow printBoundDevices to Serial * fix(Zigbee): Add locks to temp sensor setReporting * fix(Zigbee): remove unnecessary space in formatting * fix(Zigbee): proper parameter in printBoundDevices * feat(Zigbee): factory reset when removed from network * fix(zigbee): Update comment * fix(zigbee): fix serial and add missing factoryReset to example * ci(pre-commit): Apply automatic fixes --------- Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> * ci(pre-commit): Bump hooks versions and fix leftover files (espressif#10680) * update(hooks): Bump pre-commit hooks versions * fix(formatting): Fix python script formatting * fix(formatting): Fix leftover files on protected folders * feat(Matter): Creates New Matter Fan Controller Endpoint (espressif#10691) * feat(matter): creates new matter fan controller endpoint * change(tools): Push generated binaries to PR * ci(pre-commit): Add bash script formatter and linter (espressif#10681) * ci(pre-commit): Add check for bash scripts * fix(formatting): Fix bash scripts * docs(pre-commit): Add info about the included hooks * fix ESP32-U4WDH chip detection by ESP.getChipModel() (espressif#10696) * fixes chip detection for ESP32-U4WDH * fix(push): Re-comment unused code * feat(matter): adds new Temperature Sensor Matter Endpoint (espressif#10698) * feat(matter): adds new temperature sensor matter endpoint * feat(matter): commentaries review and fixes * feat(matter): commentaries review and fixes * feat(matter): commentaries review and fixes * feat(matter): commentaries review and fixes * feat(matter): commentaries review and fixes * feat(matter): commentaries review and fixes * feat(matter): general commentaries and code review * feat(matter): keeping arduino style for local variables (lower case) * feat(matter): applies a generic temperature unit to the implementation and example * fix(matter): fixed problem with begin(float) implementation * fix(matter): fixed begin(float) initiallization * feat(matter): updated matter temperature keywords with new api * ci(pre-commit): Apply automatic fixes * fix(matter): fixed code spell ci errors in matter temperature sensor --------- Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> * feat(chip): Add definition for BOOT_PIN for all chips (espressif#10700) * feat(chip): Add definition for BOOT_PIN for all chips For use in sketches as default button * fix(core): Make BOOT_PIN static * fix(hal): BOOT_PIN should always be defined * feat(Matter): Adds New Matter Humidity Sensor Endpoint (espressif#10703) * feat(matter): adds matter humidity sensor endpoint * Update and rename platformio-build.py to pioarduino-build.py * feat(matter_examples): apply boot button change to all examples (espressif#10702) * feat(matter_examples): apply boot button change to all examples * ci(tests): Re-enable UART test for P4 * Delete libraries/Matter directory --------- Co-authored-by: Rodrigo Garcia <[email protected]> Co-authored-by: Jan Procházka <[email protected]> Co-authored-by: Me No Dev <[email protected]> Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Sylvain Quendez <[email protected]> Co-authored-by: Lucas Saavedra Vaz <[email protected]> Co-authored-by: PCB CUPID <[email protected]> Co-authored-by: srini <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Michael Stegen <[email protected]>
Hi @P-R-O-C-H-Y, I think there may be a subtle issue with this. In handling My ESP32C6 seemed to randomly factory reset itself, so I started looking into the code. Months ago, in packet captures, I had noticed an issue where IKEA bulbs (Silicon Designs stack, I think) were telling my Lutron Zigbee remotes (Atmel?) to "leave", which dropped them off the network. I think something similar may have happened here. So, perhaps we should only be resetting if
|
Description of Change
This PR adds new feature/fix to recall bounded devices from the binding table after device reboot, with that also the isBound() will return correct value, as the devices will be found if there were some before rebooting.
Other updates:
printBoundDevices()
can now be called with Print parameter, so printing to serial instead of log_i is possible.assert failed: vPortExitCritical port.c:632 (port_uxCriticalNesting[0] > 0)
errorTests scenarios
Tested locally with Switch example + 1 or 3 light/s connected
Related links
Closes #10646