@@ -10,20 +10,40 @@ ZigbeeIlluminanceSensor::ZigbeeIlluminanceSensor(uint8_t endpoint) : ZigbeeEP(en
10
10
_ep_config = {.endpoint = _endpoint, .app_profile_id = ESP_ZB_AF_HA_PROFILE_ID, .app_device_id = ESP_ZB_HA_LIGHT_SENSOR_DEVICE_ID, .app_device_version = 0 };
11
11
}
12
12
13
- void ZigbeeIlluminanceSensor::setMinMaxValue (uint16_t min, uint16_t max) {
13
+ bool ZigbeeIlluminanceSensor::setMinMaxValue (uint16_t min, uint16_t max) {
14
14
esp_zb_attribute_list_t *light_measure_cluster =
15
15
esp_zb_cluster_list_get_cluster (_cluster_list, ESP_ZB_ZCL_CLUSTER_ID_ILLUMINANCE_MEASUREMENT, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE);
16
- esp_zb_cluster_update_attr (light_measure_cluster, ESP_ZB_ZCL_ATTR_ILLUMINANCE_MEASUREMENT_MIN_MEASURED_VALUE_ID, (void *)&min);
17
- esp_zb_cluster_update_attr (light_measure_cluster, ESP_ZB_ZCL_ATTR_ILLUMINANCE_MEASUREMENT_MAX_MEASURED_VALUE_ID, (void *)&max);
16
+ if (!light_measure_cluster) {
17
+ log_e (" Failed to get illuminance measurement cluster" );
18
+ return false ;
19
+ }
20
+ esp_err_t ret_min = esp_zb_cluster_update_attr (light_measure_cluster, ESP_ZB_ZCL_ATTR_ILLUMINANCE_MEASUREMENT_MIN_MEASURED_VALUE_ID, (void *)&min);
21
+ if (ret_min != ESP_OK) {
22
+ log_e (" Failed to set min value: 0x%x: %s" , ret_min, esp_err_to_name (ret_min));
23
+ }
24
+ esp_err_t ret_max = esp_zb_cluster_update_attr (light_measure_cluster, ESP_ZB_ZCL_ATTR_ILLUMINANCE_MEASUREMENT_MAX_MEASURED_VALUE_ID, (void *)&max);
25
+ if (ret_max != ESP_OK) {
26
+ log_e (" Failed to set max value: 0x%x: %s" , ret_max, esp_err_to_name (ret_max));
27
+ }
28
+ return ret_min == ESP_OK && ret_max == ESP_OK;
18
29
}
19
30
20
- void ZigbeeIlluminanceSensor::setTolerance (uint16_t tolerance) {
31
+ bool ZigbeeIlluminanceSensor::setTolerance (uint16_t tolerance) {
21
32
esp_zb_attribute_list_t *light_measure_cluster =
22
33
esp_zb_cluster_list_get_cluster (_cluster_list, ESP_ZB_ZCL_CLUSTER_ID_ILLUMINANCE_MEASUREMENT, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE);
23
- esp_zb_illuminance_meas_cluster_add_attr (light_measure_cluster, ESP_ZB_ZCL_ATTR_ILLUMINANCE_MEASUREMENT_TOLERANCE_ID, (void *)&tolerance);
34
+ if (!light_measure_cluster) {
35
+ log_e (" Failed to get illuminance measurement cluster" );
36
+ return false ;
37
+ }
38
+ esp_err_t ret = esp_zb_illuminance_meas_cluster_add_attr (light_measure_cluster, ESP_ZB_ZCL_ATTR_ILLUMINANCE_MEASUREMENT_TOLERANCE_ID, (void *)&tolerance);
39
+ if (ret != ESP_OK) {
40
+ log_e (" Failed to set tolerance: 0x%x: %s" , ret, esp_err_to_name (ret));
41
+ return false ;
42
+ }
43
+ return true ;
24
44
}
25
45
26
- void ZigbeeIlluminanceSensor::setReporting (uint16_t min_interval, uint16_t max_interval, uint16_t delta) {
46
+ bool ZigbeeIlluminanceSensor::setReporting (uint16_t min_interval, uint16_t max_interval, uint16_t delta) {
27
47
esp_zb_zcl_reporting_info_t reporting_info;
28
48
memset (&reporting_info, 0 , sizeof (esp_zb_zcl_reporting_info_t ));
29
49
reporting_info.direction = ESP_ZB_ZCL_CMD_DIRECTION_TO_SRV;
@@ -38,24 +58,37 @@ void ZigbeeIlluminanceSensor::setReporting(uint16_t min_interval, uint16_t max_i
38
58
reporting_info.u .send_info .delta .u16 = delta;
39
59
reporting_info.dst .profile_id = ESP_ZB_AF_HA_PROFILE_ID;
40
60
reporting_info.manuf_code = ESP_ZB_ZCL_ATTR_NON_MANUFACTURER_SPECIFIC;
61
+
41
62
esp_zb_lock_acquire (portMAX_DELAY);
42
- esp_zb_zcl_update_reporting_info (&reporting_info);
63
+ esp_err_t ret = esp_zb_zcl_update_reporting_info (&reporting_info);
43
64
esp_zb_lock_release ();
65
+
66
+ if (ret != ESP_OK) {
67
+ log_e (" Failed to set reporting: 0x%x: %s" , ret, esp_err_to_name (ret));
68
+ return false ;
69
+ }
70
+ return true ;
44
71
}
45
72
46
- void ZigbeeIlluminanceSensor::setIlluminance (uint16_t illuminanceValue) {
73
+ bool ZigbeeIlluminanceSensor::setIlluminance (uint16_t illuminanceValue) {
74
+ esp_zb_zcl_status_t ret = ESP_ZB_ZCL_STATUS_SUCCESS;
47
75
log_v (" Updating Illuminance..." );
48
76
/* Update illuminance sensor measured illuminance */
49
77
log_d (" Setting Illuminance to %d" , illuminanceValue);
50
78
esp_zb_lock_acquire (portMAX_DELAY);
51
- esp_zb_zcl_set_attribute_val (
79
+ ret = esp_zb_zcl_set_attribute_val (
52
80
_endpoint, ESP_ZB_ZCL_CLUSTER_ID_ILLUMINANCE_MEASUREMENT, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE, ESP_ZB_ZCL_ATTR_ILLUMINANCE_MEASUREMENT_MEASURED_VALUE_ID,
53
81
&illuminanceValue, false
54
82
);
55
83
esp_zb_lock_release ();
84
+ if (ret != ESP_ZB_ZCL_STATUS_SUCCESS) {
85
+ log_e (" Failed to set illuminance: 0x%x: %s" , ret, esp_zb_zcl_status_to_name (ret));
86
+ return false ;
87
+ }
88
+ return true ;
56
89
}
57
90
58
- void ZigbeeIlluminanceSensor::report () {
91
+ bool ZigbeeIlluminanceSensor::report () {
59
92
/* Send report attributes command */
60
93
esp_zb_zcl_report_attr_cmd_t report_attr_cmd;
61
94
report_attr_cmd.address_mode = ESP_ZB_APS_ADDR_MODE_DST_ADDR_ENDP_NOT_PRESENT;
@@ -66,9 +99,14 @@ void ZigbeeIlluminanceSensor::report() {
66
99
report_attr_cmd.manuf_code = ESP_ZB_ZCL_ATTR_NON_MANUFACTURER_SPECIFIC;
67
100
68
101
esp_zb_lock_acquire (portMAX_DELAY);
69
- esp_zb_zcl_report_attr_cmd_req (&report_attr_cmd);
102
+ esp_err_t ret = esp_zb_zcl_report_attr_cmd_req (&report_attr_cmd);
70
103
esp_zb_lock_release ();
104
+ if (ret != ESP_OK) {
105
+ log_e (" Failed to send illuminance report: 0x%x: %s" , ret, esp_err_to_name (ret));
106
+ return false ;
107
+ }
71
108
log_v (" Illuminance report sent" );
109
+ return true ;
72
110
}
73
111
74
112
#endif // CONFIG_ZB_ENABLED
0 commit comments