diff --git a/esphome/components/text_sensor/__init__.py b/esphome/components/text_sensor/__init__.py index 3945d1eaff..e98df74fce 100644 --- a/esphome/components/text_sensor/__init__.py +++ b/esphome/components/text_sensor/__init__.py @@ -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), diff --git a/esphome/components/text_sensor/template.py b/esphome/components/text_sensor/template.py index ff00014f8e..cde833f175 100644 --- a/esphome/components/text_sensor/template.py +++ b/esphome/components/text_sensor/template.py @@ -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) diff --git a/tests/test1.yaml b/tests/test1.yaml index ce60b556bd..a5d0686905 100644 --- a/tests/test1.yaml +++ b/tests/test1.yaml @@ -1130,3 +1130,14 @@ text_sensor: name: "MQTT Subscribe Text" topic: "the/topic" qos: 2 + on_value: + - text_sensor.template.publish: + id: template_text + state: Hello World + - text_sensor.template.publish: + id: template_text + state: |- + return "Hello World2"; +- platform: template + name: Template Text Sensor + id: template_text