@@ -247,6 +247,7 @@ void esp_zb_app_signal_handler(esp_zb_app_signal_t *signal_struct) {
247247 esp_zb_app_signal_type_t sig_type = (esp_zb_app_signal_type_t )*p_sg_p;
248248 // coordinator variables
249249 esp_zb_zdo_signal_device_annce_params_t *dev_annce_params = NULL ;
250+ esp_zb_zdo_signal_leave_params_t *leave_params = NULL ;
250251 // router variables
251252 esp_zb_zdo_signal_device_update_params_t *dev_update_params = NULL ;
252253
@@ -427,9 +428,17 @@ void esp_zb_app_signal_handler(esp_zb_app_signal_t *signal_struct) {
427428 }
428429 break ;
429430 case ESP_ZB_ZDO_SIGNAL_LEAVE: // End Device + Router
430- // Device was removed from the network, factory reset the device
431+ // Received signal to leave the network
431432 if ((zigbee_role_t )Zigbee.getRole () != ZIGBEE_COORDINATOR) {
432- Zigbee.factoryReset (true );
433+ leave_params = (esp_zb_zdo_signal_leave_params_t *)esp_zb_app_signal_get_params (p_sg_p);
434+ log_v (" Signal to leave the network, leave type: %d" , leave_params->leave_type );
435+ if (leave_params->leave_type == ESP_ZB_NWK_LEAVE_TYPE_RESET) { // Leave without rejoin -> Factory reset
436+ log_i (" Leave without rejoin, factory reset the device" );
437+ Zigbee.factoryReset (true );
438+ } else { // Leave with rejoin -> Rejoin the network, only reboot the device
439+ log_i (" Leave with rejoin, only reboot the device" );
440+ ESP.restart ();
441+ }
433442 }
434443 break ;
435444 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 ;
0 commit comments