Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 1730e4e

Browse files
P-R-O-C-H-YSuGliderpre-commit-ci-lite[bot]
authoredNov 25, 2024··
fix(zigbee): Add connected(), minor fixes, example update (#10636)
* fix(zigbee): Add connected and minor fixes, example update * fix(example): Use correct API call for connected * fix(zigbee): Increase timeout and add semaphore to begin * feat(zigbee): Add option to select debug libs for zigbee * fix(example): fix warning by double percentage symbol * fix(example): Fix serial prints for Windows os Co-authored-by: Rodrigo Garcia <[email protected]> * ci(pre-commit): Apply automatic fixes * fix(example): Fix precommit spelling --------- 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>
1 parent 9417a84 commit 1730e4e

File tree

15 files changed

+198
-88
lines changed

15 files changed

+198
-88
lines changed
 

‎boards.txt

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,15 @@ esp32h2.menu.ZigbeeMode.zczr.build.zigbee_libs=-lesp_zb_api_zczr -lesp_zb_cli_co
531531
esp32h2.menu.ZigbeeMode.rcp=Zigbee RCP (radio co-processor)
532532
esp32h2.menu.ZigbeeMode.rcp.build.zigbee_mode=-DZIGBEE_MODE_RCP
533533
esp32h2.menu.ZigbeeMode.rcp.build.zigbee_libs=-lesp_zb_api_rcp -lesp_zb_cli_command -lzboss_stack.rcp -lzboss_port
534-
534+
esp32h2.menu.ZigbeeMode.ed_debug=Zigbee ED (end device) - Debug
535+
esp32h2.menu.ZigbeeMode.ed_debug.build.zigbee_mode=-DZIGBEE_MODE_ED
536+
esp32h2.menu.ZigbeeMode.ed_debug.build.zigbee_libs=-lesp_zb_api_ed.debug -lesp_zb_cli_command -lzboss_stack.ed.debug -lzboss_port.debug
537+
esp32h2.menu.ZigbeeMode.zczr_debug=Zigbee ZCZR (coordinator/router) - Debug
538+
esp32h2.menu.ZigbeeMode.zczr_debug.build.zigbee_mode=-DZIGBEE_MODE_ZCZR
539+
esp32h2.menu.ZigbeeMode.zczr_debug.build.zigbee_libs=-lesp_zb_api_zczr.debug -lesp_zb_cli_command -lzboss_stack.zczr.debug -lzboss_port.debug
540+
esp32h2.menu.ZigbeeMode.rcp_debug=Zigbee RCP (radio co-processor) - Debug
541+
esp32h2.menu.ZigbeeMode.rcp_debug.build.zigbee_mode=-DZIGBEE_MODE_RCP
542+
esp32h2.menu.ZigbeeMode.rcp_debug.build.zigbee_libs=-lesp_zb_api_rcp.debug -lesp_zb_cli_command -lzboss_stack.rcp.debug -lzboss_port.debug
535543

536544
##############################################################
537545

@@ -723,6 +731,15 @@ esp32c6.menu.ZigbeeMode.zczr.build.zigbee_libs=-lesp_zb_api_zczr -lesp_zb_cli_co
723731
esp32c6.menu.ZigbeeMode.rcp=Zigbee RCP (radio co-processor)
724732
esp32c6.menu.ZigbeeMode.rcp.build.zigbee_mode=-DZIGBEE_MODE_RCP
725733
esp32c6.menu.ZigbeeMode.rcp.build.zigbee_libs=-lesp_zb_api_rcp -lesp_zb_cli_command -lzboss_stack.rcp -lzboss_port
734+
esp32c6.menu.ZigbeeMode.ed_debug=Zigbee ED (end device) - Debug
735+
esp32c6.menu.ZigbeeMode.ed_debug.build.zigbee_mode=-DZIGBEE_MODE_ED
736+
esp32c6.menu.ZigbeeMode.ed_debug.build.zigbee_libs=-lesp_zb_api_ed.debug -lesp_zb_cli_command -lzboss_stack.ed.debug -lzboss_port.debug
737+
esp32c6.menu.ZigbeeMode.zczr_debug=Zigbee ZCZR (coordinator/router) - Debug
738+
esp32c6.menu.ZigbeeMode.zczr_debug.build.zigbee_mode=-DZIGBEE_MODE_ZCZR
739+
esp32c6.menu.ZigbeeMode.zczr_debug.build.zigbee_libs=-lesp_zb_api_zczr.debug -lesp_zb_cli_command -lzboss_stack.zczr.debug -lzboss_port.debug
740+
esp32c6.menu.ZigbeeMode.rcp_debug=Zigbee RCP (radio co-processor) - Debug
741+
esp32c6.menu.ZigbeeMode.rcp_debug.build.zigbee_mode=-DZIGBEE_MODE_RCP
742+
esp32c6.menu.ZigbeeMode.rcp_debug.build.zigbee_libs=-lesp_zb_api_rcp.debug -lesp_zb_cli_command -lzboss_stack.rcp.debug -lzboss_port.debug
726743

727744
##############################################################
728745

‎libraries/Zigbee/examples/Zigbee_Color_Dimmable_Light/Zigbee_Color_Dimmable_Light.ino

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ void identify(uint16_t time) {
6464

6565
/********************* Arduino functions **************************/
6666
void setup() {
67+
Serial.begin(115200);
68+
while (!Serial) {
69+
delay(10);
70+
}
71+
6772
// Init RMT and leave light OFF
6873
rgbLedWrite(LED_PIN, 0, 0, 0);
6974

@@ -80,12 +85,21 @@ void setup() {
8085
zbColorLight.setManufacturerAndModel("Espressif", "ZBColorLightBulb");
8186

8287
// Add endpoint to Zigbee Core
83-
log_d("Adding ZigbeeLight endpoint to Zigbee Core");
88+
Serial.println("Adding ZigbeeLight endpoint to Zigbee Core");
8489
Zigbee.addEndpoint(&zbColorLight);
8590

86-
// When all EPs are registered, start Zigbee. By default acts as ZIGBEE_END_DEVICE
87-
log_d("Calling Zigbee.begin()");
88-
Zigbee.begin();
91+
// When all EPs are registered, start Zigbee in End Device mode
92+
if (!Zigbee.begin()) {
93+
Serial.println("Zigbee failed to start!");
94+
Serial.println("Rebooting...");
95+
ESP.restart();
96+
}
97+
Serial.println("Connecting to network");
98+
while (!Zigbee.connected()) {
99+
Serial.print(".");
100+
delay(100);
101+
}
102+
Serial.println();
89103
}
90104

91105
void loop() {
@@ -98,7 +112,8 @@ void loop() {
98112
delay(50);
99113
if ((millis() - startTime) > 3000) {
100114
// If key pressed for more than 3secs, factory reset Zigbee and reboot
101-
Serial.printf("Resetting Zigbee to factory settings, reboot.\n");
115+
Serial.println("Resetting Zigbee to factory and rebooting in 1s.");
116+
delay(1000);
102117
Zigbee.factoryReset();
103118
}
104119
}

‎libraries/Zigbee/examples/Zigbee_Color_Dimmer_Switch/Zigbee_Color_Dimmer_Switch.ino

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ ZigbeeColorDimmerSwitch zbSwitch = ZigbeeColorDimmerSwitch(SWITCH_ENDPOINT_NUMBE
4646

4747
/********************* Arduino functions **************************/
4848
void setup() {
49-
5049
Serial.begin(115200);
5150
while (!Serial) {
5251
delay(10);
@@ -68,11 +67,15 @@ void setup() {
6867
Zigbee.setRebootOpenNetwork(180);
6968

7069
//When all EPs are registered, start Zigbee with ZIGBEE_COORDINATOR mode
71-
Zigbee.begin(ZIGBEE_COORDINATOR);
70+
if (!Zigbee.begin(ZIGBEE_COORDINATOR)) {
71+
Serial.println("Zigbee failed to start!");
72+
Serial.println("Rebooting...");
73+
ESP.restart();
74+
}
7275

7376
Serial.println("Waiting for Light to bound to the switch");
7477
//Wait for switch to bound to a light:
75-
while (!zbSwitch.isBound()) {
78+
while (!zbSwitch.bound()) {
7679
Serial.printf(".");
7780
delay(500);
7881
}

‎libraries/Zigbee/examples/Zigbee_On_Off_Light/Zigbee_On_Off_Light.ino

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ void setLED(bool value) {
4545

4646
/********************* Arduino functions **************************/
4747
void setup() {
48+
Serial.begin(115200);
49+
while (!Serial) {
50+
delay(10);
51+
}
4852
// Init LED and turn it OFF (if LED_PIN == RGB_BUILTIN, the rgbLedWrite() will be used under the hood)
4953
pinMode(LED_PIN, OUTPUT);
5054
digitalWrite(LED_PIN, LOW);
@@ -59,12 +63,21 @@ void setup() {
5963
zbLight.onLightChange(setLED);
6064

6165
//Add endpoint to Zigbee Core
62-
log_d("Adding ZigbeeLight endpoint to Zigbee Core");
66+
Serial.println("Adding ZigbeeLight endpoint to Zigbee Core");
6367
Zigbee.addEndpoint(&zbLight);
6468

6569
// When all EPs are registered, start Zigbee. By default acts as ZIGBEE_END_DEVICE
66-
log_d("Calling Zigbee.begin()");
67-
Zigbee.begin();
70+
if (!Zigbee.begin()) {
71+
Serial.println("Zigbee failed to start!");
72+
Serial.println("Rebooting...");
73+
ESP.restart();
74+
}
75+
Serial.println("Connecting to network");
76+
while (!Zigbee.connected()) {
77+
Serial.print(".");
78+
delay(100);
79+
}
80+
Serial.println();
6881
}
6982

7083
void loop() {
@@ -77,7 +90,8 @@ void loop() {
7790
delay(50);
7891
if ((millis() - startTime) > 3000) {
7992
// If key pressed for more than 3secs, factory reset Zigbee and reboot
80-
Serial.printf("Resetting Zigbee to factory settings, reboot.\n");
93+
Serial.println("Resetting Zigbee to factory and rebooting in 1s.");
94+
delay(1000);
8195
Zigbee.factoryReset();
8296
}
8397
}

‎libraries/Zigbee/examples/Zigbee_On_Off_Switch/Zigbee_On_Off_Switch.ino

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ ZigbeeSwitch zbSwitch = ZigbeeSwitch(SWITCH_ENDPOINT_NUMBER);
7070
static void onZbButton(SwitchData *button_func_pair) {
7171
if (button_func_pair->func == SWITCH_ONOFF_TOGGLE_CONTROL) {
7272
// Send toggle command to the light
73+
Serial.println("Toggling light");
7374
zbSwitch.lightToggle();
7475
}
7576
}
@@ -93,7 +94,6 @@ static void enableGpioInterrupt(bool enabled) {
9394

9495
/********************* Arduino functions **************************/
9596
void setup() {
96-
9797
Serial.begin(115200);
9898
while (!Serial) {
9999
delay(10);
@@ -106,7 +106,7 @@ void setup() {
106106
zbSwitch.allowMultipleBinding(true);
107107

108108
//Add endpoint to Zigbee Core
109-
log_d("Adding ZigbeeSwitch endpoint to Zigbee Core");
109+
Serial.println("Adding ZigbeeSwitch endpoint to Zigbee Core");
110110
Zigbee.addEndpoint(&zbSwitch);
111111

112112
//Open network for 180 seconds after boot
@@ -118,19 +118,22 @@ void setup() {
118118
/* create a queue to handle gpio event from isr */
119119
gpio_evt_queue = xQueueCreate(10, sizeof(SwitchData));
120120
if (gpio_evt_queue == 0) {
121-
log_e("Queue was not created and must not be used");
122-
while (1);
121+
Serial.println("Queue creating failed, rebooting...");
122+
ESP.restart();
123123
}
124124
attachInterruptArg(buttonFunctionPair[i].pin, onGpioInterrupt, (void *)(buttonFunctionPair + i), FALLING);
125125
}
126126

127127
// When all EPs are registered, start Zigbee with ZIGBEE_COORDINATOR mode
128-
log_d("Calling Zigbee.begin()");
129-
Zigbee.begin(ZIGBEE_COORDINATOR);
128+
if (!Zigbee.begin(ZIGBEE_COORDINATOR)) {
129+
Serial.println("Zigbee failed to start!");
130+
Serial.println("Rebooting...");
131+
ESP.restart();
132+
}
130133

131134
Serial.println("Waiting for Light to bound to the switch");
132135
//Wait for switch to bound to a light:
133-
while (!zbSwitch.isBound()) {
136+
while (!zbSwitch.bound()) {
134137
Serial.printf(".");
135138
delay(500);
136139
}

‎libraries/Zigbee/examples/Zigbee_Scan_Networks/Zigbee_Scan_Networks.ino

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
#include "Zigbee.h"
3333

3434
#ifdef ZIGBEE_MODE_ZCZR
35-
zigbee_role_t role = ZIGBEE_ROUTER; // or can be ZIGBEE_COORDINATOR, but it wont scan itself
35+
zigbee_role_t role = ZIGBEE_ROUTER; // or can be ZIGBEE_COORDINATOR, but it won't scan itself
3636
#else
3737
zigbee_role_t role = ZIGBEE_END_DEVICE;
3838
#endif
@@ -81,14 +81,13 @@ void setup() {
8181
}
8282

8383
// Initialize Zigbee stack without any EPs just for scanning
84-
Zigbee.begin(role);
85-
86-
// Waint until Zigbee stack is ready
87-
while (!Zigbee.isStarted()) {
88-
delay(100);
84+
if (!Zigbee.begin(role)) {
85+
Serial.println("Zigbee failed to start!");
86+
Serial.println("Rebooting...");
87+
ESP.restart();
8988
}
9089

91-
Serial.println("Setup done");
90+
Serial.println("Setup done, starting Zigbee network scan...");
9291
// Start Zigbee Network Scan with default parameters (all channels, scan time 5)
9392
Zigbee.scanNetworks();
9493
}
@@ -98,7 +97,7 @@ void loop() {
9897
int16_t ZigbeeScanStatus = Zigbee.scanComplete();
9998
if (ZigbeeScanStatus < 0) { // it is busy scanning or got an error
10099
if (ZigbeeScanStatus == ZB_SCAN_FAILED) {
101-
Serial.println("WiFi Scan has failed. Starting again.");
100+
Serial.println("Zigbee scan has failed. Starting again.");
102101
Zigbee.scanNetworks();
103102
}
104103
// other option is status ZB_SCAN_RUNNING - just wait.

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

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
*/
2828

2929
#ifndef ZIGBEE_MODE_ED
30-
#error "Zigbee coordinator mode is not selected in Tools->Zigbee mode"
30+
#error "Zigbee end device mode is not selected in Tools->Zigbee mode"
3131
#endif
3232

3333
#include "Zigbee.h"
@@ -56,14 +56,19 @@ void meausureAndSleep() {
5656
zbTempSensor.reportTemperature();
5757
zbTempSensor.reportHumidity();
5858

59-
log_d("Temperature: %.2f°C, Humidity: %.2f%", temperature, humidity);
59+
Serial.printf("Reported temperature: %.2f°C, Humidity: %.2f%%\r\n", temperature, humidity);
6060

6161
// Put device to deep sleep
62+
Serial.println("Going to sleep now");
6263
esp_deep_sleep_start();
6364
}
6465

6566
/********************* Arduino functions **************************/
6667
void setup() {
68+
Serial.begin(115200);
69+
while (!Serial) {
70+
delay(10);
71+
}
6772
// Init button switch
6873
pinMode(BUTTON_PIN, INPUT_PULLUP);
6974

@@ -94,14 +99,20 @@ void setup() {
9499
zigbeeConfig.nwk_cfg.zed_cfg.keep_alive = 10000;
95100

96101
// When all EPs are registered, start Zigbee in End Device mode
97-
Zigbee.begin(&zigbeeConfig, false);
98-
99-
// Wait for Zigbee to start
100-
while (!Zigbee.isStarted()) {
102+
if (!Zigbee.begin(&zigbeeConfig, false)) {
103+
Serial.println("Zigbee failed to start!");
104+
Serial.println("Rebooting...");
105+
ESP.restart();
106+
}
107+
Serial.println("Connecting to network");
108+
while (!Zigbee.connected()) {
109+
Serial.print(".");
101110
delay(100);
102111
}
112+
Serial.println();
113+
Serial.println("Successfully connected to Zigbee network");
103114

104-
// Delay 5s to allow establishing connection with coordinator, needed for sleepy devices
115+
// Delay 5s (may be adjusted) to allow establishing proper connection with coordinator, needed for sleepy devices
105116
delay(5000);
106117
}
107118

@@ -115,7 +126,8 @@ void loop() {
115126
delay(50);
116127
if ((millis() - startTime) > 3000) {
117128
// If key pressed for more than 3secs, factory reset Zigbee and reboot
118-
Zigbee.factoryReset();
129+
Serial.println("Resetting Zigbee to factory and rebooting in 1s.");
130+
delay(1000);
119131
}
120132
}
121133
}

‎libraries/Zigbee/examples/Zigbee_Temperature_Sensor/Zigbee_Temperature_Sensor.ino

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
*/
2828

2929
#ifndef ZIGBEE_MODE_ED
30-
#error "Zigbee coordinator mode is not selected in Tools->Zigbee mode"
30+
#error "Zigbee end device mode is not selected in Tools->Zigbee mode"
3131
#endif
3232

3333
#include "Zigbee.h"
@@ -42,7 +42,7 @@ static void temp_sensor_value_update(void *arg) {
4242
for (;;) {
4343
// Read temperature sensor value
4444
float tsens_value = temperatureRead();
45-
log_v("Temperature sensor value: %.2f°C", tsens_value);
45+
Serial.printf("Updated temperature sensor value to %.2f°C\r\n", tsens_value);
4646
// Update temperature value in Temperature sensor EP
4747
zbTempSensor.setTemperature(tsens_value);
4848
delay(1000);
@@ -51,12 +51,10 @@ static void temp_sensor_value_update(void *arg) {
5151

5252
/********************* Arduino functions **************************/
5353
void setup() {
54-
5554
Serial.begin(115200);
5655
while (!Serial) {
5756
delay(10);
5857
}
59-
6058
// Init button switch
6159
pinMode(BUTTON_PIN, INPUT_PULLUP);
6260

@@ -72,8 +70,21 @@ void setup() {
7270
// Add endpoint to Zigbee Core
7371
Zigbee.addEndpoint(&zbTempSensor);
7472

73+
Serial.println("Starting Zigbee...");
7574
// When all EPs are registered, start Zigbee in End Device mode
76-
Zigbee.begin();
75+
if (!Zigbee.begin()) {
76+
Serial.println("Zigbee failed to start!");
77+
Serial.println("Rebooting...");
78+
ESP.restart();
79+
} else {
80+
Serial.println("Zigbee started successfully!");
81+
}
82+
Serial.println("Connecting to network");
83+
while (!Zigbee.connected()) {
84+
Serial.print(".");
85+
delay(100);
86+
}
87+
Serial.println();
7788

7889
// Start Temperature sensor reading task
7990
xTaskCreate(temp_sensor_value_update, "temp_sensor_update", 2048, NULL, 10, NULL);
@@ -96,7 +107,8 @@ void loop() {
96107
delay(50);
97108
if ((millis() - startTime) > 3000) {
98109
// If key pressed for more than 3secs, factory reset Zigbee and reboot
99-
Serial.printf("Resetting Zigbee to factory settings, reboot.\n");
110+
Serial.println("Resetting Zigbee to factory and rebooting in 1s.");
111+
delay(1000);
100112
Zigbee.factoryReset();
101113
}
102114
}

‎libraries/Zigbee/examples/Zigbee_Thermostat/Zigbee_Thermostat.ino

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,19 +80,22 @@ void setup() {
8080
Zigbee.setRebootOpenNetwork(180);
8181

8282
// When all EPs are registered, start Zigbee with ZIGBEE_COORDINATOR mode
83-
Zigbee.begin(ZIGBEE_COORDINATOR);
84-
85-
Serial.println("Waiting for Temperature sensor to bound to the switch");
83+
if (!Zigbee.begin(ZIGBEE_COORDINATOR)) {
84+
Serial.println("Zigbee failed to start!");
85+
Serial.println("Rebooting...");
86+
ESP.restart();
87+
}
8688

87-
//Wait for switch to bound to a light:
88-
while (!zbThermostat.isBound()) {
89+
Serial.println("Waiting for Temperature sensor to bound to the thermostat");
90+
while (!zbThermostat.bound()) {
8991
Serial.printf(".");
9092
delay(500);
9193
}
9294

95+
Serial.println();
96+
9397
// Get temperature sensor configuration
9498
zbThermostat.getSensorSettings();
95-
Serial.println();
9699
}
97100

98101
void loop() {

‎libraries/Zigbee/keywords.txt

Lines changed: 36 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -30,36 +30,52 @@ zigbee_scan_result_t KEYWORD1
3030
#######################################
3131

3232
# ZigbeeCore
33-
isStarted KEYWORD2
33+
begin KEYWORD2
34+
started KEYWORD2
35+
connected KEYWORD2
36+
getRole KEYWORD2
3437
addEndpoint KEYWORD2
3538
setRadioConfig KEYWORD2
36-
setHostConfig KEYWORD2
3739
getRadioConfig KEYWORD2
40+
setHostConfig KEYWORD2
3841
getHostConfig KEYWORD2
3942
setPrimaryChannelMask KEYWORD2
4043
setRebootOpenNetwork KEYWORD2
44+
openNetwork KEYWORD2
4145
scanNetworks KEYWORD2
4246
scanComplete KEYWORD2
4347
getScanResult KEYWORD2
4448
scanDelete KEYWORD2
4549
factoryReset KEYWORD2
4650

4751
# Common ZigbeeEP
52+
setEpConfig KEYWORD2
4853
setVersion KEYWORD2
49-
setManufacturerAndModel KEYWORD2
50-
is_bound KEYWORD2
54+
getEndpoint KEYWORD2
5155
printBoundDevices KEYWORD2
56+
getBoundDevices KEYWORD2
57+
bound KEYWORD2
5258
allowMultipleBinding KEYWORD2
59+
setManufacturerAndModel KEYWORD2
60+
setPowerSource KEYWORD2
61+
setBatteryPercentage KEYWORD2
62+
reportBatteryPercentage KEYWORD2
63+
readManufacturer KEYWORD2
64+
readModel KEYWORD2
65+
onIdentify KEYWORD2
5366

5467
# ZigbeeLight + ZigbeeColorDimmableLight
55-
setOnOff KEYWORD2
56-
sceneControl KEYWORD2
57-
setOnOffTime KEYWORD2
58-
setOffWaitTime KEYWORD2
59-
setLevel KEYWORD2
60-
setColor KEYWORD2
61-
setColorSaturation KEYWORD2
62-
setColorHue KEYWORD2
68+
onLightChange KEYWORD2
69+
restoreLight KEYWORD2
70+
setLight KEYWORD2
71+
setLightState KEYWORD2
72+
setLightLevel KEYWORD2
73+
setLightColor KEYWORD2
74+
getLightState KEYWORD2
75+
getLightLevel KEYWORD2
76+
getLightRed KEYWORD2
77+
getLightGreen KEYWORD2
78+
getLightBlue KEYWORD2
6379

6480
# ZigbeeSwitch + ZigbeeColorDimmerSwitch
6581
lightToggle KEYWORD2
@@ -70,22 +86,23 @@ lightOnWithTimedOff KEYWORD2
7086
lightOnWithSceneRecall KEYWORD2
7187
setLightLevel KEYWORD2
7288
setLightColor KEYWORD2
73-
setLightColorSaturation KEYWORD2
74-
setLightColorHue KEYWORD2
7589

76-
# ZigbeeTempSensor
90+
# ZigbeeTempSensor + humidity
7791
setTemperature KEYWORD2
7892
setMinMaxValue KEYWORD2
7993
setTolerance KEYWORD2
8094
setReporting KEYWORD2
8195
reportTemperature KEYWORD2
96+
addHumiditySensor KEYWORD2
97+
setHumidity KEYWORD2
98+
setHumidityReporting KEYWORD2
99+
reportHumidity KEYWORD2
82100

83101
# ZigbeeThermostat
84-
temperatureRead KEYWORD2
85-
temperatureMin KEYWORD2
86-
temperatureMax KEYWORD2
87-
temperatureTolerance KEYWORD2
102+
onTempRecieve KEYWORD2
103+
onConfigRecieve KEYWORD2
88104
getTemperature KEYWORD2
105+
getSensorSettings KEYWORD2
89106
setTemperatureReporting KEYWORD2
90107

91108
#######################################

‎libraries/Zigbee/src/ZigbeeCore.cpp

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
#include "ZigbeeHandlers.cpp"
77
#include "Arduino.h"
88

9+
#define ZB_INIT_TIMEOUT 10000 // 10 seconds
10+
911
extern "C" void zb_set_ed_node_descriptor(bool power_src, bool rx_on_when_idle, bool alloc_addr);
1012
static bool edBatteryPowered = false;
1113

@@ -17,6 +19,13 @@ ZigbeeCore::ZigbeeCore() {
1719
_open_network = 0;
1820
_scan_status = ZB_SCAN_FAILED;
1921
_started = false;
22+
_connected = false;
23+
if (!lock) {
24+
lock = xSemaphoreCreateBinary();
25+
if (lock == NULL) {
26+
log_e("Semaphore creation failed");
27+
}
28+
}
2029
}
2130
ZigbeeCore::~ZigbeeCore() {}
2231

@@ -25,10 +34,14 @@ static esp_err_t zb_action_handler(esp_zb_core_action_callback_id_t callback_id,
2534

2635
bool ZigbeeCore::begin(esp_zb_cfg_t *role_cfg, bool erase_nvs) {
2736
if (!zigbeeInit(role_cfg, erase_nvs)) {
37+
log_e("ZigbeeCore begin failed");
2838
return false;
2939
}
3040
_role = (zigbee_role_t)role_cfg->esp_zb_role;
31-
return true;
41+
if (xSemaphoreTake(lock, ZB_INIT_TIMEOUT) != pdTRUE) {
42+
log_e("ZigbeeCore begin timeout");
43+
}
44+
return started();
3245
}
3346

3447
bool ZigbeeCore::begin(zigbee_role_t role, bool erase_nvs) {
@@ -57,7 +70,10 @@ bool ZigbeeCore::begin(zigbee_role_t role, bool erase_nvs) {
5770
}
5871
default: log_e("Invalid Zigbee Role"); return false;
5972
}
60-
return status;
73+
if (!status || xSemaphoreTake(lock, ZB_INIT_TIMEOUT) != pdTRUE) {
74+
log_e("ZigbeeCore begin failed or timeout");
75+
}
76+
return started();
6177
}
6278

6379
void ZigbeeCore::addEndpoint(ZigbeeEP *ep) {
@@ -167,7 +183,7 @@ void ZigbeeCore::setRebootOpenNetwork(uint8_t time) {
167183
}
168184

169185
void ZigbeeCore::openNetwork(uint8_t time) {
170-
if (isStarted()) {
186+
if (started()) {
171187
log_v("Opening network for joining for %d seconds", time);
172188
esp_zb_bdb_open_network(time);
173189
}
@@ -203,21 +219,24 @@ void esp_zb_app_signal_handler(esp_zb_app_signal_t *signal_struct) {
203219
} else {
204220
log_i("Start network steering");
205221
esp_zb_bdb_start_top_level_commissioning(ESP_ZB_BDB_MODE_NETWORK_STEERING);
222+
Zigbee._started = true;
223+
xSemaphoreGive(Zigbee.lock);
206224
}
207-
//-----------------
208-
209225
} else {
210226
log_i("Device rebooted");
211227
Zigbee._started = true;
228+
xSemaphoreGive(Zigbee.lock);
212229
if ((zigbee_role_t)Zigbee.getRole() == ZIGBEE_COORDINATOR && Zigbee._open_network > 0) {
213230
log_i("Opening network for joining for %d seconds", Zigbee._open_network);
214231
esp_zb_bdb_open_network(Zigbee._open_network);
232+
} else {
233+
Zigbee._connected = true;
215234
}
216235
}
217236
} else {
218237
/* commissioning failed */
219238
log_e("Failed to initialize Zigbee stack (status: %s)", esp_err_to_name(err_status));
220-
esp_restart();
239+
xSemaphoreGive(Zigbee.lock);
221240
}
222241
break;
223242
case ESP_ZB_BDB_SIGNAL_FORMATION: // Coordinator
@@ -243,6 +262,7 @@ void esp_zb_app_signal_handler(esp_zb_app_signal_t *signal_struct) {
243262
log_i("Network steering started");
244263
}
245264
Zigbee._started = true;
265+
xSemaphoreGive(Zigbee.lock);
246266
} else {
247267
if (err_status == ESP_OK) {
248268
esp_zb_ieee_addr_t extended_pan_id;
@@ -252,7 +272,7 @@ void esp_zb_app_signal_handler(esp_zb_app_signal_t *signal_struct) {
252272
extended_pan_id[7], extended_pan_id[6], extended_pan_id[5], extended_pan_id[4], extended_pan_id[3], extended_pan_id[2], extended_pan_id[1],
253273
extended_pan_id[0], esp_zb_get_pan_id(), esp_zb_get_current_channel(), esp_zb_get_short_address()
254274
);
255-
Zigbee._started = true;
275+
Zigbee._connected = true;
256276
} else {
257277
log_i("Network steering was not successful (status: %s)", esp_err_to_name(err_status));
258278
esp_zb_scheduler_alarm((esp_zb_callback_t)bdb_start_top_level_commissioning_cb, ESP_ZB_BDB_MODE_NETWORK_STEERING, 1000);
@@ -281,7 +301,7 @@ void esp_zb_app_signal_handler(esp_zb_app_signal_t *signal_struct) {
281301

282302
// for each endpoint in the list call the findEndpoint function if not bounded or allowed to bind multiple devices
283303
for (std::list<ZigbeeEP *>::iterator it = Zigbee.ep_objects.begin(); it != Zigbee.ep_objects.end(); ++it) {
284-
if (!(*it)->isBound() || (*it)->epAllowMultipleBinding()) {
304+
if (!(*it)->bound() || (*it)->epAllowMultipleBinding()) {
285305
(*it)->findEndpoint(&cmd_req);
286306
}
287307
}
@@ -335,7 +355,7 @@ void ZigbeeCore::scanCompleteCallback(esp_zb_zdp_status_t zdo_status, uint8_t co
335355
}
336356

337357
void ZigbeeCore::scanNetworks(u_int32_t channel_mask, u_int8_t scan_duration) {
338-
if (!isStarted()) {
358+
if (!started()) {
339359
log_e("Zigbee stack is not started, cannot scan networks");
340360
return;
341361
}

‎libraries/Zigbee/src/ZigbeeCore.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,11 @@ class ZigbeeCore {
7070
esp_zb_ep_list_t *_zb_ep_list;
7171
zigbee_role_t _role;
7272
bool _started;
73+
bool _connected;
7374

7475
uint8_t _open_network;
7576
zigbee_scan_result_t *_scan_result;
77+
SemaphoreHandle_t lock;
7678

7779
bool zigbeeInit(esp_zb_cfg_t *zb_cfg, bool erase_nvs);
7880
static void scanCompleteCallback(esp_zb_zdp_status_t zdo_status, uint8_t count, esp_zb_network_descriptor_t *nwk_descriptor);
@@ -88,9 +90,12 @@ class ZigbeeCore {
8890
bool begin(esp_zb_cfg_t *role_cfg, bool erase_nvs = false);
8991
// bool end();
9092

91-
bool isStarted() {
93+
bool started() {
9294
return _started;
9395
}
96+
bool connected() {
97+
return _connected;
98+
}
9499
zigbee_role_t getRole() {
95100
return _role;
96101
}

‎libraries/Zigbee/src/ZigbeeEP.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,12 @@ ZigbeeEP::ZigbeeEP(uint8_t endpoint) {
1919
_ep_config.endpoint = 0;
2020
_cluster_list = nullptr;
2121
_on_identify = nullptr;
22-
#if !CONFIG_DISABLE_HAL_LOCKS
2322
if (!lock) {
2423
lock = xSemaphoreCreateBinary();
2524
if (lock == NULL) {
2625
log_e("Semaphore creation failed");
2726
}
2827
}
29-
#endif
3028
}
3129

3230
ZigbeeEP::~ZigbeeEP() {}

‎libraries/Zigbee/src/ZigbeeEP.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ class ZigbeeEP {
7373
return _bound_devices;
7474
}
7575

76-
static bool isBound() {
76+
static bool bound() {
7777
return _is_bound;
7878
}
7979
static void allowMultipleBinding(bool bind) {

‎libraries/Zigbee/src/ep/ZigbeeColorDimmerSwitch.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,6 @@ class ZigbeeColorDimmerSwitch : public ZigbeeEP {
3939
void setLightColor(uint8_t red, uint8_t green, uint8_t blue, uint16_t group_addr);
4040
void setLightColor(uint8_t red, uint8_t green, uint8_t blue, uint8_t endpoint, uint16_t short_addr);
4141

42-
void setLightColorSaturation(uint8_t value);
43-
void setLightColorSaturation(uint8_t value, uint16_t group_addr);
44-
void setLightColorSaturation(uint8_t value, uint8_t endpoint, uint16_t short_addr);
45-
46-
void setLightColorHue(uint8_t value);
47-
void setLightColorHue(uint8_t value, uint16_t group_addr);
48-
void setLightColorHue(uint8_t value, uint8_t endpoint, uint16_t short_addr);
49-
5042
private:
5143
// save instance of the class in order to use it in static functions
5244
static ZigbeeColorDimmerSwitch *_instance;

0 commit comments

Comments
 (0)
Please sign in to comment.