From 73cef8aa2748c23f1715951f9eb7af1224af0bdc Mon Sep 17 00:00:00 2001 From: Otto Winter Date: Fri, 12 Oct 2018 09:45:34 +0200 Subject: [PATCH] Text Sensors --- .../components/text_sensor/__init__.py | 56 +++++++++++++++++++ .../components/text_sensor/mqtt_subscribe.py | 27 +++++++++ 2 files changed, 83 insertions(+) create mode 100644 esphomeyaml/components/text_sensor/__init__.py create mode 100644 esphomeyaml/components/text_sensor/mqtt_subscribe.py diff --git a/esphomeyaml/components/text_sensor/__init__.py b/esphomeyaml/components/text_sensor/__init__.py new file mode 100644 index 0000000000..e768473162 --- /dev/null +++ b/esphomeyaml/components/text_sensor/__init__.py @@ -0,0 +1,56 @@ +import voluptuous as vol + +from esphomeyaml import automation +import esphomeyaml.config_validation as cv +from esphomeyaml.const import CONF_ICON, CONF_ID, CONF_INTERNAL, CONF_MQTT_ID, CONF_ON_VALUE, \ + CONF_TRIGGER_ID, CONF_UNIT_OF_MEASUREMENT +from esphomeyaml.helpers import App, Pvariable, add, add_job, esphomelib_ns, setup_mqtt_component + +PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({ + +}) + +# pylint: disable=invalid-name +text_sensor_ns = esphomelib_ns.namespace('text_sensor') +TextSensor = text_sensor_ns.TextSensor +MQTTSensorComponent = text_sensor_ns.MQTTSensorComponent + +TextSensorValueTrigger = text_sensor_ns.TextSensorValueTrigger + +TEXT_SENSOR_SCHEMA = cv.MQTT_COMPONENT_SCHEMA.extend({ + cv.GenerateID(CONF_MQTT_ID): cv.declare_variable_id(MQTTSensorComponent), + cv.GenerateID(): cv.declare_variable_id(TextSensor), + vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string_strict, + vol.Optional(CONF_ICON): cv.icon, + vol.Optional(CONF_ON_VALUE): vol.All(cv.ensure_list, [automation.validate_automation({ + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_variable_id(TextSensorValueTrigger), + })]), +}) + +TEXT_SENSOR_PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(TEXT_SENSOR_SCHEMA.schema) + + +def setup_text_sensor_core_(text_sensor_var, mqtt_var, config): + if CONF_INTERNAL in config: + add(text_sensor_var.set_internal(config[CONF_INTERNAL])) + if CONF_UNIT_OF_MEASUREMENT in config: + add(text_sensor_var.set_unit_of_measurement(config[CONF_UNIT_OF_MEASUREMENT])) + if CONF_ICON in config: + add(text_sensor_var.set_icon(config[CONF_ICON])) + setup_mqtt_component(mqtt_var, config) + + +def setup_text_sensor(text_sensor_obj, mqtt_obj, config): + sensor_var = Pvariable(config[CONF_ID], text_sensor_obj, has_side_effects=False) + mqtt_var = Pvariable(config[CONF_MQTT_ID], mqtt_obj, has_side_effects=False) + add_job(setup_text_sensor_core_, sensor_var, mqtt_var, config) + + +def register_text_sensor(var, config): + text_sensor_var = Pvariable(config[CONF_ID], var, has_side_effects=True) + rhs = App.register_text_sensor(text_sensor_var) + mqtt_var = Pvariable(config[CONF_MQTT_ID], rhs, has_side_effects=True) + add_job(setup_text_sensor_core_, text_sensor_var, mqtt_var, config) + + +BUILD_FLAGS = '-DUSE_TEXT_SENSOR' diff --git a/esphomeyaml/components/text_sensor/mqtt_subscribe.py b/esphomeyaml/components/text_sensor/mqtt_subscribe.py new file mode 100644 index 0000000000..18082d1f6e --- /dev/null +++ b/esphomeyaml/components/text_sensor/mqtt_subscribe.py @@ -0,0 +1,27 @@ +import voluptuous as vol + +from esphomeyaml.components import text_sensor +import esphomeyaml.config_validation as cv +from esphomeyaml.const import CONF_MAKE_ID, CONF_NAME, CONF_QOS, CONF_TOPIC +from esphomeyaml.helpers import App, Application, add, variable + +DEPENDENCIES = ['mqtt'] + +MakeMQTTSubscribeTextSensor = Application.MakeMQTTSubscribeTextSensor + +PLATFORM_SCHEMA = cv.nameable(text_sensor.TEXT_SENSOR_PLATFORM_SCHEMA.extend({ + cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeMQTTSubscribeTextSensor), + vol.Required(CONF_TOPIC): cv.subscribe_topic, + vol.Optional(CONF_QOS): cv.mqtt_qos, +})) + + +def to_code(config): + rhs = App.make_mqtt_subscribe_text_sensor(config[CONF_NAME], config[CONF_TOPIC]) + make = variable(config[CONF_MAKE_ID], rhs) + if CONF_QOS in config: + add(make.Psensor.set_qos(config[CONF_QOS])) + text_sensor.setup_text_sensor(make.Psensor, make.Pmqtt, config) + + +BUILD_FLAGS = '-DUSE_MQTT_SUBSCRIBE_TEXT_SENSOR'