mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 06:33:51 +00:00 
			
		
		
		
	Add text_sensor.template.publish action (#433)
* Add text_sensor.template.publish action * Fix * Add test
This commit is contained in:
		| @@ -8,7 +8,7 @@ from esphome.const import CONF_ICON, CONF_ID, CONF_INTERNAL, CONF_MQTT_ID, CONF_ | ||||
|     CONF_TRIGGER_ID | ||||
| from esphome.core import CORE | ||||
| from esphome.cpp_generator import Pvariable, add | ||||
| from esphome.cpp_types import App, Nameable, Trigger, esphome_ns, std_string | ||||
| from esphome.cpp_types import App, Nameable, Trigger, esphome_ns, std_string, Action | ||||
|  | ||||
| PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({ | ||||
|  | ||||
| @@ -22,6 +22,7 @@ MQTTTextSensor = text_sensor_ns.class_('MQTTTextSensor', mqtt.MQTTComponent) | ||||
|  | ||||
| TextSensorStateTrigger = text_sensor_ns.class_('TextSensorStateTrigger', | ||||
|                                                Trigger.template(std_string)) | ||||
| TextSensorPublishAction = text_sensor_ns.class_('TextSensorPublishAction', Action) | ||||
|  | ||||
| TEXT_SENSOR_SCHEMA = cv.MQTT_COMPONENT_SCHEMA.extend({ | ||||
|     cv.GenerateID(CONF_MQTT_ID): cv.declare_variable_id(MQTTTextSensor), | ||||
|   | ||||
| @@ -1,9 +1,11 @@ | ||||
| import voluptuous as vol | ||||
|  | ||||
| from esphome.automation import ACTION_REGISTRY | ||||
| from esphome.components import text_sensor | ||||
| from esphome.components.text_sensor import TextSensorPublishAction | ||||
| import esphome.config_validation as cv | ||||
| from esphome.const import CONF_ID, CONF_LAMBDA, CONF_NAME, CONF_UPDATE_INTERVAL | ||||
| from esphome.cpp_generator import Pvariable, add, process_lambda | ||||
| from esphome.const import CONF_ID, CONF_LAMBDA, CONF_NAME, CONF_STATE, CONF_UPDATE_INTERVAL | ||||
| from esphome.cpp_generator import Pvariable, add, get_variable, process_lambda, templatable | ||||
| from esphome.cpp_helpers import setup_component | ||||
| from esphome.cpp_types import App, PollingComponent, optional, std_string | ||||
|  | ||||
| @@ -32,6 +34,26 @@ def to_code(config): | ||||
|  | ||||
| BUILD_FLAGS = '-DUSE_TEMPLATE_TEXT_SENSOR' | ||||
|  | ||||
| CONF_TEXT_SENSOR_TEMPLATE_PUBLISH = 'text_sensor.template.publish' | ||||
| TEXT_SENSOR_TEMPLATE_PUBLISH_ACTION_SCHEMA = vol.Schema({ | ||||
|     vol.Required(CONF_ID): cv.use_variable_id(text_sensor.TextSensor), | ||||
|     vol.Required(CONF_STATE): cv.templatable(cv.string_strict), | ||||
| }) | ||||
|  | ||||
|  | ||||
| @ACTION_REGISTRY.register(CONF_TEXT_SENSOR_TEMPLATE_PUBLISH, | ||||
|                           TEXT_SENSOR_TEMPLATE_PUBLISH_ACTION_SCHEMA) | ||||
| def text_sensor_template_publish_to_code(config, action_id, arg_type, template_arg): | ||||
|     for var in get_variable(config[CONF_ID]): | ||||
|         yield None | ||||
|     rhs = var.make_text_sensor_publish_action(template_arg) | ||||
|     type = TextSensorPublishAction.template(arg_type) | ||||
|     action = Pvariable(action_id, rhs, type=type) | ||||
|     for template_ in templatable(config[CONF_STATE], arg_type, std_string): | ||||
|         yield None | ||||
|     add(action.set_state(template_)) | ||||
|     yield action | ||||
|  | ||||
|  | ||||
| def to_hass_config(data, config): | ||||
|     return text_sensor.core_to_hass_config(data, config) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user