Add light.on_state trigger (#2868)

This commit is contained in:
tony 2021-12-12 15:19:57 -05:00 committed by GitHub
parent beeb0c7c5a
commit 9c0506592b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 0 deletions

View file

@ -14,6 +14,7 @@ from esphome.const import (
CONF_RESTORE_MODE, CONF_RESTORE_MODE,
CONF_ON_TURN_OFF, CONF_ON_TURN_OFF,
CONF_ON_TURN_ON, CONF_ON_TURN_ON,
CONF_ON_STATE,
CONF_TRIGGER_ID, CONF_TRIGGER_ID,
CONF_COLD_WHITE_COLOR_TEMPERATURE, CONF_COLD_WHITE_COLOR_TEMPERATURE,
CONF_WARM_WHITE_COLOR_TEMPERATURE, CONF_WARM_WHITE_COLOR_TEMPERATURE,
@ -37,6 +38,7 @@ from .types import ( # noqa
AddressableLight, AddressableLight,
LightTurnOnTrigger, LightTurnOnTrigger,
LightTurnOffTrigger, LightTurnOffTrigger,
LightStateTrigger,
) )
CODEOWNERS = ["@esphome/core"] CODEOWNERS = ["@esphome/core"]
@ -69,6 +71,11 @@ LIGHT_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).ex
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(LightTurnOffTrigger), cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(LightTurnOffTrigger),
} }
), ),
cv.Optional(CONF_ON_STATE): auto.validate_automation(
{
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(LightStateTrigger),
}
),
} }
) )
@ -151,6 +158,9 @@ async def setup_light_core_(light_var, output_var, config):
for conf in config.get(CONF_ON_TURN_OFF, []): for conf in config.get(CONF_ON_TURN_OFF, []):
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], light_var) trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], light_var)
await auto.build_automation(trigger, [], conf) await auto.build_automation(trigger, [], conf)
for conf in config.get(CONF_ON_STATE, []):
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], light_var)
await auto.build_automation(trigger, [], conf)
if CONF_COLOR_CORRECT in config: if CONF_COLOR_CORRECT in config:
cg.add(output_var.set_correction(*config[CONF_COLOR_CORRECT])) cg.add(output_var.set_correction(*config[CONF_COLOR_CORRECT]))

View file

@ -141,6 +141,13 @@ class LightTurnOffTrigger : public Trigger<> {
} }
}; };
class LightStateTrigger : public Trigger<> {
public:
LightStateTrigger(LightState *a_light) {
a_light->add_new_remote_values_callback([this]() { this->trigger(); });
}
};
// This is slightly ugly, but we can't log in headers, and can't make this a static method on AddressableSet // This is slightly ugly, but we can't log in headers, and can't make this a static method on AddressableSet
// due to the template. It's just a temporary warning anyway. // due to the template. It's just a temporary warning anyway.
void addressableset_warn_about_scale(const char *field); void addressableset_warn_about_scale(const char *field);

View file

@ -41,6 +41,7 @@ LightTurnOnTrigger = light_ns.class_(
LightTurnOffTrigger = light_ns.class_( LightTurnOffTrigger = light_ns.class_(
"LightTurnOffTrigger", automation.Trigger.template() "LightTurnOffTrigger", automation.Trigger.template()
) )
LightStateTrigger = light_ns.class_("LightStateTrigger", automation.Trigger.template())
# Effects # Effects
LightEffect = light_ns.class_("LightEffect") LightEffect = light_ns.class_("LightEffect")