@@ -55,20 +55,26 @@ bool ZigbeeEP::setManufacturerAndModel(const char *name, const char *model) {
55
55
56
56
// Get the basic cluster and update the manufacturer and model attributes
57
57
esp_zb_attribute_list_t *basic_cluster = esp_zb_cluster_list_get_cluster (_cluster_list, ESP_ZB_ZCL_CLUSTER_ID_BASIC, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE);
58
- esp_err_t ret_manufacturer = esp_zb_basic_cluster_add_attr (basic_cluster, ESP_ZB_ZCL_ATTR_BASIC_MANUFACTURER_NAME_ID, (void *)zb_name);
58
+ esp_err_t ret_name = esp_zb_basic_cluster_add_attr (basic_cluster, ESP_ZB_ZCL_ATTR_BASIC_MANUFACTURER_NAME_ID, (void *)zb_name);
59
+ if (ret_name != ESP_OK) {
60
+ log_e (" Failed to set manufacturer: 0x%x: %s" , ret_name, esp_err_to_name (ret_name));
61
+ }
59
62
esp_err_t ret_model = esp_zb_basic_cluster_add_attr (basic_cluster, ESP_ZB_ZCL_ATTR_BASIC_MODEL_IDENTIFIER_ID, (void *)zb_model);
60
- if (ret_manufacturer != ESP_OK || ret_model != ESP_OK) {
61
- log_e (" Failed to set manufacturer ( 0x%x) or model (0x%x) " , ret_manufacturer, ret_model);
63
+ if (ret_model != ESP_OK) {
64
+ log_e (" Failed to set model: 0x%x: %s " , ret_model, esp_err_to_name ( ret_model) );
62
65
}
63
-
64
66
delete[] zb_name;
65
67
delete[] zb_model;
66
- return ret_manufacturer == ESP_OK && ret_model == ESP_OK;
68
+ return ret_name == ESP_OK && ret_model == ESP_OK;
67
69
}
68
70
69
- void ZigbeeEP::setPowerSource (zb_power_source_t power_source, uint8_t battery_percentage) {
71
+ bool ZigbeeEP::setPowerSource (zb_power_source_t power_source, uint8_t battery_percentage) {
70
72
esp_zb_attribute_list_t *basic_cluster = esp_zb_cluster_list_get_cluster (_cluster_list, ESP_ZB_ZCL_CLUSTER_ID_BASIC, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE);
71
- esp_zb_cluster_update_attr (basic_cluster, ESP_ZB_ZCL_ATTR_BASIC_POWER_SOURCE_ID, (void *)&power_source);
73
+ esp_err_t ret = esp_zb_cluster_update_attr (basic_cluster, ESP_ZB_ZCL_ATTR_BASIC_POWER_SOURCE_ID, (void *)&power_source);
74
+ if (ret != ESP_OK) {
75
+ log_e (" Failed to set power source: 0x%x: %s" , ret, esp_err_to_name (ret));
76
+ return false ;
77
+ }
72
78
73
79
if (power_source == ZB_POWER_SOURCE_BATTERY) {
74
80
// Add power config cluster and battery percentage attribute
@@ -77,10 +83,19 @@ void ZigbeeEP::setPowerSource(zb_power_source_t power_source, uint8_t battery_pe
77
83
}
78
84
battery_percentage = battery_percentage * 2 ;
79
85
esp_zb_attribute_list_t *power_config_cluster = esp_zb_zcl_attr_list_create (ESP_ZB_ZCL_CLUSTER_ID_POWER_CONFIG);
80
- esp_zb_power_config_cluster_add_attr (power_config_cluster, ESP_ZB_ZCL_ATTR_POWER_CONFIG_BATTERY_PERCENTAGE_REMAINING_ID, (void *)&battery_percentage);
81
- esp_zb_cluster_list_add_power_config_cluster (_cluster_list, power_config_cluster, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE);
86
+ ret = esp_zb_power_config_cluster_add_attr (power_config_cluster, ESP_ZB_ZCL_ATTR_POWER_CONFIG_BATTERY_PERCENTAGE_REMAINING_ID, (void *)&battery_percentage);
87
+ if (ret != ESP_OK) {
88
+ log_e (" Failed to add battery percentage attribute: 0x%x: %s" , ret, esp_err_to_name (ret));
89
+ return false ;
90
+ }
91
+ ret = esp_zb_cluster_list_add_power_config_cluster (_cluster_list, power_config_cluster, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE);
92
+ if (ret != ESP_OK) {
93
+ log_e (" Failed to add power config cluster: 0x%x: %s" , ret, esp_err_to_name (ret));
94
+ return false ;
95
+ }
82
96
}
83
97
_power_source = power_source;
98
+ return true ;
84
99
}
85
100
86
101
bool ZigbeeEP::setBatteryPercentage (uint8_t percentage) {
@@ -258,7 +273,7 @@ void ZigbeeEP::zbIdentify(const esp_zb_zcl_set_attr_value_message_t *message) {
258
273
}
259
274
}
260
275
261
- void ZigbeeEP::addTimeCluster (tm time, int32_t gmt_offset) {
276
+ bool ZigbeeEP::addTimeCluster (tm time, int32_t gmt_offset) {
262
277
time_t utc_time = 0 ;
263
278
// Check if time is set
264
279
if (time .tm_year > 0 ) {
@@ -268,14 +283,35 @@ void ZigbeeEP::addTimeCluster(tm time, int32_t gmt_offset) {
268
283
269
284
// Create time cluster server attributes
270
285
esp_zb_attribute_list_t *time_cluster_server = esp_zb_zcl_attr_list_create (ESP_ZB_ZCL_CLUSTER_ID_TIME);
271
- esp_zb_time_cluster_add_attr (time_cluster_server, ESP_ZB_ZCL_ATTR_TIME_TIME_ZONE_ID, (void *)&gmt_offset);
272
- esp_zb_time_cluster_add_attr (time_cluster_server, ESP_ZB_ZCL_ATTR_TIME_TIME_ID, (void *)&utc_time);
273
- esp_zb_time_cluster_add_attr (time_cluster_server, ESP_ZB_ZCL_ATTR_TIME_TIME_STATUS_ID, (void *)&_time_status);
286
+ esp_err_t ret = esp_zb_time_cluster_add_attr (time_cluster_server, ESP_ZB_ZCL_ATTR_TIME_TIME_ZONE_ID, (void *)&gmt_offset);
287
+ if (ret != ESP_OK) {
288
+ log_e (" Failed to add time zone attribute: 0x%x: %s" , ret, esp_err_to_name (ret));
289
+ return false ;
290
+ }
291
+ ret = esp_zb_time_cluster_add_attr (time_cluster_server, ESP_ZB_ZCL_ATTR_TIME_TIME_ID, (void *)&utc_time);
292
+ if (ret != ESP_OK) {
293
+ log_e (" Failed to add time attribute: 0x%x: %s" , ret, esp_err_to_name (ret));
294
+ return false ;
295
+ }
296
+ ret = esp_zb_time_cluster_add_attr (time_cluster_server, ESP_ZB_ZCL_ATTR_TIME_TIME_STATUS_ID, (void *)&_time_status);
297
+ if (ret != ESP_OK) {
298
+ log_e (" Failed to add time status attribute: 0x%x: %s" , ret, esp_err_to_name (ret));
299
+ return false ;
300
+ }
274
301
// Create time cluster client attributes
275
302
esp_zb_attribute_list_t *time_cluster_client = esp_zb_zcl_attr_list_create (ESP_ZB_ZCL_CLUSTER_ID_TIME);
276
303
// Add time clusters to cluster list
277
- esp_zb_cluster_list_add_time_cluster (_cluster_list, time_cluster_server, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE);
278
- esp_zb_cluster_list_add_time_cluster (_cluster_list, time_cluster_client, ESP_ZB_ZCL_CLUSTER_CLIENT_ROLE);
304
+ ret = esp_zb_cluster_list_add_time_cluster (_cluster_list, time_cluster_server, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE);
305
+ if (ret != ESP_OK) {
306
+ log_e (" Failed to add time cluster (server role): 0x%x: %s" , ret, esp_err_to_name (ret));
307
+ return false ;
308
+ }
309
+ ret = esp_zb_cluster_list_add_time_cluster (_cluster_list, time_cluster_client, ESP_ZB_ZCL_CLUSTER_CLIENT_ROLE);
310
+ if (ret != ESP_OK) {
311
+ log_e (" Failed to add time cluster (client role): 0x%x: %s" , ret, esp_err_to_name (ret));
312
+ return false ;
313
+ }
314
+ return true ;
279
315
}
280
316
281
317
bool ZigbeeEP::setTime (tm time) {
0 commit comments