@@ -73,7 +73,7 @@ bool ZigbeeEP::setManufacturerAndModel(const char *name, const char *model) {
7373 return ret_name == ESP_OK && ret_model == ESP_OK;
7474}
7575
76- bool ZigbeeEP::setPowerSource (zb_power_source_t power_source, uint8_t battery_percentage) {
76+ bool ZigbeeEP::setPowerSource (zb_power_source_t power_source, uint8_t battery_percentage, uint8_t battery_voltage ) {
7777 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);
7878 esp_err_t ret = esp_zb_cluster_update_attr (basic_cluster, ESP_ZB_ZCL_ATTR_BASIC_POWER_SOURCE_ID, (void *)&power_source);
7979 if (ret != ESP_OK) {
@@ -93,6 +93,11 @@ bool ZigbeeEP::setPowerSource(zb_power_source_t power_source, uint8_t battery_pe
9393 log_e (" Failed to add battery percentage attribute: 0x%x: %s" , ret, esp_err_to_name (ret));
9494 return false ;
9595 }
96+ ret = esp_zb_power_config_cluster_add_attr (power_config_cluster, ESP_ZB_ZCL_ATTR_POWER_CONFIG_BATTERY_VOLTAGE_ID, (void *)&battery_voltage);
97+ if (ret != ESP_OK) {
98+ log_e (" Failed to add battery voltage attribute: 0x%x: %s" , ret, esp_err_to_name (ret));
99+ return false ;
100+ }
96101 ret = esp_zb_cluster_list_add_power_config_cluster (_cluster_list, power_config_cluster, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE);
97102 if (ret != ESP_OK) {
98103 log_e (" Failed to add power config cluster: 0x%x: %s" , ret, esp_err_to_name (ret));
@@ -125,6 +130,21 @@ bool ZigbeeEP::setBatteryPercentage(uint8_t percentage) {
125130 return true ;
126131}
127132
133+ bool ZigbeeEP::setBatteryVoltage (uint8_t voltage) {
134+ esp_zb_zcl_status_t ret = ESP_ZB_ZCL_STATUS_SUCCESS;
135+ esp_zb_lock_acquire (portMAX_DELAY);
136+ ret = esp_zb_zcl_set_attribute_val (
137+ _endpoint, ESP_ZB_ZCL_CLUSTER_ID_POWER_CONFIG, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE, ESP_ZB_ZCL_ATTR_POWER_CONFIG_BATTERY_VOLTAGE_ID, &voltage, false
138+ );
139+ esp_zb_lock_release ();
140+ if (ret != ESP_ZB_ZCL_STATUS_SUCCESS) {
141+ log_e (" Failed to set battery voltage: 0x%x: %s" , ret, esp_zb_zcl_status_to_name (ret));
142+ return false ;
143+ }
144+ log_v (" Battery voltage updated" );
145+ return true ;
146+ }
147+
128148bool ZigbeeEP::reportBatteryPercentage () {
129149 /* Send report attributes command */
130150 esp_zb_zcl_report_attr_cmd_t report_attr_cmd;
0 commit comments