[systa_bus] Use SUB_SENSOR and explicit sub_sensors calls for the sensors (#20610)

This commit is contained in:
J. Nick Koston
2026-10-12 20:57:01 -04:00
committed by GitHub
parent c3c235dea7
commit afedddafe2
2 changed files with 14 additions and 17 deletions
@@ -43,7 +43,7 @@ _PUMP_SPEED_SCHEMA = sensor.sensor_schema(
state_class=STATE_CLASS_MEASUREMENT,
)
# Sensors per model, keyed by config key; the C++ setter is "set_<key>_sensor"
# Sensors per model, keyed by config key
MODEL_SENSORS = {
CONF_SYSTASOLAR_AQUA: {
CONF_TEMPERATURE_TSA: _TEMPERATURE_SCHEMA,
@@ -77,10 +77,13 @@ async def to_code(config: ConfigType) -> None:
var = cg.new_Pvariable(config[CONF_ID])
await cg.register_component(var, config)
for key in MODEL_SENSORS[config[CONF_MODEL]]:
if (conf := config.get(key)) is not None:
sens = await sensor.new_sensor(conf)
cg.add(getattr(var, f"set_{key}_sensor")(sens))
# The schema only lets a model's own keys through, so unconfigured ones are skipped here
sensors = sensor.sub_sensors(config)
await sensors(CONF_TEMPERATURE_TSA, var.set_temperature_tsa_sensor)
await sensors(CONF_TEMPERATURE_TSE, var.set_temperature_tse_sensor)
await sensors(CONF_TEMPERATURE_TWU, var.set_temperature_twu_sensor)
await sensors(CONF_TEMPERATURE_TW2, var.set_temperature_tw2_sensor)
await sensors(CONF_PUMP_SPEED, var.set_pump_speed_sensor)
systa_bus = await cg.get_variable(config[CONF_SYSTA_BUS_ID])
await register_systa_bus_listener(systa_bus, var)
@@ -8,21 +8,15 @@
namespace esphome::systa_bus {
class SystaSolarAquaSensor : public SystaBusListener, public Component {
SUB_SENSOR(temperature_tsa)
SUB_SENSOR(temperature_tse)
SUB_SENSOR(temperature_twu)
SUB_SENSOR(temperature_tw2)
SUB_SENSOR(pump_speed)
public:
void dump_config() override;
void set_temperature_tsa_sensor(sensor::Sensor *sensor) { this->temperature_tsa_sensor_ = sensor; }
void set_temperature_tse_sensor(sensor::Sensor *sensor) { this->temperature_tse_sensor_ = sensor; }
void set_temperature_twu_sensor(sensor::Sensor *sensor) { this->temperature_twu_sensor_ = sensor; }
void set_temperature_tw2_sensor(sensor::Sensor *sensor) { this->temperature_tw2_sensor_ = sensor; }
void set_pump_speed_sensor(sensor::Sensor *sensor) { this->pump_speed_sensor_ = sensor; }
void handle_message(std::span<const uint8_t> message) override;
protected:
sensor::Sensor *temperature_tsa_sensor_{nullptr};
sensor::Sensor *temperature_tse_sensor_{nullptr};
sensor::Sensor *temperature_twu_sensor_{nullptr};
sensor::Sensor *temperature_tw2_sensor_{nullptr};
sensor::Sensor *pump_speed_sensor_{nullptr};
};
} // namespace esphome::systa_bus