Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit a3b6fe6

Browse filesBrowse files
feat(zigbee): Add check, boolean returns, fix Analog, add optional reset on factoryReset (espressif#11153)
* feat(zigbee): Add checks on setting attrs and commands * feat(zigbee): Add error info in the logs * fix(zigbee): Fix memory leak, print esp_zb_zcl_status_t error, remove analogValue from analog EP * feat(example): Update factoryResetoption in sleepy example * fix(zigbee): Add error checks to Illuminance EP * fix(zigbee): Return false on first error hit * fix(zigbee): Apply same formatting on all returns * fix(zigbee): Add check when adding a OTA cluster * fix(zigbee): release locks before returning * fix(zigbee): use correct return in doorWindowHandle * fix/zigbee): Add missing return in WindowCovering * fix(zigbee): Added a note of future task * ci(pre-commit): Apply automatic fixes --------- Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
1 parent bbaabb1 commit a3b6fe6
Copy full SHA for a3b6fe6
Expand file treeCollapse file tree

35 files changed

+889
-377
lines changed

‎libraries/Zigbee/examples/Zigbee_Temp_Hum_Sensor_Sleepy/Zigbee_Temp_Hum_Sensor_Sleepy.ino

Copy file name to clipboardExpand all lines: libraries/Zigbee/examples/Zigbee_Temp_Hum_Sensor_Sleepy/Zigbee_Temp_Hum_Sensor_Sleepy.ino
+5-1Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,11 @@ void loop() {
133133
// If key pressed for more than 10secs, factory reset Zigbee and reboot
134134
Serial.println("Resetting Zigbee to factory and rebooting in 1s.");
135135
delay(1000);
136-
Zigbee.factoryReset();
136+
// Optional set reset in factoryReset to false, to not restart device after erasing nvram, but set it to endless sleep manually instead
137+
Zigbee.factoryReset(false);
138+
Serial.println("Going to endless sleep, press RESET button or power off/on the device to wake up");
139+
esp_sleep_disable_wakeup_source(ESP_SLEEP_WAKEUP_TIMER);
140+
esp_deep_sleep_start();
137141
}
138142
}
139143
}

‎libraries/Zigbee/src/ZigbeeCore.cpp

Copy file name to clipboardExpand all lines: libraries/Zigbee/src/ZigbeeCore.cpp
+20-9Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -91,21 +91,26 @@ bool ZigbeeCore::begin(zigbee_role_t role, bool erase_nvs) {
9191
return started();
9292
}
9393

94-
void ZigbeeCore::addEndpoint(ZigbeeEP *ep) {
94+
bool ZigbeeCore::addEndpoint(ZigbeeEP *ep) {
9595
ep_objects.push_back(ep);
9696

9797
log_d("Endpoint: %d, Device ID: 0x%04x", ep->_endpoint, ep->_device_id);
9898
//Register clusters and ep_list to the ZigbeeCore class's ep_list
9999
if (ep->_ep_config.endpoint == 0 || ep->_cluster_list == nullptr) {
100100
log_e("Endpoint config or Cluster list is not initialized, EP not added to ZigbeeCore's EP list");
101-
return;
101+
return false;
102102
}
103-
103+
esp_err_t ret = ESP_OK;
104104
if (ep->_device_id == ESP_ZB_HA_HOME_GATEWAY_DEVICE_ID) {
105-
esp_zb_ep_list_add_gateway_ep(_zb_ep_list, ep->_cluster_list, ep->_ep_config);
105+
ret = esp_zb_ep_list_add_gateway_ep(_zb_ep_list, ep->_cluster_list, ep->_ep_config);
106106
} else {
107-
esp_zb_ep_list_add_ep(_zb_ep_list, ep->_cluster_list, ep->_ep_config);
107+
ret = esp_zb_ep_list_add_ep(_zb_ep_list, ep->_cluster_list, ep->_ep_config);
108+
}
109+
if (ret != ESP_OK) {
110+
log_e("Failed to add endpoint: 0x%x: %s", ret, esp_err_to_name(ret));
111+
return false;
108112
}
113+
return true;
109114
}
110115

111116
static void esp_zb_task(void *pvParameters) {
@@ -368,16 +373,22 @@ void esp_zb_app_signal_handler(esp_zb_app_signal_t *signal_struct) {
368373
case ESP_ZB_ZDO_SIGNAL_LEAVE: // End Device + Router
369374
// Device was removed from the network, factory reset the device
370375
if ((zigbee_role_t)Zigbee.getRole() != ZIGBEE_COORDINATOR) {
371-
Zigbee.factoryReset();
376+
Zigbee.factoryReset(true);
372377
}
373378
break;
374379
default: log_v("ZDO signal: %s (0x%x), status: %s", esp_zb_zdo_signal_to_string(sig_type), sig_type, esp_err_to_name(err_status)); break;
375380
}
376381
}
377382

378-
void ZigbeeCore::factoryReset() {
379-
log_v("Factory resetting Zigbee stack, device will reboot");
380-
esp_zb_factory_reset();
383+
void ZigbeeCore::factoryReset(bool restart) {
384+
if (restart) {
385+
log_v("Factory resetting Zigbee stack, device will reboot");
386+
esp_zb_factory_reset();
387+
} else {
388+
log_v("Factory resetting Zigbee NVRAM to factory default");
389+
log_w("The device will not reboot, to take effect please reboot the device manually");
390+
esp_zb_zcl_reset_nvram_to_factory_default();
391+
}
381392
}
382393

383394
void ZigbeeCore::scanCompleteCallback(esp_zb_zdp_status_t zdo_status, uint8_t count, esp_zb_network_descriptor_t *nwk_descriptor) {

‎libraries/Zigbee/src/ZigbeeCore.h

Copy file name to clipboardExpand all lines: libraries/Zigbee/src/ZigbeeCore.h
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ class ZigbeeCore {
129129
return _role;
130130
}
131131

132-
void addEndpoint(ZigbeeEP *ep);
132+
bool addEndpoint(ZigbeeEP *ep);
133133
//void removeEndpoint(ZigbeeEP *ep);
134134

135135
void setRadioConfig(esp_zb_radio_config_t config);
@@ -164,7 +164,7 @@ class ZigbeeCore {
164164
zigbee_scan_result_t *getScanResult();
165165
void scanDelete();
166166

167-
void factoryReset();
167+
void factoryReset(bool restart = true);
168168

169169
// Friend function declaration to allow access to private members
170170
friend void esp_zb_app_signal_handler(esp_zb_app_signal_t *signal_struct);

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.