MQTT_MESSAGE_TEMPLATE_SCHEMA = vol.Any(None, MQTT_MESSAGE_BASE, validate_message_just_topic) MQTT_MESSAGE_SCHEMA = vol.Any( None, MQTT_MESSAGE_BASE.extend({ vol.Required(CONF_PAYLOAD): cv.mqtt_payload, })) mqtt_ns = esphomelib_ns.namespace('mqtt') MQTTMessage = mqtt_ns.struct('MQTTMessage') MQTTClientComponent = mqtt_ns.class_('MQTTClientComponent', Component) MQTTPublishAction = mqtt_ns.class_('MQTTPublishAction', Action) MQTTPublishJsonAction = mqtt_ns.class_('MQTTPublishJsonAction', Action) MQTTMessageTrigger = mqtt_ns.class_('MQTTMessageTrigger', Trigger.template(std_string)) MQTTJsonMessageTrigger = mqtt_ns.class_('MQTTJsonMessageTrigger', Trigger.template(JsonObjectConstRef)) MQTTComponent = mqtt_ns.class_('MQTTComponent', Component) def validate_config(value): if CONF_PORT not in value: parts = value[CONF_BROKER].split(u':') if len(parts) == 2: value[CONF_BROKER] = parts[0] value[CONF_PORT] = cv.port(parts[1]) else: value[CONF_PORT] = 1883 return value
import esphomeyaml.config_validation as cv from esphomeyaml import automation from esphomeyaml.const import CONF_CRON, CONF_DAYS_OF_MONTH, CONF_DAYS_OF_WEEK, CONF_HOURS, \ CONF_MINUTES, CONF_MONTHS, CONF_ON_TIME, CONF_SECONDS, CONF_TIMEZONE, CONF_TRIGGER_ID from esphomeyaml.core import CORE from esphomeyaml.cpp_generator import add, Pvariable, ArrayInitializer from esphomeyaml.cpp_types import esphomelib_ns, Component, NoArg, Trigger, App from esphomeyaml.py_compat import string_types _LOGGER = logging.getLogger(__name__) PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({}) time_ns = esphomelib_ns.namespace('time') RealTimeClockComponent = time_ns.class_('RealTimeClockComponent', Component) CronTrigger = time_ns.class_('CronTrigger', Trigger.template(NoArg), Component) EsphomelibTime = time_ns.struct('EsphomelibTime') def _tz_timedelta(td): offset_hour = int(td.total_seconds() / (60 * 60)) offset_minute = int(abs(td.total_seconds() / 60)) % 60 offset_second = int(abs(td.total_seconds())) % 60 if offset_hour == 0 and offset_minute == 0 and offset_second == 0: return '0' if offset_minute == 0 and offset_second == 0: return '{}'.format(offset_hour) if offset_second == 0: return '{}:{}'.format(offset_hour, offset_minute) return '{}:{}:{}'.format(offset_hour, offset_minute, offset_second)
# Base sensor_ns = esphomelib_ns.namespace('sensor') Sensor = sensor_ns.class_('Sensor', Nameable) SensorPtr = Sensor.operator('ptr') MQTTSensorComponent = sensor_ns.class_('MQTTSensorComponent', mqtt.MQTTComponent) PollingSensorComponent = sensor_ns.class_('PollingSensorComponent', PollingComponent, Sensor) EmptySensor = sensor_ns.class_('EmptySensor', Sensor) EmptyPollingParentSensor = sensor_ns.class_('EmptyPollingParentSensor', EmptySensor) # Triggers SensorStateTrigger = sensor_ns.class_('SensorStateTrigger', Trigger.template(float_)) SensorRawStateTrigger = sensor_ns.class_('SensorRawStateTrigger', Trigger.template(float_)) ValueRangeTrigger = sensor_ns.class_('ValueRangeTrigger', Trigger.template(float_), Component) # Filters Filter = sensor_ns.class_('Filter') SlidingWindowMovingAverageFilter = sensor_ns.class_( 'SlidingWindowMovingAverageFilter', Filter) ExponentialMovingAverageFilter = sensor_ns.class_( 'ExponentialMovingAverageFilter', Filter) LambdaFilter = sensor_ns.class_('LambdaFilter', Filter) OffsetFilter = sensor_ns.class_('OffsetFilter', Filter) MultiplyFilter = sensor_ns.class_('MultiplyFilter', Filter) FilterOutValueFilter = sensor_ns.class_('FilterOutValueFilter', Filter)
import voluptuous as vol from esphomeyaml import automation import esphomeyaml.config_validation as cv from esphomeyaml.const import CONF_ID, CONF_INTERVAL from esphomeyaml.cpp_generator import Pvariable from esphomeyaml.cpp_helpers import setup_component from esphomeyaml.cpp_types import App, NoArg, PollingComponent, Trigger, esphomelib_ns IntervalTrigger = esphomelib_ns.class_('IntervalTrigger', Trigger.template(NoArg), PollingComponent) CONFIG_SCHEMA = automation.validate_automation( vol.Schema({ vol.Required(CONF_ID): cv.declare_variable_id(IntervalTrigger), vol.Required(CONF_INTERVAL): cv.positive_time_period_milliseconds, }).extend(cv.COMPONENT_SCHEMA.schema)) def to_code(config): for conf in config: rhs = App.register_component(IntervalTrigger.new( config[CONF_INTERVAL])) trigger = Pvariable(conf[CONF_ID], rhs) setup_component(trigger, conf) automation.build_automation(trigger, NoArg, conf)
vol.Optional(CONF_DEBOUNCE): cv.positive_time_period_milliseconds, vol.Optional(CONF_OR): validate_recursive_filter, }, cv.has_exactly_one_key(*FILTER_KEYS)) # Base sensor_ns = esphomelib_ns.namespace('sensor') Sensor = sensor_ns.class_('Sensor', Nameable) SensorPtr = Sensor.operator('ptr') MQTTSensorComponent = sensor_ns.class_('MQTTSensorComponent', mqtt.MQTTComponent) PollingSensorComponent = sensor_ns.class_('PollingSensorComponent', PollingComponent, Sensor) EmptySensor = sensor_ns.class_('EmptySensor', Sensor) EmptyPollingParentSensor = sensor_ns.class_('EmptyPollingParentSensor', EmptySensor) # Triggers SensorStateTrigger = sensor_ns.class_('SensorStateTrigger', Trigger.template(float_)) SensorRawStateTrigger = sensor_ns.class_('SensorRawStateTrigger', Trigger.template(float_)) ValueRangeTrigger = sensor_ns.class_('ValueRangeTrigger', Trigger.template(float_), Component) # Filters Filter = sensor_ns.class_('Filter') SlidingWindowMovingAverageFilter = sensor_ns.class_('SlidingWindowMovingAverageFilter', Filter) ExponentialMovingAverageFilter = sensor_ns.class_('ExponentialMovingAverageFilter', Filter) LambdaFilter = sensor_ns.class_('LambdaFilter', Filter) OffsetFilter = sensor_ns.class_('OffsetFilter', Filter) MultiplyFilter = sensor_ns.class_('MultiplyFilter', Filter) FilterOutValueFilter = sensor_ns.class_('FilterOutValueFilter', Filter) FilterOutNANFilter = sensor_ns.class_('FilterOutNANFilter', Filter) ThrottleFilter = sensor_ns.class_('ThrottleFilter', Filter) DebounceFilter = sensor_ns.class_('DebounceFilter', Filter, Component) HeartbeatFilter = sensor_ns.class_('HeartbeatFilter', Filter, Component)
import voluptuous as vol from esphomeyaml import automation from esphomeyaml.automation import ACTION_REGISTRY, maybe_simple_id import esphomeyaml.config_validation as cv from esphomeyaml.const import CONF_ID from esphomeyaml.cpp_generator import Pvariable, get_variable from esphomeyaml.cpp_types import Action, NoArg, Trigger, esphomelib_ns Script = esphomelib_ns.class_('Script', Trigger.template(NoArg)) ScriptExecuteAction = esphomelib_ns.class_('ScriptExecuteAction', Action) ScriptStopAction = esphomelib_ns.class_('ScriptStopAction', Action) CONFIG_SCHEMA = automation.validate_automation({ vol.Required(CONF_ID): cv.declare_variable_id(Script), }) def to_code(config): for conf in config: trigger = Pvariable(conf[CONF_ID], Script.new()) automation.build_automation(trigger, NoArg, conf) CONF_SCRIPT_EXECUTE = 'script.execute' SCRIPT_EXECUTE_ACTION_SCHEMA = maybe_simple_id({ vol.Required(CONF_ID): cv.use_variable_id(Script), })
'', 'battery', 'cold', 'connectivity', 'door', 'garage_door', 'gas', 'heat', 'light', 'lock', 'moisture', 'motion', 'moving', 'occupancy', 'opening', 'plug', 'power', 'presence', 'problem', 'safety', 'smoke', 'sound', 'vibration', 'window' ] PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({}) binary_sensor_ns = esphomelib_ns.namespace('binary_sensor') BinarySensor = binary_sensor_ns.class_('BinarySensor', Nameable) BinarySensorPtr = BinarySensor.operator('ptr') MQTTBinarySensorComponent = binary_sensor_ns.class_( 'MQTTBinarySensorComponent', mqtt.MQTTComponent) # Triggers PressTrigger = binary_sensor_ns.class_('PressTrigger', Trigger.template(NoArg)) ReleaseTrigger = binary_sensor_ns.class_('ReleaseTrigger', Trigger.template(NoArg)) ClickTrigger = binary_sensor_ns.class_('ClickTrigger', Trigger.template(NoArg)) DoubleClickTrigger = binary_sensor_ns.class_('DoubleClickTrigger', Trigger.template(NoArg)) MultiClickTrigger = binary_sensor_ns.class_('MultiClickTrigger', Trigger.template(NoArg), Component) MultiClickTriggerEvent = binary_sensor_ns.struct('MultiClickTriggerEvent') StateTrigger = binary_sensor_ns.class_('StateTrigger', Trigger.template(bool_)) # Condition BinarySensorCondition = binary_sensor_ns.class_('BinarySensorCondition', Condition) # Filters
from esphomeyaml.const import CONF_ICON, CONF_ID, CONF_INTERNAL, CONF_MQTT_ID, CONF_ON_VALUE, \ CONF_TRIGGER_ID from esphomeyaml.core import CORE from esphomeyaml.cpp_generator import Pvariable, add from esphomeyaml.cpp_types import esphomelib_ns, Nameable, Trigger, std_string, App PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({}) # pylint: disable=invalid-name text_sensor_ns = esphomelib_ns.namespace('text_sensor') TextSensor = text_sensor_ns.class_('TextSensor', Nameable) TextSensorPtr = TextSensor.operator('ptr') MQTTTextSensor = text_sensor_ns.class_('MQTTTextSensor', mqtt.MQTTComponent) TextSensorStateTrigger = text_sensor_ns.class_('TextSensorStateTrigger', Trigger.template(std_string)) TEXT_SENSOR_SCHEMA = cv.MQTT_COMPONENT_SCHEMA.extend({ cv.GenerateID(CONF_MQTT_ID): cv.declare_variable_id(MQTTTextSensor), vol.Optional(CONF_ICON): cv.icon, vol.Optional(CONF_ON_VALUE): automation.validate_automation({ cv.GenerateID(CONF_TRIGGER_ID): cv.declare_variable_id(TextSensorStateTrigger), }), }) TEXT_SENSOR_PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(TEXT_SENSOR_SCHEMA.schema)
from esphomeyaml.components.spi import SPIComponent import esphomeyaml.config_validation as cv from esphomeyaml.const import CONF_CS_PIN, CONF_ID, CONF_ON_TAG, CONF_SPI_ID, CONF_TRIGGER_ID, \ CONF_UPDATE_INTERVAL from esphomeyaml.cpp_generator import Pvariable, get_variable from esphomeyaml.cpp_helpers import gpio_output_pin_expression, setup_component from esphomeyaml.cpp_types import App, PollingComponent, Trigger, std_string DEPENDENCIES = ['spi'] MULTI_CONF = True PN532Component = binary_sensor.binary_sensor_ns.class_('PN532Component', PollingComponent, spi.SPIDevice) PN532Trigger = binary_sensor.binary_sensor_ns.class_( 'PN532Trigger', Trigger.template(std_string)) CONFIG_SCHEMA = vol.Schema({ cv.GenerateID(): cv.declare_variable_id(PN532Component), cv.GenerateID(CONF_SPI_ID): cv.use_variable_id(SPIComponent), vol.Required(CONF_CS_PIN): pins.gpio_output_pin_schema, vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval, vol.Optional(CONF_ON_TAG): automation.validate_automation({ cv.GenerateID(CONF_TRIGGER_ID): cv.declare_variable_id(PN532Trigger), }),