@@ -98,10 +98,10 @@ void ZigbeeColorDimmerSwitch::lightToggle() {
98
98
cmd_req.zcl_basic_cmd .src_endpoint = _endpoint;
99
99
cmd_req.address_mode = ESP_ZB_APS_ADDR_MODE_DST_ADDR_ENDP_NOT_PRESENT;
100
100
cmd_req.on_off_cmd_id = ESP_ZB_ZCL_CMD_ON_OFF_TOGGLE_ID;
101
- log_i (" Sending 'light toggle' command" );
102
- // esp_zb_lock_acquire(portMAX_DELAY);
101
+ log_v (" Sending 'light toggle' command" );
102
+ esp_zb_lock_acquire (portMAX_DELAY);
103
103
esp_zb_zcl_on_off_cmd_req (&cmd_req);
104
- // esp_zb_lock_release();
104
+ esp_zb_lock_release ();
105
105
} else {
106
106
log_e (" Light not bound" );
107
107
}
@@ -114,7 +114,7 @@ void ZigbeeColorDimmerSwitch::lightToggle(uint16_t group_addr) {
114
114
cmd_req.zcl_basic_cmd .dst_addr_u .addr_short = group_addr;
115
115
cmd_req.address_mode = ESP_ZB_APS_ADDR_MODE_16_GROUP_ENDP_NOT_PRESENT;
116
116
cmd_req.on_off_cmd_id = ESP_ZB_ZCL_CMD_ON_OFF_TOGGLE_ID;
117
- log_i (" Sending 'light toggle' command to group address 0x%x" , group_addr);
117
+ log_v (" Sending 'light toggle' command to group address 0x%x" , group_addr);
118
118
esp_zb_lock_acquire (portMAX_DELAY);
119
119
esp_zb_zcl_on_off_cmd_req (&cmd_req);
120
120
esp_zb_lock_release ();
@@ -131,7 +131,27 @@ void ZigbeeColorDimmerSwitch::lightToggle(uint8_t endpoint, uint16_t short_addr)
131
131
cmd_req.zcl_basic_cmd .dst_addr_u .addr_short = short_addr;
132
132
cmd_req.address_mode = ESP_ZB_APS_ADDR_MODE_16_ENDP_PRESENT;
133
133
cmd_req.on_off_cmd_id = ESP_ZB_ZCL_CMD_ON_OFF_TOGGLE_ID;
134
- log_i (" Sending 'light toggle' command to endpoint %d, address 0x%x" , endpoint, short_addr);
134
+ log_v (" Sending 'light toggle' command to endpoint %d, address 0x%x" , endpoint, short_addr);
135
+ esp_zb_lock_acquire (portMAX_DELAY);
136
+ esp_zb_zcl_on_off_cmd_req (&cmd_req);
137
+ esp_zb_lock_release ();
138
+ } else {
139
+ log_e (" Light not bound" );
140
+ }
141
+ }
142
+
143
+ void ZigbeeColorDimmerSwitch::lightToggle (uint8_t endpoint, esp_zb_ieee_addr_t ieee_addr) {
144
+ if (_is_bound) {
145
+ esp_zb_zcl_on_off_cmd_t cmd_req;
146
+ cmd_req.zcl_basic_cmd .src_endpoint = _endpoint;
147
+ cmd_req.zcl_basic_cmd .dst_endpoint = endpoint;
148
+ cmd_req.address_mode = ESP_ZB_APS_ADDR_MODE_64_ENDP_PRESENT;
149
+ cmd_req.on_off_cmd_id = ESP_ZB_ZCL_CMD_ON_OFF_TOGGLE_ID;
150
+ memcpy (cmd_req.zcl_basic_cmd .dst_addr_u .addr_long , ieee_addr, sizeof (esp_zb_ieee_addr_t ));
151
+ log_v (
152
+ " Sending 'light toggle' command to endpoint %d, ieee address %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x" , endpoint, ieee_addr[7 ], ieee_addr[6 ], ieee_addr[5 ],
153
+ ieee_addr[4 ], ieee_addr[3 ], ieee_addr[2 ], ieee_addr[1 ], ieee_addr[0 ]
154
+ );
135
155
esp_zb_lock_acquire (portMAX_DELAY);
136
156
esp_zb_zcl_on_off_cmd_req (&cmd_req);
137
157
esp_zb_lock_release ();
@@ -146,7 +166,7 @@ void ZigbeeColorDimmerSwitch::lightOn() {
146
166
cmd_req.zcl_basic_cmd .src_endpoint = _endpoint;
147
167
cmd_req.address_mode = ESP_ZB_APS_ADDR_MODE_DST_ADDR_ENDP_NOT_PRESENT;
148
168
cmd_req.on_off_cmd_id = ESP_ZB_ZCL_CMD_ON_OFF_ON_ID;
149
- log_i (" Sending 'light on' command" );
169
+ log_v (" Sending 'light on' command" );
150
170
esp_zb_lock_acquire (portMAX_DELAY);
151
171
esp_zb_zcl_on_off_cmd_req (&cmd_req);
152
172
esp_zb_lock_release ();
@@ -162,7 +182,7 @@ void ZigbeeColorDimmerSwitch::lightOn(uint16_t group_addr) {
162
182
cmd_req.zcl_basic_cmd .dst_addr_u .addr_short = group_addr;
163
183
cmd_req.address_mode = ESP_ZB_APS_ADDR_MODE_16_GROUP_ENDP_NOT_PRESENT;
164
184
cmd_req.on_off_cmd_id = ESP_ZB_ZCL_CMD_ON_OFF_ON_ID;
165
- log_i (" Sending 'light on' command to group address 0x%x" , group_addr);
185
+ log_v (" Sending 'light on' command to group address 0x%x" , group_addr);
166
186
esp_zb_lock_acquire (portMAX_DELAY);
167
187
esp_zb_zcl_on_off_cmd_req (&cmd_req);
168
188
esp_zb_lock_release ();
@@ -179,7 +199,27 @@ void ZigbeeColorDimmerSwitch::lightOn(uint8_t endpoint, uint16_t short_addr) {
179
199
cmd_req.zcl_basic_cmd .dst_addr_u .addr_short = short_addr;
180
200
cmd_req.address_mode = ESP_ZB_APS_ADDR_MODE_16_ENDP_PRESENT;
181
201
cmd_req.on_off_cmd_id = ESP_ZB_ZCL_CMD_ON_OFF_ON_ID;
182
- log_i (" Sending 'light on' command to endpoint %d, address 0x%x" , endpoint, short_addr);
202
+ log_v (" Sending 'light on' command to endpoint %d, address 0x%x" , endpoint, short_addr);
203
+ esp_zb_lock_acquire (portMAX_DELAY);
204
+ esp_zb_zcl_on_off_cmd_req (&cmd_req);
205
+ esp_zb_lock_release ();
206
+ } else {
207
+ log_e (" Light not bound" );
208
+ }
209
+ }
210
+
211
+ void ZigbeeColorDimmerSwitch::lightOn (uint8_t endpoint, esp_zb_ieee_addr_t ieee_addr) {
212
+ if (_is_bound) {
213
+ esp_zb_zcl_on_off_cmd_t cmd_req;
214
+ cmd_req.zcl_basic_cmd .src_endpoint = _endpoint;
215
+ cmd_req.zcl_basic_cmd .dst_endpoint = endpoint;
216
+ cmd_req.address_mode = ESP_ZB_APS_ADDR_MODE_64_ENDP_PRESENT;
217
+ cmd_req.on_off_cmd_id = ESP_ZB_ZCL_CMD_ON_OFF_ON_ID;
218
+ memcpy (cmd_req.zcl_basic_cmd .dst_addr_u .addr_long , ieee_addr, sizeof (esp_zb_ieee_addr_t ));
219
+ log_v (
220
+ " Sending 'light on' command to endpoint %d, ieee address %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x" , endpoint, ieee_addr[7 ], ieee_addr[6 ], ieee_addr[5 ],
221
+ ieee_addr[4 ], ieee_addr[3 ], ieee_addr[2 ], ieee_addr[1 ], ieee_addr[0 ]
222
+ );
183
223
esp_zb_lock_acquire (portMAX_DELAY);
184
224
esp_zb_zcl_on_off_cmd_req (&cmd_req);
185
225
esp_zb_lock_release ();
@@ -194,7 +234,7 @@ void ZigbeeColorDimmerSwitch::lightOff() {
194
234
cmd_req.zcl_basic_cmd .src_endpoint = _endpoint;
195
235
cmd_req.address_mode = ESP_ZB_APS_ADDR_MODE_DST_ADDR_ENDP_NOT_PRESENT;
196
236
cmd_req.on_off_cmd_id = ESP_ZB_ZCL_CMD_ON_OFF_OFF_ID;
197
- log_i (" Sending 'light off' command" );
237
+ log_v (" Sending 'light off' command" );
198
238
esp_zb_lock_acquire (portMAX_DELAY);
199
239
esp_zb_zcl_on_off_cmd_req (&cmd_req);
200
240
esp_zb_lock_release ();
@@ -210,7 +250,7 @@ void ZigbeeColorDimmerSwitch::lightOff(uint16_t group_addr) {
210
250
cmd_req.zcl_basic_cmd .dst_addr_u .addr_short = group_addr;
211
251
cmd_req.address_mode = ESP_ZB_APS_ADDR_MODE_16_GROUP_ENDP_NOT_PRESENT;
212
252
cmd_req.on_off_cmd_id = ESP_ZB_ZCL_CMD_ON_OFF_OFF_ID;
213
- log_i (" Sending 'light off' command to group address 0x%x" , group_addr);
253
+ log_v (" Sending 'light off' command to group address 0x%x" , group_addr);
214
254
esp_zb_lock_acquire (portMAX_DELAY);
215
255
esp_zb_zcl_on_off_cmd_req (&cmd_req);
216
256
esp_zb_lock_release ();
@@ -227,7 +267,27 @@ void ZigbeeColorDimmerSwitch::lightOff(uint8_t endpoint, uint16_t short_addr) {
227
267
cmd_req.zcl_basic_cmd .dst_addr_u .addr_short = short_addr;
228
268
cmd_req.address_mode = ESP_ZB_APS_ADDR_MODE_16_ENDP_PRESENT;
229
269
cmd_req.on_off_cmd_id = ESP_ZB_ZCL_CMD_ON_OFF_OFF_ID;
230
- log_i (" Sending 'light off' command to endpoint %d, address 0x%x" , endpoint, short_addr);
270
+ log_v (" Sending 'light off' command to endpoint %d, address 0x%x" , endpoint, short_addr);
271
+ esp_zb_lock_acquire (portMAX_DELAY);
272
+ esp_zb_zcl_on_off_cmd_req (&cmd_req);
273
+ esp_zb_lock_release ();
274
+ } else {
275
+ log_e (" Light not bound" );
276
+ }
277
+ }
278
+
279
+ void ZigbeeColorDimmerSwitch::lightOff (uint8_t endpoint, esp_zb_ieee_addr_t ieee_addr) {
280
+ if (_is_bound) {
281
+ esp_zb_zcl_on_off_cmd_t cmd_req;
282
+ cmd_req.zcl_basic_cmd .src_endpoint = _endpoint;
283
+ cmd_req.zcl_basic_cmd .dst_endpoint = endpoint;
284
+ cmd_req.address_mode = ESP_ZB_APS_ADDR_MODE_64_ENDP_PRESENT;
285
+ cmd_req.on_off_cmd_id = ESP_ZB_ZCL_CMD_ON_OFF_OFF_ID;
286
+ memcpy (cmd_req.zcl_basic_cmd .dst_addr_u .addr_long , ieee_addr, sizeof (esp_zb_ieee_addr_t ));
287
+ log_v (
288
+ " Sending 'light off' command to endpoint %d, ieee address %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x" , endpoint, ieee_addr[7 ], ieee_addr[6 ], ieee_addr[5 ],
289
+ ieee_addr[4 ], ieee_addr[3 ], ieee_addr[2 ], ieee_addr[1 ], ieee_addr[0 ]
290
+ );
231
291
esp_zb_lock_acquire (portMAX_DELAY);
232
292
esp_zb_zcl_on_off_cmd_req (&cmd_req);
233
293
esp_zb_lock_release ();
@@ -243,7 +303,7 @@ void ZigbeeColorDimmerSwitch::lightOffWithEffect(uint8_t effect_id, uint8_t effe
243
303
cmd_req.address_mode = ESP_ZB_APS_ADDR_MODE_DST_ADDR_ENDP_NOT_PRESENT;
244
304
cmd_req.effect_id = effect_id;
245
305
cmd_req.effect_variant = effect_variant;
246
- log_i (" Sending 'light off with effect' command" );
306
+ log_v (" Sending 'light off with effect' command" );
247
307
esp_zb_lock_acquire (portMAX_DELAY);
248
308
esp_zb_zcl_on_off_off_with_effect_cmd_req (&cmd_req);
249
309
esp_zb_lock_release ();
@@ -257,7 +317,7 @@ void ZigbeeColorDimmerSwitch::lightOnWithSceneRecall() {
257
317
esp_zb_zcl_on_off_on_with_recall_global_scene_cmd_t cmd_req;
258
318
cmd_req.zcl_basic_cmd .src_endpoint = _endpoint;
259
319
cmd_req.address_mode = ESP_ZB_APS_ADDR_MODE_DST_ADDR_ENDP_NOT_PRESENT;
260
- log_i (" Sending 'light on with scene recall' command" );
320
+ log_v (" Sending 'light on with scene recall' command" );
261
321
esp_zb_lock_acquire (portMAX_DELAY);
262
322
esp_zb_zcl_on_off_on_with_recall_global_scene_cmd_req (&cmd_req);
263
323
esp_zb_lock_release ();
@@ -274,7 +334,7 @@ void ZigbeeColorDimmerSwitch::lightOnWithTimedOff(uint8_t on_off_control, uint16
274
334
cmd_req.on_off_control = on_off_control; // TODO: Test how it works, then maybe change API
275
335
cmd_req.on_time = time_on;
276
336
cmd_req.off_wait_time = time_off;
277
- log_i (" Sending 'light on with time off' command" );
337
+ log_v (" Sending 'light on with time off' command" );
278
338
esp_zb_lock_acquire (portMAX_DELAY);
279
339
esp_zb_zcl_on_off_on_with_timed_off_cmd_req (&cmd_req);
280
340
esp_zb_lock_release ();
@@ -290,7 +350,7 @@ void ZigbeeColorDimmerSwitch::setLightLevel(uint8_t level) {
290
350
cmd_req.address_mode = ESP_ZB_APS_ADDR_MODE_DST_ADDR_ENDP_NOT_PRESENT;
291
351
cmd_req.level = level;
292
352
cmd_req.transition_time = 0xffff ;
293
- log_i (" Sending 'set light level' command" );
353
+ log_v (" Sending 'set light level' command" );
294
354
esp_zb_lock_acquire (portMAX_DELAY);
295
355
esp_zb_zcl_level_move_to_level_cmd_req (&cmd_req);
296
356
esp_zb_lock_release ();
@@ -307,7 +367,7 @@ void ZigbeeColorDimmerSwitch::setLightLevel(uint8_t level, uint16_t group_addr)
307
367
cmd_req.address_mode = ESP_ZB_APS_ADDR_MODE_16_GROUP_ENDP_NOT_PRESENT;
308
368
cmd_req.level = level;
309
369
cmd_req.transition_time = 0xffff ;
310
- log_i (" Sending 'set light level' command to group address 0x%x" , group_addr);
370
+ log_v (" Sending 'set light level' command to group address 0x%x" , group_addr);
311
371
esp_zb_lock_acquire (portMAX_DELAY);
312
372
esp_zb_zcl_level_move_to_level_cmd_req (&cmd_req);
313
373
esp_zb_lock_release ();
@@ -325,7 +385,28 @@ void ZigbeeColorDimmerSwitch::setLightLevel(uint8_t level, uint8_t endpoint, uin
325
385
cmd_req.address_mode = ESP_ZB_APS_ADDR_MODE_16_ENDP_PRESENT;
326
386
cmd_req.level = level;
327
387
cmd_req.transition_time = 0xffff ;
328
- log_i (" Sending 'set light level' command to endpoint %d, address 0x%x" , endpoint, short_addr);
388
+ log_v (" Sending 'set light level' command to endpoint %d, address 0x%x" , endpoint, short_addr);
389
+ esp_zb_lock_acquire (portMAX_DELAY);
390
+ esp_zb_zcl_level_move_to_level_cmd_req (&cmd_req);
391
+ esp_zb_lock_release ();
392
+ } else {
393
+ log_e (" Light not bound" );
394
+ }
395
+ }
396
+
397
+ void ZigbeeColorDimmerSwitch::setLightLevel (uint8_t level, uint8_t endpoint, esp_zb_ieee_addr_t ieee_addr) {
398
+ if (_is_bound) {
399
+ esp_zb_zcl_move_to_level_cmd_t cmd_req;
400
+ cmd_req.zcl_basic_cmd .src_endpoint = _endpoint;
401
+ cmd_req.zcl_basic_cmd .dst_endpoint = endpoint;
402
+ cmd_req.address_mode = ESP_ZB_APS_ADDR_MODE_64_ENDP_PRESENT;
403
+ memcpy (cmd_req.zcl_basic_cmd .dst_addr_u .addr_long , ieee_addr, sizeof (esp_zb_ieee_addr_t ));
404
+ cmd_req.level = level;
405
+ cmd_req.transition_time = 0xffff ;
406
+ log_v (
407
+ " Sending 'set light level' command to endpoint %d, ieee address %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x" , endpoint, ieee_addr[7 ], ieee_addr[6 ],
408
+ ieee_addr[5 ], ieee_addr[4 ], ieee_addr[3 ], ieee_addr[2 ], ieee_addr[1 ], ieee_addr[0 ]
409
+ );
329
410
esp_zb_lock_acquire (portMAX_DELAY);
330
411
esp_zb_zcl_level_move_to_level_cmd_req (&cmd_req);
331
412
esp_zb_lock_release ();
@@ -346,7 +427,7 @@ void ZigbeeColorDimmerSwitch::setLightColor(uint8_t red, uint8_t green, uint8_t
346
427
cmd_req.color_x = color_x;
347
428
cmd_req.color_y = color_y;
348
429
cmd_req.transition_time = 0 ;
349
- log_i (" Sending 'set light color' command" );
430
+ log_v (" Sending 'set light color' command" );
350
431
esp_zb_lock_acquire (portMAX_DELAY);
351
432
esp_zb_zcl_color_move_to_color_cmd_req (&cmd_req);
352
433
esp_zb_lock_release ();
@@ -368,7 +449,7 @@ void ZigbeeColorDimmerSwitch::setLightColor(uint8_t red, uint8_t green, uint8_t
368
449
cmd_req.color_x = color_x;
369
450
cmd_req.color_y = color_y;
370
451
cmd_req.transition_time = 0 ;
371
- log_i (" Sending 'set light color' command to group address 0x%x" , group_addr);
452
+ log_v (" Sending 'set light color' command to group address 0x%x" , group_addr);
372
453
esp_zb_lock_acquire (portMAX_DELAY);
373
454
esp_zb_zcl_color_move_to_color_cmd_req (&cmd_req);
374
455
esp_zb_lock_release ();
@@ -391,7 +472,33 @@ void ZigbeeColorDimmerSwitch::setLightColor(uint8_t red, uint8_t green, uint8_t
391
472
cmd_req.color_x = color_x;
392
473
cmd_req.color_y = color_y;
393
474
cmd_req.transition_time = 0 ;
394
- log_i (" Sending 'set light color' command to endpoint %d, address 0x%x" , endpoint, short_addr);
475
+ log_v (" Sending 'set light color' command to endpoint %d, address 0x%x" , endpoint, short_addr);
476
+ esp_zb_lock_acquire (portMAX_DELAY);
477
+ esp_zb_zcl_color_move_to_color_cmd_req (&cmd_req);
478
+ esp_zb_lock_release ();
479
+ } else {
480
+ log_e (" Light not bound" );
481
+ }
482
+ }
483
+
484
+ void ZigbeeColorDimmerSwitch::setLightColor (uint8_t red, uint8_t green, uint8_t blue, uint8_t endpoint, esp_zb_ieee_addr_t ieee_addr) {
485
+ if (_is_bound) {
486
+ // Convert RGB to XY
487
+ uint16_t color_x, color_y;
488
+ calculateXY (red, green, blue, color_x, color_y);
489
+
490
+ esp_zb_zcl_color_move_to_color_cmd_t cmd_req;
491
+ cmd_req.zcl_basic_cmd .src_endpoint = _endpoint;
492
+ cmd_req.zcl_basic_cmd .dst_endpoint = endpoint;
493
+ cmd_req.address_mode = ESP_ZB_APS_ADDR_MODE_64_ENDP_PRESENT;
494
+ memcpy (cmd_req.zcl_basic_cmd .dst_addr_u .addr_long , ieee_addr, sizeof (esp_zb_ieee_addr_t ));
495
+ cmd_req.color_x = color_x;
496
+ cmd_req.color_y = color_y;
497
+ cmd_req.transition_time = 0 ;
498
+ log_v (
499
+ " Sending 'set light color' command to endpoint %d, ieee address %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x" , endpoint, ieee_addr[7 ], ieee_addr[6 ],
500
+ ieee_addr[5 ], ieee_addr[4 ], ieee_addr[3 ], ieee_addr[2 ], ieee_addr[1 ], ieee_addr[0 ]
501
+ );
395
502
esp_zb_lock_acquire (portMAX_DELAY);
396
503
esp_zb_zcl_color_move_to_color_cmd_req (&cmd_req);
397
504
esp_zb_lock_release ();
0 commit comments