mirror of
https://github.com/Threnklyn/esphome-dev.git
synced 2026-06-01 18:48:28 +02:00
Deprecate virtual methods to set entity properties (#3021)
This commit is contained in:
@@ -23,31 +23,6 @@ void IntegrationSensor::setup() {
|
||||
this->sensor_->add_on_state_callback([this](float state) { this->process_sensor_value_(state); });
|
||||
}
|
||||
void IntegrationSensor::dump_config() { LOG_SENSOR("", "Integration Sensor", this); }
|
||||
std::string IntegrationSensor::unit_of_measurement() {
|
||||
std::string suffix;
|
||||
switch (this->time_) {
|
||||
case INTEGRATION_SENSOR_TIME_MILLISECOND:
|
||||
suffix = "ms";
|
||||
break;
|
||||
case INTEGRATION_SENSOR_TIME_SECOND:
|
||||
suffix = "s";
|
||||
break;
|
||||
case INTEGRATION_SENSOR_TIME_MINUTE:
|
||||
suffix = "min";
|
||||
break;
|
||||
case INTEGRATION_SENSOR_TIME_HOUR:
|
||||
suffix = "h";
|
||||
break;
|
||||
case INTEGRATION_SENSOR_TIME_DAY:
|
||||
suffix = "d";
|
||||
break;
|
||||
}
|
||||
std::string base = this->sensor_->get_unit_of_measurement();
|
||||
if (str_endswith(base, "/" + suffix)) {
|
||||
return base.substr(0, base.size() - suffix.size() - 1);
|
||||
}
|
||||
return base + suffix;
|
||||
}
|
||||
void IntegrationSensor::process_sensor_value_(float value) {
|
||||
const uint32_t now = millis();
|
||||
const double old_value = this->last_value_;
|
||||
|
||||
@@ -63,8 +63,6 @@ class IntegrationSensor : public sensor::Sensor, public Component {
|
||||
this->last_save_ = now;
|
||||
this->rtc_.save(&result_f);
|
||||
}
|
||||
std::string unit_of_measurement() override;
|
||||
int8_t accuracy_decimals() override { return this->sensor_->get_accuracy_decimals() + 2; }
|
||||
|
||||
sensor::Sensor *sensor_;
|
||||
IntegrationSensorTime time_;
|
||||
|
||||
@@ -2,7 +2,14 @@ import esphome.codegen as cg
|
||||
import esphome.config_validation as cv
|
||||
from esphome import automation
|
||||
from esphome.components import sensor
|
||||
from esphome.const import CONF_ICON, CONF_ID, CONF_SENSOR, CONF_RESTORE
|
||||
from esphome.const import (
|
||||
CONF_ICON,
|
||||
CONF_ID,
|
||||
CONF_SENSOR,
|
||||
CONF_RESTORE,
|
||||
CONF_UNIT_OF_MEASUREMENT,
|
||||
CONF_ACCURACY_DECIMALS,
|
||||
)
|
||||
from esphome.core.entity_helpers import inherit_property_from
|
||||
|
||||
integration_ns = cg.esphome_ns.namespace("integration")
|
||||
@@ -30,6 +37,18 @@ CONF_TIME_UNIT = "time_unit"
|
||||
CONF_INTEGRATION_METHOD = "integration_method"
|
||||
CONF_MIN_SAVE_INTERVAL = "min_save_interval"
|
||||
|
||||
|
||||
def inherit_unit_of_measurement(uom, config):
|
||||
suffix = config[CONF_TIME_UNIT]
|
||||
if uom.endswith("/" + suffix):
|
||||
return uom[0 : -len("/" + suffix)]
|
||||
return uom + suffix
|
||||
|
||||
|
||||
def inherit_accuracy_decimals(decimals, config):
|
||||
return decimals + 2
|
||||
|
||||
|
||||
CONFIG_SCHEMA = sensor.SENSOR_SCHEMA.extend(
|
||||
{
|
||||
cv.GenerateID(): cv.declare_id(IntegrationSensor),
|
||||
@@ -51,11 +70,19 @@ FINAL_VALIDATE_SCHEMA = cv.All(
|
||||
{
|
||||
cv.Required(CONF_ID): cv.use_id(IntegrationSensor),
|
||||
cv.Optional(CONF_ICON): cv.icon,
|
||||
cv.Optional(CONF_UNIT_OF_MEASUREMENT): sensor.validate_unit_of_measurement,
|
||||
cv.Optional(CONF_ACCURACY_DECIMALS): sensor.validate_accuracy_decimals,
|
||||
cv.Required(CONF_SENSOR): cv.use_id(sensor.Sensor),
|
||||
},
|
||||
extra=cv.ALLOW_EXTRA,
|
||||
),
|
||||
inherit_property_from(CONF_ICON, CONF_SENSOR),
|
||||
inherit_property_from(
|
||||
CONF_UNIT_OF_MEASUREMENT, CONF_SENSOR, transform=inherit_unit_of_measurement
|
||||
),
|
||||
inherit_property_from(
|
||||
CONF_ACCURACY_DECIMALS, CONF_SENSOR, transform=inherit_accuracy_decimals
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user