@@ -247,6 +247,7 @@ void esp_zb_app_signal_handler(esp_zb_app_signal_t *signal_struct) {
247
247
esp_zb_app_signal_type_t sig_type = (esp_zb_app_signal_type_t )*p_sg_p;
248
248
// coordinator variables
249
249
esp_zb_zdo_signal_device_annce_params_t *dev_annce_params = NULL ;
250
+ esp_zb_zdo_signal_leave_params_t *leave_params = NULL ;
250
251
// router variables
251
252
esp_zb_zdo_signal_device_update_params_t *dev_update_params = NULL ;
252
253
@@ -427,9 +428,17 @@ void esp_zb_app_signal_handler(esp_zb_app_signal_t *signal_struct) {
427
428
}
428
429
break ;
429
430
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
431
432
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
+ }
433
442
}
434
443
break ;
435
444
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