feat(zigbee): Add battery voltage attribute support (#11210)
* feat(zigbee): Add battery voltage attribute support * Update libraries/Zigbee/src/ZigbeeEP.cpp Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update libraries/Zigbee/examples/Zigbee_Temp_Hum_Sensor_Sleepy/Zigbee_Temp_Hum_Sensor_Sleepy.ino Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * ci(pre-commit): Apply automatic fixes --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
This commit is contained in:
parent
7f60945018
commit
d3509ef98b
3 changed files with 28 additions and 7 deletions
|
|
@ -85,9 +85,9 @@ void setup() {
|
||||||
// Set tolerance for temperature measurement in °C (lowest possible value is 0.01°C)
|
// Set tolerance for temperature measurement in °C (lowest possible value is 0.01°C)
|
||||||
zbTempSensor.setTolerance(1);
|
zbTempSensor.setTolerance(1);
|
||||||
|
|
||||||
// Set power source to battery and set battery percentage to measured value (now 100% for demonstration)
|
// Set power source to battery, battery percentage and battery voltage (now 100% and 3.5V for demonstration)
|
||||||
// The value can be also updated by calling zbTempSensor.setBatteryPercentage(percentage) anytime
|
// The value can be also updated by calling zbTempSensor.setBatteryPercentage(percentage) or zbTempSensor.setBatteryVoltage(voltage) anytime after Zigbee.begin()
|
||||||
zbTempSensor.setPowerSource(ZB_POWER_SOURCE_BATTERY, 100);
|
zbTempSensor.setPowerSource(ZB_POWER_SOURCE_BATTERY, 100, 35);
|
||||||
|
|
||||||
// Add humidity cluster to the temperature sensor device with min, max and tolerance values
|
// Add humidity cluster to the temperature sensor device with min, max and tolerance values
|
||||||
zbTempSensor.addHumiditySensor(0, 100, 1);
|
zbTempSensor.addHumiditySensor(0, 100, 1);
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@ bool ZigbeeEP::setManufacturerAndModel(const char *name, const char *model) {
|
||||||
return ret_name == ESP_OK && ret_model == ESP_OK;
|
return ret_name == ESP_OK && ret_model == ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ZigbeeEP::setPowerSource(zb_power_source_t power_source, uint8_t battery_percentage) {
|
bool ZigbeeEP::setPowerSource(zb_power_source_t power_source, uint8_t battery_percentage, uint8_t battery_voltage) {
|
||||||
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);
|
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);
|
||||||
esp_err_t ret = esp_zb_cluster_update_attr(basic_cluster, ESP_ZB_ZCL_ATTR_BASIC_POWER_SOURCE_ID, (void *)&power_source);
|
esp_err_t ret = esp_zb_cluster_update_attr(basic_cluster, ESP_ZB_ZCL_ATTR_BASIC_POWER_SOURCE_ID, (void *)&power_source);
|
||||||
if (ret != ESP_OK) {
|
if (ret != ESP_OK) {
|
||||||
|
|
@ -93,6 +93,11 @@ bool ZigbeeEP::setPowerSource(zb_power_source_t power_source, uint8_t battery_pe
|
||||||
log_e("Failed to add battery percentage attribute: 0x%x: %s", ret, esp_err_to_name(ret));
|
log_e("Failed to add battery percentage attribute: 0x%x: %s", ret, esp_err_to_name(ret));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
ret = esp_zb_power_config_cluster_add_attr(power_config_cluster, ESP_ZB_ZCL_ATTR_POWER_CONFIG_BATTERY_VOLTAGE_ID, (void *)&battery_voltage);
|
||||||
|
if (ret != ESP_OK) {
|
||||||
|
log_e("Failed to add battery voltage attribute: 0x%x: %s", ret, esp_err_to_name(ret));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
ret = esp_zb_cluster_list_add_power_config_cluster(_cluster_list, power_config_cluster, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE);
|
ret = esp_zb_cluster_list_add_power_config_cluster(_cluster_list, power_config_cluster, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE);
|
||||||
if (ret != ESP_OK) {
|
if (ret != ESP_OK) {
|
||||||
log_e("Failed to add power config cluster: 0x%x: %s", ret, esp_err_to_name(ret));
|
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) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ZigbeeEP::setBatteryVoltage(uint8_t voltage) {
|
||||||
|
esp_zb_zcl_status_t ret = ESP_ZB_ZCL_STATUS_SUCCESS;
|
||||||
|
esp_zb_lock_acquire(portMAX_DELAY);
|
||||||
|
ret = esp_zb_zcl_set_attribute_val(
|
||||||
|
_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
|
||||||
|
);
|
||||||
|
esp_zb_lock_release();
|
||||||
|
if (ret != ESP_ZB_ZCL_STATUS_SUCCESS) {
|
||||||
|
log_e("Failed to set battery voltage: 0x%x: %s", ret, esp_zb_zcl_status_to_name(ret));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
log_v("Battery voltage updated");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool ZigbeeEP::reportBatteryPercentage() {
|
bool ZigbeeEP::reportBatteryPercentage() {
|
||||||
/* Send report attributes command */
|
/* Send report attributes command */
|
||||||
esp_zb_zcl_report_attr_cmd_t report_attr_cmd;
|
esp_zb_zcl_report_attr_cmd_t report_attr_cmd;
|
||||||
|
|
|
||||||
|
|
@ -81,9 +81,10 @@ public:
|
||||||
char *readModel(uint8_t endpoint, uint16_t short_addr, esp_zb_ieee_addr_t ieee_addr);
|
char *readModel(uint8_t endpoint, uint16_t short_addr, esp_zb_ieee_addr_t ieee_addr);
|
||||||
|
|
||||||
// Set Power source and battery percentage for battery powered devices
|
// Set Power source and battery percentage for battery powered devices
|
||||||
bool setPowerSource(zb_power_source_t power_source, uint8_t percentage = 255);
|
bool setPowerSource(zb_power_source_t power_source, uint8_t percentage = 0xff, uint8_t voltage = 0xff); // voltage in 100mV
|
||||||
bool setBatteryPercentage(uint8_t percentage);
|
bool setBatteryPercentage(uint8_t percentage); // 0-100 %
|
||||||
bool reportBatteryPercentage();
|
bool setBatteryVoltage(uint8_t voltage); // voltage in 100mV (example value 35 for 3.5V)
|
||||||
|
bool reportBatteryPercentage(); // battery voltage is not reportable attribute
|
||||||
|
|
||||||
// Set time
|
// Set time
|
||||||
bool addTimeCluster(tm time = {}, int32_t gmt_offset = 0); // gmt offset in seconds
|
bool addTimeCluster(tm time = {}, int32_t gmt_offset = 0); // gmt offset in seconds
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue