mirror of
https://github.com/esphome/esphome.git
synced 2025-01-18 10:25:56 +01:00
Add climate on_state trigger (#2707)
This commit is contained in:
parent
582567696e
commit
aae63a7ff3
3 changed files with 21 additions and 0 deletions
|
@ -20,6 +20,7 @@ from esphome.const import (
|
||||||
CONF_MODE,
|
CONF_MODE,
|
||||||
CONF_MODE_COMMAND_TOPIC,
|
CONF_MODE_COMMAND_TOPIC,
|
||||||
CONF_MODE_STATE_TOPIC,
|
CONF_MODE_STATE_TOPIC,
|
||||||
|
CONF_ON_STATE,
|
||||||
CONF_PRESET,
|
CONF_PRESET,
|
||||||
CONF_SWING_MODE,
|
CONF_SWING_MODE,
|
||||||
CONF_SWING_MODE_COMMAND_TOPIC,
|
CONF_SWING_MODE_COMMAND_TOPIC,
|
||||||
|
@ -34,6 +35,7 @@ from esphome.const import (
|
||||||
CONF_TARGET_TEMPERATURE_LOW_COMMAND_TOPIC,
|
CONF_TARGET_TEMPERATURE_LOW_COMMAND_TOPIC,
|
||||||
CONF_TARGET_TEMPERATURE_LOW_STATE_TOPIC,
|
CONF_TARGET_TEMPERATURE_LOW_STATE_TOPIC,
|
||||||
CONF_TEMPERATURE_STEP,
|
CONF_TEMPERATURE_STEP,
|
||||||
|
CONF_TRIGGER_ID,
|
||||||
CONF_VISUAL,
|
CONF_VISUAL,
|
||||||
CONF_MQTT_ID,
|
CONF_MQTT_ID,
|
||||||
)
|
)
|
||||||
|
@ -101,6 +103,7 @@ validate_climate_swing_mode = cv.enum(CLIMATE_SWING_MODES, upper=True)
|
||||||
|
|
||||||
# Actions
|
# Actions
|
||||||
ControlAction = climate_ns.class_("ControlAction", automation.Action)
|
ControlAction = climate_ns.class_("ControlAction", automation.Action)
|
||||||
|
StateTrigger = climate_ns.class_("StateTrigger", automation.Trigger.template())
|
||||||
|
|
||||||
CLIMATE_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).extend(
|
CLIMATE_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).extend(
|
||||||
{
|
{
|
||||||
|
@ -161,6 +164,11 @@ CLIMATE_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).
|
||||||
cv.Optional(CONF_TARGET_TEMPERATURE_LOW_STATE_TOPIC): cv.All(
|
cv.Optional(CONF_TARGET_TEMPERATURE_LOW_STATE_TOPIC): cv.All(
|
||||||
cv.requires_component("mqtt"), cv.publish_topic
|
cv.requires_component("mqtt"), cv.publish_topic
|
||||||
),
|
),
|
||||||
|
cv.Optional(CONF_ON_STATE): automation.validate_automation(
|
||||||
|
{
|
||||||
|
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(StateTrigger),
|
||||||
|
}
|
||||||
|
),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -256,6 +264,10 @@ async def setup_climate_core_(var, config):
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
for conf in config.get(CONF_ON_STATE, []):
|
||||||
|
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
|
||||||
|
await automation.build_automation(trigger, [], conf)
|
||||||
|
|
||||||
|
|
||||||
async def register_climate(var, config):
|
async def register_climate(var, config):
|
||||||
if not CORE.has_id(config[CONF_ID]):
|
if not CORE.has_id(config[CONF_ID]):
|
||||||
|
|
|
@ -42,5 +42,12 @@ template<typename... Ts> class ControlAction : public Action<Ts...> {
|
||||||
Climate *climate_;
|
Climate *climate_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class StateTrigger : public Trigger<> {
|
||||||
|
public:
|
||||||
|
StateTrigger(Climate *climate) {
|
||||||
|
climate->add_on_state_callback([this]() { this->trigger(); });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace climate
|
} // namespace climate
|
||||||
} // namespace esphome
|
} // namespace esphome
|
||||||
|
|
|
@ -1707,6 +1707,8 @@ climate:
|
||||||
min_temperature: 18
|
min_temperature: 18
|
||||||
max_temperature: 30
|
max_temperature: 30
|
||||||
- platform: midea
|
- platform: midea
|
||||||
|
on_state:
|
||||||
|
logger.log: "State changed!"
|
||||||
id: midea_unit
|
id: midea_unit
|
||||||
uart_id: uart0
|
uart_id: uart0
|
||||||
name: Midea Climate
|
name: Midea Climate
|
||||||
|
|
Loading…
Reference in a new issue