3131#endif
3232
3333#include " Zigbee.h"
34+ #include < Preferences.h>
3435
3536/* Zigbee vibration sensor configuration */
3637#define VIBRATION_SENSOR_ENDPOINT_NUMBER 1
@@ -39,9 +40,16 @@ uint8_t sensor_pin = 4;
3940
4041ZigbeeVibrationSensor zbVibrationSensor = ZigbeeVibrationSensor(VIBRATION_SENSOR_ENDPOINT_NUMBER);
4142
43+ /* Preferences for storing ENROLLED flag to persist across reboots */
44+ Preferences preferences;
45+
4246void setup () {
4347 Serial.begin (115200 );
4448
49+ preferences.begin (" Zigbee" , false ); // Save ENROLLED flag in flash so it persists across reboots
50+ bool enrolled = preferences.getBool (" ENROLLED" ); // Get ENROLLED flag from preferences
51+ preferences.end ();
52+
4553 // Init button + sensor
4654 pinMode (button, INPUT_PULLUP);
4755 pinMode (sensor_pin, INPUT);
@@ -67,20 +75,31 @@ void setup() {
6775 delay (100 );
6876 }
6977 Serial.println ();
70- // Request IAS Zone enroll
71- if (!zbVibrationSensor. requestIASZoneEnroll ()) {
72- Serial. println ( " Failed to request IAS Zone enroll! " );
73- Serial.println (" Rebooting... " );
74- ESP. restart ();
78+
79+ // Check if device has been enrolled before restarting - if so, restore IAS Zone enroll, otherwise request new IAS Zone enroll
80+ if (enrolled) {
81+ Serial.println (" Device has been enrolled before - restoring IAS Zone enrollment " );
82+ zbVibrationSensor. restoreIASZoneEnroll ();
7583 } else {
76- Serial.println (" IAS Zone enroll requested successfully!" );
84+ Serial.println (" Device is factory new - first time joining network - requesting new IAS Zone enrollment" );
85+ zbVibrationSensor.requestIASZoneEnroll ();
7786 }
87+
7888 while (!zbVibrationSensor.enrolled ()) {
7989 Serial.print (" ." );
8090 delay (100 );
8191 }
8292 Serial.println ();
8393 Serial.println (" Zigbee enrolled successfully!" );
94+
95+ // Store ENROLLED flag only if this was a new enrollment (previous flag was false)
96+ // Skip writing if we just restored enrollment (flag was already true)
97+ if (!enrolled) {
98+ preferences.begin (" Zigbee" , false );
99+ preferences.putBool (" ENROLLED" , true ); // set ENROLLED flag to true
100+ preferences.end ();
101+ Serial.println (" ENROLLED flag saved to preferences" );
102+ }
84103}
85104
86105void loop () {
@@ -109,6 +128,11 @@ void loop() {
109128 if ((millis () - startTime) > 3000 ) {
110129 // If key pressed for more than 3secs, factory reset Zigbee and reboot
111130 Serial.println (" Resetting Zigbee to factory and rebooting in 1s." );
131+ // Clear the ENROLLED flag from preferences
132+ preferences.begin (" Zigbee" , false );
133+ preferences.putBool (" ENROLLED" , false ); // set ENROLLED flag to false
134+ preferences.end ();
135+ Serial.println (" ENROLLED flag cleared from preferences" );
112136 delay (1000 );
113137 Zigbee.factoryReset ();
114138 }
0 commit comments