mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 15:12:06 +00:00 
			
		
		
		
	Add light.on_state trigger (#2868)
This commit is contained in:
		| @@ -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])) | ||||||
|   | |||||||
| @@ -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); | ||||||
|   | |||||||
| @@ -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") | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user