mirror of
				https://github.com/esphome/esphome.git
				synced 2025-11-03 16:41:50 +00:00 
			
		
		
		
	Compare commits
	
		
			40 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					6761f9dfdd | ||
| 
						 | 
					be21aa786d | ||
| 
						 | 
					9a881100e6 | ||
| 
						 | 
					c2f88776c7 | ||
| 
						 | 
					846fcb8ccd | ||
| 
						 | 
					44495c919c | ||
| 
						 | 
					d4ce7699d4 | ||
| 
						 | 
					318bb8b254 | ||
| 
						 | 
					1ad65516cf | ||
| 
						 | 
					d4c7e6c634 | ||
| 
						 | 
					9b07bb6608 | ||
| 
						 | 
					f368255739 | ||
| 
						 | 
					083c2fce05 | ||
| 
						 | 
					c99d4e2815 | ||
| 
						 | 
					39457f7b8c | ||
| 
						 | 
					01aaf14078 | ||
| 
						 | 
					9a939d2d27 | ||
| 
						 | 
					7f91141df2 | ||
| 
						 | 
					06eeed9ee9 | ||
| 
						 | 
					5655b5fe10 | ||
| 
						 | 
					15331edb78 | ||
| 
						 | 
					4f375757a5 | ||
| 
						 | 
					0dec7cfbf8 | ||
| 
						 | 
					f51d301d53 | ||
| 
						 | 
					c3b3ba4923 | ||
| 
						 | 
					30e7797577 | ||
| 
						 | 
					0e5cabadc1 | ||
| 
						 | 
					58f4fa53d0 | ||
| 
						 | 
					04dc848620 | ||
| 
						 | 
					8203b8fcd3 | ||
| 
						 | 
					0ad61f4a95 | ||
| 
						 | 
					9fd4076ab8 | ||
| 
						 | 
					a9e799cb06 | ||
| 
						 | 
					3ec931ffa4 | ||
| 
						 | 
					e3094d9689 | ||
| 
						 | 
					3594779401 | ||
| 
						 | 
					94978d0063 | ||
| 
						 | 
					415e12309b | ||
| 
						 | 
					d7d3a4aa36 | ||
| 
						 | 
					6a2e9a8503 | 
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "esphomeyaml-beta",
 | 
			
		||||
  "version": "1.9.0b3",
 | 
			
		||||
  "version": "1.9.1",
 | 
			
		||||
  "slug": "esphomeyaml-beta",
 | 
			
		||||
  "description": "Beta version of esphomeyaml HassIO add-on.",
 | 
			
		||||
  "url": "https://beta.esphomelib.com/esphomeyaml/index.html",
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,8 @@ from esphomeyaml.const import CONF_ABOVE, CONF_ACTION_ID, CONF_AND, CONF_AUTOMAT
 | 
			
		||||
    CONF_OR, CONF_RANGE, CONF_THEN, CONF_TRIGGER_ID
 | 
			
		||||
from esphomeyaml.core import ESPHomeYAMLError
 | 
			
		||||
from esphomeyaml.helpers import App, ArrayInitializer, Pvariable, TemplateArguments, add, add_job, \
 | 
			
		||||
    esphomelib_ns, float_, process_lambda, templatable, uint32, get_variable
 | 
			
		||||
    esphomelib_ns, float_, process_lambda, templatable, uint32, get_variable, PollingComponent, \
 | 
			
		||||
    Action, Component, Trigger
 | 
			
		||||
from esphomeyaml.util import ServiceRegistry
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -44,11 +45,12 @@ def validate_recursive_action(value):
 | 
			
		||||
        item.setdefault(CONF_ACTION_ID, None)
 | 
			
		||||
        key2 = next((x for x in item if x != CONF_ACTION_ID and x != key), None)
 | 
			
		||||
        if key2 is not None:
 | 
			
		||||
            raise vol.Invalid(u"Cannot have two actions in one item. Key {} overrides {}!"
 | 
			
		||||
            raise vol.Invalid(u"Cannot have two actions in one item. Key '{}' overrides '{}'! "
 | 
			
		||||
                              u"Did you forget to indent the action?"
 | 
			
		||||
                              u"".format(key, key2))
 | 
			
		||||
        validator = ACTION_REGISTRY[key][0]
 | 
			
		||||
        value[i] = {
 | 
			
		||||
            CONF_ACTION_ID: cv.declare_variable_id(None)(item[CONF_ACTION_ID]),
 | 
			
		||||
            CONF_ACTION_ID: cv.declare_variable_id(Action)(item[CONF_ACTION_ID]),
 | 
			
		||||
            key: validator(item[key])
 | 
			
		||||
        }
 | 
			
		||||
    return value
 | 
			
		||||
@@ -57,14 +59,20 @@ def validate_recursive_action(value):
 | 
			
		||||
ACTION_REGISTRY = ServiceRegistry()
 | 
			
		||||
 | 
			
		||||
# pylint: disable=invalid-name
 | 
			
		||||
DelayAction = esphomelib_ns.DelayAction
 | 
			
		||||
LambdaAction = esphomelib_ns.LambdaAction
 | 
			
		||||
IfAction = esphomelib_ns.IfAction
 | 
			
		||||
UpdateComponentAction = esphomelib_ns.UpdateComponentAction
 | 
			
		||||
Automation = esphomelib_ns.Automation
 | 
			
		||||
DelayAction = esphomelib_ns.class_('DelayAction', Action, Component)
 | 
			
		||||
LambdaAction = esphomelib_ns.class_('LambdaAction', Action)
 | 
			
		||||
IfAction = esphomelib_ns.class_('IfAction', Action)
 | 
			
		||||
UpdateComponentAction = esphomelib_ns.class_('UpdateComponentAction', Action)
 | 
			
		||||
Automation = esphomelib_ns.class_('Automation')
 | 
			
		||||
 | 
			
		||||
Condition = esphomelib_ns.class_('Condition')
 | 
			
		||||
AndCondition = esphomelib_ns.class_('AndCondition', Condition)
 | 
			
		||||
OrCondition = esphomelib_ns.class_('OrCondition', Condition)
 | 
			
		||||
RangeCondition = esphomelib_ns.class_('RangeCondition', Condition)
 | 
			
		||||
LambdaCondition = esphomelib_ns.class_('LambdaCondition', Condition)
 | 
			
		||||
 | 
			
		||||
CONDITIONS_SCHEMA = vol.All(cv.ensure_list, [cv.templatable({
 | 
			
		||||
    cv.GenerateID(CONF_CONDITION_ID): cv.declare_variable_id(None),
 | 
			
		||||
    cv.GenerateID(CONF_CONDITION_ID): cv.declare_variable_id(Condition),
 | 
			
		||||
    vol.Optional(CONF_AND): validate_recursive_condition,
 | 
			
		||||
    vol.Optional(CONF_OR): validate_recursive_condition,
 | 
			
		||||
    vol.Optional(CONF_RANGE): vol.All(vol.Schema({
 | 
			
		||||
@@ -74,12 +82,6 @@ CONDITIONS_SCHEMA = vol.All(cv.ensure_list, [cv.templatable({
 | 
			
		||||
    vol.Optional(CONF_LAMBDA): cv.lambda_,
 | 
			
		||||
})])
 | 
			
		||||
 | 
			
		||||
# pylint: disable=invalid-name
 | 
			
		||||
AndCondition = esphomelib_ns.AndCondition
 | 
			
		||||
OrCondition = esphomelib_ns.OrCondition
 | 
			
		||||
RangeCondition = esphomelib_ns.RangeCondition
 | 
			
		||||
LambdaCondition = esphomelib_ns.LambdaCondition
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def validate_automation(extra_schema=None, extra_validators=None, single=False):
 | 
			
		||||
    schema = AUTOMATION_SCHEMA.extend(extra_schema or {})
 | 
			
		||||
@@ -94,6 +96,8 @@ def validate_automation(extra_schema=None, extra_validators=None, single=False):
 | 
			
		||||
                try:
 | 
			
		||||
                    return vol.Schema([schema])(value)
 | 
			
		||||
                except vol.Invalid as err2:
 | 
			
		||||
                    if 'Unable to find action' in str(err):
 | 
			
		||||
                        raise err2
 | 
			
		||||
                    raise vol.MultipleInvalid([err, err2])
 | 
			
		||||
        elif isinstance(value, dict):
 | 
			
		||||
            if CONF_THEN in value:
 | 
			
		||||
@@ -116,8 +120,8 @@ def validate_automation(extra_schema=None, extra_validators=None, single=False):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
AUTOMATION_SCHEMA = vol.Schema({
 | 
			
		||||
    cv.GenerateID(CONF_TRIGGER_ID): cv.declare_variable_id(None),
 | 
			
		||||
    cv.GenerateID(CONF_AUTOMATION_ID): cv.declare_variable_id(None),
 | 
			
		||||
    cv.GenerateID(CONF_TRIGGER_ID): cv.declare_variable_id(Trigger),
 | 
			
		||||
    cv.GenerateID(CONF_AUTOMATION_ID): cv.declare_variable_id(Automation),
 | 
			
		||||
    vol.Optional(CONF_IF): CONDITIONS_SCHEMA,
 | 
			
		||||
    vol.Required(CONF_THEN): validate_recursive_action,
 | 
			
		||||
})
 | 
			
		||||
@@ -225,7 +229,7 @@ def lambda_action_to_code(config, action_id, arg_type):
 | 
			
		||||
 | 
			
		||||
CONF_COMPONENT_UPDATE = 'component.update'
 | 
			
		||||
COMPONENT_UPDATE_ACTION_SCHEMA = maybe_simple_id({
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(PollingComponent),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,22 +1,18 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
from esphomeyaml.components import sensor, i2c
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.const import CONF_ADDRESS, CONF_ID, CONF_RATE
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable
 | 
			
		||||
from esphomeyaml.const import CONF_ADDRESS, CONF_ID
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, setup_component, Component
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['i2c']
 | 
			
		||||
 | 
			
		||||
ADS1115Component = sensor.sensor_ns.ADS1115Component
 | 
			
		||||
 | 
			
		||||
RATE_REMOVE_MESSAGE = """The rate option has been removed in 1.5.0 and is no longer required."""
 | 
			
		||||
ADS1115Component = sensor.sensor_ns.class_('ADS1115Component', Component, i2c.I2CDevice)
 | 
			
		||||
 | 
			
		||||
ADS1115_SCHEMA = vol.Schema({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(ADS1115Component),
 | 
			
		||||
    vol.Required(CONF_ADDRESS): cv.i2c_address,
 | 
			
		||||
 | 
			
		||||
    vol.Optional(CONF_RATE): cv.invalid(RATE_REMOVE_MESSAGE)
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
CONFIG_SCHEMA = vol.All(cv.ensure_list, [ADS1115_SCHEMA])
 | 
			
		||||
 | 
			
		||||
@@ -24,7 +20,8 @@ CONFIG_SCHEMA = vol.All(cv.ensure_list, [ADS1115_SCHEMA])
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    for conf in config:
 | 
			
		||||
        rhs = App.make_ads1115_component(conf[CONF_ADDRESS])
 | 
			
		||||
        Pvariable(conf[CONF_ID], rhs)
 | 
			
		||||
        var = Pvariable(conf[CONF_ID], rhs)
 | 
			
		||||
        setup_component(var, conf)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_ADS1115_SENSOR'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,14 +1,16 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
from esphomeyaml import automation, core
 | 
			
		||||
from esphomeyaml.components import mqtt
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml import automation
 | 
			
		||||
from esphomeyaml.const import CONF_DEVICE_CLASS, CONF_ID, CONF_INTERNAL, CONF_INVERTED, \
 | 
			
		||||
    CONF_MAX_LENGTH, CONF_MIN_LENGTH, CONF_MQTT_ID, CONF_ON_CLICK, CONF_ON_DOUBLE_CLICK, \
 | 
			
		||||
    CONF_ON_PRESS, CONF_ON_RELEASE, CONF_TRIGGER_ID, CONF_FILTERS, CONF_INVERT, CONF_DELAYED_ON, \
 | 
			
		||||
    CONF_DELAYED_OFF, CONF_LAMBDA, CONF_HEARTBEAT
 | 
			
		||||
from esphomeyaml.helpers import App, NoArg, Pvariable, add, add_job, esphomelib_ns, \
 | 
			
		||||
    setup_mqtt_component, bool_, process_lambda, ArrayInitializer
 | 
			
		||||
from esphomeyaml.const import CONF_DELAYED_OFF, CONF_DELAYED_ON, CONF_DEVICE_CLASS, CONF_FILTERS, \
 | 
			
		||||
    CONF_HEARTBEAT, CONF_ID, CONF_INTERNAL, CONF_INVALID_COOLDOWN, CONF_INVERT, CONF_INVERTED, \
 | 
			
		||||
    CONF_LAMBDA, CONF_MAX_LENGTH, CONF_MIN_LENGTH, CONF_MQTT_ID, CONF_ON_CLICK, \
 | 
			
		||||
    CONF_ON_DOUBLE_CLICK, CONF_ON_MULTI_CLICK, CONF_ON_PRESS, CONF_ON_RELEASE, CONF_STATE, \
 | 
			
		||||
    CONF_TIMING, CONF_TRIGGER_ID
 | 
			
		||||
from esphomeyaml.helpers import App, ArrayInitializer, NoArg, Pvariable, StructInitializer, add, \
 | 
			
		||||
    add_job, bool_, esphomelib_ns, process_lambda, setup_mqtt_component, Nameable, Trigger, \
 | 
			
		||||
    Component
 | 
			
		||||
 | 
			
		||||
DEVICE_CLASSES = [
 | 
			
		||||
    '', 'battery', 'cold', 'connectivity', 'door', 'garage_door', 'gas',
 | 
			
		||||
@@ -22,17 +24,25 @@ PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
binary_sensor_ns = esphomelib_ns.namespace('binary_sensor')
 | 
			
		||||
PressTrigger = binary_sensor_ns.PressTrigger
 | 
			
		||||
ReleaseTrigger = binary_sensor_ns.ReleaseTrigger
 | 
			
		||||
ClickTrigger = binary_sensor_ns.ClickTrigger
 | 
			
		||||
DoubleClickTrigger = binary_sensor_ns.DoubleClickTrigger
 | 
			
		||||
BinarySensor = binary_sensor_ns.BinarySensor
 | 
			
		||||
InvertFilter = binary_sensor_ns.InvertFilter
 | 
			
		||||
LambdaFilter = binary_sensor_ns.LambdaFilter
 | 
			
		||||
DelayedOnFilter = binary_sensor_ns.DelayedOnFilter
 | 
			
		||||
DelayedOffFilter = binary_sensor_ns.DelayedOffFilter
 | 
			
		||||
HeartbeatFilter = binary_sensor_ns.HeartbeatFilter
 | 
			
		||||
MQTTBinarySensorComponent = binary_sensor_ns.MQTTBinarySensorComponent
 | 
			
		||||
BinarySensor = binary_sensor_ns.class_('BinarySensor', Nameable)
 | 
			
		||||
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')
 | 
			
		||||
 | 
			
		||||
# Filters
 | 
			
		||||
Filter = binary_sensor_ns.class_('Filter')
 | 
			
		||||
DelayedOnFilter = binary_sensor_ns.class_('DelayedOnFilter', Filter, Component)
 | 
			
		||||
DelayedOffFilter = binary_sensor_ns.class_('DelayedOffFilter', Filter, Component)
 | 
			
		||||
HeartbeatFilter = binary_sensor_ns.class_('HeartbeatFilter', Filter, Component)
 | 
			
		||||
InvertFilter = binary_sensor_ns.class_('InvertFilter', Filter)
 | 
			
		||||
LambdaFilter = binary_sensor_ns.class_('LambdaFilter', Filter)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
FILTER_KEYS = [CONF_INVERT, CONF_DELAYED_ON, CONF_DELAYED_OFF, CONF_LAMBDA, CONF_HEARTBEAT]
 | 
			
		||||
 | 
			
		||||
@@ -44,9 +54,101 @@ FILTERS_SCHEMA = vol.All(cv.ensure_list, [vol.All({
 | 
			
		||||
    vol.Optional(CONF_LAMBDA): cv.lambda_,
 | 
			
		||||
}, cv.has_exactly_one_key(*FILTER_KEYS))])
 | 
			
		||||
 | 
			
		||||
MULTI_CLICK_TIMING_SCHEMA = vol.Schema({
 | 
			
		||||
    vol.Optional(CONF_STATE): cv.boolean,
 | 
			
		||||
    vol.Optional(CONF_MIN_LENGTH): cv.positive_time_period_milliseconds,
 | 
			
		||||
    vol.Optional(CONF_MAX_LENGTH): cv.positive_time_period_milliseconds,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def parse_multi_click_timing_str(value):
 | 
			
		||||
    if not isinstance(value, basestring):
 | 
			
		||||
        return value
 | 
			
		||||
 | 
			
		||||
    parts = value.lower().split(' ')
 | 
			
		||||
    if len(parts) != 5:
 | 
			
		||||
        raise vol.Invalid("Multi click timing grammar consists of exactly 5 words, not {}"
 | 
			
		||||
                          "".format(len(parts)))
 | 
			
		||||
    try:
 | 
			
		||||
        state = cv.boolean(parts[0])
 | 
			
		||||
    except vol.Invalid:
 | 
			
		||||
        raise vol.Invalid(u"First word must either be ON or OFF, not {}".format(parts[0]))
 | 
			
		||||
 | 
			
		||||
    if parts[1] != 'for':
 | 
			
		||||
        raise vol.Invalid(u"Second word must be 'for', got {}".format(parts[1]))
 | 
			
		||||
 | 
			
		||||
    if parts[2] == 'at':
 | 
			
		||||
        if parts[3] == 'least':
 | 
			
		||||
            key = CONF_MIN_LENGTH
 | 
			
		||||
        elif parts[3] == 'most':
 | 
			
		||||
            key = CONF_MAX_LENGTH
 | 
			
		||||
        else:
 | 
			
		||||
            raise vol.Invalid(u"Third word after at must either be 'least' or 'most', got {}"
 | 
			
		||||
                              u"".format(parts[3]))
 | 
			
		||||
        try:
 | 
			
		||||
            length = cv.positive_time_period_milliseconds(parts[4])
 | 
			
		||||
        except vol.Invalid as err:
 | 
			
		||||
            raise vol.Invalid(u"Multi Click Grammar Parsing length failed: {}".format(err))
 | 
			
		||||
        return {
 | 
			
		||||
            CONF_STATE: state,
 | 
			
		||||
            key: str(length)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    if parts[3] != 'to':
 | 
			
		||||
        raise vol.Invalid("Multi click grammar: 4th word must be 'to'")
 | 
			
		||||
 | 
			
		||||
    try:
 | 
			
		||||
        min_length = cv.positive_time_period_milliseconds(parts[2])
 | 
			
		||||
    except vol.Invalid as err:
 | 
			
		||||
        raise vol.Invalid(u"Multi Click Grammar Parsing minimum length failed: {}".format(err))
 | 
			
		||||
 | 
			
		||||
    try:
 | 
			
		||||
        max_length = cv.positive_time_period_milliseconds(parts[4])
 | 
			
		||||
    except vol.Invalid as err:
 | 
			
		||||
        raise vol.Invalid(u"Multi Click Grammar Parsing minimum length failed: {}".format(err))
 | 
			
		||||
 | 
			
		||||
    return {
 | 
			
		||||
        CONF_STATE: state,
 | 
			
		||||
        CONF_MIN_LENGTH: str(min_length),
 | 
			
		||||
        CONF_MAX_LENGTH: str(max_length)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def validate_multi_click_timing(value):
 | 
			
		||||
    if not isinstance(value, list):
 | 
			
		||||
        raise vol.Invalid("Timing option must be a *list* of times!")
 | 
			
		||||
    timings = []
 | 
			
		||||
    state = None
 | 
			
		||||
    for i, v_ in enumerate(value):
 | 
			
		||||
        v_ = MULTI_CLICK_TIMING_SCHEMA(v_)
 | 
			
		||||
        min_length = v_.get(CONF_MIN_LENGTH)
 | 
			
		||||
        max_length = v_.get(CONF_MAX_LENGTH)
 | 
			
		||||
        if min_length is None and max_length is None:
 | 
			
		||||
            raise vol.Invalid("At least one of min_length and max_length is required!")
 | 
			
		||||
        if min_length is None and max_length is not None:
 | 
			
		||||
            min_length = core.TimePeriodMilliseconds(milliseconds=0)
 | 
			
		||||
 | 
			
		||||
        new_state = v_.get(CONF_STATE, not state)
 | 
			
		||||
        if new_state == state:
 | 
			
		||||
            raise vol.Invalid("Timings must have alternating state. Indices {} and {} have "
 | 
			
		||||
                              "the same state {}".format(i, i + 1, state))
 | 
			
		||||
        if max_length is not None and max_length < min_length:
 | 
			
		||||
            raise vol.Invalid("Max length ({}) must be larger than min length ({})."
 | 
			
		||||
                              "".format(max_length, min_length))
 | 
			
		||||
 | 
			
		||||
        state = new_state
 | 
			
		||||
        tim = {
 | 
			
		||||
            CONF_STATE: new_state,
 | 
			
		||||
            CONF_MIN_LENGTH: min_length,
 | 
			
		||||
        }
 | 
			
		||||
        if max_length is not None:
 | 
			
		||||
            tim[CONF_MAX_LENGTH] = max_length
 | 
			
		||||
        timings.append(tim)
 | 
			
		||||
    return timings
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BINARY_SENSOR_SCHEMA = cv.MQTT_COMPONENT_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(CONF_MQTT_ID): cv.declare_variable_id(MQTTBinarySensorComponent),
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(BinarySensor),
 | 
			
		||||
 | 
			
		||||
    vol.Optional(CONF_DEVICE_CLASS): vol.All(vol.Lower, cv.one_of(*DEVICE_CLASSES)),
 | 
			
		||||
    vol.Optional(CONF_FILTERS): FILTERS_SCHEMA,
 | 
			
		||||
@@ -66,6 +168,12 @@ BINARY_SENSOR_SCHEMA = cv.MQTT_COMPONENT_SCHEMA.extend({
 | 
			
		||||
        vol.Optional(CONF_MIN_LENGTH, default='50ms'): cv.positive_time_period_milliseconds,
 | 
			
		||||
        vol.Optional(CONF_MAX_LENGTH, default='350ms'): cv.positive_time_period_milliseconds,
 | 
			
		||||
    }),
 | 
			
		||||
    vol.Optional(CONF_ON_MULTI_CLICK): automation.validate_automation({
 | 
			
		||||
        cv.GenerateID(CONF_TRIGGER_ID): cv.declare_variable_id(MultiClickTrigger),
 | 
			
		||||
        vol.Required(CONF_TIMING): vol.All([parse_multi_click_timing_str],
 | 
			
		||||
                                           validate_multi_click_timing),
 | 
			
		||||
        vol.Optional(CONF_INVALID_COOLDOWN): cv.positive_time_period_milliseconds,
 | 
			
		||||
    }),
 | 
			
		||||
 | 
			
		||||
    vol.Optional(CONF_INVERTED): cv.invalid(
 | 
			
		||||
        "The inverted binary_sensor property has been replaced by the "
 | 
			
		||||
@@ -137,6 +245,22 @@ def setup_binary_sensor_core_(binary_sensor_var, mqtt_var, config):
 | 
			
		||||
        trigger = Pvariable(conf[CONF_TRIGGER_ID], rhs)
 | 
			
		||||
        automation.build_automation(trigger, NoArg, conf)
 | 
			
		||||
 | 
			
		||||
    for conf in config.get(CONF_ON_MULTI_CLICK, []):
 | 
			
		||||
        timings = []
 | 
			
		||||
        for tim in conf[CONF_TIMING]:
 | 
			
		||||
            timings.append(StructInitializer(
 | 
			
		||||
                MultiClickTriggerEvent,
 | 
			
		||||
                ('state', tim[CONF_STATE]),
 | 
			
		||||
                ('min_length', tim[CONF_MIN_LENGTH]),
 | 
			
		||||
                ('max_length', tim.get(CONF_MAX_LENGTH, 4294967294)),
 | 
			
		||||
            ))
 | 
			
		||||
        timings = ArrayInitializer(*timings, multiline=False)
 | 
			
		||||
        rhs = App.register_component(binary_sensor_var.make_multi_click_trigger(timings))
 | 
			
		||||
        trigger = Pvariable(conf[CONF_TRIGGER_ID], rhs)
 | 
			
		||||
        if CONF_INVALID_COOLDOWN in conf:
 | 
			
		||||
            add(trigger.set_invalid_cooldown(conf[CONF_INVALID_COOLDOWN]))
 | 
			
		||||
        automation.build_automation(trigger, NoArg, conf)
 | 
			
		||||
 | 
			
		||||
    setup_mqtt_component(mqtt_var, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +1,17 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import binary_sensor
 | 
			
		||||
from esphomeyaml.components.esp32_ble_tracker import CONF_ESP32_BLE_ID, ESP32BLETracker, \
 | 
			
		||||
    make_address_array
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.const import CONF_MAC_ADDRESS, CONF_NAME
 | 
			
		||||
from esphomeyaml.helpers import get_variable
 | 
			
		||||
from esphomeyaml.helpers import esphomelib_ns, get_variable
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['esp32_ble_tracker']
 | 
			
		||||
ESP32BLEPresenceDevice = esphomelib_ns.class_('ESP32BLEPresenceDevice', binary_sensor.BinarySensor)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(ESP32BLEPresenceDevice),
 | 
			
		||||
    vol.Required(CONF_MAC_ADDRESS): cv.mac_address,
 | 
			
		||||
    cv.GenerateID(CONF_ESP32_BLE_ID): cv.use_variable_id(ESP32BLETracker)
 | 
			
		||||
}))
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,11 @@ def validate_touch_pad(value):
 | 
			
		||||
    return value
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ESP32TouchBinarySensor = binary_sensor.binary_sensor_ns.class_('ESP32TouchBinarySensor',
 | 
			
		||||
                                                               binary_sensor.BinarySensor)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(ESP32TouchBinarySensor),
 | 
			
		||||
    vol.Required(CONF_PIN): validate_touch_pad,
 | 
			
		||||
    vol.Required(CONF_THRESHOLD): cv.uint16_t,
 | 
			
		||||
    cv.GenerateID(CONF_ESP32_TOUCH_ID): cv.use_variable_id(ESP32TouchComponent),
 | 
			
		||||
 
 | 
			
		||||
@@ -4,14 +4,19 @@ import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml import pins
 | 
			
		||||
from esphomeyaml.components import binary_sensor
 | 
			
		||||
from esphomeyaml.const import CONF_MAKE_ID, CONF_NAME, CONF_PIN
 | 
			
		||||
from esphomeyaml.helpers import App, gpio_input_pin_expression, variable, Application
 | 
			
		||||
from esphomeyaml.helpers import App, gpio_input_pin_expression, variable, Application, \
 | 
			
		||||
    setup_component, Component
 | 
			
		||||
 | 
			
		||||
MakeGPIOBinarySensor = Application.MakeGPIOBinarySensor
 | 
			
		||||
MakeGPIOBinarySensor = Application.struct('MakeGPIOBinarySensor')
 | 
			
		||||
GPIOBinarySensorComponent = binary_sensor.binary_sensor_ns.class_('GPIOBinarySensorComponent',
 | 
			
		||||
                                                                  binary_sensor.BinarySensor,
 | 
			
		||||
                                                                  Component)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(GPIOBinarySensorComponent),
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeGPIOBinarySensor),
 | 
			
		||||
    vol.Required(CONF_PIN): pins.gpio_input_pin_schema
 | 
			
		||||
}))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -21,6 +26,7 @@ def to_code(config):
 | 
			
		||||
    rhs = App.make_gpio_binary_sensor(config[CONF_NAME], pin)
 | 
			
		||||
    gpio = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    binary_sensor.setup_binary_sensor(gpio.Pgpio, gpio.Pmqtt, config)
 | 
			
		||||
    setup_component(gpio.Pgpio, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_GPIO_BINARY_SENSOR'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import binary_sensor
 | 
			
		||||
from esphomeyaml.components import binary_sensor, display
 | 
			
		||||
from esphomeyaml.components.display.nextion import Nextion
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.const import CONF_COMPONENT_ID, CONF_NAME, CONF_PAGE_ID
 | 
			
		||||
from esphomeyaml.helpers import get_variable
 | 
			
		||||
 | 
			
		||||
@@ -10,7 +10,11 @@ DEPENDENCIES = ['display']
 | 
			
		||||
 | 
			
		||||
CONF_NEXTION_ID = 'nextion_id'
 | 
			
		||||
 | 
			
		||||
NextionTouchComponent = display.display_ns.class_('NextionTouchComponent',
 | 
			
		||||
                                                  binary_sensor.BinarySensor)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(NextionTouchComponent),
 | 
			
		||||
    vol.Required(CONF_PAGE_ID): cv.uint8_t,
 | 
			
		||||
    vol.Required(CONF_COMPONENT_ID): cv.uint8_t,
 | 
			
		||||
    cv.GenerateID(CONF_NEXTION_ID): cv.use_variable_id(Nextion)
 | 
			
		||||
 
 | 
			
		||||
@@ -27,14 +27,17 @@ def validate_uid(value):
 | 
			
		||||
    return value
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PN532BinarySensor = binary_sensor.binary_sensor_ns.class_('PN532BinarySensor',
 | 
			
		||||
                                                          binary_sensor.BinarySensor)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(PN532BinarySensor),
 | 
			
		||||
    vol.Required(CONF_UID): validate_uid,
 | 
			
		||||
    cv.GenerateID(CONF_PN532_ID): cv.use_variable_id(PN532Component)
 | 
			
		||||
}))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    hub = None
 | 
			
		||||
    for hub in get_variable(config[CONF_PN532_ID]):
 | 
			
		||||
        yield
 | 
			
		||||
    addr = [HexInt(int(x, 16)) for x in config[CONF_UID].split('-')]
 | 
			
		||||
 
 | 
			
		||||
@@ -9,14 +9,17 @@ DEPENDENCIES = ['rdm6300']
 | 
			
		||||
 | 
			
		||||
CONF_RDM6300_ID = 'rdm6300_id'
 | 
			
		||||
 | 
			
		||||
RDM6300BinarySensor = binary_sensor.binary_sensor_ns.class_('RDM6300BinarySensor',
 | 
			
		||||
                                                            binary_sensor.BinarySensor)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(RDM6300BinarySensor),
 | 
			
		||||
    vol.Required(CONF_UID): cv.uint32_t,
 | 
			
		||||
    cv.GenerateID(CONF_RDM6300_ID): cv.use_variable_id(rdm6300.RDM6300Component)
 | 
			
		||||
}))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    hub = None
 | 
			
		||||
    for hub in get_variable(config[CONF_RDM6300_ID]):
 | 
			
		||||
        yield
 | 
			
		||||
    rhs = hub.make_card(config[CONF_NAME], config[CONF_UID])
 | 
			
		||||
 
 | 
			
		||||
@@ -22,20 +22,21 @@ REMOTE_KEYS = [CONF_NEC, CONF_LG, CONF_SONY, CONF_PANASONIC, CONF_SAMSUNG, CONF_
 | 
			
		||||
CONF_REMOTE_RECEIVER_ID = 'remote_receiver_id'
 | 
			
		||||
CONF_RECEIVER_ID = 'receiver_id'
 | 
			
		||||
 | 
			
		||||
RemoteReceiver = remote_ns.RemoteReceiver
 | 
			
		||||
LGReceiver = remote_ns.LGReceiver
 | 
			
		||||
NECReceiver = remote_ns.NECReceiver
 | 
			
		||||
PanasonicReceiver = remote_ns.PanasonicReceiver
 | 
			
		||||
RawReceiver = remote_ns.RawReceiver
 | 
			
		||||
SamsungReceiver = remote_ns.SamsungReceiver
 | 
			
		||||
SonyReceiver = remote_ns.SonyReceiver
 | 
			
		||||
RCSwitchRawReceiver = remote_ns.RCSwitchRawReceiver
 | 
			
		||||
RCSwitchTypeAReceiver = remote_ns.RCSwitchTypeAReceiver
 | 
			
		||||
RCSwitchTypeBReceiver = remote_ns.RCSwitchTypeBReceiver
 | 
			
		||||
RCSwitchTypeCReceiver = remote_ns.RCSwitchTypeCReceiver
 | 
			
		||||
RCSwitchTypeDReceiver = remote_ns.RCSwitchTypeDReceiver
 | 
			
		||||
RemoteReceiver = remote_ns.class_('RemoteReceiver', binary_sensor.BinarySensor)
 | 
			
		||||
LGReceiver = remote_ns.class_('LGReceiver', RemoteReceiver)
 | 
			
		||||
NECReceiver = remote_ns.class_('NECReceiver', RemoteReceiver)
 | 
			
		||||
PanasonicReceiver = remote_ns.class_('PanasonicReceiver', RemoteReceiver)
 | 
			
		||||
RawReceiver = remote_ns.class_('RawReceiver', RemoteReceiver)
 | 
			
		||||
SamsungReceiver = remote_ns.class_('SamsungReceiver', RemoteReceiver)
 | 
			
		||||
SonyReceiver = remote_ns.class_('SonyReceiver', RemoteReceiver)
 | 
			
		||||
RCSwitchRawReceiver = remote_ns.class_('RCSwitchRawReceiver', RemoteReceiver)
 | 
			
		||||
RCSwitchTypeAReceiver = remote_ns.class_('RCSwitchTypeAReceiver', RCSwitchRawReceiver)
 | 
			
		||||
RCSwitchTypeBReceiver = remote_ns.class_('RCSwitchTypeBReceiver', RCSwitchRawReceiver)
 | 
			
		||||
RCSwitchTypeCReceiver = remote_ns.class_('RCSwitchTypeCReceiver', RCSwitchRawReceiver)
 | 
			
		||||
RCSwitchTypeDReceiver = remote_ns.class_('RCSwitchTypeDReceiver', RCSwitchRawReceiver)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(RemoteReceiver),
 | 
			
		||||
    vol.Optional(CONF_LG): vol.Schema({
 | 
			
		||||
        vol.Required(CONF_DATA): cv.hex_uint32_t,
 | 
			
		||||
        vol.Optional(CONF_NBITS, default=28): vol.All(vol.Coerce(int), cv.one_of(28, 32)),
 | 
			
		||||
@@ -109,7 +110,6 @@ def receiver_base(full_config):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    remote = None
 | 
			
		||||
    for remote in get_variable(config[CONF_REMOTE_RECEIVER_ID]):
 | 
			
		||||
        yield
 | 
			
		||||
    rhs = receiver_base(config)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,21 +1,26 @@
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import binary_sensor
 | 
			
		||||
from esphomeyaml.const import CONF_MAKE_ID, CONF_NAME
 | 
			
		||||
from esphomeyaml.helpers import App, Application, variable
 | 
			
		||||
from esphomeyaml.helpers import App, Application, variable, setup_component, Component
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['mqtt']
 | 
			
		||||
 | 
			
		||||
MakeStatusBinarySensor = Application.MakeStatusBinarySensor
 | 
			
		||||
MakeStatusBinarySensor = Application.struct('MakeStatusBinarySensor')
 | 
			
		||||
StatusBinarySensor = binary_sensor.binary_sensor_ns.class_('StatusBinarySensor',
 | 
			
		||||
                                                           binary_sensor.BinarySensor,
 | 
			
		||||
                                                           Component)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeStatusBinarySensor),
 | 
			
		||||
}))
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(StatusBinarySensor),
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    rhs = App.make_status_binary_sensor(config[CONF_NAME])
 | 
			
		||||
    status = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    binary_sensor.setup_binary_sensor(status.Pstatus, status.Pmqtt, config)
 | 
			
		||||
    setup_component(status.Pstatus, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_STATUS_BINARY_SENSOR'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,22 +1,28 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import binary_sensor
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.const import CONF_LAMBDA, CONF_MAKE_ID, CONF_NAME
 | 
			
		||||
from esphomeyaml.helpers import App, Application, process_lambda, variable, optional, bool_, add
 | 
			
		||||
from esphomeyaml.helpers import App, Application, add, bool_, optional, process_lambda, variable, \
 | 
			
		||||
    setup_component, Component
 | 
			
		||||
 | 
			
		||||
MakeTemplateBinarySensor = Application.MakeTemplateBinarySensor
 | 
			
		||||
MakeTemplateBinarySensor = Application.struct('MakeTemplateBinarySensor')
 | 
			
		||||
TemplateBinarySensor = binary_sensor.binary_sensor_ns.class_('TemplateBinarySensor',
 | 
			
		||||
                                                             binary_sensor.BinarySensor,
 | 
			
		||||
                                                             Component)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(TemplateBinarySensor),
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeTemplateBinarySensor),
 | 
			
		||||
    vol.Required(CONF_LAMBDA): cv.lambda_,
 | 
			
		||||
}))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    rhs = App.make_template_binary_sensor(config[CONF_NAME])
 | 
			
		||||
    make = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    binary_sensor.setup_binary_sensor(make.Ptemplate_, make.Pmqtt, config)
 | 
			
		||||
    setup_component(make.Ptemplate_, config)
 | 
			
		||||
 | 
			
		||||
    template_ = None
 | 
			
		||||
    for template_ in process_lambda(config[CONF_LAMBDA], [],
 | 
			
		||||
 
 | 
			
		||||
@@ -5,21 +5,25 @@ from esphomeyaml.components import mqtt
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.const import CONF_ID, CONF_MQTT_ID, CONF_INTERNAL
 | 
			
		||||
from esphomeyaml.helpers import Pvariable, esphomelib_ns, setup_mqtt_component, add, \
 | 
			
		||||
    TemplateArguments, get_variable
 | 
			
		||||
    TemplateArguments, get_variable, Action, Nameable
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({
 | 
			
		||||
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
cover_ns = esphomelib_ns.namespace('cover')
 | 
			
		||||
Cover = cover_ns.Cover
 | 
			
		||||
MQTTCoverComponent = cover_ns.MQTTCoverComponent
 | 
			
		||||
CoverState = cover_ns.CoverState
 | 
			
		||||
 | 
			
		||||
Cover = cover_ns.class_('Cover', Nameable)
 | 
			
		||||
MQTTCoverComponent = cover_ns.class_('MQTTCoverComponent', mqtt.MQTTComponent)
 | 
			
		||||
 | 
			
		||||
CoverState = cover_ns.class_('CoverState')
 | 
			
		||||
COVER_OPEN = cover_ns.COVER_OPEN
 | 
			
		||||
COVER_CLOSED = cover_ns.COVER_CLOSED
 | 
			
		||||
OpenAction = cover_ns.OpenAction
 | 
			
		||||
CloseAction = cover_ns.CloseAction
 | 
			
		||||
StopAction = cover_ns.StopAction
 | 
			
		||||
 | 
			
		||||
# Actions
 | 
			
		||||
OpenAction = cover_ns.class_('OpenAction', Action)
 | 
			
		||||
CloseAction = cover_ns.class_('CloseAction', Action)
 | 
			
		||||
StopAction = cover_ns.class_('StopAction', Action)
 | 
			
		||||
 | 
			
		||||
COVER_SCHEMA = cv.MQTT_COMMAND_COMPONENT_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(Cover),
 | 
			
		||||
@@ -45,7 +49,7 @@ BUILD_FLAGS = '-DUSE_COVER'
 | 
			
		||||
 | 
			
		||||
CONF_COVER_OPEN = 'cover.open'
 | 
			
		||||
COVER_OPEN_ACTION_SCHEMA = maybe_simple_id({
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(Cover),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -61,7 +65,7 @@ def cover_open_to_code(config, action_id, arg_type):
 | 
			
		||||
 | 
			
		||||
CONF_COVER_CLOSE = 'cover.close'
 | 
			
		||||
COVER_CLOSE_ACTION_SCHEMA = maybe_simple_id({
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(Cover),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -77,7 +81,7 @@ def cover_close_to_code(config, action_id, arg_type):
 | 
			
		||||
 | 
			
		||||
CONF_COVER_STOP = 'cover.stop'
 | 
			
		||||
COVER_STOP_ACTION_SCHEMA = maybe_simple_id({
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(Cover),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -5,18 +5,21 @@ from esphomeyaml import automation
 | 
			
		||||
from esphomeyaml.components import cover
 | 
			
		||||
from esphomeyaml.const import CONF_CLOSE_ACTION, CONF_LAMBDA, CONF_MAKE_ID, CONF_NAME, \
 | 
			
		||||
    CONF_OPEN_ACTION, CONF_STOP_ACTION, CONF_OPTIMISTIC
 | 
			
		||||
from esphomeyaml.helpers import App, Application, NoArg, add, process_lambda, variable, optional
 | 
			
		||||
from esphomeyaml.helpers import App, Application, NoArg, add, process_lambda, variable, optional, \
 | 
			
		||||
    setup_component
 | 
			
		||||
 | 
			
		||||
MakeTemplateCover = Application.MakeTemplateCover
 | 
			
		||||
MakeTemplateCover = Application.struct('MakeTemplateCover')
 | 
			
		||||
TemplateCover = cover.cover_ns.class_('TemplateCover', cover.Cover)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(cover.COVER_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeTemplateCover),
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(TemplateCover),
 | 
			
		||||
    vol.Optional(CONF_LAMBDA): cv.lambda_,
 | 
			
		||||
    vol.Optional(CONF_OPTIMISTIC): cv.boolean,
 | 
			
		||||
    vol.Optional(CONF_OPEN_ACTION): automation.validate_automation(single=True),
 | 
			
		||||
    vol.Optional(CONF_CLOSE_ACTION): automation.validate_automation(single=True),
 | 
			
		||||
    vol.Optional(CONF_STOP_ACTION): automation.validate_automation(single=True),
 | 
			
		||||
}), cv.has_at_least_one_key(CONF_LAMBDA, CONF_OPTIMISTIC))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema), cv.has_at_least_one_key(CONF_LAMBDA, CONF_OPTIMISTIC))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -24,9 +27,9 @@ def to_code(config):
 | 
			
		||||
    make = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
 | 
			
		||||
    cover.setup_cover(make.Ptemplate_, make.Pmqtt, config)
 | 
			
		||||
    setup_component(make.Ptemplate_, config)
 | 
			
		||||
 | 
			
		||||
    if CONF_LAMBDA in config:
 | 
			
		||||
        template_ = None
 | 
			
		||||
        for template_ in process_lambda(config[CONF_LAMBDA], [],
 | 
			
		||||
                                        return_type=optional.template(cover.CoverState)):
 | 
			
		||||
            yield
 | 
			
		||||
 
 | 
			
		||||
@@ -4,21 +4,22 @@ import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml import pins
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.const import CONF_ID, CONF_PIN, CONF_UPDATE_INTERVAL
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, setup_component, PollingComponent
 | 
			
		||||
 | 
			
		||||
DallasComponent = sensor.sensor_ns.DallasComponent
 | 
			
		||||
DallasComponent = sensor.sensor_ns.class_('DallasComponent', PollingComponent)
 | 
			
		||||
 | 
			
		||||
CONFIG_SCHEMA = vol.All(cv.ensure_list, [vol.Schema({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(DallasComponent),
 | 
			
		||||
    vol.Required(CONF_PIN): pins.input_output_pin,
 | 
			
		||||
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
			
		||||
})])
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    for conf in config:
 | 
			
		||||
        rhs = App.make_dallas_component(conf[CONF_PIN], conf.get(CONF_UPDATE_INTERVAL))
 | 
			
		||||
        Pvariable(conf[CONF_ID], rhs)
 | 
			
		||||
        var = Pvariable(conf[CONF_ID], rhs)
 | 
			
		||||
        setup_component(var, conf)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_DALLAS_SENSOR'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,12 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
from esphomeyaml import config_validation as cv, pins
 | 
			
		||||
from esphomeyaml.automation import maybe_simple_id, ACTION_REGISTRY
 | 
			
		||||
from esphomeyaml.automation import ACTION_REGISTRY, maybe_simple_id
 | 
			
		||||
from esphomeyaml.const import CONF_ID, CONF_NUMBER, CONF_RUN_CYCLES, CONF_RUN_DURATION, \
 | 
			
		||||
    CONF_SLEEP_DURATION, CONF_WAKEUP_PIN
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, gpio_input_pin_expression, esphomelib_ns, \
 | 
			
		||||
    TemplateArguments, get_variable
 | 
			
		||||
    CONF_SLEEP_DURATION, CONF_WAKEUP_PIN, CONF_MODE, CONF_PINS
 | 
			
		||||
from esphomeyaml.helpers import Action, App, Component, Pvariable, TemplateArguments, add, \
 | 
			
		||||
    esphomelib_ns, get_variable, gpio_input_pin_expression, setup_component, global_ns, \
 | 
			
		||||
    StructInitializer
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def validate_pin_number(value):
 | 
			
		||||
@@ -16,17 +17,26 @@ def validate_pin_number(value):
 | 
			
		||||
    return value
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
DeepSleepComponent = esphomelib_ns.DeepSleepComponent
 | 
			
		||||
EnterDeepSleepAction = esphomelib_ns.EnterDeepSleepAction
 | 
			
		||||
PreventDeepSleepAction = esphomelib_ns.PreventDeepSleepAction
 | 
			
		||||
DeepSleepComponent = esphomelib_ns.class_('DeepSleepComponent', Component)
 | 
			
		||||
EnterDeepSleepAction = esphomelib_ns.class_('EnterDeepSleepAction', Action)
 | 
			
		||||
PreventDeepSleepAction = esphomelib_ns.class_('PreventDeepSleepAction', Action)
 | 
			
		||||
 | 
			
		||||
WakeupPinMode = esphomelib_ns.enum('WakeupPinMode')
 | 
			
		||||
WAKEUP_PIN_MODES = {
 | 
			
		||||
    'IGNORE': esphomelib_ns.WAKEUP_PIN_MODE_IGNORE,
 | 
			
		||||
    'KEEP_AWAKE': esphomelib_ns.WAKEUP_PIN_MODE_KEEP_AWAKE,
 | 
			
		||||
    'INVERT_WAKEUP': esphomelib_ns.WAKEUP_PIN_MODE_INVERT_WAKEUP,
 | 
			
		||||
    'IGNORE': WakeupPinMode.WAKEUP_PIN_MODE_IGNORE,
 | 
			
		||||
    'KEEP_AWAKE': WakeupPinMode.WAKEUP_PIN_MODE_KEEP_AWAKE,
 | 
			
		||||
    'INVERT_WAKEUP': WakeupPinMode.WAKEUP_PIN_MODE_INVERT_WAKEUP,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
esp_sleep_ext1_wakeup_mode_t = global_ns.enum('esp_sleep_ext1_wakeup_mode_t')
 | 
			
		||||
Ext1Wakeup = esphomelib_ns.struct('Ext1Wakeup')
 | 
			
		||||
EXT1_WAKEUP_MODES = {
 | 
			
		||||
    'ALL_LOW': esp_sleep_ext1_wakeup_mode_t.ESP_EXT1_WAKEUP_ALL_LOW,
 | 
			
		||||
    'ANY_HIGH': esp_sleep_ext1_wakeup_mode_t.ESP_EXT1_WAKEUP_ANY_HIGH,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
CONF_WAKEUP_PIN_MODE = 'wakeup_pin_mode'
 | 
			
		||||
CONF_ESP32_EXT1_WAKEUP = 'esp32_ext1_wakeup'
 | 
			
		||||
 | 
			
		||||
CONFIG_SCHEMA = vol.Schema({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(DeepSleepComponent),
 | 
			
		||||
@@ -35,9 +45,14 @@ CONFIG_SCHEMA = vol.Schema({
 | 
			
		||||
                                           validate_pin_number),
 | 
			
		||||
    vol.Optional(CONF_WAKEUP_PIN_MODE): vol.All(cv.only_on_esp32, vol.Upper,
 | 
			
		||||
                                                cv.one_of(*WAKEUP_PIN_MODES)),
 | 
			
		||||
    vol.Optional(CONF_ESP32_EXT1_WAKEUP): vol.All(cv.only_on_esp32, vol.Schema({
 | 
			
		||||
        vol.Required(CONF_PINS): vol.All(cv.ensure_list, [pins.shorthand_input_pin],
 | 
			
		||||
                                         [validate_pin_number]),
 | 
			
		||||
        vol.Required(CONF_MODE): vol.All(vol.Upper, cv.one_of(*EXT1_WAKEUP_MODES)),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_RUN_CYCLES): cv.positive_int,
 | 
			
		||||
    vol.Optional(CONF_RUN_DURATION): cv.positive_time_period_milliseconds,
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -46,7 +61,6 @@ def to_code(config):
 | 
			
		||||
    if CONF_SLEEP_DURATION in config:
 | 
			
		||||
        add(deep_sleep.set_sleep_duration(config[CONF_SLEEP_DURATION]))
 | 
			
		||||
    if CONF_WAKEUP_PIN in config:
 | 
			
		||||
        pin = None
 | 
			
		||||
        for pin in gpio_input_pin_expression(config[CONF_WAKEUP_PIN]):
 | 
			
		||||
            yield
 | 
			
		||||
        add(deep_sleep.set_wakeup_pin(pin))
 | 
			
		||||
@@ -57,10 +71,23 @@ def to_code(config):
 | 
			
		||||
    if CONF_RUN_DURATION in config:
 | 
			
		||||
        add(deep_sleep.set_run_duration(config[CONF_RUN_DURATION]))
 | 
			
		||||
 | 
			
		||||
    if CONF_ESP32_EXT1_WAKEUP in config:
 | 
			
		||||
        conf = config[CONF_ESP32_EXT1_WAKEUP]
 | 
			
		||||
        mask = 0
 | 
			
		||||
        for pin in conf[CONF_PINS]:
 | 
			
		||||
            mask |= 1 << pin[CONF_NUMBER]
 | 
			
		||||
        struct = StructInitializer(
 | 
			
		||||
            Ext1Wakeup,
 | 
			
		||||
            ('mask', mask),
 | 
			
		||||
            ('wakeup_mode', EXT1_WAKEUP_MODES[conf[CONF_MODE]])
 | 
			
		||||
        )
 | 
			
		||||
        add(deep_sleep.set_ext1_wakeup(struct))
 | 
			
		||||
 | 
			
		||||
    setup_component(deep_sleep, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_DEEP_SLEEP'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CONF_DEEP_SLEEP_ENTER = 'deep_sleep.enter'
 | 
			
		||||
DEEP_SLEEP_ENTER_ACTION_SCHEMA = maybe_simple_id({
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(DeepSleepComponent),
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
display_ns = esphomelib_ns.namespace('display')
 | 
			
		||||
DisplayBuffer = display_ns.DisplayBuffer
 | 
			
		||||
DisplayBuffer = display_ns.class_('DisplayBuffer')
 | 
			
		||||
DisplayBufferRef = DisplayBuffer.operator('ref')
 | 
			
		||||
 | 
			
		||||
DISPLAY_ROTATIONS = {
 | 
			
		||||
 
 | 
			
		||||
@@ -5,11 +5,12 @@ from esphomeyaml import pins
 | 
			
		||||
from esphomeyaml.components import display
 | 
			
		||||
from esphomeyaml.const import CONF_DATA_PINS, CONF_DIMENSIONS, CONF_ENABLE_PIN, CONF_ID, \
 | 
			
		||||
    CONF_LAMBDA, CONF_RS_PIN, CONF_RW_PIN
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, gpio_output_pin_expression, process_lambda
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, gpio_output_pin_expression, process_lambda, \
 | 
			
		||||
    setup_component, PollingComponent
 | 
			
		||||
 | 
			
		||||
GPIOLCDDisplay = display.display_ns.GPIOLCDDisplay
 | 
			
		||||
LCDDisplay = display.display_ns.LCDDisplay
 | 
			
		||||
LCDDisplay = display.display_ns.class_('LCDDisplay', PollingComponent)
 | 
			
		||||
LCDDisplayRef = LCDDisplay.operator('ref')
 | 
			
		||||
GPIOLCDDisplay = display.display_ns.class_('GPIOLCDDisplay', LCDDisplay)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def validate_lcd_dimensions(value):
 | 
			
		||||
@@ -36,7 +37,7 @@ PLATFORM_SCHEMA = display.BASIC_DISPLAY_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    vol.Required(CONF_ENABLE_PIN): pins.gpio_output_pin_schema,
 | 
			
		||||
    vol.Required(CONF_RS_PIN): pins.gpio_output_pin_schema,
 | 
			
		||||
    vol.Optional(CONF_RW_PIN): pins.gpio_output_pin_schema,
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -67,6 +68,7 @@ def to_code(config):
 | 
			
		||||
        add(lcd.set_writer(lambda_))
 | 
			
		||||
 | 
			
		||||
    display.setup_display(lcd, config)
 | 
			
		||||
    setup_component(lcd, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_LCD_DISPLAY'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,20 +1,21 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import display
 | 
			
		||||
from esphomeyaml.components.display.lcd_gpio import LCDDisplayRef, validate_lcd_dimensions
 | 
			
		||||
from esphomeyaml.components import display, i2c
 | 
			
		||||
from esphomeyaml.components.display.lcd_gpio import LCDDisplayRef, validate_lcd_dimensions, \
 | 
			
		||||
    LCDDisplay
 | 
			
		||||
from esphomeyaml.const import CONF_ADDRESS, CONF_DIMENSIONS, CONF_ID, CONF_LAMBDA
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, process_lambda
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, process_lambda, setup_component
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['i2c']
 | 
			
		||||
 | 
			
		||||
PCF8574LCDDisplay = display.display_ns.PCF8574LCDDisplay
 | 
			
		||||
PCF8574LCDDisplay = display.display_ns.class_('PCF8574LCDDisplay', LCDDisplay, i2c.I2CDevice)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = display.BASIC_DISPLAY_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(PCF8574LCDDisplay),
 | 
			
		||||
    vol.Required(CONF_DIMENSIONS): validate_lcd_dimensions,
 | 
			
		||||
    vol.Optional(CONF_ADDRESS): cv.i2c_address,
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -30,6 +31,7 @@ def to_code(config):
 | 
			
		||||
        add(lcd.set_writer(lambda_))
 | 
			
		||||
 | 
			
		||||
    display.setup_display(lcd, config)
 | 
			
		||||
    setup_component(lcd, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = ['-DUSE_LCD_DISPLAY', '-DUSE_LCD_DISPLAY_PCF8574']
 | 
			
		||||
 
 | 
			
		||||
@@ -2,16 +2,16 @@ import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml import pins
 | 
			
		||||
from esphomeyaml.components import display
 | 
			
		||||
from esphomeyaml.components import display, spi
 | 
			
		||||
from esphomeyaml.components.spi import SPIComponent
 | 
			
		||||
from esphomeyaml.const import CONF_CS_PIN, CONF_ID, CONF_INTENSITY, CONF_LAMBDA, CONF_NUM_CHIPS, \
 | 
			
		||||
    CONF_SPI_ID
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, get_variable, gpio_output_pin_expression, \
 | 
			
		||||
    process_lambda
 | 
			
		||||
    process_lambda, setup_component, PollingComponent
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['spi']
 | 
			
		||||
 | 
			
		||||
MAX7219Component = display.display_ns.MAX7219Component
 | 
			
		||||
MAX7219Component = display.display_ns.class_('MAX7219Component', PollingComponent, spi.SPIDevice)
 | 
			
		||||
MAX7219ComponentRef = MAX7219Component.operator('ref')
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = display.BASIC_DISPLAY_PLATFORM_SCHEMA.extend({
 | 
			
		||||
@@ -21,15 +21,15 @@ PLATFORM_SCHEMA = display.BASIC_DISPLAY_PLATFORM_SCHEMA.extend({
 | 
			
		||||
 | 
			
		||||
    vol.Optional(CONF_NUM_CHIPS): vol.All(cv.uint8_t, vol.Range(min=1)),
 | 
			
		||||
    vol.Optional(CONF_INTENSITY): vol.All(cv.uint8_t, vol.Range(min=0, max=15)),
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    for spi in get_variable(config[CONF_SPI_ID]):
 | 
			
		||||
    for spi_ in get_variable(config[CONF_SPI_ID]):
 | 
			
		||||
        yield
 | 
			
		||||
    for cs in gpio_output_pin_expression(config[CONF_CS_PIN]):
 | 
			
		||||
        yield
 | 
			
		||||
    rhs = App.make_max7219(spi, cs)
 | 
			
		||||
    rhs = App.make_max7219(spi_, cs)
 | 
			
		||||
    max7219 = Pvariable(config[CONF_ID], rhs)
 | 
			
		||||
 | 
			
		||||
    if CONF_NUM_CHIPS in config:
 | 
			
		||||
@@ -43,6 +43,7 @@ def to_code(config):
 | 
			
		||||
        add(max7219.set_writer(lambda_))
 | 
			
		||||
 | 
			
		||||
    display.setup_display(max7219, config)
 | 
			
		||||
    setup_component(max7219, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_MAX7219'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,24 +1,26 @@
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import display
 | 
			
		||||
from esphomeyaml.components import display, uart
 | 
			
		||||
from esphomeyaml.components.uart import UARTComponent
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.const import CONF_ID, CONF_LAMBDA, CONF_UART_ID
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, get_variable, process_lambda
 | 
			
		||||
from esphomeyaml.helpers import App, PollingComponent, Pvariable, add, get_variable, \
 | 
			
		||||
    process_lambda, \
 | 
			
		||||
    setup_component
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['uart']
 | 
			
		||||
 | 
			
		||||
Nextion = display.display_ns.Nextion
 | 
			
		||||
Nextion = display.display_ns.class_('Nextion', PollingComponent, uart.UARTDevice)
 | 
			
		||||
NextionRef = Nextion.operator('ref')
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = display.BASIC_DISPLAY_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(Nextion),
 | 
			
		||||
    cv.GenerateID(CONF_UART_ID): cv.use_variable_id(UARTComponent),
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    for uart in get_variable(config[CONF_UART_ID]):
 | 
			
		||||
    for uart_ in get_variable(config[CONF_UART_ID]):
 | 
			
		||||
        yield
 | 
			
		||||
    rhs = App.make_nextion(uart)
 | 
			
		||||
    rhs = App.make_nextion(uart_)
 | 
			
		||||
    nextion = Pvariable(config[CONF_ID], rhs)
 | 
			
		||||
 | 
			
		||||
    if CONF_LAMBDA in config:
 | 
			
		||||
@@ -27,6 +29,7 @@ def to_code(config):
 | 
			
		||||
        add(nextion.set_writer(lambda_))
 | 
			
		||||
 | 
			
		||||
    display.setup_display(nextion, config)
 | 
			
		||||
    setup_component(nextion, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_NEXTION'
 | 
			
		||||
 
 | 
			
		||||
@@ -7,11 +7,11 @@ from esphomeyaml.components.display import ssd1306_spi
 | 
			
		||||
from esphomeyaml.const import CONF_ADDRESS, CONF_EXTERNAL_VCC, CONF_ID, \
 | 
			
		||||
    CONF_MODEL, CONF_RESET_PIN, CONF_LAMBDA
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, \
 | 
			
		||||
    gpio_output_pin_expression, process_lambda
 | 
			
		||||
    gpio_output_pin_expression, process_lambda, setup_component
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['i2c']
 | 
			
		||||
 | 
			
		||||
I2CSSD1306 = display.display_ns.I2CSSD1306
 | 
			
		||||
I2CSSD1306 = display.display_ns.class_('I2CSSD1306', ssd1306_spi.SSD1306)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = display.FULL_DISPLAY_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(I2CSSD1306),
 | 
			
		||||
@@ -19,7 +19,7 @@ PLATFORM_SCHEMA = display.FULL_DISPLAY_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    vol.Optional(CONF_RESET_PIN): pins.gpio_output_pin_schema,
 | 
			
		||||
    vol.Optional(CONF_EXTERNAL_VCC): cv.boolean,
 | 
			
		||||
    vol.Optional(CONF_ADDRESS): cv.i2c_address,
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -41,6 +41,7 @@ def to_code(config):
 | 
			
		||||
        add(ssd.set_writer(lambda_))
 | 
			
		||||
 | 
			
		||||
    display.setup_display(ssd, config)
 | 
			
		||||
    setup_component(ssd, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_SSD1306'
 | 
			
		||||
 
 | 
			
		||||
@@ -2,27 +2,29 @@ import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml import pins
 | 
			
		||||
from esphomeyaml.components import display
 | 
			
		||||
from esphomeyaml.components import display, spi
 | 
			
		||||
from esphomeyaml.components.spi import SPIComponent
 | 
			
		||||
from esphomeyaml.const import CONF_CS_PIN, CONF_DC_PIN, CONF_EXTERNAL_VCC, \
 | 
			
		||||
    CONF_ID, CONF_MODEL, \
 | 
			
		||||
    CONF_RESET_PIN, CONF_SPI_ID, CONF_LAMBDA
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, get_variable, \
 | 
			
		||||
    gpio_output_pin_expression, process_lambda
 | 
			
		||||
    gpio_output_pin_expression, process_lambda, setup_component, PollingComponent
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['spi']
 | 
			
		||||
 | 
			
		||||
SPISSD1306 = display.display_ns.SPISSD1306
 | 
			
		||||
SSD1306 = display.display_ns.class_('SSD1306', PollingComponent, display.DisplayBuffer)
 | 
			
		||||
SPISSD1306 = display.display_ns.class_('SPISSD1306', SSD1306, spi.SPIDevice)
 | 
			
		||||
SSD1306Model = display.display_ns.enum('SSD1306Model')
 | 
			
		||||
 | 
			
		||||
MODELS = {
 | 
			
		||||
    'SSD1306_128X32': display.display_ns.SSD1306_MODEL_128_32,
 | 
			
		||||
    'SSD1306_128X64': display.display_ns.SSD1306_MODEL_128_64,
 | 
			
		||||
    'SSD1306_96X16': display.display_ns.SSD1306_MODEL_96_16,
 | 
			
		||||
    'SSD1306_64X48': display.display_ns.SSD1306_MODEL_64_48,
 | 
			
		||||
    'SH1106_128X32': display.display_ns.SH1106_MODEL_128_32,
 | 
			
		||||
    'SH1106_128X64': display.display_ns.SH1106_MODEL_128_64,
 | 
			
		||||
    'SH1106_96X16': display.display_ns.SH1106_MODEL_96_16,
 | 
			
		||||
    'SH1106_64X48': display.display_ns.SH1106_MODEL_64_48,
 | 
			
		||||
    'SSD1306_128X32': SSD1306Model.SSD1306_MODEL_128_32,
 | 
			
		||||
    'SSD1306_128X64': SSD1306Model.SSD1306_MODEL_128_64,
 | 
			
		||||
    'SSD1306_96X16': SSD1306Model.SSD1306_MODEL_96_16,
 | 
			
		||||
    'SSD1306_64X48': SSD1306Model.SSD1306_MODEL_64_48,
 | 
			
		||||
    'SH1106_128X32': SSD1306Model.SH1106_MODEL_128_32,
 | 
			
		||||
    'SH1106_128X64': SSD1306Model.SH1106_MODEL_128_64,
 | 
			
		||||
    'SH1106_96X16': SSD1306Model.SH1106_MODEL_96_16,
 | 
			
		||||
    'SH1106_64X48': SSD1306Model.SH1106_MODEL_64_48,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SSD1306_MODEL = vol.All(vol.Upper, vol.Replace(' ', '_'), cv.one_of(*MODELS))
 | 
			
		||||
@@ -35,18 +37,18 @@ PLATFORM_SCHEMA = display.FULL_DISPLAY_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    vol.Required(CONF_MODEL): SSD1306_MODEL,
 | 
			
		||||
    vol.Optional(CONF_RESET_PIN): pins.gpio_output_pin_schema,
 | 
			
		||||
    vol.Optional(CONF_EXTERNAL_VCC): cv.boolean,
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    for spi in get_variable(config[CONF_SPI_ID]):
 | 
			
		||||
    for spi_ in get_variable(config[CONF_SPI_ID]):
 | 
			
		||||
        yield
 | 
			
		||||
    for cs in gpio_output_pin_expression(config[CONF_CS_PIN]):
 | 
			
		||||
        yield
 | 
			
		||||
    for dc in gpio_output_pin_expression(config[CONF_DC_PIN]):
 | 
			
		||||
        yield
 | 
			
		||||
 | 
			
		||||
    rhs = App.make_spi_ssd1306(spi, cs, dc)
 | 
			
		||||
    rhs = App.make_spi_ssd1306(spi_, cs, dc)
 | 
			
		||||
    ssd = Pvariable(config[CONF_ID], rhs)
 | 
			
		||||
    add(ssd.set_model(MODELS[config[CONF_MODEL]]))
 | 
			
		||||
 | 
			
		||||
@@ -63,6 +65,7 @@ def to_code(config):
 | 
			
		||||
        add(ssd.set_writer(lambda_))
 | 
			
		||||
 | 
			
		||||
    display.setup_display(ssd, config)
 | 
			
		||||
    setup_component(ssd, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_SSD1306'
 | 
			
		||||
 
 | 
			
		||||
@@ -2,25 +2,30 @@ import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml import pins
 | 
			
		||||
from esphomeyaml.components import display
 | 
			
		||||
from esphomeyaml.components import display, spi
 | 
			
		||||
from esphomeyaml.components.spi import SPIComponent
 | 
			
		||||
from esphomeyaml.const import CONF_BUSY_PIN, CONF_CS_PIN, CONF_DC_PIN, CONF_FULL_UPDATE_EVERY, \
 | 
			
		||||
    CONF_ID, CONF_LAMBDA, CONF_MODEL, CONF_RESET_PIN, CONF_SPI_ID
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, get_variable, gpio_input_pin_expression, \
 | 
			
		||||
    gpio_output_pin_expression, process_lambda
 | 
			
		||||
    gpio_output_pin_expression, process_lambda, setup_component, PollingComponent
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['spi']
 | 
			
		||||
 | 
			
		||||
WaveshareEPaperTypeA = display.display_ns.WaveshareEPaperTypeA
 | 
			
		||||
WaveshareEPaper = display.display_ns.WaveshareEPaper
 | 
			
		||||
WaveshareEPaper = display.display_ns.class_('WaveshareEPaper',
 | 
			
		||||
                                            PollingComponent, spi.SPIDevice, display.DisplayBuffer)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
WaveshareEPaperTypeAModel = display.display_ns.enum('WaveshareEPaperTypeAModel')
 | 
			
		||||
WaveshareEPaperTypeBModel = display.display_ns.enum('WaveshareEPaperTypeBModel')
 | 
			
		||||
 | 
			
		||||
MODELS = {
 | 
			
		||||
    '1.54in': ('a', display.display_ns.WAVESHARE_EPAPER_1_54_IN),
 | 
			
		||||
    '2.13in': ('a', display.display_ns.WAVESHARE_EPAPER_2_13_IN),
 | 
			
		||||
    '2.90in': ('a', display.display_ns.WAVESHARE_EPAPER_2_9_IN),
 | 
			
		||||
    '2.70in': ('b', display.display_ns.WAVESHARE_EPAPER_2_7_IN),
 | 
			
		||||
    '4.20in': ('b', display.display_ns.WAVESHARE_EPAPER_4_2_IN),
 | 
			
		||||
    '7.50in': ('b', display.display_ns.WAVESHARE_EPAPER_7_5_IN),
 | 
			
		||||
    '1.54in': ('a', WaveshareEPaperTypeAModel.WAVESHARE_EPAPER_1_54_IN),
 | 
			
		||||
    '2.13in': ('a', WaveshareEPaperTypeAModel.WAVESHARE_EPAPER_2_13_IN),
 | 
			
		||||
    '2.90in': ('a', WaveshareEPaperTypeAModel.WAVESHARE_EPAPER_2_9_IN),
 | 
			
		||||
    '2.70in': ('b', WaveshareEPaperTypeBModel.WAVESHARE_EPAPER_2_7_IN),
 | 
			
		||||
    '4.20in': ('b', WaveshareEPaperTypeBModel.WAVESHARE_EPAPER_4_2_IN),
 | 
			
		||||
    '7.50in': ('b', WaveshareEPaperTypeBModel.WAVESHARE_EPAPER_7_5_IN),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -34,7 +39,7 @@ def validate_full_update_every_only_type_a(value):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = vol.All(display.FULL_DISPLAY_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(None),
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(WaveshareEPaper),
 | 
			
		||||
    cv.GenerateID(CONF_SPI_ID): cv.use_variable_id(SPIComponent),
 | 
			
		||||
    vol.Required(CONF_CS_PIN): pins.gpio_output_pin_schema,
 | 
			
		||||
    vol.Required(CONF_DC_PIN): pins.gpio_output_pin_schema,
 | 
			
		||||
@@ -42,11 +47,11 @@ PLATFORM_SCHEMA = vol.All(display.FULL_DISPLAY_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    vol.Optional(CONF_RESET_PIN): pins.gpio_output_pin_schema,
 | 
			
		||||
    vol.Optional(CONF_BUSY_PIN): pins.gpio_input_pin_schema,
 | 
			
		||||
    vol.Optional(CONF_FULL_UPDATE_EVERY): cv.uint32_t,
 | 
			
		||||
}), validate_full_update_every_only_type_a)
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema), validate_full_update_every_only_type_a)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    for spi in get_variable(config[CONF_SPI_ID]):
 | 
			
		||||
    for spi_ in get_variable(config[CONF_SPI_ID]):
 | 
			
		||||
        yield
 | 
			
		||||
    for cs in gpio_output_pin_expression(config[CONF_CS_PIN]):
 | 
			
		||||
        yield
 | 
			
		||||
@@ -55,10 +60,10 @@ def to_code(config):
 | 
			
		||||
 | 
			
		||||
    model_type, model = MODELS[config[CONF_MODEL]]
 | 
			
		||||
    if model_type == 'a':
 | 
			
		||||
        rhs = App.make_waveshare_epaper_type_a(spi, cs, dc, model)
 | 
			
		||||
        rhs = App.make_waveshare_epaper_type_a(spi_, cs, dc, model)
 | 
			
		||||
        epaper = Pvariable(config[CONF_ID], rhs, type=WaveshareEPaperTypeA)
 | 
			
		||||
    elif model_type == 'b':
 | 
			
		||||
        rhs = App.make_waveshare_epaper_type_b(spi, cs, dc, model)
 | 
			
		||||
        rhs = App.make_waveshare_epaper_type_b(spi_, cs, dc, model)
 | 
			
		||||
        epaper = Pvariable(config[CONF_ID], rhs, type=WaveshareEPaper)
 | 
			
		||||
    else:
 | 
			
		||||
        raise NotImplementedError()
 | 
			
		||||
@@ -79,6 +84,7 @@ def to_code(config):
 | 
			
		||||
        add(epaper.set_full_update_every(config[CONF_FULL_UPDATE_EVERY]))
 | 
			
		||||
 | 
			
		||||
    display.setup_display(epaper, config)
 | 
			
		||||
    setup_component(epaper, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_WAVESHARE_EPAPER'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +0,0 @@
 | 
			
		||||
from esphomeyaml import config_validation as cv
 | 
			
		||||
 | 
			
		||||
CONFIG_SCHEMA = cv.invalid("The 'esp32_ble' component has been renamed to the 'esp32_ble_tracker' "
 | 
			
		||||
                           "component in order to avoid confusion with the new 'esp32_ble_beacon' "
 | 
			
		||||
                           "component.")
 | 
			
		||||
@@ -1,12 +1,13 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
from esphomeyaml import config_validation as cv
 | 
			
		||||
from esphomeyaml.const import CONF_ID, CONF_SCAN_INTERVAL, ESP_PLATFORM_ESP32, CONF_UUID, CONF_TYPE
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, esphomelib_ns, RawExpression, ArrayInitializer
 | 
			
		||||
from esphomeyaml.const import CONF_ID, CONF_SCAN_INTERVAL, CONF_TYPE, CONF_UUID, ESP_PLATFORM_ESP32
 | 
			
		||||
from esphomeyaml.helpers import App, ArrayInitializer, Component, Pvariable, RawExpression, add, \
 | 
			
		||||
    esphomelib_ns, setup_component
 | 
			
		||||
 | 
			
		||||
ESP_PLATFORMS = [ESP_PLATFORM_ESP32]
 | 
			
		||||
 | 
			
		||||
ESP32BLEBeacon = esphomelib_ns.ESP32BLEBeacon
 | 
			
		||||
ESP32BLEBeacon = esphomelib_ns.class_('ESP32BLEBeacon', Component)
 | 
			
		||||
 | 
			
		||||
CONF_MAJOR = 'major'
 | 
			
		||||
CONF_MINOR = 'minor'
 | 
			
		||||
@@ -18,12 +19,12 @@ CONFIG_SCHEMA = vol.Schema({
 | 
			
		||||
    vol.Optional(CONF_MAJOR): cv.uint16_t,
 | 
			
		||||
    vol.Optional(CONF_MINOR): cv.uint16_t,
 | 
			
		||||
    vol.Optional(CONF_SCAN_INTERVAL): cv.positive_time_period_milliseconds,
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    uuid = config[CONF_UUID].hex
 | 
			
		||||
    uuid_arr = [RawExpression('0x{}'.format(uuid[i:i+2])) for i in range(0, len(uuid), 2)]
 | 
			
		||||
    uuid_arr = [RawExpression('0x{}'.format(uuid[i:i + 2])) for i in range(0, len(uuid), 2)]
 | 
			
		||||
    rhs = App.make_esp32_ble_beacon(ArrayInitializer(*uuid_arr, multiline=False))
 | 
			
		||||
    ble = Pvariable(config[CONF_ID], rhs)
 | 
			
		||||
    if CONF_MAJOR in config:
 | 
			
		||||
@@ -31,5 +32,7 @@ def to_code(config):
 | 
			
		||||
    if CONF_MINOR in config:
 | 
			
		||||
        add(ble.set_minor(config[CONF_MINOR]))
 | 
			
		||||
 | 
			
		||||
    setup_component(ble, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_ESP32_BLE_BEACON'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,19 +1,26 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
from esphomeyaml import config_validation as cv
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.const import CONF_ID, CONF_SCAN_INTERVAL, ESP_PLATFORM_ESP32
 | 
			
		||||
from esphomeyaml.core import HexInt
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, esphomelib_ns, ArrayInitializer
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, esphomelib_ns, ArrayInitializer, \
 | 
			
		||||
    setup_component, Component
 | 
			
		||||
 | 
			
		||||
ESP_PLATFORMS = [ESP_PLATFORM_ESP32]
 | 
			
		||||
 | 
			
		||||
CONF_ESP32_BLE_ID = 'esp32_ble_id'
 | 
			
		||||
ESP32BLETracker = esphomelib_ns.ESP32BLETracker
 | 
			
		||||
ESP32BLETracker = esphomelib_ns.class_('ESP32BLETracker', Component)
 | 
			
		||||
XiaomiSensor = esphomelib_ns.class_('XiaomiSensor', sensor.Sensor)
 | 
			
		||||
XiaomiDevice = esphomelib_ns.class_('XiaomiDevice')
 | 
			
		||||
XIAOMI_SENSOR_SCHEMA = sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(XiaomiSensor)
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
CONFIG_SCHEMA = vol.Schema({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(ESP32BLETracker),
 | 
			
		||||
    vol.Optional(CONF_SCAN_INTERVAL): cv.positive_time_period_milliseconds,
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def make_address_array(address):
 | 
			
		||||
@@ -27,5 +34,7 @@ def to_code(config):
 | 
			
		||||
    if CONF_SCAN_INTERVAL in config:
 | 
			
		||||
        add(ble.set_scan_interval(config[CONF_SCAN_INTERVAL]))
 | 
			
		||||
 | 
			
		||||
    setup_component(ble, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_ESP32_BLE_TRACKER'
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ from esphomeyaml.const import CONF_ID, CONF_SETUP_MODE, CONF_IIR_FILTER, \
 | 
			
		||||
    CONF_SLEEP_DURATION, CONF_MEASUREMENT_DURATION, CONF_LOW_VOLTAGE_REFERENCE, \
 | 
			
		||||
    CONF_HIGH_VOLTAGE_REFERENCE, CONF_VOLTAGE_ATTENUATION, ESP_PLATFORM_ESP32
 | 
			
		||||
from esphomeyaml.core import TimePeriod
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, global_ns
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, global_ns, setup_component, Component
 | 
			
		||||
 | 
			
		||||
ESP_PLATFORMS = [ESP_PLATFORM_ESP32]
 | 
			
		||||
 | 
			
		||||
@@ -41,7 +41,7 @@ VOLTAGE_ATTENUATION = {
 | 
			
		||||
    '0V': global_ns.TOUCH_HVOLT_ATTEN_0V,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ESP32TouchComponent = binary_sensor.binary_sensor_ns.ESP32TouchComponent
 | 
			
		||||
ESP32TouchComponent = binary_sensor.binary_sensor_ns.class_('ESP32TouchComponent', Component)
 | 
			
		||||
 | 
			
		||||
CONFIG_SCHEMA = vol.Schema({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(ESP32TouchComponent),
 | 
			
		||||
@@ -54,7 +54,7 @@ CONFIG_SCHEMA = vol.Schema({
 | 
			
		||||
    vol.Optional(CONF_LOW_VOLTAGE_REFERENCE): validate_voltage(LOW_VOLTAGE_REFERENCE),
 | 
			
		||||
    vol.Optional(CONF_HIGH_VOLTAGE_REFERENCE): validate_voltage(HIGH_VOLTAGE_REFERENCE),
 | 
			
		||||
    vol.Optional(CONF_VOLTAGE_ATTENUATION): validate_voltage(VOLTAGE_ATTENUATION),
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -80,5 +80,7 @@ def to_code(config):
 | 
			
		||||
        value = VOLTAGE_ATTENUATION[config[CONF_VOLTAGE_ATTENUATION]]
 | 
			
		||||
        add(touch.set_voltage_attenuation(value))
 | 
			
		||||
 | 
			
		||||
    setup_component(touch, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_ESP32_TOUCH_BINARY_SENSOR'
 | 
			
		||||
 
 | 
			
		||||
@@ -7,24 +7,27 @@ from esphomeyaml.const import CONF_ID, CONF_MQTT_ID, CONF_OSCILLATION_COMMAND_TO
 | 
			
		||||
    CONF_OSCILLATION_STATE_TOPIC, CONF_SPEED_COMMAND_TOPIC, CONF_SPEED_STATE_TOPIC, CONF_INTERNAL, \
 | 
			
		||||
    CONF_SPEED, CONF_OSCILLATING, CONF_OSCILLATION_OUTPUT, CONF_NAME
 | 
			
		||||
from esphomeyaml.helpers import Application, Pvariable, add, esphomelib_ns, setup_mqtt_component, \
 | 
			
		||||
    TemplateArguments, get_variable, templatable, bool_
 | 
			
		||||
    TemplateArguments, get_variable, templatable, bool_, Action, Nameable, Component
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({
 | 
			
		||||
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
fan_ns = esphomelib_ns.namespace('fan')
 | 
			
		||||
FanState = fan_ns.FanState
 | 
			
		||||
MQTTFanComponent = fan_ns.MQTTFanComponent
 | 
			
		||||
MakeFan = Application.MakeFan
 | 
			
		||||
TurnOnAction = fan_ns.TurnOnAction
 | 
			
		||||
TurnOffAction = fan_ns.TurnOffAction
 | 
			
		||||
ToggleAction = fan_ns.ToggleAction
 | 
			
		||||
FanSpeed = fan_ns.FanSpeed
 | 
			
		||||
FAN_SPEED_OFF = fan_ns.FAN_SPEED_OFF
 | 
			
		||||
FAN_SPEED_LOW = fan_ns.FAN_SPEED_LOW
 | 
			
		||||
FAN_SPEED_MEDIUM = fan_ns.FAN_SPEED_MEDIUM
 | 
			
		||||
FAN_SPEED_HIGH = fan_ns.FAN_SPEED_HIGH
 | 
			
		||||
FanState = fan_ns.class_('FanState', Nameable, Component)
 | 
			
		||||
MQTTFanComponent = fan_ns.class_('MQTTFanComponent', mqtt.MQTTComponent)
 | 
			
		||||
MakeFan = Application.struct('MakeFan')
 | 
			
		||||
 | 
			
		||||
# Actions
 | 
			
		||||
TurnOnAction = fan_ns.class_('TurnOnAction', Action)
 | 
			
		||||
TurnOffAction = fan_ns.class_('TurnOffAction', Action)
 | 
			
		||||
ToggleAction = fan_ns.class_('ToggleAction', Action)
 | 
			
		||||
 | 
			
		||||
FanSpeed = fan_ns.enum('FanSpeed')
 | 
			
		||||
FAN_SPEED_OFF = FanSpeed.FAN_SPEED_OFF
 | 
			
		||||
FAN_SPEED_LOW = FanSpeed.FAN_SPEED_LOW
 | 
			
		||||
FAN_SPEED_MEDIUM = FanSpeed.FAN_SPEED_MEDIUM
 | 
			
		||||
FAN_SPEED_HIGH = FanSpeed.FAN_SPEED_HIGH
 | 
			
		||||
 | 
			
		||||
FAN_SCHEMA = cv.MQTT_COMMAND_COMPONENT_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(FanState),
 | 
			
		||||
@@ -74,7 +77,7 @@ BUILD_FLAGS = '-DUSE_FAN'
 | 
			
		||||
 | 
			
		||||
CONF_FAN_TOGGLE = 'fan.toggle'
 | 
			
		||||
FAN_TOGGLE_ACTION_SCHEMA = maybe_simple_id({
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(FanState),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -90,7 +93,7 @@ def fan_toggle_to_code(config, action_id, arg_type):
 | 
			
		||||
 | 
			
		||||
CONF_FAN_TURN_OFF = 'fan.turn_off'
 | 
			
		||||
FAN_TURN_OFF_ACTION_SCHEMA = maybe_simple_id({
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(FanState),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -106,7 +109,7 @@ def fan_turn_off_to_code(config, action_id, arg_type):
 | 
			
		||||
 | 
			
		||||
CONF_FAN_TURN_ON = 'fan.turn_on'
 | 
			
		||||
FAN_TURN_ON_ACTION_SCHEMA = maybe_simple_id({
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(FanState),
 | 
			
		||||
    vol.Optional(CONF_OSCILLATING): cv.templatable(cv.boolean),
 | 
			
		||||
    vol.Optional(CONF_SPEED): cv.templatable(validate_fan_speed),
 | 
			
		||||
})
 | 
			
		||||
 
 | 
			
		||||
@@ -1,32 +1,31 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import fan
 | 
			
		||||
from esphomeyaml.components import fan, output
 | 
			
		||||
from esphomeyaml.const import CONF_MAKE_ID, CONF_NAME, CONF_OSCILLATION_OUTPUT, CONF_OUTPUT
 | 
			
		||||
from esphomeyaml.helpers import App, add, get_variable, variable
 | 
			
		||||
from esphomeyaml.helpers import App, add, get_variable, variable, setup_component
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(fan.FAN_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(fan.MakeFan),
 | 
			
		||||
    vol.Required(CONF_OUTPUT): cv.use_variable_id(None),
 | 
			
		||||
    vol.Optional(CONF_OSCILLATION_OUTPUT): cv.use_variable_id(None),
 | 
			
		||||
}))
 | 
			
		||||
    vol.Required(CONF_OUTPUT): cv.use_variable_id(output.BinaryOutput),
 | 
			
		||||
    vol.Optional(CONF_OSCILLATION_OUTPUT): cv.use_variable_id(output.BinaryOutput),
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    output = None
 | 
			
		||||
    for output in get_variable(config[CONF_OUTPUT]):
 | 
			
		||||
    for output_ in get_variable(config[CONF_OUTPUT]):
 | 
			
		||||
        yield
 | 
			
		||||
 | 
			
		||||
    rhs = App.make_fan(config[CONF_NAME])
 | 
			
		||||
    fan_struct = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    add(fan_struct.Poutput.set_binary(output))
 | 
			
		||||
    add(fan_struct.Poutput.set_binary(output_))
 | 
			
		||||
    if CONF_OSCILLATION_OUTPUT in config:
 | 
			
		||||
        oscillation_output = None
 | 
			
		||||
        for oscillation_output in get_variable(config[CONF_OSCILLATION_OUTPUT]):
 | 
			
		||||
            yield
 | 
			
		||||
        add(fan_struct.Poutput.set_oscillation(oscillation_output))
 | 
			
		||||
 | 
			
		||||
    fan.setup_fan(fan_struct.Pstate, fan_struct.Pmqtt, config)
 | 
			
		||||
    setup_component(fan_struct.Poutput, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_hass_config(data, config):
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import fan, mqtt
 | 
			
		||||
from esphomeyaml.components import fan, mqtt, output
 | 
			
		||||
from esphomeyaml.const import CONF_HIGH, CONF_LOW, CONF_MAKE_ID, CONF_MEDIUM, CONF_NAME, \
 | 
			
		||||
    CONF_OSCILLATION_OUTPUT, CONF_OUTPUT, CONF_SPEED, CONF_SPEED_COMMAND_TOPIC, \
 | 
			
		||||
    CONF_SPEED_STATE_TOPIC
 | 
			
		||||
@@ -9,35 +9,33 @@ from esphomeyaml.helpers import App, add, get_variable, variable
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(fan.FAN_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(fan.MakeFan),
 | 
			
		||||
    vol.Required(CONF_OUTPUT): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_OUTPUT): cv.use_variable_id(output.FloatOutput),
 | 
			
		||||
    vol.Optional(CONF_SPEED_STATE_TOPIC): cv.publish_topic,
 | 
			
		||||
    vol.Optional(CONF_SPEED_COMMAND_TOPIC): cv.subscribe_topic,
 | 
			
		||||
    vol.Optional(CONF_OSCILLATION_OUTPUT): cv.use_variable_id(None),
 | 
			
		||||
    vol.Optional(CONF_OSCILLATION_OUTPUT): cv.use_variable_id(output.BinaryOutput),
 | 
			
		||||
    vol.Optional(CONF_SPEED): vol.Schema({
 | 
			
		||||
        vol.Required(CONF_LOW): cv.percentage,
 | 
			
		||||
        vol.Required(CONF_MEDIUM): cv.percentage,
 | 
			
		||||
        vol.Required(CONF_HIGH): cv.percentage,
 | 
			
		||||
    }),
 | 
			
		||||
}))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    output = None
 | 
			
		||||
    for output in get_variable(config[CONF_OUTPUT]):
 | 
			
		||||
    for output_ in get_variable(config[CONF_OUTPUT]):
 | 
			
		||||
        yield
 | 
			
		||||
    rhs = App.make_fan(config[CONF_NAME])
 | 
			
		||||
    fan_struct = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    if CONF_SPEED in config:
 | 
			
		||||
        speeds = config[CONF_SPEED]
 | 
			
		||||
        add(fan_struct.Poutput.set_speed(output,
 | 
			
		||||
        add(fan_struct.Poutput.set_speed(output_,
 | 
			
		||||
                                         speeds[CONF_LOW],
 | 
			
		||||
                                         speeds[CONF_MEDIUM],
 | 
			
		||||
                                         speeds[CONF_HIGH]))
 | 
			
		||||
    else:
 | 
			
		||||
        add(fan_struct.Poutput.set_speed(output))
 | 
			
		||||
        add(fan_struct.Poutput.set_speed(output_))
 | 
			
		||||
 | 
			
		||||
    if CONF_OSCILLATION_OUTPUT in config:
 | 
			
		||||
        oscillation_output = None
 | 
			
		||||
        for oscillation_output in get_variable(config[CONF_OSCILLATION_OUTPUT]):
 | 
			
		||||
            yield
 | 
			
		||||
        add(fan_struct.Poutput.set_oscillation(oscillation_output))
 | 
			
		||||
 
 | 
			
		||||
@@ -11,8 +11,8 @@ from esphomeyaml.helpers import App, ArrayInitializer, MockObj, Pvariable, RawEx
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['display']
 | 
			
		||||
 | 
			
		||||
Font = display.display_ns.Font
 | 
			
		||||
Glyph = display.display_ns.Glyph
 | 
			
		||||
Font = display.display_ns.class_('Font')
 | 
			
		||||
Glyph = display.display_ns.class_('Glyph')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def validate_glyphs(value):
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										35
									
								
								esphomeyaml/components/globals.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								esphomeyaml/components/globals.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
from esphomeyaml import config_validation as cv
 | 
			
		||||
from esphomeyaml.const import CONF_ID, CONF_INITIAL_VALUE, CONF_RESTORE_VALUE, CONF_TYPE
 | 
			
		||||
from esphomeyaml.helpers import App, Component, Pvariable, RawExpression, TemplateArguments, add, \
 | 
			
		||||
    esphomelib_ns, setup_component
 | 
			
		||||
 | 
			
		||||
GlobalVariableComponent = esphomelib_ns.class_('GlobalVariableComponent', Component)
 | 
			
		||||
 | 
			
		||||
GLOBAL_VAR_SCHEMA = vol.Schema({
 | 
			
		||||
    vol.Required(CONF_ID): cv.declare_variable_id(GlobalVariableComponent),
 | 
			
		||||
    vol.Required(CONF_TYPE): cv.string_strict,
 | 
			
		||||
    vol.Optional(CONF_INITIAL_VALUE): cv.string_strict,
 | 
			
		||||
    vol.Optional(CONF_RESTORE_VALUE): cv.boolean,
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
CONFIG_SCHEMA = vol.All(cv.ensure_list, [GLOBAL_VAR_SCHEMA])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    for conf in config:
 | 
			
		||||
        type_ = RawExpression(conf[CONF_TYPE])
 | 
			
		||||
        template_args = TemplateArguments(type_)
 | 
			
		||||
        res_type = GlobalVariableComponent.template(template_args)
 | 
			
		||||
        initial_value = None
 | 
			
		||||
        if CONF_INITIAL_VALUE in conf:
 | 
			
		||||
            initial_value = RawExpression(conf[CONF_INITIAL_VALUE])
 | 
			
		||||
        rhs = App.Pmake_global_variable(template_args, initial_value)
 | 
			
		||||
        glob = Pvariable(conf[CONF_ID], rhs, type=res_type)
 | 
			
		||||
 | 
			
		||||
        if conf.get(CONF_RESTORE_VALUE, False):
 | 
			
		||||
            hash_ = hash(conf[CONF_ID].id) % 2**32
 | 
			
		||||
            add(glob.set_restore_value(hash_))
 | 
			
		||||
 | 
			
		||||
        setup_component(glob, conf)
 | 
			
		||||
@@ -4,9 +4,10 @@ import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml import pins
 | 
			
		||||
from esphomeyaml.const import CONF_FREQUENCY, CONF_SCL, CONF_SDA, CONF_SCAN, CONF_ID, \
 | 
			
		||||
    CONF_RECEIVE_TIMEOUT
 | 
			
		||||
from esphomeyaml.helpers import App, add, Pvariable, esphomelib_ns
 | 
			
		||||
from esphomeyaml.helpers import App, add, Pvariable, esphomelib_ns, setup_component, Component
 | 
			
		||||
 | 
			
		||||
I2CComponent = esphomelib_ns.I2CComponent
 | 
			
		||||
I2CComponent = esphomelib_ns.class_('I2CComponent', Component)
 | 
			
		||||
I2CDevice = pins.I2CDevice
 | 
			
		||||
 | 
			
		||||
CONFIG_SCHEMA = vol.Schema({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(I2CComponent),
 | 
			
		||||
@@ -18,7 +19,7 @@ CONFIG_SCHEMA = vol.Schema({
 | 
			
		||||
    vol.Optional(CONF_RECEIVE_TIMEOUT): cv.invalid("The receive_timeout option has been removed "
 | 
			
		||||
                                                   "because timeouts are already handled by the "
 | 
			
		||||
                                                   "low-level i2c interface.")
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -27,6 +28,8 @@ def to_code(config):
 | 
			
		||||
    if CONF_FREQUENCY in config:
 | 
			
		||||
        add(i2c.set_frequency(config[CONF_FREQUENCY]))
 | 
			
		||||
 | 
			
		||||
    setup_component(i2c, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_I2C'
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ _LOGGER = logging.getLogger(__name__)
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['display']
 | 
			
		||||
 | 
			
		||||
Image_ = display.display_ns.Image
 | 
			
		||||
Image_ = display.display_ns.class_('Image')
 | 
			
		||||
 | 
			
		||||
CONF_RAW_DATA_ID = 'raw_data_id'
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def CONFIG_SCHEMA(config):
 | 
			
		||||
    raise vol.Invalid("The ir_transmitter component has been renamed to "
 | 
			
		||||
                      "remote_transmitter because of 433MHz signal support.")
 | 
			
		||||
@@ -1,46 +1,56 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
from esphomeyaml.automation import maybe_simple_id, ACTION_REGISTRY
 | 
			
		||||
from esphomeyaml.automation import ACTION_REGISTRY, maybe_simple_id
 | 
			
		||||
from esphomeyaml.components import mqtt
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.const import CONF_ALPHA, CONF_BLUE, CONF_BRIGHTNESS, CONF_COLORS, \
 | 
			
		||||
    CONF_DEFAULT_TRANSITION_LENGTH, CONF_DURATION, CONF_EFFECTS, CONF_EFFECT_ID, \
 | 
			
		||||
    CONF_GAMMA_CORRECT, CONF_GREEN, CONF_ID, CONF_INTERNAL, CONF_LAMBDA, CONF_MQTT_ID, CONF_NAME, \
 | 
			
		||||
    CONF_NUM_LEDS, CONF_RANDOM, CONF_RED, CONF_SPEED, CONF_STATE, CONF_TRANSITION_LENGTH, \
 | 
			
		||||
    CONF_UPDATE_INTERVAL, CONF_WHITE, CONF_WIDTH, CONF_FLASH_LENGTH, CONF_COLOR_TEMPERATURE, \
 | 
			
		||||
    CONF_EFFECT
 | 
			
		||||
from esphomeyaml.helpers import Application, ArrayInitializer, Pvariable, RawExpression, \
 | 
			
		||||
    StructInitializer, add, add_job, esphomelib_ns, process_lambda, setup_mqtt_component, \
 | 
			
		||||
    get_variable, TemplateArguments, templatable, uint32, float_, std_string
 | 
			
		||||
    CONF_COLOR_TEMPERATURE, CONF_DEFAULT_TRANSITION_LENGTH, CONF_DURATION, CONF_EFFECT, \
 | 
			
		||||
    CONF_EFFECTS, CONF_EFFECT_ID, CONF_FLASH_LENGTH, CONF_GAMMA_CORRECT, CONF_GREEN, CONF_ID, \
 | 
			
		||||
    CONF_INTERNAL, CONF_LAMBDA, CONF_MQTT_ID, CONF_NAME, CONF_NUM_LEDS, CONF_RANDOM, CONF_RED, \
 | 
			
		||||
    CONF_SPEED, CONF_STATE, CONF_TRANSITION_LENGTH, CONF_UPDATE_INTERVAL, CONF_WHITE, CONF_WIDTH
 | 
			
		||||
from esphomeyaml.helpers import Action, Application, ArrayInitializer, Component, Nameable, \
 | 
			
		||||
    Pvariable, StructInitializer, TemplateArguments, add, add_job, esphomelib_ns, float_, \
 | 
			
		||||
    get_variable, process_lambda, setup_mqtt_component, std_string, templatable, uint32, \
 | 
			
		||||
    RawExpression
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({
 | 
			
		||||
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
# Base
 | 
			
		||||
light_ns = esphomelib_ns.namespace('light')
 | 
			
		||||
LightState = light_ns.LightState
 | 
			
		||||
LightColorValues = light_ns.LightColorValues
 | 
			
		||||
MQTTJSONLightComponent = light_ns.MQTTJSONLightComponent
 | 
			
		||||
ToggleAction = light_ns.ToggleAction
 | 
			
		||||
TurnOffAction = light_ns.TurnOffAction
 | 
			
		||||
TurnOnAction = light_ns.TurnOnAction
 | 
			
		||||
MakeLight = Application.MakeLight
 | 
			
		||||
RandomLightEffect = light_ns.RandomLightEffect
 | 
			
		||||
LambdaLightEffect = light_ns.LambdaLightEffect
 | 
			
		||||
StrobeLightEffect = light_ns.StrobeLightEffect
 | 
			
		||||
StrobeLightEffectColor = light_ns.StrobeLightEffectColor
 | 
			
		||||
FlickerLightEffect = light_ns.FlickerLightEffect
 | 
			
		||||
FastLEDLambdaLightEffect = light_ns.FastLEDLambdaLightEffect
 | 
			
		||||
FastLEDRainbowLightEffect = light_ns.FastLEDRainbowLightEffect
 | 
			
		||||
FastLEDColorWipeEffect = light_ns.FastLEDColorWipeEffect
 | 
			
		||||
FastLEDColorWipeEffectColor = light_ns.FastLEDColorWipeEffectColor
 | 
			
		||||
FastLEDScanEffect = light_ns.FastLEDScanEffect
 | 
			
		||||
FastLEDScanEffectColor = light_ns.FastLEDScanEffectColor
 | 
			
		||||
FastLEDTwinkleEffect = light_ns.FastLEDTwinkleEffect
 | 
			
		||||
FastLEDRandomTwinkleEffect = light_ns.FastLEDRandomTwinkleEffect
 | 
			
		||||
FastLEDFireworksEffect = light_ns.FastLEDFireworksEffect
 | 
			
		||||
FastLEDFlickerEffect = light_ns.FastLEDFlickerEffect
 | 
			
		||||
FastLEDLightOutputComponent = light_ns.FastLEDLightOutputComponent
 | 
			
		||||
LightState = light_ns.class_('LightState', Nameable, Component)
 | 
			
		||||
MakeLight = Application.struct('MakeLight')
 | 
			
		||||
LightOutput = light_ns.class_('LightOutput')
 | 
			
		||||
FastLEDLightOutputComponent = light_ns.class_('FastLEDLightOutputComponent', LightOutput)
 | 
			
		||||
 | 
			
		||||
# Actions
 | 
			
		||||
ToggleAction = light_ns.class_('ToggleAction', Action)
 | 
			
		||||
TurnOffAction = light_ns.class_('TurnOffAction', Action)
 | 
			
		||||
TurnOnAction = light_ns.class_('TurnOnAction', Action)
 | 
			
		||||
 | 
			
		||||
LightColorValues = light_ns.class_('LightColorValues')
 | 
			
		||||
 | 
			
		||||
MQTTJSONLightComponent = light_ns.class_('MQTTJSONLightComponent', mqtt.MQTTComponent)
 | 
			
		||||
 | 
			
		||||
# Effects
 | 
			
		||||
LightEffect = light_ns.class_('LightEffect')
 | 
			
		||||
RandomLightEffect = light_ns.class_('RandomLightEffect', LightEffect)
 | 
			
		||||
LambdaLightEffect = light_ns.class_('LambdaLightEffect', LightEffect)
 | 
			
		||||
StrobeLightEffect = light_ns.class_('StrobeLightEffect', LightEffect)
 | 
			
		||||
StrobeLightEffectColor = light_ns.class_('StrobeLightEffectColor', LightEffect)
 | 
			
		||||
FlickerLightEffect = light_ns.class_('FlickerLightEffect', LightEffect)
 | 
			
		||||
BaseFastLEDLightEffect = light_ns.class_('BaseFastLEDLightEffect', LightEffect)
 | 
			
		||||
FastLEDLambdaLightEffect = light_ns.class_('FastLEDLambdaLightEffect', BaseFastLEDLightEffect)
 | 
			
		||||
FastLEDRainbowLightEffect = light_ns.class_('FastLEDRainbowLightEffect', BaseFastLEDLightEffect)
 | 
			
		||||
FastLEDColorWipeEffect = light_ns.class_('FastLEDColorWipeEffect', BaseFastLEDLightEffect)
 | 
			
		||||
FastLEDColorWipeEffectColor = light_ns.class_('FastLEDColorWipeEffectColor', BaseFastLEDLightEffect)
 | 
			
		||||
FastLEDScanEffect = light_ns.class_('FastLEDScanEffect', BaseFastLEDLightEffect)
 | 
			
		||||
FastLEDScanEffectColor = light_ns.class_('FastLEDScanEffectColor', BaseFastLEDLightEffect)
 | 
			
		||||
FastLEDTwinkleEffect = light_ns.class_('FastLEDTwinkleEffect', BaseFastLEDLightEffect)
 | 
			
		||||
FastLEDRandomTwinkleEffect = light_ns.class_('FastLEDRandomTwinkleEffect', BaseFastLEDLightEffect)
 | 
			
		||||
FastLEDFireworksEffect = light_ns.class_('FastLEDFireworksEffect', BaseFastLEDLightEffect)
 | 
			
		||||
FastLEDFlickerEffect = light_ns.class_('FastLEDFlickerEffect', BaseFastLEDLightEffect)
 | 
			
		||||
 | 
			
		||||
CONF_STROBE = 'strobe'
 | 
			
		||||
CONF_FLICKER = 'flicker'
 | 
			
		||||
@@ -342,10 +352,9 @@ def setup_light(light_obj, mqtt_obj, config):
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_LIGHT'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CONF_LIGHT_TOGGLE = 'light.toggle'
 | 
			
		||||
LIGHT_TOGGLE_ACTION_SCHEMA = maybe_simple_id({
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(LightState),
 | 
			
		||||
    vol.Optional(CONF_TRANSITION_LENGTH): cv.templatable(cv.positive_time_period_milliseconds),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@@ -367,7 +376,7 @@ def light_toggle_to_code(config, action_id, arg_type):
 | 
			
		||||
 | 
			
		||||
CONF_LIGHT_TURN_OFF = 'light.turn_off'
 | 
			
		||||
LIGHT_TURN_OFF_ACTION_SCHEMA = maybe_simple_id({
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(LightState),
 | 
			
		||||
    vol.Optional(CONF_TRANSITION_LENGTH): cv.templatable(cv.positive_time_period_milliseconds),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@@ -389,7 +398,7 @@ def light_turn_off_to_code(config, action_id, arg_type):
 | 
			
		||||
 | 
			
		||||
CONF_LIGHT_TURN_ON = 'light.turn_on'
 | 
			
		||||
LIGHT_TURN_ON_ACTION_SCHEMA = maybe_simple_id({
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(LightState),
 | 
			
		||||
    vol.Exclusive(CONF_TRANSITION_LENGTH, 'transformer'):
 | 
			
		||||
        cv.templatable(cv.positive_time_period_milliseconds),
 | 
			
		||||
    vol.Exclusive(CONF_FLASH_LENGTH, 'transformer'):
 | 
			
		||||
 
 | 
			
		||||
@@ -1,24 +1,24 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
from esphomeyaml.components import light, output
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import light
 | 
			
		||||
from esphomeyaml.const import CONF_MAKE_ID, CONF_NAME, CONF_OUTPUT, CONF_EFFECTS
 | 
			
		||||
from esphomeyaml.helpers import App, get_variable, variable
 | 
			
		||||
from esphomeyaml.const import CONF_EFFECTS, CONF_MAKE_ID, CONF_NAME, CONF_OUTPUT
 | 
			
		||||
from esphomeyaml.helpers import App, get_variable, setup_component, variable
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(light.MakeLight),
 | 
			
		||||
    vol.Required(CONF_OUTPUT): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_OUTPUT): cv.use_variable_id(output.BinaryOutput),
 | 
			
		||||
    vol.Optional(CONF_EFFECTS): light.validate_effects(light.BINARY_EFFECTS),
 | 
			
		||||
}))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    output = None
 | 
			
		||||
    for output in get_variable(config[CONF_OUTPUT]):
 | 
			
		||||
    for output_ in get_variable(config[CONF_OUTPUT]):
 | 
			
		||||
        yield
 | 
			
		||||
    rhs = App.make_binary_light(config[CONF_NAME], output)
 | 
			
		||||
    rhs = App.make_binary_light(config[CONF_NAME], output_)
 | 
			
		||||
    light_struct = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    light.setup_light(light_struct.Pstate, light_struct.Pmqtt, config)
 | 
			
		||||
    setup_component(light_struct.Pstate, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_hass_config(data, config):
 | 
			
		||||
 
 | 
			
		||||
@@ -1,25 +1,25 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import light
 | 
			
		||||
from esphomeyaml.components import light, output
 | 
			
		||||
from esphomeyaml.components.light.rgbww import validate_cold_white_colder, \
 | 
			
		||||
    validate_color_temperature
 | 
			
		||||
from esphomeyaml.const import CONF_COLD_WHITE, CONF_COLD_WHITE_COLOR_TEMPERATURE, \
 | 
			
		||||
    CONF_DEFAULT_TRANSITION_LENGTH, CONF_EFFECTS, CONF_GAMMA_CORRECT, CONF_MAKE_ID, \
 | 
			
		||||
    CONF_NAME, CONF_WARM_WHITE, CONF_WARM_WHITE_COLOR_TEMPERATURE
 | 
			
		||||
from esphomeyaml.helpers import App, get_variable, variable
 | 
			
		||||
from esphomeyaml.helpers import App, get_variable, variable, setup_component
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(light.MakeLight),
 | 
			
		||||
    vol.Required(CONF_COLD_WHITE): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_WARM_WHITE): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_COLD_WHITE): cv.use_variable_id(output.FloatOutput),
 | 
			
		||||
    vol.Required(CONF_WARM_WHITE): cv.use_variable_id(output.FloatOutput),
 | 
			
		||||
    vol.Required(CONF_COLD_WHITE_COLOR_TEMPERATURE): validate_color_temperature,
 | 
			
		||||
    vol.Required(CONF_WARM_WHITE_COLOR_TEMPERATURE): validate_color_temperature,
 | 
			
		||||
 | 
			
		||||
    vol.Optional(CONF_GAMMA_CORRECT): cv.positive_float,
 | 
			
		||||
    vol.Optional(CONF_DEFAULT_TRANSITION_LENGTH): cv.positive_time_period_milliseconds,
 | 
			
		||||
    vol.Optional(CONF_EFFECTS): light.validate_effects(light.MONOCHROMATIC_EFFECTS),
 | 
			
		||||
}), validate_cold_white_colder)
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema), validate_cold_white_colder)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -32,6 +32,7 @@ def to_code(config):
 | 
			
		||||
                              cold_white, warm_white)
 | 
			
		||||
    light_struct = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    light.setup_light(light_struct.Pstate, light_struct.Pmqtt, config)
 | 
			
		||||
    setup_component(light_struct.Pstate, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_hass_config(data, config):
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ from esphomeyaml.const import CONF_CHIPSET, CONF_DEFAULT_TRANSITION_LENGTH, CONF
 | 
			
		||||
    CONF_MAKE_ID, CONF_MAX_REFRESH_RATE, CONF_NAME, CONF_NUM_LEDS, CONF_PIN, CONF_POWER_SUPPLY, \
 | 
			
		||||
    CONF_RGB_ORDER, CONF_EFFECTS, CONF_COLOR_CORRECT
 | 
			
		||||
from esphomeyaml.helpers import App, Application, RawExpression, TemplateArguments, add, \
 | 
			
		||||
    get_variable, variable
 | 
			
		||||
    get_variable, variable, setup_component
 | 
			
		||||
 | 
			
		||||
TYPES = [
 | 
			
		||||
    'NEOPIXEL',
 | 
			
		||||
@@ -53,7 +53,7 @@ def validate(value):
 | 
			
		||||
    return value
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
MakeFastLEDLight = Application.MakeFastLEDLight
 | 
			
		||||
MakeFastLEDLight = Application.struct('MakeFastLEDLight')
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeFastLEDLight),
 | 
			
		||||
@@ -70,7 +70,7 @@ PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    vol.Optional(CONF_DEFAULT_TRANSITION_LENGTH): cv.positive_time_period_milliseconds,
 | 
			
		||||
    vol.Optional(CONF_POWER_SUPPLY): cv.use_variable_id(PowerSupplyComponent),
 | 
			
		||||
    vol.Optional(CONF_EFFECTS): light.validate_effects(light.FASTLED_EFFECTS),
 | 
			
		||||
}), validate)
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema), validate)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -89,7 +89,6 @@ def to_code(config):
 | 
			
		||||
        add(fast_led.set_max_refresh_rate(config[CONF_MAX_REFRESH_RATE]))
 | 
			
		||||
 | 
			
		||||
    if CONF_POWER_SUPPLY in config:
 | 
			
		||||
        power_supply = None
 | 
			
		||||
        for power_supply in get_variable(config[CONF_POWER_SUPPLY]):
 | 
			
		||||
            yield
 | 
			
		||||
        add(fast_led.set_power_supply(power_supply))
 | 
			
		||||
@@ -99,6 +98,7 @@ def to_code(config):
 | 
			
		||||
        add(fast_led.set_correction(r, g, b))
 | 
			
		||||
 | 
			
		||||
    light.setup_light(make.Pstate, make.Pmqtt, config)
 | 
			
		||||
    setup_component(fast_led, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_FAST_LED_LIGHT'
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ from esphomeyaml.const import CONF_CHIPSET, CONF_CLOCK_PIN, CONF_DATA_PIN, \
 | 
			
		||||
    CONF_DEFAULT_TRANSITION_LENGTH, CONF_GAMMA_CORRECT, CONF_MAKE_ID, CONF_MAX_REFRESH_RATE, \
 | 
			
		||||
    CONF_NAME, CONF_NUM_LEDS, CONF_POWER_SUPPLY, CONF_RGB_ORDER, CONF_EFFECTS, CONF_COLOR_CORRECT
 | 
			
		||||
from esphomeyaml.helpers import App, Application, RawExpression, TemplateArguments, add, \
 | 
			
		||||
    get_variable, variable
 | 
			
		||||
    get_variable, variable, setup_component
 | 
			
		||||
 | 
			
		||||
CHIPSETS = [
 | 
			
		||||
    'LPD8806',
 | 
			
		||||
@@ -30,7 +30,7 @@ RGB_ORDERS = [
 | 
			
		||||
    'BGR',
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
MakeFastLEDLight = Application.MakeFastLEDLight
 | 
			
		||||
MakeFastLEDLight = Application.struct('MakeFastLEDLight')
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeFastLEDLight),
 | 
			
		||||
@@ -48,7 +48,7 @@ PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    vol.Optional(CONF_DEFAULT_TRANSITION_LENGTH): cv.positive_time_period_milliseconds,
 | 
			
		||||
    vol.Optional(CONF_POWER_SUPPLY): cv.use_variable_id(PowerSupplyComponent),
 | 
			
		||||
    vol.Optional(CONF_EFFECTS): light.validate_effects(light.FASTLED_EFFECTS),
 | 
			
		||||
}))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -69,7 +69,6 @@ def to_code(config):
 | 
			
		||||
        add(fast_led.set_max_refresh_rate(config[CONF_MAX_REFRESH_RATE]))
 | 
			
		||||
 | 
			
		||||
    if CONF_POWER_SUPPLY in config:
 | 
			
		||||
        power_supply = None
 | 
			
		||||
        for power_supply in get_variable(config[CONF_POWER_SUPPLY]):
 | 
			
		||||
            yield
 | 
			
		||||
        add(fast_led.set_power_supply(power_supply))
 | 
			
		||||
@@ -79,6 +78,7 @@ def to_code(config):
 | 
			
		||||
        add(fast_led.set_correction(r, g, b))
 | 
			
		||||
 | 
			
		||||
    light.setup_light(make.Pstate, make.Pmqtt, config)
 | 
			
		||||
    setup_component(fast_led, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_FAST_LED_LIGHT'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,27 +1,27 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
from esphomeyaml.components import light, output
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import light
 | 
			
		||||
from esphomeyaml.const import CONF_DEFAULT_TRANSITION_LENGTH, CONF_GAMMA_CORRECT, CONF_MAKE_ID, \
 | 
			
		||||
    CONF_NAME, CONF_OUTPUT, CONF_EFFECTS
 | 
			
		||||
from esphomeyaml.helpers import App, get_variable, variable
 | 
			
		||||
from esphomeyaml.const import CONF_DEFAULT_TRANSITION_LENGTH, CONF_EFFECTS, CONF_GAMMA_CORRECT, \
 | 
			
		||||
    CONF_MAKE_ID, CONF_NAME, CONF_OUTPUT
 | 
			
		||||
from esphomeyaml.helpers import App, get_variable, setup_component, variable
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(light.MakeLight),
 | 
			
		||||
    vol.Required(CONF_OUTPUT): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_OUTPUT): cv.use_variable_id(output.FloatOutput),
 | 
			
		||||
    vol.Optional(CONF_GAMMA_CORRECT): cv.positive_float,
 | 
			
		||||
    vol.Optional(CONF_DEFAULT_TRANSITION_LENGTH): cv.positive_time_period_milliseconds,
 | 
			
		||||
    vol.Optional(CONF_EFFECTS): light.validate_effects(light.MONOCHROMATIC_EFFECTS),
 | 
			
		||||
}))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    output = None
 | 
			
		||||
    for output in get_variable(config[CONF_OUTPUT]):
 | 
			
		||||
    for output_ in get_variable(config[CONF_OUTPUT]):
 | 
			
		||||
        yield
 | 
			
		||||
    rhs = App.make_monochromatic_light(config[CONF_NAME], output)
 | 
			
		||||
    rhs = App.make_monochromatic_light(config[CONF_NAME], output_)
 | 
			
		||||
    light_struct = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    light.setup_light(light_struct.Pstate, light_struct.Pmqtt, config)
 | 
			
		||||
    setup_component(light_struct.Pstate, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_hass_config(data, config):
 | 
			
		||||
 
 | 
			
		||||
@@ -1,35 +1,33 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import light
 | 
			
		||||
from esphomeyaml.components import light, output
 | 
			
		||||
from esphomeyaml.const import CONF_BLUE, CONF_DEFAULT_TRANSITION_LENGTH, CONF_GAMMA_CORRECT, \
 | 
			
		||||
    CONF_GREEN, CONF_MAKE_ID, CONF_NAME, CONF_RED, CONF_EFFECTS
 | 
			
		||||
from esphomeyaml.helpers import App, get_variable, variable
 | 
			
		||||
from esphomeyaml.helpers import App, get_variable, variable, setup_component
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(light.MakeLight),
 | 
			
		||||
    vol.Required(CONF_RED): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_GREEN): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_BLUE): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_RED): cv.use_variable_id(output.FloatOutput),
 | 
			
		||||
    vol.Required(CONF_GREEN): cv.use_variable_id(output.FloatOutput),
 | 
			
		||||
    vol.Required(CONF_BLUE): cv.use_variable_id(output.FloatOutput),
 | 
			
		||||
    vol.Optional(CONF_GAMMA_CORRECT): cv.positive_float,
 | 
			
		||||
    vol.Optional(CONF_DEFAULT_TRANSITION_LENGTH): cv.positive_time_period_milliseconds,
 | 
			
		||||
    vol.Optional(CONF_EFFECTS): light.validate_effects(light.RGB_EFFECTS),
 | 
			
		||||
}))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    red = None
 | 
			
		||||
    for red in get_variable(config[CONF_RED]):
 | 
			
		||||
        yield
 | 
			
		||||
    green = None
 | 
			
		||||
    for green in get_variable(config[CONF_GREEN]):
 | 
			
		||||
        yield
 | 
			
		||||
    blue = None
 | 
			
		||||
    for blue in get_variable(config[CONF_BLUE]):
 | 
			
		||||
        yield
 | 
			
		||||
    rhs = App.make_rgb_light(config[CONF_NAME], red, green, blue)
 | 
			
		||||
    light_struct = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    light.setup_light(light_struct.Pstate, light_struct.Pmqtt, config)
 | 
			
		||||
    setup_component(light_struct.Pstate, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_hass_config(data, config):
 | 
			
		||||
 
 | 
			
		||||
@@ -1,39 +1,36 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import light
 | 
			
		||||
from esphomeyaml.components import light, output
 | 
			
		||||
from esphomeyaml.const import CONF_BLUE, CONF_DEFAULT_TRANSITION_LENGTH, CONF_GAMMA_CORRECT, \
 | 
			
		||||
    CONF_GREEN, CONF_MAKE_ID, CONF_NAME, CONF_RED, CONF_WHITE, CONF_EFFECTS
 | 
			
		||||
from esphomeyaml.helpers import App, get_variable, variable
 | 
			
		||||
from esphomeyaml.helpers import App, get_variable, variable, setup_component
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(light.MakeLight),
 | 
			
		||||
    vol.Required(CONF_RED): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_GREEN): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_BLUE): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_WHITE): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_RED): cv.use_variable_id(output.FloatOutput),
 | 
			
		||||
    vol.Required(CONF_GREEN): cv.use_variable_id(output.FloatOutput),
 | 
			
		||||
    vol.Required(CONF_BLUE): cv.use_variable_id(output.FloatOutput),
 | 
			
		||||
    vol.Required(CONF_WHITE): cv.use_variable_id(output.FloatOutput),
 | 
			
		||||
    vol.Optional(CONF_GAMMA_CORRECT): cv.positive_float,
 | 
			
		||||
    vol.Optional(CONF_DEFAULT_TRANSITION_LENGTH): cv.positive_time_period_milliseconds,
 | 
			
		||||
    vol.Optional(CONF_EFFECTS): light.validate_effects(light.RGB_EFFECTS),
 | 
			
		||||
}))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    red = None
 | 
			
		||||
    for red in get_variable(config[CONF_RED]):
 | 
			
		||||
        yield
 | 
			
		||||
    green = None
 | 
			
		||||
    for green in get_variable(config[CONF_GREEN]):
 | 
			
		||||
        yield
 | 
			
		||||
    blue = None
 | 
			
		||||
    for blue in get_variable(config[CONF_BLUE]):
 | 
			
		||||
        yield
 | 
			
		||||
    white = None
 | 
			
		||||
    for white in get_variable(config[CONF_WHITE]):
 | 
			
		||||
        yield
 | 
			
		||||
    rhs = App.make_rgbw_light(config[CONF_NAME], red, green, blue, white)
 | 
			
		||||
    light_struct = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    light.setup_light(light_struct.Pstate, light_struct.Pmqtt, config)
 | 
			
		||||
    setup_component(light_struct.Pstate, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_hass_config(data, config):
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import light
 | 
			
		||||
from esphomeyaml.components import light, output
 | 
			
		||||
from esphomeyaml.const import CONF_BLUE, CONF_COLD_WHITE, CONF_COLD_WHITE_COLOR_TEMPERATURE, \
 | 
			
		||||
    CONF_DEFAULT_TRANSITION_LENGTH, CONF_EFFECTS, CONF_GAMMA_CORRECT, CONF_GREEN, CONF_MAKE_ID, \
 | 
			
		||||
    CONF_NAME, CONF_RED, CONF_WARM_WHITE, CONF_WARM_WHITE_COLOR_TEMPERATURE
 | 
			
		||||
from esphomeyaml.helpers import App, get_variable, variable
 | 
			
		||||
from esphomeyaml.helpers import App, get_variable, variable, setup_component
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def validate_color_temperature(value):
 | 
			
		||||
@@ -30,18 +30,18 @@ def validate_cold_white_colder(value):
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(light.MakeLight),
 | 
			
		||||
    vol.Required(CONF_RED): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_GREEN): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_BLUE): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_COLD_WHITE): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_WARM_WHITE): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_RED): cv.use_variable_id(output.FloatOutput),
 | 
			
		||||
    vol.Required(CONF_GREEN): cv.use_variable_id(output.FloatOutput),
 | 
			
		||||
    vol.Required(CONF_BLUE): cv.use_variable_id(output.FloatOutput),
 | 
			
		||||
    vol.Required(CONF_COLD_WHITE): cv.use_variable_id(output.FloatOutput),
 | 
			
		||||
    vol.Required(CONF_WARM_WHITE): cv.use_variable_id(output.FloatOutput),
 | 
			
		||||
    vol.Required(CONF_COLD_WHITE_COLOR_TEMPERATURE): validate_color_temperature,
 | 
			
		||||
    vol.Required(CONF_WARM_WHITE_COLOR_TEMPERATURE): validate_color_temperature,
 | 
			
		||||
 | 
			
		||||
    vol.Optional(CONF_GAMMA_CORRECT): cv.positive_float,
 | 
			
		||||
    vol.Optional(CONF_DEFAULT_TRANSITION_LENGTH): cv.positive_time_period_milliseconds,
 | 
			
		||||
    vol.Optional(CONF_EFFECTS): light.validate_effects(light.RGB_EFFECTS),
 | 
			
		||||
}), validate_cold_white_colder)
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema), validate_cold_white_colder)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -60,6 +60,7 @@ def to_code(config):
 | 
			
		||||
                               red, green, blue, cold_white, warm_white)
 | 
			
		||||
    light_struct = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    light.setup_light(light_struct.Pstate, light_struct.Pmqtt, config)
 | 
			
		||||
    setup_component(light_struct.Pstate, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_hass_config(data, config):
 | 
			
		||||
 
 | 
			
		||||
@@ -7,8 +7,8 @@ import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.const import CONF_ARGS, CONF_BAUD_RATE, CONF_FORMAT, CONF_ID, CONF_LEVEL, \
 | 
			
		||||
    CONF_LOGS, CONF_TAG, CONF_TX_BUFFER_SIZE
 | 
			
		||||
from esphomeyaml.core import ESPHomeYAMLError, Lambda
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, TemplateArguments, add, esphomelib_ns, global_ns, \
 | 
			
		||||
    process_lambda, RawExpression, statement
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, RawExpression, TemplateArguments, add, \
 | 
			
		||||
    esphomelib_ns, global_ns, process_lambda, statement, Component
 | 
			
		||||
 | 
			
		||||
LOG_LEVELS = {
 | 
			
		||||
    'NONE': global_ns.ESPHOMELIB_LOG_LEVEL_NONE,
 | 
			
		||||
@@ -44,7 +44,7 @@ def validate_local_no_higher_than_global(value):
 | 
			
		||||
    return value
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
LogComponent = esphomelib_ns.LogComponent
 | 
			
		||||
LogComponent = esphomelib_ns.class_('LogComponent', Component)
 | 
			
		||||
 | 
			
		||||
CONFIG_SCHEMA = vol.All(vol.Schema({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(LogComponent),
 | 
			
		||||
@@ -79,6 +79,7 @@ def maybe_simple_message(schema):
 | 
			
		||||
        if isinstance(value, dict):
 | 
			
		||||
            return vol.Schema(schema)(value)
 | 
			
		||||
        return vol.Schema(schema)({CONF_FORMAT: value})
 | 
			
		||||
 | 
			
		||||
    return validator
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,7 @@ from esphomeyaml.const import CONF_BIRTH_MESSAGE, CONF_BROKER, CONF_CLIENT_ID, C
 | 
			
		||||
from esphomeyaml.core import ESPHomeYAMLError
 | 
			
		||||
from esphomeyaml.helpers import App, ArrayInitializer, Pvariable, RawExpression, \
 | 
			
		||||
    StructInitializer, TemplateArguments, add, esphomelib_ns, optional, std_string, templatable, \
 | 
			
		||||
    uint8, bool_, JsonObjectRef, process_lambda, JsonObjectConstRef
 | 
			
		||||
    uint8, bool_, JsonObjectRef, process_lambda, JsonObjectConstRef, Component, Action, Trigger
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def validate_message_just_topic(value):
 | 
			
		||||
@@ -38,12 +38,14 @@ MQTT_MESSAGE_SCHEMA = vol.Any(None, MQTT_MESSAGE_BASE.extend({
 | 
			
		||||
}))
 | 
			
		||||
 | 
			
		||||
mqtt_ns = esphomelib_ns.namespace('mqtt')
 | 
			
		||||
MQTTMessage = mqtt_ns.MQTTMessage
 | 
			
		||||
MQTTClientComponent = mqtt_ns.MQTTClientComponent
 | 
			
		||||
MQTTPublishAction = mqtt_ns.MQTTPublishAction
 | 
			
		||||
MQTTPublishJsonAction = mqtt_ns.MQTTPublishJsonAction
 | 
			
		||||
MQTTMessageTrigger = mqtt_ns.MQTTMessageTrigger
 | 
			
		||||
MQTTJsonMessageTrigger = mqtt_ns.MQTTJsonMessageTrigger
 | 
			
		||||
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_broker(value):
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										52
									
								
								esphomeyaml/components/my9231.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								esphomeyaml/components/my9231.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,52 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml import pins
 | 
			
		||||
from esphomeyaml.components import output
 | 
			
		||||
from esphomeyaml.const import (CONF_DATA_PIN, CONF_CLOCK_PIN, CONF_NUM_CHANNELS,
 | 
			
		||||
                               CONF_NUM_CHIPS, CONF_BIT_DEPTH, CONF_ID,
 | 
			
		||||
                               CONF_UPDATE_ON_BOOT)
 | 
			
		||||
from esphomeyaml.helpers import (gpio_output_pin_expression, App, Pvariable,
 | 
			
		||||
                                 add, setup_component, Component)
 | 
			
		||||
 | 
			
		||||
MY9231OutputComponent = output.output_ns.class_('MY9231OutputComponent', Component)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
MY9231_SCHEMA = vol.Schema({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(MY9231OutputComponent),
 | 
			
		||||
    vol.Required(CONF_DATA_PIN): pins.gpio_output_pin_schema,
 | 
			
		||||
    vol.Required(CONF_CLOCK_PIN): pins.gpio_output_pin_schema,
 | 
			
		||||
    vol.Optional(CONF_NUM_CHANNELS): vol.All(vol.Coerce(int),
 | 
			
		||||
                                             vol.Range(3, 1020)),
 | 
			
		||||
    vol.Optional(CONF_NUM_CHIPS): vol.All(vol.Coerce(int),
 | 
			
		||||
                                          vol.Range(1, 255)),
 | 
			
		||||
    vol.Optional(CONF_BIT_DEPTH): vol.All(vol.Coerce(int),
 | 
			
		||||
                                          cv.one_of(8, 12, 14, 16)),
 | 
			
		||||
    vol.Optional(CONF_UPDATE_ON_BOOT): vol.Coerce(bool),
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
CONFIG_SCHEMA = vol.All(cv.ensure_list, [MY9231_SCHEMA])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    for conf in config:
 | 
			
		||||
        di = None
 | 
			
		||||
        for di in gpio_output_pin_expression(conf[CONF_DATA_PIN]):
 | 
			
		||||
            yield
 | 
			
		||||
        dcki = None
 | 
			
		||||
        for dcki in gpio_output_pin_expression(conf[CONF_CLOCK_PIN]):
 | 
			
		||||
            yield
 | 
			
		||||
        rhs = App.make_my9231_component(di, dcki)
 | 
			
		||||
        my9231 = Pvariable(conf[CONF_ID], rhs)
 | 
			
		||||
        if CONF_NUM_CHANNELS in conf:
 | 
			
		||||
            add(my9231.set_num_channels(conf[CONF_NUM_CHANNELS]))
 | 
			
		||||
        if CONF_NUM_CHIPS in conf:
 | 
			
		||||
            add(my9231.set_num_chips(conf[CONF_NUM_CHIPS]))
 | 
			
		||||
        if CONF_BIT_DEPTH in conf:
 | 
			
		||||
            add(my9231.set_bit_depth(conf[CONF_BIT_DEPTH]))
 | 
			
		||||
        if CONF_UPDATE_ON_BOOT in conf:
 | 
			
		||||
            add(my9231.set_update(conf[CONF_UPDATE_ON_BOOT]))
 | 
			
		||||
        setup_component(my9231, conf)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_MY9231_OUTPUT'
 | 
			
		||||
@@ -7,16 +7,15 @@ import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.const import CONF_ID, CONF_OTA, CONF_PASSWORD, CONF_PORT, CONF_SAFE_MODE, \
 | 
			
		||||
    ESP_PLATFORM_ESP32, ESP_PLATFORM_ESP8266
 | 
			
		||||
from esphomeyaml.core import ESPHomeYAMLError
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, esphomelib_ns
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, esphomelib_ns, Component
 | 
			
		||||
 | 
			
		||||
_LOGGER = logging.getLogger(__name__)
 | 
			
		||||
 | 
			
		||||
OTAComponent = esphomelib_ns.OTAComponent
 | 
			
		||||
OTAComponent = esphomelib_ns.class_('OTAComponent', Component)
 | 
			
		||||
 | 
			
		||||
CONFIG_SCHEMA = vol.Schema({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(OTAComponent),
 | 
			
		||||
    vol.Optional(CONF_SAFE_MODE, default=True): cv.boolean,
 | 
			
		||||
    # TODO Num attempts + wait time
 | 
			
		||||
    vol.Optional(CONF_PORT): cv.port,
 | 
			
		||||
    vol.Optional(CONF_PASSWORD): cv.string,
 | 
			
		||||
})
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components.power_supply import PowerSupplyComponent
 | 
			
		||||
from esphomeyaml.const import CONF_INVERTED, CONF_MAX_POWER, CONF_POWER_SUPPLY, CONF_ID, CONF_LEVEL
 | 
			
		||||
from esphomeyaml.helpers import add, esphomelib_ns, get_variable, TemplateArguments, Pvariable, \
 | 
			
		||||
    templatable, float_, add_job
 | 
			
		||||
    templatable, float_, add_job, Action
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({
 | 
			
		||||
 | 
			
		||||
@@ -25,9 +25,13 @@ FLOAT_OUTPUT_SCHEMA = BINARY_OUTPUT_SCHEMA.extend({
 | 
			
		||||
FLOAT_OUTPUT_PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(FLOAT_OUTPUT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
output_ns = esphomelib_ns.namespace('output')
 | 
			
		||||
TurnOffAction = output_ns.TurnOffAction
 | 
			
		||||
TurnOnAction = output_ns.TurnOnAction
 | 
			
		||||
SetLevelAction = output_ns.SetLevelAction
 | 
			
		||||
BinaryOutput = output_ns.class_('BinaryOutput')
 | 
			
		||||
FloatOutput = output_ns.class_('FloatOutput', BinaryOutput)
 | 
			
		||||
 | 
			
		||||
# Actions
 | 
			
		||||
TurnOffAction = output_ns.class_('TurnOffAction', Action)
 | 
			
		||||
TurnOnAction = output_ns.class_('TurnOnAction', Action)
 | 
			
		||||
SetLevelAction = output_ns.class_('SetLevelAction', Action)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def setup_output_platform_(obj, config, skip_power_supply=False):
 | 
			
		||||
@@ -51,7 +55,7 @@ BUILD_FLAGS = '-DUSE_OUTPUT'
 | 
			
		||||
 | 
			
		||||
CONF_OUTPUT_TURN_ON = 'output.turn_on'
 | 
			
		||||
OUTPUT_TURN_ON_ACTION = maybe_simple_id({
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(BinaryOutput),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -67,7 +71,7 @@ def output_turn_on_to_code(config, action_id, arg_type):
 | 
			
		||||
 | 
			
		||||
CONF_OUTPUT_TURN_OFF = 'output.turn_off'
 | 
			
		||||
OUTPUT_TURN_OFF_ACTION = maybe_simple_id({
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(None)
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(BinaryOutput)
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -83,7 +87,7 @@ def output_turn_off_to_code(config, action_id, arg_type):
 | 
			
		||||
 | 
			
		||||
CONF_OUTPUT_SET_LEVEL = 'output.set_level'
 | 
			
		||||
OUTPUT_SET_LEVEL_ACTION = vol.Schema({
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(None),
 | 
			
		||||
    vol.Required(CONF_ID): cv.use_variable_id(FloatOutput),
 | 
			
		||||
    vol.Required(CONF_LEVEL): cv.templatable(cv.percentage),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,36 +1,41 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
from esphomeyaml import pins
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import output
 | 
			
		||||
from esphomeyaml.const import CONF_ID, CONF_NUMBER, CONF_PIN, ESP_PLATFORM_ESP8266
 | 
			
		||||
from esphomeyaml.core import ESPHomeYAMLError
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, gpio_output_pin_expression
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.const import CONF_ID, CONF_NUMBER, CONF_PIN, ESP_PLATFORM_ESP8266, CONF_FREQUENCY
 | 
			
		||||
from esphomeyaml.helpers import App, Component, Pvariable, gpio_output_pin_expression, \
 | 
			
		||||
    setup_component, add
 | 
			
		||||
 | 
			
		||||
ESP_PLATFORMS = [ESP_PLATFORM_ESP8266]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def valid_pwm_pin(value):
 | 
			
		||||
    if value[CONF_NUMBER] > 16:
 | 
			
		||||
        raise ESPHomeYAMLError(u"ESP8266: Only pins 0-16 support PWM.")
 | 
			
		||||
    num = value[CONF_NUMBER]
 | 
			
		||||
    cv.one_of(0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16)(num)
 | 
			
		||||
    return value
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ESP8266PWMOutput = output.output_ns.ESP8266PWMOutput
 | 
			
		||||
ESP8266PWMOutput = output.output_ns.class_('ESP8266PWMOutput', output.FloatOutput, Component)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = output.FLOAT_OUTPUT_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    vol.Required(CONF_ID): cv.declare_variable_id(ESP8266PWMOutput),
 | 
			
		||||
    vol.Required(CONF_PIN): vol.All(pins.internal_gpio_output_pin_schema, valid_pwm_pin),
 | 
			
		||||
})
 | 
			
		||||
    vol.Optional(CONF_FREQUENCY): vol.All(cv.frequency, vol.Range(min=1.0e-6)),
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    pin = None
 | 
			
		||||
    for pin in gpio_output_pin_expression(config[CONF_PIN]):
 | 
			
		||||
        yield
 | 
			
		||||
    rhs = App.make_esp8266_pwm_output(pin)
 | 
			
		||||
    gpio = Pvariable(config[CONF_ID], rhs)
 | 
			
		||||
 | 
			
		||||
    if CONF_FREQUENCY in config:
 | 
			
		||||
        add(gpio.set_frequency(config[CONF_FREQUENCY]))
 | 
			
		||||
 | 
			
		||||
    output.setup_output_platform(gpio, config)
 | 
			
		||||
    setup_component(gpio, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_ESP8266_PWM_OUTPUT'
 | 
			
		||||
 
 | 
			
		||||
@@ -4,23 +4,25 @@ from esphomeyaml import pins
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import output
 | 
			
		||||
from esphomeyaml.const import CONF_ID, CONF_PIN
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, gpio_output_pin_expression
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, gpio_output_pin_expression, setup_component, \
 | 
			
		||||
    Component
 | 
			
		||||
 | 
			
		||||
GPIOBinaryOutputComponent = output.output_ns.GPIOBinaryOutputComponent
 | 
			
		||||
GPIOBinaryOutputComponent = output.output_ns.class_('GPIOBinaryOutputComponent',
 | 
			
		||||
                                                    output.BinaryOutput, Component)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = output.BINARY_OUTPUT_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    vol.Required(CONF_ID): cv.declare_variable_id(GPIOBinaryOutputComponent),
 | 
			
		||||
    vol.Required(CONF_PIN): pins.gpio_output_pin_schema,
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    pin = None
 | 
			
		||||
    for pin in gpio_output_pin_expression(config[CONF_PIN]):
 | 
			
		||||
        yield
 | 
			
		||||
    rhs = App.make_gpio_output(pin)
 | 
			
		||||
    gpio = Pvariable(config[CONF_ID], rhs)
 | 
			
		||||
    output.setup_output_platform(gpio, config)
 | 
			
		||||
    setup_component(gpio, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_GPIO_OUTPUT'
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ from esphomeyaml import pins
 | 
			
		||||
from esphomeyaml.components import output
 | 
			
		||||
from esphomeyaml.const import APB_CLOCK_FREQ, CONF_BIT_DEPTH, CONF_CHANNEL, CONF_FREQUENCY, \
 | 
			
		||||
    CONF_ID, CONF_PIN, ESP_PLATFORM_ESP32
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, setup_component, Component
 | 
			
		||||
 | 
			
		||||
ESP_PLATFORMS = [ESP_PLATFORM_ESP32]
 | 
			
		||||
 | 
			
		||||
@@ -19,7 +19,7 @@ def validate_frequency_bit_depth(obj):
 | 
			
		||||
    return obj
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
LEDCOutputComponent = output.output_ns.LEDCOutputComponent
 | 
			
		||||
LEDCOutputComponent = output.output_ns.class_('LEDCOutputComponent', output.FloatOutput, Component)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = vol.All(output.FLOAT_OUTPUT_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    vol.Required(CONF_ID): cv.declare_variable_id(LEDCOutputComponent),
 | 
			
		||||
@@ -27,7 +27,7 @@ PLATFORM_SCHEMA = vol.All(output.FLOAT_OUTPUT_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    vol.Optional(CONF_FREQUENCY): cv.frequency,
 | 
			
		||||
    vol.Optional(CONF_BIT_DEPTH): vol.All(vol.Coerce(int), vol.Range(min=1, max=15)),
 | 
			
		||||
    vol.Optional(CONF_CHANNEL): vol.All(vol.Coerce(int), vol.Range(min=0, max=15))
 | 
			
		||||
}), validate_frequency_bit_depth)
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema), validate_frequency_bit_depth)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -39,6 +39,7 @@ def to_code(config):
 | 
			
		||||
    if CONF_CHANNEL in config:
 | 
			
		||||
        add(ledc.set_channel(config[CONF_CHANNEL]))
 | 
			
		||||
    output.setup_output_platform(ledc, config)
 | 
			
		||||
    setup_component(ledc, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_LEDC_OUTPUT'
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										35
									
								
								esphomeyaml/components/output/my9231.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								esphomeyaml/components/output/my9231.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import output
 | 
			
		||||
from esphomeyaml.components.my9231 import MY9231OutputComponent
 | 
			
		||||
from esphomeyaml.const import CONF_CHANNEL, CONF_ID, CONF_MY9231_ID, CONF_POWER_SUPPLY
 | 
			
		||||
from esphomeyaml.helpers import Pvariable, get_variable, setup_component
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['my9231']
 | 
			
		||||
 | 
			
		||||
Channel = MY9231OutputComponent.class_('Channel', output.FloatOutput)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = output.FLOAT_OUTPUT_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    vol.Required(CONF_ID): cv.declare_variable_id(Channel),
 | 
			
		||||
    vol.Required(CONF_CHANNEL): vol.All(vol.Coerce(int),
 | 
			
		||||
                                        vol.Range(min=0, max=65535)),
 | 
			
		||||
    cv.GenerateID(CONF_MY9231_ID): cv.use_variable_id(MY9231OutputComponent),
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    power_supply = None
 | 
			
		||||
    if CONF_POWER_SUPPLY in config:
 | 
			
		||||
        for power_supply in get_variable(config[CONF_POWER_SUPPLY]):
 | 
			
		||||
            yield
 | 
			
		||||
    my9231 = None
 | 
			
		||||
    for my9231 in get_variable(config[CONF_MY9231_ID]):
 | 
			
		||||
        yield
 | 
			
		||||
    rhs = my9231.create_channel(config[CONF_CHANNEL], power_supply)
 | 
			
		||||
    out = Pvariable(config[CONF_ID], rhs)
 | 
			
		||||
    output.setup_output_platform(out, config, skip_power_supply=True)
 | 
			
		||||
    setup_component(out, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_MY9231_OUTPUT'
 | 
			
		||||
@@ -8,7 +8,7 @@ from esphomeyaml.helpers import Pvariable, get_variable
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['pca9685']
 | 
			
		||||
 | 
			
		||||
Channel = PCA9685OutputComponent.Channel
 | 
			
		||||
Channel = PCA9685OutputComponent.class_('Channel', output.FloatOutput)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = output.FLOAT_OUTPUT_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    vol.Required(CONF_ID): cv.declare_variable_id(Channel),
 | 
			
		||||
@@ -23,7 +23,6 @@ def to_code(config):
 | 
			
		||||
    if CONF_POWER_SUPPLY in config:
 | 
			
		||||
        for power_supply in get_variable(config[CONF_POWER_SUPPLY]):
 | 
			
		||||
            yield
 | 
			
		||||
    pca9685 = None
 | 
			
		||||
    for pca9685 in get_variable(config[CONF_PCA9685_ID]):
 | 
			
		||||
        yield
 | 
			
		||||
    rhs = pca9685.create_channel(config[CONF_CHANNEL], power_supply)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,14 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import output
 | 
			
		||||
from esphomeyaml.components import output, i2c
 | 
			
		||||
from esphomeyaml.const import CONF_ADDRESS, CONF_FREQUENCY, CONF_ID, CONF_PHASE_BALANCER
 | 
			
		||||
from esphomeyaml.helpers import App, HexIntLiteral, Pvariable, add
 | 
			
		||||
from esphomeyaml.helpers import App, HexIntLiteral, Pvariable, add, setup_component, Component
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['i2c']
 | 
			
		||||
 | 
			
		||||
PCA9685OutputComponent = output.output_ns.namespace('PCA9685OutputComponent')
 | 
			
		||||
PCA9685OutputComponent = output.output_ns.class_('PCA9685OutputComponent',
 | 
			
		||||
                                                 Component, i2c.I2CDevice)
 | 
			
		||||
 | 
			
		||||
PHASE_BALANCER_MESSAGE = ("The phase_balancer option has been removed in version 1.5.0. "
 | 
			
		||||
                          "esphomelib will now automatically choose a suitable phase balancer.")
 | 
			
		||||
@@ -19,7 +20,7 @@ PCA9685_SCHEMA = vol.Schema({
 | 
			
		||||
    vol.Optional(CONF_ADDRESS): cv.i2c_address,
 | 
			
		||||
 | 
			
		||||
    vol.Optional(CONF_PHASE_BALANCER): cv.invalid(PHASE_BALANCER_MESSAGE),
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
CONFIG_SCHEMA = vol.All(cv.ensure_list, [PCA9685_SCHEMA])
 | 
			
		||||
 | 
			
		||||
@@ -30,6 +31,7 @@ def to_code(config):
 | 
			
		||||
        pca9685 = Pvariable(conf[CONF_ID], rhs)
 | 
			
		||||
        if CONF_ADDRESS in conf:
 | 
			
		||||
            add(pca9685.set_address(HexIntLiteral(conf[CONF_ADDRESS])))
 | 
			
		||||
        setup_component(pca9685, conf)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_PCA9685_OUTPUT'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,19 +1,27 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
from esphomeyaml import pins
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.const import CONF_ADDRESS, CONF_ID, CONF_PCF8575
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, esphomelib_ns
 | 
			
		||||
from esphomeyaml.helpers import App, GPIOInputPin, GPIOOutputPin, Pvariable, io_ns, setup_component
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['i2c']
 | 
			
		||||
 | 
			
		||||
io_ns = esphomelib_ns.namespace('io')
 | 
			
		||||
PCF8574Component = io_ns.PCF8574Component
 | 
			
		||||
PCF8574GPIOMode = io_ns.enum('PCF8574GPIOMode')
 | 
			
		||||
PCF8675_GPIO_MODES = {
 | 
			
		||||
    'INPUT': PCF8574GPIOMode.PCF8574_INPUT,
 | 
			
		||||
    'INPUT_PULLUP': PCF8574GPIOMode.PCF8574_INPUT_PULLUP,
 | 
			
		||||
    'OUTPUT': PCF8574GPIOMode.PCF8574_OUTPUT,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PCF8574GPIOInputPin = io_ns.class_('PCF8574GPIOInputPin', GPIOInputPin)
 | 
			
		||||
PCF8574GPIOOutputPin = io_ns.class_('PCF8574GPIOOutputPin', GPIOOutputPin)
 | 
			
		||||
 | 
			
		||||
PCF8574_SCHEMA = vol.Schema({
 | 
			
		||||
    vol.Required(CONF_ID): cv.declare_variable_id(PCF8574Component),
 | 
			
		||||
    vol.Required(CONF_ID): cv.declare_variable_id(pins.PCF8574Component),
 | 
			
		||||
    vol.Optional(CONF_ADDRESS, default=0x21): cv.i2c_address,
 | 
			
		||||
    vol.Optional(CONF_PCF8575, default=False): cv.boolean,
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
CONFIG_SCHEMA = vol.All(cv.ensure_list, [PCF8574_SCHEMA])
 | 
			
		||||
 | 
			
		||||
@@ -21,7 +29,8 @@ CONFIG_SCHEMA = vol.All(cv.ensure_list, [PCF8574_SCHEMA])
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    for conf in config:
 | 
			
		||||
        rhs = App.make_pcf8574_component(conf[CONF_ADDRESS], conf[CONF_PCF8575])
 | 
			
		||||
        Pvariable(conf[CONF_ID], rhs)
 | 
			
		||||
        var = Pvariable(conf[CONF_ID], rhs)
 | 
			
		||||
        setup_component(var, conf)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_PCF8574'
 | 
			
		||||
 
 | 
			
		||||
@@ -2,16 +2,18 @@ import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml import pins, automation
 | 
			
		||||
from esphomeyaml.components import binary_sensor
 | 
			
		||||
from esphomeyaml.components import binary_sensor, spi
 | 
			
		||||
from esphomeyaml.components.spi import SPIComponent
 | 
			
		||||
from esphomeyaml.const import CONF_CS_PIN, CONF_ID, CONF_SPI_ID, CONF_UPDATE_INTERVAL, \
 | 
			
		||||
    CONF_ON_TAG, CONF_TRIGGER_ID
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, get_variable, gpio_output_pin_expression, std_string
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, get_variable, gpio_output_pin_expression, \
 | 
			
		||||
    std_string, setup_component, PollingComponent, Trigger
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['spi']
 | 
			
		||||
 | 
			
		||||
PN532Component = binary_sensor.binary_sensor_ns.PN532Component
 | 
			
		||||
PN532Trigger = binary_sensor.binary_sensor_ns.PN532Trigger
 | 
			
		||||
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.All(cv.ensure_list, [vol.Schema({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(PN532Component),
 | 
			
		||||
@@ -21,23 +23,23 @@ CONFIG_SCHEMA = vol.All(cv.ensure_list, [vol.Schema({
 | 
			
		||||
    vol.Optional(CONF_ON_TAG): automation.validate_automation({
 | 
			
		||||
        cv.GenerateID(CONF_TRIGGER_ID): cv.declare_variable_id(PN532Trigger),
 | 
			
		||||
    }),
 | 
			
		||||
})])
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    for conf in config:
 | 
			
		||||
        spi = None
 | 
			
		||||
        for spi in get_variable(conf[CONF_SPI_ID]):
 | 
			
		||||
        for spi_ in get_variable(conf[CONF_SPI_ID]):
 | 
			
		||||
            yield
 | 
			
		||||
        cs = None
 | 
			
		||||
        for cs in gpio_output_pin_expression(conf[CONF_CS_PIN]):
 | 
			
		||||
            yield
 | 
			
		||||
        rhs = App.make_pn532_component(spi, cs, conf.get(CONF_UPDATE_INTERVAL))
 | 
			
		||||
        rhs = App.make_pn532_component(spi_, cs, conf.get(CONF_UPDATE_INTERVAL))
 | 
			
		||||
        pn532 = Pvariable(conf[CONF_ID], rhs)
 | 
			
		||||
 | 
			
		||||
        for conf_ in conf.get(CONF_ON_TAG, []):
 | 
			
		||||
            trigger = Pvariable(conf_[CONF_TRIGGER_ID], pn532.make_trigger())
 | 
			
		||||
            automation.build_automation(trigger, std_string, conf_)
 | 
			
		||||
 | 
			
		||||
        setup_component(pn532, conf)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_PN532'
 | 
			
		||||
 
 | 
			
		||||
@@ -3,25 +3,26 @@ import voluptuous as vol
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml import pins
 | 
			
		||||
from esphomeyaml.const import CONF_ENABLE_TIME, CONF_ID, CONF_KEEP_ON_TIME, CONF_PIN
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, esphomelib_ns, gpio_output_pin_expression
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, esphomelib_ns, gpio_output_pin_expression, \
 | 
			
		||||
    setup_component, Component
 | 
			
		||||
 | 
			
		||||
PowerSupplyComponent = esphomelib_ns.PowerSupplyComponent
 | 
			
		||||
PowerSupplyComponent = esphomelib_ns.class_('PowerSupplyComponent', Component)
 | 
			
		||||
 | 
			
		||||
POWER_SUPPLY_SCHEMA = vol.Schema({
 | 
			
		||||
    vol.Required(CONF_ID): cv.declare_variable_id(PowerSupplyComponent),
 | 
			
		||||
    vol.Required(CONF_PIN): pins.gpio_output_pin_schema,
 | 
			
		||||
    vol.Optional(CONF_ENABLE_TIME): cv.positive_time_period_milliseconds,
 | 
			
		||||
    vol.Optional(CONF_KEEP_ON_TIME): cv.positive_time_period_milliseconds,
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
CONFIG_SCHEMA = vol.All(cv.ensure_list, [POWER_SUPPLY_SCHEMA])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    for conf in config:
 | 
			
		||||
        pin = None
 | 
			
		||||
        for pin in gpio_output_pin_expression(conf[CONF_PIN]):
 | 
			
		||||
            yield
 | 
			
		||||
 | 
			
		||||
        rhs = App.make_power_supply(pin)
 | 
			
		||||
        psu = Pvariable(conf[CONF_ID], rhs)
 | 
			
		||||
        if CONF_ENABLE_TIME in conf:
 | 
			
		||||
@@ -29,5 +30,7 @@ def to_code(config):
 | 
			
		||||
        if CONF_KEEP_ON_TIME in conf:
 | 
			
		||||
            add(psu.set_keep_on_time(conf[CONF_KEEP_ON_TIME]))
 | 
			
		||||
 | 
			
		||||
        setup_component(psu, conf)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_OUTPUT'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,28 +1,28 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import binary_sensor
 | 
			
		||||
from esphomeyaml.components.uart import UARTComponent
 | 
			
		||||
from esphomeyaml.components import binary_sensor, uart
 | 
			
		||||
from esphomeyaml.const import CONF_ID, CONF_UART_ID
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, get_variable
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, get_variable, setup_component, Component
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['uart']
 | 
			
		||||
 | 
			
		||||
RDM6300Component = binary_sensor.binary_sensor_ns.RDM6300Component
 | 
			
		||||
RDM6300Component = binary_sensor.binary_sensor_ns.class_('RDM6300Component', Component,
 | 
			
		||||
                                                         uart.UARTDevice)
 | 
			
		||||
 | 
			
		||||
CONFIG_SCHEMA = vol.All(cv.ensure_list_not_empty, [vol.Schema({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(RDM6300Component),
 | 
			
		||||
    cv.GenerateID(CONF_UART_ID): cv.use_variable_id(UARTComponent),
 | 
			
		||||
})])
 | 
			
		||||
    cv.GenerateID(CONF_UART_ID): cv.use_variable_id(uart.UARTComponent),
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    for conf in config:
 | 
			
		||||
        uart = None
 | 
			
		||||
        for uart in get_variable(conf[CONF_UART_ID]):
 | 
			
		||||
        for uart_ in get_variable(conf[CONF_UART_ID]):
 | 
			
		||||
            yield
 | 
			
		||||
        rhs = App.make_rdm6300_component(uart)
 | 
			
		||||
        Pvariable(conf[CONF_ID], rhs)
 | 
			
		||||
        rhs = App.make_rdm6300_component(uart_)
 | 
			
		||||
        var = Pvariable(conf[CONF_ID], rhs)
 | 
			
		||||
        setup_component(var, conf)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_RDM6300'
 | 
			
		||||
 
 | 
			
		||||
@@ -4,20 +4,26 @@ import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml import pins
 | 
			
		||||
from esphomeyaml.const import CONF_BUFFER_SIZE, CONF_DUMP, CONF_FILTER, CONF_ID, CONF_IDLE, \
 | 
			
		||||
    CONF_PIN, CONF_TOLERANCE
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, esphomelib_ns, gpio_input_pin_expression
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, esphomelib_ns, gpio_input_pin_expression, \
 | 
			
		||||
    setup_component, Component
 | 
			
		||||
 | 
			
		||||
remote_ns = esphomelib_ns.namespace('remote')
 | 
			
		||||
 | 
			
		||||
RemoteReceiverComponent = remote_ns.RemoteReceiverComponent
 | 
			
		||||
RemoteControlComponentBase = remote_ns.class_('RemoteControlComponentBase')
 | 
			
		||||
RemoteReceiverComponent = remote_ns.class_('RemoteReceiverComponent',
 | 
			
		||||
                                           RemoteControlComponentBase,
 | 
			
		||||
                                           Component)
 | 
			
		||||
 | 
			
		||||
RemoteReceiveDumper = remote_ns.class_('RemoteReceiveDumper')
 | 
			
		||||
 | 
			
		||||
DUMPERS = {
 | 
			
		||||
    'lg': remote_ns.LGDumper,
 | 
			
		||||
    'nec': remote_ns.NECDumper,
 | 
			
		||||
    'panasonic': remote_ns.PanasonicDumper,
 | 
			
		||||
    'raw': remote_ns.RawDumper,
 | 
			
		||||
    'samsung': remote_ns.SamsungDumper,
 | 
			
		||||
    'sony': remote_ns.SonyDumper,
 | 
			
		||||
    'rc_switch': remote_ns.RCSwitchDumper,
 | 
			
		||||
    'lg': remote_ns.class_('LGDumper', RemoteReceiveDumper),
 | 
			
		||||
    'nec': remote_ns.class_('NECDumper', RemoteReceiveDumper),
 | 
			
		||||
    'panasonic': remote_ns.class_('PanasonicDumper', RemoteReceiveDumper),
 | 
			
		||||
    'raw': remote_ns.class_('RawDumper', RemoteReceiveDumper),
 | 
			
		||||
    'samsung': remote_ns.class_('SamsungDumper', RemoteReceiveDumper),
 | 
			
		||||
    'sony': remote_ns.class_('SonyDumper', RemoteReceiveDumper),
 | 
			
		||||
    'rc_switch': remote_ns.class_('RCSwitchDumper', RemoteReceiveDumper),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -39,16 +45,16 @@ CONFIG_SCHEMA = vol.All(cv.ensure_list, [vol.Schema({
 | 
			
		||||
    vol.Optional(CONF_BUFFER_SIZE): cv.validate_bytes,
 | 
			
		||||
    vol.Optional(CONF_FILTER): cv.positive_time_period_microseconds,
 | 
			
		||||
    vol.Optional(CONF_IDLE): cv.positive_time_period_microseconds,
 | 
			
		||||
})])
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    for conf in config:
 | 
			
		||||
        pin = None
 | 
			
		||||
        for pin in gpio_input_pin_expression(conf[CONF_PIN]):
 | 
			
		||||
            yield
 | 
			
		||||
        rhs = App.make_remote_receiver_component(pin)
 | 
			
		||||
        receiver = Pvariable(conf[CONF_ID], rhs)
 | 
			
		||||
 | 
			
		||||
        for dumper in conf[CONF_DUMP]:
 | 
			
		||||
            add(receiver.add_dumper(DUMPERS[dumper].new()))
 | 
			
		||||
        if CONF_TOLERANCE in conf:
 | 
			
		||||
@@ -60,5 +66,7 @@ def to_code(config):
 | 
			
		||||
        if CONF_IDLE in conf:
 | 
			
		||||
            add(receiver.set_idle_us(conf[CONF_IDLE]))
 | 
			
		||||
 | 
			
		||||
        setup_component(receiver, conf)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_REMOTE_RECEIVER'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,17 +1,18 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml import pins
 | 
			
		||||
from esphomeyaml.components.remote_receiver import RemoteControlComponentBase, remote_ns
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.const import CONF_ADDRESS, CONF_CARRIER_DUTY_PERCENT, CONF_CHANNEL, CONF_CODE, \
 | 
			
		||||
    CONF_DEVICE, CONF_FAMILY, CONF_GROUP, CONF_ID, CONF_INVERTED, CONF_ONE, CONF_PIN, \
 | 
			
		||||
    CONF_PROTOCOL, CONF_PULSE_LENGTH, CONF_STATE, CONF_SYNC, CONF_ZERO
 | 
			
		||||
from esphomeyaml.core import HexInt
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, esphomelib_ns, gpio_output_pin_expression
 | 
			
		||||
from esphomeyaml.helpers import App, Component, Pvariable, add, gpio_output_pin_expression, \
 | 
			
		||||
    setup_component
 | 
			
		||||
 | 
			
		||||
remote_ns = esphomelib_ns.namespace('remote')
 | 
			
		||||
 | 
			
		||||
RemoteTransmitterComponent = remote_ns.RemoteTransmitterComponent
 | 
			
		||||
RCSwitchProtocol = remote_ns.RCSwitchProtocol
 | 
			
		||||
RemoteTransmitterComponent = remote_ns.class_('RemoteTransmitterComponent',
 | 
			
		||||
                                              RemoteControlComponentBase, Component)
 | 
			
		||||
RCSwitchProtocol = remote_ns.class_('RCSwitchProtocol')
 | 
			
		||||
rc_switch_protocols = remote_ns.rc_switch_protocols
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -81,7 +82,7 @@ CONFIG_SCHEMA = vol.All(cv.ensure_list, [vol.Schema({
 | 
			
		||||
    vol.Required(CONF_PIN): pins.gpio_output_pin_schema,
 | 
			
		||||
    vol.Optional(CONF_CARRIER_DUTY_PERCENT): vol.All(cv.percentage_int,
 | 
			
		||||
                                                     vol.Range(min=1, max=100)),
 | 
			
		||||
})])
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def build_rc_switch_protocol(config):
 | 
			
		||||
@@ -104,13 +105,15 @@ def binary_code(value):
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    for conf in config:
 | 
			
		||||
        pin = None
 | 
			
		||||
        for pin in gpio_output_pin_expression(conf[CONF_PIN]):
 | 
			
		||||
            yield
 | 
			
		||||
        rhs = App.make_remote_transmitter_component(pin)
 | 
			
		||||
        transmitter = Pvariable(conf[CONF_ID], rhs)
 | 
			
		||||
 | 
			
		||||
        if CONF_CARRIER_DUTY_PERCENT in conf:
 | 
			
		||||
            add(transmitter.set_carrier_duty_percent(conf[CONF_CARRIER_DUTY_PERCENT]))
 | 
			
		||||
 | 
			
		||||
        setup_component(transmitter, conf)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_REMOTE_TRANSMITTER'
 | 
			
		||||
 
 | 
			
		||||
@@ -4,10 +4,11 @@ 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.helpers import NoArg, Pvariable, TemplateArguments, esphomelib_ns, get_variable
 | 
			
		||||
from esphomeyaml.helpers import NoArg, Pvariable, TemplateArguments, esphomelib_ns, get_variable, \
 | 
			
		||||
    Trigger, Action
 | 
			
		||||
 | 
			
		||||
Script = esphomelib_ns.Script
 | 
			
		||||
ScriptExecuteAction = esphomelib_ns.ScriptExecuteAction
 | 
			
		||||
Script = esphomelib_ns.class_('Script', Trigger.template(NoArg))
 | 
			
		||||
ScriptExecuteAction = esphomelib_ns.class_('ScriptExecuteAction', Action)
 | 
			
		||||
 | 
			
		||||
CONFIG_SCHEMA = automation.validate_automation({
 | 
			
		||||
    vol.Required(CONF_ID): cv.declare_variable_id(Script),
 | 
			
		||||
 
 | 
			
		||||
@@ -1,17 +1,18 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
from esphomeyaml import automation
 | 
			
		||||
from esphomeyaml.components import mqtt
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml import automation
 | 
			
		||||
from esphomeyaml.const import CONF_ABOVE, CONF_ACCURACY_DECIMALS, CONF_ALPHA, CONF_BELOW, \
 | 
			
		||||
    CONF_DEBOUNCE, CONF_DELTA, CONF_EXPIRE_AFTER, CONF_EXPONENTIAL_MOVING_AVERAGE, CONF_FILTERS, \
 | 
			
		||||
    CONF_FILTER_NAN, CONF_FILTER_OUT, CONF_HEARTBEAT, CONF_ICON, CONF_ID, CONF_INTERNAL, \
 | 
			
		||||
    CONF_LAMBDA, CONF_MQTT_ID, CONF_MULTIPLY, CONF_OFFSET, CONF_ON_RAW_VALUE, CONF_ON_VALUE, \
 | 
			
		||||
    CONF_ON_VALUE_RANGE, CONF_OR, CONF_SEND_EVERY, CONF_SLIDING_WINDOW_MOVING_AVERAGE, \
 | 
			
		||||
    CONF_THROTTLE, CONF_TRIGGER_ID, CONF_UNIQUE, CONF_UNIT_OF_MEASUREMENT, CONF_WINDOW_SIZE, \
 | 
			
		||||
    CONF_SEND_FIRST_AT
 | 
			
		||||
from esphomeyaml.helpers import App, ArrayInitializer, Pvariable, add, add_job, esphomelib_ns, \
 | 
			
		||||
    float_, process_lambda, setup_mqtt_component, templatable
 | 
			
		||||
    CONF_ON_VALUE_RANGE, CONF_OR, CONF_SEND_EVERY, CONF_SEND_FIRST_AT, \
 | 
			
		||||
    CONF_SLIDING_WINDOW_MOVING_AVERAGE, CONF_THROTTLE, CONF_TRIGGER_ID, CONF_UNIQUE, \
 | 
			
		||||
    CONF_UNIT_OF_MEASUREMENT, CONF_WINDOW_SIZE
 | 
			
		||||
from esphomeyaml.helpers import App, ArrayInitializer, Component, Nameable, PollingComponent, \
 | 
			
		||||
    Pvariable, Trigger, add, add_job, esphomelib_ns, float_, process_lambda, setup_mqtt_component, \
 | 
			
		||||
    templatable
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({
 | 
			
		||||
 | 
			
		||||
@@ -58,31 +59,38 @@ FILTERS_SCHEMA = vol.All(cv.ensure_list, [vol.All({
 | 
			
		||||
    vol.Optional(CONF_OR): validate_recursive_filter,
 | 
			
		||||
}, cv.has_exactly_one_key(*FILTER_KEYS))])
 | 
			
		||||
 | 
			
		||||
# pylint: disable=invalid-name
 | 
			
		||||
# Base
 | 
			
		||||
sensor_ns = esphomelib_ns.namespace('sensor')
 | 
			
		||||
Sensor = sensor_ns.Sensor
 | 
			
		||||
MQTTSensorComponent = sensor_ns.MQTTSensorComponent
 | 
			
		||||
OffsetFilter = sensor_ns.OffsetFilter
 | 
			
		||||
MultiplyFilter = sensor_ns.MultiplyFilter
 | 
			
		||||
FilterOutValueFilter = sensor_ns.FilterOutValueFilter
 | 
			
		||||
FilterOutNANFilter = sensor_ns.FilterOutNANFilter
 | 
			
		||||
SlidingWindowMovingAverageFilter = sensor_ns.SlidingWindowMovingAverageFilter
 | 
			
		||||
ExponentialMovingAverageFilter = sensor_ns.ExponentialMovingAverageFilter
 | 
			
		||||
LambdaFilter = sensor_ns.LambdaFilter
 | 
			
		||||
ThrottleFilter = sensor_ns.ThrottleFilter
 | 
			
		||||
DeltaFilter = sensor_ns.DeltaFilter
 | 
			
		||||
OrFilter = sensor_ns.OrFilter
 | 
			
		||||
HeartbeatFilter = sensor_ns.HeartbeatFilter
 | 
			
		||||
DebounceFilter = sensor_ns.DebounceFilter
 | 
			
		||||
UniqueFilter = sensor_ns.UniqueFilter
 | 
			
		||||
Sensor = sensor_ns.class_('Sensor', Nameable)
 | 
			
		||||
MQTTSensorComponent = sensor_ns.class_('MQTTSensorComponent', mqtt.MQTTComponent)
 | 
			
		||||
 | 
			
		||||
SensorStateTrigger = sensor_ns.SensorStateTrigger
 | 
			
		||||
SensorRawStateTrigger = sensor_ns.SensorRawStateTrigger
 | 
			
		||||
ValueRangeTrigger = sensor_ns.ValueRangeTrigger
 | 
			
		||||
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_))
 | 
			
		||||
 | 
			
		||||
# 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)
 | 
			
		||||
DeltaFilter = sensor_ns.class_('DeltaFilter', Filter)
 | 
			
		||||
OrFilter = sensor_ns.class_('OrFilter', Filter)
 | 
			
		||||
UniqueFilter = sensor_ns.class_('UniqueFilter', Filter)
 | 
			
		||||
 | 
			
		||||
SENSOR_SCHEMA = cv.MQTT_COMPONENT_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(CONF_MQTT_ID): cv.declare_variable_id(MQTTSensorComponent),
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(Sensor),
 | 
			
		||||
    vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string_strict,
 | 
			
		||||
    vol.Optional(CONF_ICON): cv.icon,
 | 
			
		||||
    vol.Optional(CONF_ACCURACY_DECIMALS): vol.Coerce(int),
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ from esphomeyaml import pins
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.const import CONF_ATTENUATION, CONF_MAKE_ID, CONF_NAME, CONF_PIN, \
 | 
			
		||||
    CONF_UPDATE_INTERVAL
 | 
			
		||||
from esphomeyaml.helpers import App, Application, add, global_ns, variable
 | 
			
		||||
from esphomeyaml.helpers import App, Application, add, global_ns, variable, setup_component
 | 
			
		||||
 | 
			
		||||
ATTENUATION_MODES = {
 | 
			
		||||
    '0db': global_ns.ADC_0db,
 | 
			
		||||
@@ -22,14 +22,16 @@ def validate_adc_pin(value):
 | 
			
		||||
    return pins.analog_pin(value)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
MakeADCSensor = Application.MakeADCSensor
 | 
			
		||||
MakeADCSensor = Application.struct('MakeADCSensor')
 | 
			
		||||
ADCSensorComponent = sensor.sensor_ns.class_('ADCSensorComponent', sensor.PollingSensorComponent)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(sensor.SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(ADCSensorComponent),
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeADCSensor),
 | 
			
		||||
    vol.Required(CONF_PIN): validate_adc_pin,
 | 
			
		||||
    vol.Optional(CONF_ATTENUATION): vol.All(cv.only_on_esp32, cv.one_of(*ATTENUATION_MODES)),
 | 
			
		||||
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
			
		||||
}))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -42,7 +44,8 @@ def to_code(config):
 | 
			
		||||
    adc = make.Padc
 | 
			
		||||
    if CONF_ATTENUATION in config:
 | 
			
		||||
        add(adc.set_attenuation(ATTENUATION_MODES[config[CONF_ATTENUATION]]))
 | 
			
		||||
    sensor.setup_sensor(make.Padc, make.Pmqtt, config)
 | 
			
		||||
    sensor.setup_sensor(adc, make.Pmqtt, config)
 | 
			
		||||
    setup_component(adc, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_ADC_SENSOR'
 | 
			
		||||
 
 | 
			
		||||
@@ -9,24 +9,26 @@ from esphomeyaml.helpers import get_variable
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['ads1115']
 | 
			
		||||
 | 
			
		||||
ADS1115Multiplexer = sensor.sensor_ns.enum('ADS1115Multiplexer')
 | 
			
		||||
MUX = {
 | 
			
		||||
    'A0_A1': sensor.sensor_ns.ADS1115_MULTIPLEXER_P0_N1,
 | 
			
		||||
    'A0_A3': sensor.sensor_ns.ADS1115_MULTIPLEXER_P0_N3,
 | 
			
		||||
    'A1_A3': sensor.sensor_ns.ADS1115_MULTIPLEXER_P1_N3,
 | 
			
		||||
    'A2_A3': sensor.sensor_ns.ADS1115_MULTIPLEXER_P2_N3,
 | 
			
		||||
    'A0_GND': sensor.sensor_ns.ADS1115_MULTIPLEXER_P0_NG,
 | 
			
		||||
    'A1_GND': sensor.sensor_ns.ADS1115_MULTIPLEXER_P1_NG,
 | 
			
		||||
    'A2_GND': sensor.sensor_ns.ADS1115_MULTIPLEXER_P2_NG,
 | 
			
		||||
    'A3_GND': sensor.sensor_ns.ADS1115_MULTIPLEXER_P3_NG,
 | 
			
		||||
    'A0_A1': ADS1115Multiplexer.ADS1115_MULTIPLEXER_P0_N1,
 | 
			
		||||
    'A0_A3': ADS1115Multiplexer.ADS1115_MULTIPLEXER_P0_N3,
 | 
			
		||||
    'A1_A3': ADS1115Multiplexer.ADS1115_MULTIPLEXER_P1_N3,
 | 
			
		||||
    'A2_A3': ADS1115Multiplexer.ADS1115_MULTIPLEXER_P2_N3,
 | 
			
		||||
    'A0_GND': ADS1115Multiplexer.ADS1115_MULTIPLEXER_P0_NG,
 | 
			
		||||
    'A1_GND': ADS1115Multiplexer.ADS1115_MULTIPLEXER_P1_NG,
 | 
			
		||||
    'A2_GND': ADS1115Multiplexer.ADS1115_MULTIPLEXER_P2_NG,
 | 
			
		||||
    'A3_GND': ADS1115Multiplexer.ADS1115_MULTIPLEXER_P3_NG,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ADS1115Gain = sensor.sensor_ns.enum('ADS1115Gain')
 | 
			
		||||
GAIN = {
 | 
			
		||||
    '6.144': sensor.sensor_ns.ADS1115_GAIN_6P144,
 | 
			
		||||
    '4.096': sensor.sensor_ns.ADS1115_GAIN_6P096,
 | 
			
		||||
    '2.048': sensor.sensor_ns.ADS1115_GAIN_2P048,
 | 
			
		||||
    '1.024': sensor.sensor_ns.ADS1115_GAIN_1P024,
 | 
			
		||||
    '0.512': sensor.sensor_ns.ADS1115_GAIN_0P512,
 | 
			
		||||
    '0.256': sensor.sensor_ns.ADS1115_GAIN_0P256,
 | 
			
		||||
    '6.144': ADS1115Gain.ADS1115_GAIN_6P144,
 | 
			
		||||
    '4.096': ADS1115Gain.ADS1115_GAIN_6P096,
 | 
			
		||||
    '2.048': ADS1115Gain.ADS1115_GAIN_2P048,
 | 
			
		||||
    '1.024': ADS1115Gain.ADS1115_GAIN_1P024,
 | 
			
		||||
    '0.512': ADS1115Gain.ADS1115_GAIN_0P512,
 | 
			
		||||
    '0.256': ADS1115Gain.ADS1115_GAIN_0P256,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -45,7 +47,10 @@ def validate_mux(value):
 | 
			
		||||
    return cv.one_of(*MUX)(value)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ADS1115Sensor = sensor.sensor_ns.class_('ADS1115Sensor', sensor.EmptySensor)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(sensor.SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(ADS1115Sensor),
 | 
			
		||||
    vol.Required(CONF_MULTIPLEXER): validate_mux,
 | 
			
		||||
    vol.Required(CONF_GAIN): validate_gain,
 | 
			
		||||
    cv.GenerateID(CONF_ADS1115_ID): cv.use_variable_id(ADS1115Component),
 | 
			
		||||
 
 | 
			
		||||
@@ -1,27 +1,31 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.components import sensor, i2c
 | 
			
		||||
from esphomeyaml.const import CONF_ADDRESS, CONF_MAKE_ID, CONF_NAME, CONF_RESOLUTION, \
 | 
			
		||||
    CONF_UPDATE_INTERVAL
 | 
			
		||||
from esphomeyaml.helpers import App, Application, add, variable
 | 
			
		||||
from esphomeyaml.helpers import App, Application, add, variable, setup_component
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['i2c']
 | 
			
		||||
 | 
			
		||||
BH1750Resolution = sensor.sensor_ns.enum('BH1750Resolution')
 | 
			
		||||
BH1750_RESOLUTIONS = {
 | 
			
		||||
    4.0: sensor.sensor_ns.BH1750_RESOLUTION_4P0_LX,
 | 
			
		||||
    1.0: sensor.sensor_ns.BH1750_RESOLUTION_1P0_LX,
 | 
			
		||||
    0.5: sensor.sensor_ns.BH1750_RESOLUTION_0P5_LX,
 | 
			
		||||
    4.0: BH1750Resolution.BH1750_RESOLUTION_4P0_LX,
 | 
			
		||||
    1.0: BH1750Resolution.BH1750_RESOLUTION_1P0_LX,
 | 
			
		||||
    0.5: BH1750Resolution.BH1750_RESOLUTION_0P5_LX,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MakeBH1750Sensor = Application.MakeBH1750Sensor
 | 
			
		||||
MakeBH1750Sensor = Application.struct('MakeBH1750Sensor')
 | 
			
		||||
BH1750Sensor = sensor.sensor_ns.class_('BH1750Sensor', sensor.PollingSensorComponent,
 | 
			
		||||
                                       i2c.I2CDevice)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(sensor.SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(BH1750Sensor),
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeBH1750Sensor),
 | 
			
		||||
    vol.Optional(CONF_ADDRESS, default=0x23): cv.i2c_address,
 | 
			
		||||
    vol.Optional(CONF_RESOLUTION): vol.All(cv.positive_float, cv.one_of(*BH1750_RESOLUTIONS)),
 | 
			
		||||
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
			
		||||
}))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -32,6 +36,7 @@ def to_code(config):
 | 
			
		||||
    if CONF_RESOLUTION in config:
 | 
			
		||||
        add(bh1750.set_resolution(BH1750_RESOLUTIONS[config[CONF_RESOLUTION]]))
 | 
			
		||||
    sensor.setup_sensor(bh1750, make_bh1750.Pmqtt, config)
 | 
			
		||||
    setup_component(bh1750, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_BH1750'
 | 
			
		||||
 
 | 
			
		||||
@@ -5,18 +5,20 @@ from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.components.esp32_ble_tracker import CONF_ESP32_BLE_ID, ESP32BLETracker, \
 | 
			
		||||
    make_address_array
 | 
			
		||||
from esphomeyaml.const import CONF_MAC_ADDRESS, CONF_NAME
 | 
			
		||||
from esphomeyaml.helpers import get_variable
 | 
			
		||||
from esphomeyaml.helpers import get_variable, esphomelib_ns
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['esp32_ble_tracker']
 | 
			
		||||
 | 
			
		||||
ESP32BLERSSISensor = esphomelib_ns.class_('ESP32BLERSSISensor', sensor.Sensor)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(sensor.SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(ESP32BLERSSISensor),
 | 
			
		||||
    vol.Required(CONF_MAC_ADDRESS): cv.mac_address,
 | 
			
		||||
    cv.GenerateID(CONF_ESP32_BLE_ID): cv.use_variable_id(ESP32BLETracker)
 | 
			
		||||
}))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    hub = None
 | 
			
		||||
    for hub in get_variable(config[CONF_ESP32_BLE_ID]):
 | 
			
		||||
        yield
 | 
			
		||||
    rhs = hub.make_rssi_sensor(config[CONF_NAME], make_address_array(config[CONF_MAC_ADDRESS]))
 | 
			
		||||
 
 | 
			
		||||
@@ -4,42 +4,56 @@ import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.const import CONF_ADDRESS, CONF_HUMIDITY, CONF_IIR_FILTER, CONF_MAKE_ID, \
 | 
			
		||||
    CONF_NAME, CONF_OVERSAMPLING, CONF_PRESSURE, CONF_TEMPERATURE, CONF_UPDATE_INTERVAL
 | 
			
		||||
from esphomeyaml.helpers import App, Application, add, variable
 | 
			
		||||
from esphomeyaml.helpers import App, Application, add, variable, setup_component
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['i2c']
 | 
			
		||||
 | 
			
		||||
BME280Oversampling = sensor.sensor_ns.enum('BME280Oversampling')
 | 
			
		||||
OVERSAMPLING_OPTIONS = {
 | 
			
		||||
    'NONE': sensor.sensor_ns.BME280_OVERSAMPLING_NONE,
 | 
			
		||||
    '1X': sensor.sensor_ns.BME280_OVERSAMPLING_1X,
 | 
			
		||||
    '2X': sensor.sensor_ns.BME280_OVERSAMPLING_2X,
 | 
			
		||||
    '4X': sensor.sensor_ns.BME280_OVERSAMPLING_4X,
 | 
			
		||||
    '8X': sensor.sensor_ns.BME280_OVERSAMPLING_8X,
 | 
			
		||||
    '16X': sensor.sensor_ns.BME280_OVERSAMPLING_16X,
 | 
			
		||||
    'NONE': BME280Oversampling.BME280_OVERSAMPLING_NONE,
 | 
			
		||||
    '1X': BME280Oversampling.BME280_OVERSAMPLING_1X,
 | 
			
		||||
    '2X': BME280Oversampling.BME280_OVERSAMPLING_2X,
 | 
			
		||||
    '4X': BME280Oversampling.BME280_OVERSAMPLING_4X,
 | 
			
		||||
    '8X': BME280Oversampling.BME280_OVERSAMPLING_8X,
 | 
			
		||||
    '16X': BME280Oversampling.BME280_OVERSAMPLING_16X,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
BME280IIRFilter = sensor.sensor_ns.enum('BME280IIRFilter')
 | 
			
		||||
IIR_FILTER_OPTIONS = {
 | 
			
		||||
    'OFF': sensor.sensor_ns.BME280_IIR_FILTER_OFF,
 | 
			
		||||
    '2X': sensor.sensor_ns.BME280_IIR_FILTER_2X,
 | 
			
		||||
    '4X': sensor.sensor_ns.BME280_IIR_FILTER_4X,
 | 
			
		||||
    '8X': sensor.sensor_ns.BME280_IIR_FILTER_8X,
 | 
			
		||||
    '16X': sensor.sensor_ns.BME280_IIR_FILTER_16X,
 | 
			
		||||
    'OFF': BME280IIRFilter.BME280_IIR_FILTER_OFF,
 | 
			
		||||
    '2X': BME280IIRFilter.BME280_IIR_FILTER_2X,
 | 
			
		||||
    '4X': BME280IIRFilter.BME280_IIR_FILTER_4X,
 | 
			
		||||
    '8X': BME280IIRFilter.BME280_IIR_FILTER_8X,
 | 
			
		||||
    '16X': BME280IIRFilter.BME280_IIR_FILTER_16X,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
BME280_OVERSAMPLING_SENSOR_SCHEMA = sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
    vol.Optional(CONF_OVERSAMPLING): vol.All(vol.Upper, cv.one_of(*OVERSAMPLING_OPTIONS)),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
MakeBME280Sensor = Application.MakeBME280Sensor
 | 
			
		||||
MakeBME280Sensor = Application.struct('MakeBME280Sensor')
 | 
			
		||||
BME280TemperatureSensor = sensor.sensor_ns.class_('BME280TemperatureSensor',
 | 
			
		||||
                                                  sensor.EmptyPollingParentSensor)
 | 
			
		||||
BME280PressureSensor = sensor.sensor_ns.class_('BME280PressureSensor',
 | 
			
		||||
                                               sensor.EmptyPollingParentSensor)
 | 
			
		||||
BME280HumiditySensor = sensor.sensor_ns.class_('BME280HumiditySensor',
 | 
			
		||||
                                               sensor.EmptyPollingParentSensor)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = sensor.PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeBME280Sensor),
 | 
			
		||||
    vol.Optional(CONF_ADDRESS, default=0x77): cv.i2c_address,
 | 
			
		||||
    vol.Required(CONF_TEMPERATURE): cv.nameable(BME280_OVERSAMPLING_SENSOR_SCHEMA),
 | 
			
		||||
    vol.Required(CONF_PRESSURE): cv.nameable(BME280_OVERSAMPLING_SENSOR_SCHEMA),
 | 
			
		||||
    vol.Required(CONF_HUMIDITY): cv.nameable(BME280_OVERSAMPLING_SENSOR_SCHEMA),
 | 
			
		||||
    vol.Required(CONF_TEMPERATURE): cv.nameable(BME280_OVERSAMPLING_SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(BME280TemperatureSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Required(CONF_PRESSURE): cv.nameable(BME280_OVERSAMPLING_SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(BME280PressureSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Required(CONF_HUMIDITY): cv.nameable(BME280_OVERSAMPLING_SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(BME280HumiditySensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_IIR_FILTER): vol.All(vol.Upper, cv.one_of(*IIR_FILTER_OPTIONS)),
 | 
			
		||||
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -69,6 +83,7 @@ def to_code(config):
 | 
			
		||||
                        config[CONF_PRESSURE])
 | 
			
		||||
    sensor.setup_sensor(bme280.Pget_humidity_sensor(), make.Pmqtt_humidity,
 | 
			
		||||
                        config[CONF_HUMIDITY])
 | 
			
		||||
    setup_component(bme280, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_BME280'
 | 
			
		||||
 
 | 
			
		||||
@@ -6,43 +6,61 @@ from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.const import CONF_ADDRESS, CONF_GAS_RESISTANCE, CONF_HUMIDITY, CONF_IIR_FILTER, \
 | 
			
		||||
    CONF_MAKE_ID, CONF_NAME, CONF_OVERSAMPLING, CONF_PRESSURE, CONF_TEMPERATURE, \
 | 
			
		||||
    CONF_UPDATE_INTERVAL, CONF_HEATER, CONF_DURATION
 | 
			
		||||
from esphomeyaml.helpers import App, Application, add, variable
 | 
			
		||||
from esphomeyaml.helpers import App, Application, add, variable, setup_component
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['i2c']
 | 
			
		||||
 | 
			
		||||
BME680Oversampling = sensor.sensor_ns.enum('BME680Oversampling')
 | 
			
		||||
OVERSAMPLING_OPTIONS = {
 | 
			
		||||
    'NONE': sensor.sensor_ns.BME680_OVERSAMPLING_NONE,
 | 
			
		||||
    '1X': sensor.sensor_ns.BME680_OVERSAMPLING_1X,
 | 
			
		||||
    '2X': sensor.sensor_ns.BME680_OVERSAMPLING_2X,
 | 
			
		||||
    '4X': sensor.sensor_ns.BME680_OVERSAMPLING_4X,
 | 
			
		||||
    '8X': sensor.sensor_ns.BME680_OVERSAMPLING_8X,
 | 
			
		||||
    '16X': sensor.sensor_ns.BME680_OVERSAMPLING_16X,
 | 
			
		||||
    'NONE': BME680Oversampling.BME680_OVERSAMPLING_NONE,
 | 
			
		||||
    '1X': BME680Oversampling.BME680_OVERSAMPLING_1X,
 | 
			
		||||
    '2X': BME680Oversampling.BME680_OVERSAMPLING_2X,
 | 
			
		||||
    '4X': BME680Oversampling.BME680_OVERSAMPLING_4X,
 | 
			
		||||
    '8X': BME680Oversampling.BME680_OVERSAMPLING_8X,
 | 
			
		||||
    '16X': BME680Oversampling.BME680_OVERSAMPLING_16X,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
BME680IIRFilter = sensor.sensor_ns.enum('BME680IIRFilter')
 | 
			
		||||
IIR_FILTER_OPTIONS = {
 | 
			
		||||
    'OFF': sensor.sensor_ns.BME680_IIR_FILTER_OFF,
 | 
			
		||||
    '1X': sensor.sensor_ns.BME680_IIR_FILTER_1X,
 | 
			
		||||
    '3X': sensor.sensor_ns.BME680_IIR_FILTER_3X,
 | 
			
		||||
    '7X': sensor.sensor_ns.BME680_IIR_FILTER_7X,
 | 
			
		||||
    '15X': sensor.sensor_ns.BME680_IIR_FILTER_15X,
 | 
			
		||||
    '31X': sensor.sensor_ns.BME680_IIR_FILTER_31X,
 | 
			
		||||
    '63X': sensor.sensor_ns.BME680_IIR_FILTER_63X,
 | 
			
		||||
    '127X': sensor.sensor_ns.BME680_IIR_FILTER_127X,
 | 
			
		||||
    'OFF': BME680IIRFilter.BME680_IIR_FILTER_OFF,
 | 
			
		||||
    '1X': BME680IIRFilter.BME680_IIR_FILTER_1X,
 | 
			
		||||
    '3X': BME680IIRFilter.BME680_IIR_FILTER_3X,
 | 
			
		||||
    '7X': BME680IIRFilter.BME680_IIR_FILTER_7X,
 | 
			
		||||
    '15X': BME680IIRFilter.BME680_IIR_FILTER_15X,
 | 
			
		||||
    '31X': BME680IIRFilter.BME680_IIR_FILTER_31X,
 | 
			
		||||
    '63X': BME680IIRFilter.BME680_IIR_FILTER_63X,
 | 
			
		||||
    '127X': BME680IIRFilter.BME680_IIR_FILTER_127X,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
BME680_OVERSAMPLING_SENSOR_SCHEMA = sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
    vol.Optional(CONF_OVERSAMPLING): vol.All(vol.Upper, cv.one_of(*OVERSAMPLING_OPTIONS)),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
MakeBME680Sensor = Application.MakeBME680Sensor
 | 
			
		||||
MakeBME680Sensor = Application.struct('MakeBME680Sensor')
 | 
			
		||||
BME680TemperatureSensor = sensor.sensor_ns.class_('BME680TemperatureSensor',
 | 
			
		||||
                                                  sensor.EmptyPollingParentSensor)
 | 
			
		||||
BME680PressureSensor = sensor.sensor_ns.class_('BME680PressureSensor',
 | 
			
		||||
                                               sensor.EmptyPollingParentSensor)
 | 
			
		||||
BME680HumiditySensor = sensor.sensor_ns.class_('BME680HumiditySensor',
 | 
			
		||||
                                               sensor.EmptyPollingParentSensor)
 | 
			
		||||
BME680GasResistanceSensor = sensor.sensor_ns.class_('BME680GasResistanceSensor',
 | 
			
		||||
                                                    sensor.EmptyPollingParentSensor)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = sensor.PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeBME680Sensor),
 | 
			
		||||
    vol.Optional(CONF_ADDRESS, default=0x76): cv.i2c_address,
 | 
			
		||||
    vol.Required(CONF_TEMPERATURE): cv.nameable(BME680_OVERSAMPLING_SENSOR_SCHEMA),
 | 
			
		||||
    vol.Required(CONF_PRESSURE): cv.nameable(BME680_OVERSAMPLING_SENSOR_SCHEMA),
 | 
			
		||||
    vol.Required(CONF_HUMIDITY): cv.nameable(BME680_OVERSAMPLING_SENSOR_SCHEMA),
 | 
			
		||||
    vol.Required(CONF_GAS_RESISTANCE): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Required(CONF_TEMPERATURE): cv.nameable(BME680_OVERSAMPLING_SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(BME680TemperatureSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Required(CONF_PRESSURE): cv.nameable(BME680_OVERSAMPLING_SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(BME680PressureSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Required(CONF_HUMIDITY): cv.nameable(BME680_OVERSAMPLING_SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(BME680HumiditySensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Required(CONF_GAS_RESISTANCE): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(BME680GasResistanceSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_IIR_FILTER): vol.All(vol.Upper, cv.one_of(*IIR_FILTER_OPTIONS)),
 | 
			
		||||
    vol.Optional(CONF_HEATER): vol.Any(None, vol.All(vol.Schema({
 | 
			
		||||
        vol.Optional(CONF_TEMPERATURE, default=320): vol.All(vol.Coerce(int), vol.Range(200, 400)),
 | 
			
		||||
@@ -50,7 +68,7 @@ PLATFORM_SCHEMA = sensor.PLATFORM_SCHEMA.extend({
 | 
			
		||||
            cv.positive_time_period_milliseconds, vol.Range(max=core.TimePeriod(milliseconds=4032)))
 | 
			
		||||
    }, cv.has_at_least_one_key(CONF_TEMPERATURE, CONF_DURATION)))),
 | 
			
		||||
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -89,6 +107,7 @@ def to_code(config):
 | 
			
		||||
                        config[CONF_HUMIDITY])
 | 
			
		||||
    sensor.setup_sensor(bme680.Pget_gas_resistance_sensor(), make.Pmqtt_gas_resistance,
 | 
			
		||||
                        config[CONF_GAS_RESISTANCE])
 | 
			
		||||
    setup_component(bme680, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_BME680'
 | 
			
		||||
 
 | 
			
		||||
@@ -4,19 +4,27 @@ import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.const import CONF_ADDRESS, CONF_MAKE_ID, CONF_NAME, CONF_PRESSURE, \
 | 
			
		||||
    CONF_TEMPERATURE, CONF_UPDATE_INTERVAL
 | 
			
		||||
from esphomeyaml.helpers import App, Application, HexIntLiteral, add, variable
 | 
			
		||||
from esphomeyaml.helpers import App, Application, HexIntLiteral, add, variable, setup_component
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['i2c']
 | 
			
		||||
 | 
			
		||||
MakeBMP085Sensor = Application.MakeBMP085Sensor
 | 
			
		||||
MakeBMP085Sensor = Application.struct('MakeBMP085Sensor')
 | 
			
		||||
BMP085TemperatureSensor = sensor.sensor_ns.class_('BMP085TemperatureSensor',
 | 
			
		||||
                                                  sensor.EmptyPollingParentSensor)
 | 
			
		||||
BMP085PressureSensor = sensor.sensor_ns.class_('BMP085PressureSensor',
 | 
			
		||||
                                               sensor.EmptyPollingParentSensor)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = sensor.PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeBMP085Sensor),
 | 
			
		||||
    vol.Required(CONF_TEMPERATURE): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Required(CONF_PRESSURE): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Required(CONF_TEMPERATURE): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(BMP085TemperatureSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Required(CONF_PRESSURE): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(BMP085PressureSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_ADDRESS): cv.i2c_address,
 | 
			
		||||
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -31,6 +39,7 @@ def to_code(config):
 | 
			
		||||
                        config[CONF_TEMPERATURE])
 | 
			
		||||
    sensor.setup_sensor(bmp.Pbmp.Pget_pressure_sensor(), bmp.Pmqtt_pressure,
 | 
			
		||||
                        config[CONF_PRESSURE])
 | 
			
		||||
    setup_component(bmp.Pbmp, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_BMP085_SENSOR'
 | 
			
		||||
 
 | 
			
		||||
@@ -4,41 +4,51 @@ import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.const import CONF_ADDRESS, CONF_IIR_FILTER, CONF_MAKE_ID, \
 | 
			
		||||
    CONF_NAME, CONF_OVERSAMPLING, CONF_PRESSURE, CONF_TEMPERATURE, CONF_UPDATE_INTERVAL
 | 
			
		||||
from esphomeyaml.helpers import App, Application, add, variable
 | 
			
		||||
from esphomeyaml.helpers import App, Application, add, variable, setup_component
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['i2c']
 | 
			
		||||
 | 
			
		||||
BMP280Oversampling = sensor.sensor_ns.enum('BMP280Oversampling')
 | 
			
		||||
OVERSAMPLING_OPTIONS = {
 | 
			
		||||
    'NONE': sensor.sensor_ns.BMP280_OVERSAMPLING_NONE,
 | 
			
		||||
    '1X': sensor.sensor_ns.BMP280_OVERSAMPLING_1X,
 | 
			
		||||
    '2X': sensor.sensor_ns.BMP280_OVERSAMPLING_2X,
 | 
			
		||||
    '4X': sensor.sensor_ns.BMP280_OVERSAMPLING_4X,
 | 
			
		||||
    '8X': sensor.sensor_ns.BMP280_OVERSAMPLING_8X,
 | 
			
		||||
    '16X': sensor.sensor_ns.BMP280_OVERSAMPLING_16X,
 | 
			
		||||
    'NONE': BMP280Oversampling.BMP280_OVERSAMPLING_NONE,
 | 
			
		||||
    '1X': BMP280Oversampling.BMP280_OVERSAMPLING_1X,
 | 
			
		||||
    '2X': BMP280Oversampling.BMP280_OVERSAMPLING_2X,
 | 
			
		||||
    '4X': BMP280Oversampling.BMP280_OVERSAMPLING_4X,
 | 
			
		||||
    '8X': BMP280Oversampling.BMP280_OVERSAMPLING_8X,
 | 
			
		||||
    '16X': BMP280Oversampling.BMP280_OVERSAMPLING_16X,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
BMP280IIRFilter = sensor.sensor_ns.enum('BMP280IIRFilter')
 | 
			
		||||
IIR_FILTER_OPTIONS = {
 | 
			
		||||
    'OFF': sensor.sensor_ns.BMP280_IIR_FILTER_OFF,
 | 
			
		||||
    '2X': sensor.sensor_ns.BMP280_IIR_FILTER_2X,
 | 
			
		||||
    '4X': sensor.sensor_ns.BMP280_IIR_FILTER_4X,
 | 
			
		||||
    '8X': sensor.sensor_ns.BMP280_IIR_FILTER_8X,
 | 
			
		||||
    '16X': sensor.sensor_ns.BMP280_IIR_FILTER_16X,
 | 
			
		||||
    'OFF': BMP280IIRFilter.BMP280_IIR_FILTER_OFF,
 | 
			
		||||
    '2X': BMP280IIRFilter.BMP280_IIR_FILTER_2X,
 | 
			
		||||
    '4X': BMP280IIRFilter.BMP280_IIR_FILTER_4X,
 | 
			
		||||
    '8X': BMP280IIRFilter.BMP280_IIR_FILTER_8X,
 | 
			
		||||
    '16X': BMP280IIRFilter.BMP280_IIR_FILTER_16X,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
BMP280_OVERSAMPLING_SENSOR_SCHEMA = sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
    vol.Optional(CONF_OVERSAMPLING): vol.All(vol.Upper, cv.one_of(*OVERSAMPLING_OPTIONS)),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
MakeBMP280Sensor = Application.MakeBMP280Sensor
 | 
			
		||||
MakeBMP280Sensor = Application.struct('MakeBMP280Sensor')
 | 
			
		||||
BMP280TemperatureSensor = sensor.sensor_ns.class_('BMP280TemperatureSensor',
 | 
			
		||||
                                                  sensor.EmptyPollingParentSensor)
 | 
			
		||||
BMP280PressureSensor = sensor.sensor_ns.class_('BMP280PressureSensor',
 | 
			
		||||
                                               sensor.EmptyPollingParentSensor)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = sensor.PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeBMP280Sensor),
 | 
			
		||||
    vol.Optional(CONF_ADDRESS, default=0x77): cv.i2c_address,
 | 
			
		||||
    vol.Required(CONF_TEMPERATURE): cv.nameable(BMP280_OVERSAMPLING_SENSOR_SCHEMA),
 | 
			
		||||
    vol.Required(CONF_PRESSURE): cv.nameable(BMP280_OVERSAMPLING_SENSOR_SCHEMA),
 | 
			
		||||
    vol.Required(CONF_TEMPERATURE): cv.nameable(BMP280_OVERSAMPLING_SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(BMP280TemperatureSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Required(CONF_PRESSURE): cv.nameable(BMP280_OVERSAMPLING_SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(BMP280PressureSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_IIR_FILTER): vol.All(vol.Upper, cv.one_of(*IIR_FILTER_OPTIONS)),
 | 
			
		||||
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -62,6 +72,7 @@ def to_code(config):
 | 
			
		||||
                        config[CONF_TEMPERATURE])
 | 
			
		||||
    sensor.setup_sensor(bmp280.Pget_pressure_sensor(), make.Pmqtt_pressure,
 | 
			
		||||
                        config[CONF_PRESSURE])
 | 
			
		||||
    setup_component(bmp280, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_BMP280'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,31 +1,44 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.components import sensor, uart
 | 
			
		||||
from esphomeyaml.components.uart import UARTComponent
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.const import CONF_CURRENT, CONF_ID, CONF_NAME, CONF_POWER, CONF_UART_ID, \
 | 
			
		||||
    CONF_VOLTAGE
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, get_variable
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, get_variable, setup_component, Component
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['uart']
 | 
			
		||||
 | 
			
		||||
CSE7766Component = sensor.sensor_ns.CSE7766Component
 | 
			
		||||
CSE7766Component = sensor.sensor_ns.class_('CSE7766Component', Component, uart.UARTDevice)
 | 
			
		||||
CSE7766VoltageSensor = sensor.sensor_ns.class_('CSE7766VoltageSensor',
 | 
			
		||||
                                               sensor.EmptySensor)
 | 
			
		||||
CSE7766CurrentSensor = sensor.sensor_ns.class_('CSE7766CurrentSensor',
 | 
			
		||||
                                               sensor.EmptySensor)
 | 
			
		||||
CSE7766PowerSensor = sensor.sensor_ns.class_('CSE7766PowerSensor',
 | 
			
		||||
                                             sensor.EmptySensor)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = vol.All(sensor.PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(CSE7766Component),
 | 
			
		||||
    cv.GenerateID(CONF_UART_ID): cv.use_variable_id(UARTComponent),
 | 
			
		||||
 | 
			
		||||
    vol.Optional(CONF_VOLTAGE): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_CURRENT): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_POWER): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
}), cv.has_at_least_one_key(CONF_VOLTAGE, CONF_CURRENT, CONF_POWER))
 | 
			
		||||
    vol.Optional(CONF_VOLTAGE): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(CSE7766VoltageSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_CURRENT): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(CSE7766CurrentSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_POWER): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(CSE7766PowerSensor),
 | 
			
		||||
    })),
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema), cv.has_at_least_one_key(CONF_VOLTAGE, CONF_CURRENT,
 | 
			
		||||
                                                               CONF_POWER))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    for uart in get_variable(config[CONF_UART_ID]):
 | 
			
		||||
    for uart_ in get_variable(config[CONF_UART_ID]):
 | 
			
		||||
        yield
 | 
			
		||||
 | 
			
		||||
    rhs = App.make_cse7766(uart)
 | 
			
		||||
    rhs = App.make_cse7766(uart_)
 | 
			
		||||
    cse = Pvariable(config[CONF_ID], rhs)
 | 
			
		||||
 | 
			
		||||
    if CONF_VOLTAGE in config:
 | 
			
		||||
@@ -37,6 +50,7 @@ def to_code(config):
 | 
			
		||||
    if CONF_POWER in config:
 | 
			
		||||
        conf = config[CONF_POWER]
 | 
			
		||||
        sensor.register_sensor(cse.make_power_sensor(conf[CONF_NAME]), conf)
 | 
			
		||||
    setup_component(cse, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_CSE7766'
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,11 @@ from esphomeyaml.const import CONF_ADDRESS, CONF_DALLAS_ID, CONF_INDEX, CONF_NAM
 | 
			
		||||
    CONF_RESOLUTION
 | 
			
		||||
from esphomeyaml.helpers import HexIntLiteral, get_variable
 | 
			
		||||
 | 
			
		||||
DallasTemperatureSensor = sensor.sensor_ns.class_('DallasTemperatureSensor',
 | 
			
		||||
                                                  sensor.EmptyPollingParentSensor)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(sensor.SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(DallasTemperatureSensor),
 | 
			
		||||
    vol.Exclusive(CONF_ADDRESS, 'dallas'): cv.hex_int,
 | 
			
		||||
    vol.Exclusive(CONF_INDEX, 'dallas'): cv.positive_int,
 | 
			
		||||
    cv.GenerateID(CONF_DALLAS_ID): cv.use_variable_id(DallasComponent),
 | 
			
		||||
@@ -16,7 +20,6 @@ PLATFORM_SCHEMA = cv.nameable(sensor.SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    hub = None
 | 
			
		||||
    for hub in get_variable(config[CONF_DALLAS_ID]):
 | 
			
		||||
        yield
 | 
			
		||||
    if CONF_ADDRESS in config:
 | 
			
		||||
 
 | 
			
		||||
@@ -3,46 +3,61 @@ import voluptuous as vol
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.const import CONF_HUMIDITY, CONF_MAKE_ID, CONF_MODEL, CONF_NAME, CONF_PIN, \
 | 
			
		||||
    CONF_TEMPERATURE, CONF_UPDATE_INTERVAL
 | 
			
		||||
from esphomeyaml.helpers import App, Application, add, gpio_output_pin_expression, variable
 | 
			
		||||
    CONF_TEMPERATURE, CONF_UPDATE_INTERVAL, CONF_ID
 | 
			
		||||
from esphomeyaml.helpers import App, Application, add, gpio_output_pin_expression, variable, \
 | 
			
		||||
    setup_component, PollingComponent, Pvariable
 | 
			
		||||
from esphomeyaml.pins import gpio_output_pin_schema
 | 
			
		||||
 | 
			
		||||
DHTModel = sensor.sensor_ns.enum('DHTModel')
 | 
			
		||||
DHT_MODELS = {
 | 
			
		||||
    'AUTO_DETECT': sensor.sensor_ns.DHT_MODEL_AUTO_DETECT,
 | 
			
		||||
    'DHT11': sensor.sensor_ns.DHT_MODEL_DHT11,
 | 
			
		||||
    'DHT22': sensor.sensor_ns.DHT_MODEL_DHT22,
 | 
			
		||||
    'AM2302': sensor.sensor_ns.DHT_MODEL_AM2302,
 | 
			
		||||
    'RHT03': sensor.sensor_ns.DHT_MODEL_RHT03,
 | 
			
		||||
    'AUTO_DETECT': DHTModel.DHT_MODEL_AUTO_DETECT,
 | 
			
		||||
    'DHT11': DHTModel.DHT_MODEL_DHT11,
 | 
			
		||||
    'DHT22': DHTModel.DHT_MODEL_DHT22,
 | 
			
		||||
    'AM2302': DHTModel.DHT_MODEL_AM2302,
 | 
			
		||||
    'RHT03': DHTModel.DHT_MODEL_RHT03,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MakeDHTSensor = Application.MakeDHTSensor
 | 
			
		||||
MakeDHTSensor = Application.struct('MakeDHTSensor')
 | 
			
		||||
DHTComponent = sensor.sensor_ns.class_('DHTComponent', PollingComponent)
 | 
			
		||||
DHTTemperatureSensor = sensor.sensor_ns.class_('DHTTemperatureSensor',
 | 
			
		||||
                                               sensor.EmptyPollingParentSensor)
 | 
			
		||||
DHTHumiditySensor = sensor.sensor_ns.class_('DHTHumiditySensor',
 | 
			
		||||
                                            sensor.EmptyPollingParentSensor)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = sensor.PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeDHTSensor),
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(DHTComponent),
 | 
			
		||||
    vol.Required(CONF_PIN): gpio_output_pin_schema,
 | 
			
		||||
    vol.Required(CONF_TEMPERATURE): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Required(CONF_HUMIDITY): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Required(CONF_TEMPERATURE): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(DHTTemperatureSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Required(CONF_HUMIDITY): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(DHTHumiditySensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_MODEL): vol.All(vol.Upper, cv.one_of(*DHT_MODELS)),
 | 
			
		||||
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    pin = None
 | 
			
		||||
    for pin in gpio_output_pin_expression(config[CONF_PIN]):
 | 
			
		||||
        yield
 | 
			
		||||
    rhs = App.make_dht_sensor(config[CONF_TEMPERATURE][CONF_NAME],
 | 
			
		||||
                              config[CONF_HUMIDITY][CONF_NAME],
 | 
			
		||||
                              pin, config.get(CONF_UPDATE_INTERVAL))
 | 
			
		||||
    dht = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    make = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    dht = make.Pdht
 | 
			
		||||
    Pvariable(config[CONF_ID], dht)
 | 
			
		||||
 | 
			
		||||
    if CONF_MODEL in config:
 | 
			
		||||
        constant = DHT_MODELS[config[CONF_MODEL]]
 | 
			
		||||
        add(dht.Pdht.set_dht_model(constant))
 | 
			
		||||
        add(dht.set_dht_model(constant))
 | 
			
		||||
 | 
			
		||||
    sensor.setup_sensor(dht.Pdht.Pget_temperature_sensor(),
 | 
			
		||||
                        dht.Pmqtt_temperature, config[CONF_TEMPERATURE])
 | 
			
		||||
    sensor.setup_sensor(dht.Pdht.Pget_humidity_sensor(),
 | 
			
		||||
                        dht.Pmqtt_humidity, config[CONF_HUMIDITY])
 | 
			
		||||
    sensor.setup_sensor(dht.Pget_temperature_sensor(),
 | 
			
		||||
                        make.Pmqtt_temperature, config[CONF_TEMPERATURE])
 | 
			
		||||
    sensor.setup_sensor(dht.Pget_humidity_sensor(),
 | 
			
		||||
                        make.Pmqtt_humidity, config[CONF_HUMIDITY])
 | 
			
		||||
    setup_component(dht, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_DHT_SENSOR'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,33 +1,47 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.components import sensor, i2c
 | 
			
		||||
from esphomeyaml.const import CONF_HUMIDITY, CONF_MAKE_ID, CONF_NAME, CONF_TEMPERATURE, \
 | 
			
		||||
    CONF_UPDATE_INTERVAL
 | 
			
		||||
from esphomeyaml.helpers import App, Application, variable
 | 
			
		||||
    CONF_UPDATE_INTERVAL, CONF_ID
 | 
			
		||||
from esphomeyaml.helpers import App, Application, variable, setup_component, PollingComponent, \
 | 
			
		||||
    Pvariable
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['i2c']
 | 
			
		||||
 | 
			
		||||
MakeDHT12Sensor = Application.MakeDHT12Sensor
 | 
			
		||||
MakeDHT12Sensor = Application.struct('MakeDHT12Sensor')
 | 
			
		||||
DHT12Component = sensor.sensor_ns.class_('DHT12Component', PollingComponent, i2c.I2CDevice)
 | 
			
		||||
DHT12TemperatureSensor = sensor.sensor_ns.class_('DHT12TemperatureSensor',
 | 
			
		||||
                                                 sensor.EmptyPollingParentSensor)
 | 
			
		||||
DHT12HumiditySensor = sensor.sensor_ns.class_('DHT12HumiditySensor',
 | 
			
		||||
                                              sensor.EmptyPollingParentSensor)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = sensor.PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeDHT12Sensor),
 | 
			
		||||
    vol.Required(CONF_TEMPERATURE): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Required(CONF_HUMIDITY): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(DHT12Component),
 | 
			
		||||
    vol.Required(CONF_TEMPERATURE): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(DHT12TemperatureSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Required(CONF_HUMIDITY): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(DHT12HumiditySensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    rhs = App.make_dht12_sensor(config[CONF_TEMPERATURE][CONF_NAME],
 | 
			
		||||
                                config[CONF_HUMIDITY][CONF_NAME],
 | 
			
		||||
                                config.get(CONF_UPDATE_INTERVAL))
 | 
			
		||||
    dht = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    make = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    dht = make.Pdht12
 | 
			
		||||
    Pvariable(config[CONF_ID], dht)
 | 
			
		||||
 | 
			
		||||
    sensor.setup_sensor(dht.Pdht12.Pget_temperature_sensor(), dht.Pmqtt_temperature,
 | 
			
		||||
    sensor.setup_sensor(dht.Pget_temperature_sensor(), make.Pmqtt_temperature,
 | 
			
		||||
                        config[CONF_TEMPERATURE])
 | 
			
		||||
    sensor.setup_sensor(dht.Pdht12.Pget_humidity_sensor(), dht.Pmqtt_humidity,
 | 
			
		||||
    sensor.setup_sensor(dht.Pget_humidity_sensor(), make.Pmqtt_humidity,
 | 
			
		||||
                        config[CONF_HUMIDITY])
 | 
			
		||||
    setup_component(dht, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_DHT12_SENSOR'
 | 
			
		||||
 
 | 
			
		||||
@@ -4,25 +4,28 @@ import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml import pins
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.const import CONF_MAKE_ID, CONF_NAME, CONF_PIN, CONF_UPDATE_INTERVAL
 | 
			
		||||
from esphomeyaml.helpers import App, Application, gpio_input_pin_expression, variable
 | 
			
		||||
from esphomeyaml.helpers import App, Application, gpio_input_pin_expression, variable, \
 | 
			
		||||
    setup_component
 | 
			
		||||
 | 
			
		||||
MakeDutyCycleSensor = Application.MakeDutyCycleSensor
 | 
			
		||||
MakeDutyCycleSensor = Application.struct('MakeDutyCycleSensor')
 | 
			
		||||
DutyCycleSensor = sensor.sensor_ns.class_('DutyCycleSensor', sensor.PollingSensorComponent)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(sensor.SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(DutyCycleSensor),
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeDutyCycleSensor),
 | 
			
		||||
    vol.Required(CONF_PIN): pins.internal_gpio_input_pin_schema,
 | 
			
		||||
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
			
		||||
}))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    pin = None
 | 
			
		||||
    for pin in gpio_input_pin_expression(config[CONF_PIN]):
 | 
			
		||||
        yield
 | 
			
		||||
    rhs = App.make_duty_cycle_sensor(config[CONF_NAME], pin,
 | 
			
		||||
                                     config.get(CONF_UPDATE_INTERVAL))
 | 
			
		||||
    make = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    sensor.setup_sensor(make.Pduty, make.Pmqtt, config)
 | 
			
		||||
    setup_component(make.Pduty, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_DUTY_CYCLE_SENSOR'
 | 
			
		||||
 
 | 
			
		||||
@@ -3,22 +3,25 @@ import voluptuous as vol
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.const import CONF_MAKE_ID, CONF_NAME, CONF_UPDATE_INTERVAL, ESP_PLATFORM_ESP32
 | 
			
		||||
from esphomeyaml.helpers import App, Application, variable
 | 
			
		||||
from esphomeyaml.helpers import App, Application, variable, setup_component
 | 
			
		||||
 | 
			
		||||
ESP_PLATFORMS = [ESP_PLATFORM_ESP32]
 | 
			
		||||
 | 
			
		||||
MakeESP32HallSensor = Application.MakeESP32HallSensor
 | 
			
		||||
MakeESP32HallSensor = Application.struct('MakeESP32HallSensor')
 | 
			
		||||
ESP32HallSensor = sensor.sensor_ns.class_('ESP32HallSensor', sensor.PollingSensorComponent)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(sensor.SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(ESP32HallSensor),
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeESP32HallSensor),
 | 
			
		||||
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
			
		||||
}))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    rhs = App.make_esp32_hall_sensor(config[CONF_NAME], config.get(CONF_UPDATE_INTERVAL))
 | 
			
		||||
    make = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    sensor.setup_sensor(make.Phall, make.Pmqtt, config)
 | 
			
		||||
    setup_component(make.Phall, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_ESP32_HALL_SENSOR'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,34 +1,48 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.components import sensor, i2c
 | 
			
		||||
from esphomeyaml.const import CONF_HUMIDITY, CONF_MAKE_ID, CONF_NAME, CONF_TEMPERATURE, \
 | 
			
		||||
    CONF_UPDATE_INTERVAL
 | 
			
		||||
from esphomeyaml.helpers import App, Application, variable
 | 
			
		||||
    CONF_UPDATE_INTERVAL, CONF_ID
 | 
			
		||||
from esphomeyaml.helpers import App, Application, variable, setup_component, PollingComponent, \
 | 
			
		||||
    Pvariable
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['i2c']
 | 
			
		||||
 | 
			
		||||
MakeHDC1080Sensor = Application.MakeHDC1080Sensor
 | 
			
		||||
MakeHDC1080Sensor = Application.struct('MakeHDC1080Sensor')
 | 
			
		||||
HDC1080Component = sensor.sensor_ns.class_('HDC1080Component', PollingComponent, i2c.I2CDevice)
 | 
			
		||||
HDC1080TemperatureSensor = sensor.sensor_ns.class_('HDC1080TemperatureSensor',
 | 
			
		||||
                                                   sensor.EmptyPollingParentSensor)
 | 
			
		||||
HDC1080HumiditySensor = sensor.sensor_ns.class_('HDC1080HumiditySensor',
 | 
			
		||||
                                                sensor.EmptyPollingParentSensor)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = sensor.PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeHDC1080Sensor),
 | 
			
		||||
    vol.Required(CONF_TEMPERATURE): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Required(CONF_HUMIDITY): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(HDC1080Component),
 | 
			
		||||
    vol.Required(CONF_TEMPERATURE): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(HDC1080TemperatureSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Required(CONF_HUMIDITY): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(HDC1080HumiditySensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    rhs = App.make_hdc1080_sensor(config[CONF_TEMPERATURE][CONF_NAME],
 | 
			
		||||
                                  config[CONF_HUMIDITY][CONF_NAME],
 | 
			
		||||
                                  config.get(CONF_UPDATE_INTERVAL))
 | 
			
		||||
    hdc1080 = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    make = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    hdc1080 = make.Phdc1080
 | 
			
		||||
    Pvariable(config[CONF_ID], hdc1080)
 | 
			
		||||
 | 
			
		||||
    sensor.setup_sensor(hdc1080.Phdc1080.Pget_temperature_sensor(),
 | 
			
		||||
                        hdc1080.Pmqtt_temperature,
 | 
			
		||||
    sensor.setup_sensor(hdc1080.Pget_temperature_sensor(),
 | 
			
		||||
                        make.Pmqtt_temperature,
 | 
			
		||||
                        config[CONF_TEMPERATURE])
 | 
			
		||||
    sensor.setup_sensor(hdc1080.Phdc1080.Pget_humidity_sensor(), hdc1080.Pmqtt_humidity,
 | 
			
		||||
    sensor.setup_sensor(hdc1080.Pget_humidity_sensor(), make.Pmqtt_humidity,
 | 
			
		||||
                        config[CONF_HUMIDITY])
 | 
			
		||||
    setup_component(hdc1080, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_HDC1080_SENSOR'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,17 +1,18 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml import pins
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.const import CONF_CF1_PIN, CONF_CF_PIN, CONF_CHANGE_MODE_EVERY, CONF_CURRENT, \
 | 
			
		||||
    CONF_CURRENT_RESISTOR, CONF_ID, CONF_NAME, CONF_POWER, CONF_SEL_PIN, CONF_UPDATE_INTERVAL, \
 | 
			
		||||
    CONF_VOLTAGE, CONF_VOLTAGE_DIVIDER
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, gpio_output_pin_expression
 | 
			
		||||
from esphomeyaml.helpers import App, PollingComponent, Pvariable, add, gpio_output_pin_expression, \
 | 
			
		||||
    setup_component
 | 
			
		||||
 | 
			
		||||
HLW8012Component = sensor.sensor_ns.HLW8012Component
 | 
			
		||||
HLW8012VoltageSensor = sensor.sensor_ns.HLW8012VoltageSensor
 | 
			
		||||
HLW8012CurrentSensor = sensor.sensor_ns.HLW8012CurrentSensor
 | 
			
		||||
HLW8012PowerSensor = sensor.sensor_ns.HLW8012PowerSensor
 | 
			
		||||
HLW8012Component = sensor.sensor_ns.class_('HLW8012Component', PollingComponent)
 | 
			
		||||
HLW8012VoltageSensor = sensor.sensor_ns.class_('HLW8012VoltageSensor', sensor.EmptySensor)
 | 
			
		||||
HLW8012CurrentSensor = sensor.sensor_ns.class_('HLW8012CurrentSensor', sensor.EmptySensor)
 | 
			
		||||
HLW8012PowerSensor = sensor.sensor_ns.class_('HLW8012PowerSensor', sensor.EmptyPollingParentSensor)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = vol.All(sensor.PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(HLW8012Component),
 | 
			
		||||
@@ -19,19 +20,25 @@ PLATFORM_SCHEMA = vol.All(sensor.PLATFORM_SCHEMA.extend({
 | 
			
		||||
    vol.Required(CONF_CF_PIN): pins.input_pin,
 | 
			
		||||
    vol.Required(CONF_CF1_PIN): pins.input_pin,
 | 
			
		||||
 | 
			
		||||
    vol.Optional(CONF_VOLTAGE): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_CURRENT): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_POWER): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_VOLTAGE): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(HLW8012VoltageSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_CURRENT): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(HLW8012CurrentSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_POWER): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(HLW8012PowerSensor),
 | 
			
		||||
    })),
 | 
			
		||||
 | 
			
		||||
    vol.Optional(CONF_CURRENT_RESISTOR): cv.resistance,
 | 
			
		||||
    vol.Optional(CONF_VOLTAGE_DIVIDER): cv.positive_float,
 | 
			
		||||
    vol.Optional(CONF_CHANGE_MODE_EVERY): vol.All(cv.uint32_t, vol.Range(min=1)),
 | 
			
		||||
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
			
		||||
}), cv.has_at_least_one_key(CONF_VOLTAGE, CONF_CURRENT, CONF_POWER))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema), cv.has_at_least_one_key(CONF_VOLTAGE, CONF_CURRENT,
 | 
			
		||||
                                                               CONF_POWER))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    sel = None
 | 
			
		||||
    for sel in gpio_output_pin_expression(config[CONF_SEL_PIN]):
 | 
			
		||||
        yield
 | 
			
		||||
 | 
			
		||||
@@ -50,8 +57,11 @@ def to_code(config):
 | 
			
		||||
        sensor.register_sensor(hlw.make_power_sensor(conf[CONF_NAME]), conf)
 | 
			
		||||
    if CONF_CURRENT_RESISTOR in config:
 | 
			
		||||
        add(hlw.set_current_resistor(config[CONF_CURRENT_RESISTOR]))
 | 
			
		||||
    if CONF_VOLTAGE_DIVIDER in config:
 | 
			
		||||
        add(hlw.set_voltage_divider(config[CONF_VOLTAGE_DIVIDER]))
 | 
			
		||||
    if CONF_CHANGE_MODE_EVERY in config:
 | 
			
		||||
        add(hlw.set_change_mode_every(config[CONF_CHANGE_MODE_EVERY]))
 | 
			
		||||
    setup_component(hlw, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_HLW8012'
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,9 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.components import sensor, i2c
 | 
			
		||||
from esphomeyaml.const import CONF_ADDRESS, CONF_ID, CONF_NAME, CONF_UPDATE_INTERVAL, CONF_RANGE
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add, setup_component, PollingComponent
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['i2c']
 | 
			
		||||
 | 
			
		||||
@@ -13,19 +13,23 @@ CONF_FIELD_STRENGTH_Y = 'field_strength_y'
 | 
			
		||||
CONF_FIELD_STRENGTH_Z = 'field_strength_z'
 | 
			
		||||
CONF_HEADING = 'heading'
 | 
			
		||||
 | 
			
		||||
HMC5883LComponent = sensor.sensor_ns.HMC5883LComponent
 | 
			
		||||
HMC5883LFieldStrengthSensor = sensor.sensor_ns.HMC5883LFieldStrengthSensor
 | 
			
		||||
HMC5883LHeadingSensor = sensor.sensor_ns.HMC5883LHeadingSensor
 | 
			
		||||
HMC5883LComponent = sensor.sensor_ns.class_('HMC5883LComponent', PollingComponent, i2c.I2CDevice)
 | 
			
		||||
HMC5883LFieldStrengthSensor = sensor.sensor_ns.class_('HMC5883LFieldStrengthSensor',
 | 
			
		||||
                                                      sensor.EmptyPollingParentSensor)
 | 
			
		||||
HMC5883LHeadingSensor = sensor.sensor_ns.class_('HMC5883LHeadingSensor',
 | 
			
		||||
                                                sensor.EmptyPollingParentSensor)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
HMC5883LRange = sensor.sensor_ns.enum('HMC5883LRange')
 | 
			
		||||
HMC5883L_RANGES = {
 | 
			
		||||
    88: sensor.sensor_ns.HMC5883L_RANGE_88_UT,
 | 
			
		||||
    130: sensor.sensor_ns.HMC5883L_RANGE_130_UT,
 | 
			
		||||
    190: sensor.sensor_ns.HMC5883L_RANGE_190_UT,
 | 
			
		||||
    250: sensor.sensor_ns.HMC5883L_RANGE_250_UT,
 | 
			
		||||
    400: sensor.sensor_ns.HMC5883L_RANGE_400_UT,
 | 
			
		||||
    470: sensor.sensor_ns.HMC5883L_RANGE_470_UT,
 | 
			
		||||
    560: sensor.sensor_ns.HMC5883L_RANGE_560_UT,
 | 
			
		||||
    810: sensor.sensor_ns.HMC5883L_RANGE_810_UT,
 | 
			
		||||
    88: HMC5883LRange.HMC5883L_RANGE_88_UT,
 | 
			
		||||
    130: HMC5883LRange.HMC5883L_RANGE_130_UT,
 | 
			
		||||
    190: HMC5883LRange.HMC5883L_RANGE_190_UT,
 | 
			
		||||
    250: HMC5883LRange.HMC5883L_RANGE_250_UT,
 | 
			
		||||
    400: HMC5883LRange.HMC5883L_RANGE_400_UT,
 | 
			
		||||
    470: HMC5883LRange.HMC5883L_RANGE_470_UT,
 | 
			
		||||
    560: HMC5883LRange.HMC5883L_RANGE_560_UT,
 | 
			
		||||
    810: HMC5883LRange.HMC5883L_RANGE_810_UT,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -36,17 +40,27 @@ def validate_range(value):
 | 
			
		||||
    return cv.one_of(*HMC5883L_RANGES)(int(value))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
SENSOR_KEYS = [CONF_FIELD_STRENGTH_X, CONF_FIELD_STRENGTH_Y, CONF_FIELD_STRENGTH_Z,
 | 
			
		||||
               CONF_HEADING]
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = vol.All(sensor.PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(HMC5883LComponent),
 | 
			
		||||
    vol.Optional(CONF_ADDRESS): cv.i2c_address,
 | 
			
		||||
    vol.Optional(CONF_FIELD_STRENGTH_X): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_FIELD_STRENGTH_Y): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_FIELD_STRENGTH_Z): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_HEADING): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_FIELD_STRENGTH_X): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(HMC5883LFieldStrengthSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_FIELD_STRENGTH_Y): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(HMC5883LFieldStrengthSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_FIELD_STRENGTH_Z): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(HMC5883LFieldStrengthSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_HEADING): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(HMC5883LHeadingSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
			
		||||
    vol.Optional(CONF_RANGE): validate_range,
 | 
			
		||||
}), cv.has_at_least_one_key(CONF_FIELD_STRENGTH_X, CONF_FIELD_STRENGTH_Y, CONF_FIELD_STRENGTH_Z,
 | 
			
		||||
                            CONF_HEADING))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema), cv.has_at_least_one_key(*SENSOR_KEYS))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -68,6 +82,7 @@ def to_code(config):
 | 
			
		||||
    if CONF_HEADING in config:
 | 
			
		||||
        conf = config[CONF_HEADING]
 | 
			
		||||
        sensor.register_sensor(hmc.Pmake_heading_sensor(conf[CONF_NAME]), conf)
 | 
			
		||||
    setup_component(hmc, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_HMC5883L'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,32 +1,47 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
from esphomeyaml.components import i2c, sensor
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.const import CONF_HUMIDITY, CONF_MAKE_ID, CONF_NAME, CONF_TEMPERATURE, \
 | 
			
		||||
    CONF_UPDATE_INTERVAL
 | 
			
		||||
from esphomeyaml.helpers import App, Application, variable
 | 
			
		||||
    CONF_UPDATE_INTERVAL, CONF_ID
 | 
			
		||||
from esphomeyaml.helpers import App, Application, PollingComponent, setup_component, variable, \
 | 
			
		||||
    Pvariable
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['i2c']
 | 
			
		||||
 | 
			
		||||
MakeHTU21DSensor = Application.MakeHTU21DSensor
 | 
			
		||||
MakeHTU21DSensor = Application.struct('MakeHTU21DSensor')
 | 
			
		||||
HTU21DComponent = sensor.sensor_ns.class_('HTU21DComponent', PollingComponent, i2c.I2CDevice)
 | 
			
		||||
HTU21DTemperatureSensor = sensor.sensor_ns.class_('HTU21DTemperatureSensor',
 | 
			
		||||
                                                  sensor.EmptyPollingParentSensor)
 | 
			
		||||
HTU21DHumiditySensor = sensor.sensor_ns.class_('HTU21DHumiditySensor',
 | 
			
		||||
                                               sensor.EmptyPollingParentSensor)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = sensor.PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(HTU21DComponent),
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeHTU21DSensor),
 | 
			
		||||
    vol.Required(CONF_TEMPERATURE): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Required(CONF_HUMIDITY): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Required(CONF_TEMPERATURE): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(HTU21DTemperatureSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Required(CONF_HUMIDITY): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(HTU21DHumiditySensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    rhs = App.make_htu21d_sensor(config[CONF_TEMPERATURE][CONF_NAME],
 | 
			
		||||
                                 config[CONF_HUMIDITY][CONF_NAME],
 | 
			
		||||
                                 config.get(CONF_UPDATE_INTERVAL))
 | 
			
		||||
    htu21d = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    sensor.setup_sensor(htu21d.Phtu21d.Pget_temperature_sensor(), htu21d.Pmqtt_temperature,
 | 
			
		||||
    make = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    htu21d = make.Phtu21d
 | 
			
		||||
    Pvariable(config[CONF_ID], htu21d)
 | 
			
		||||
 | 
			
		||||
    sensor.setup_sensor(htu21d.Pget_temperature_sensor(), make.Pmqtt_temperature,
 | 
			
		||||
                        config[CONF_TEMPERATURE])
 | 
			
		||||
    sensor.setup_sensor(htu21d.Phtu21d.Pget_humidity_sensor(), htu21d.Pmqtt_humidity,
 | 
			
		||||
    sensor.setup_sensor(htu21d.Pget_humidity_sensor(), make.Pmqtt_humidity,
 | 
			
		||||
                        config[CONF_HUMIDITY])
 | 
			
		||||
    setup_component(htu21d, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_HTU21D_SENSOR'
 | 
			
		||||
 
 | 
			
		||||
@@ -4,43 +4,47 @@ import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml import pins
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.const import CONF_GAIN, CONF_MAKE_ID, CONF_NAME, CONF_UPDATE_INTERVAL, CONF_CLK_PIN
 | 
			
		||||
from esphomeyaml.helpers import App, Application, add, gpio_input_pin_expression, variable
 | 
			
		||||
from esphomeyaml.helpers import App, Application, add, gpio_input_pin_expression, variable, \
 | 
			
		||||
    setup_component
 | 
			
		||||
 | 
			
		||||
MakeHX711Sensor = Application.MakeHX711Sensor
 | 
			
		||||
MakeHX711Sensor = Application.struct('MakeHX711Sensor')
 | 
			
		||||
HX711Sensor = sensor.sensor_ns.class_('HX711Sensor', sensor.PollingSensorComponent)
 | 
			
		||||
 | 
			
		||||
CONF_DOUT_PIN = 'dout_pin'
 | 
			
		||||
 | 
			
		||||
HX711Gain = sensor.sensor_ns.enum('HX711Gain')
 | 
			
		||||
GAINS = {
 | 
			
		||||
    128: sensor.sensor_ns.HX711_GAIN_128,
 | 
			
		||||
    32: sensor.sensor_ns.HX711_GAIN_32,
 | 
			
		||||
    64: sensor.sensor_ns.HX711_GAIN_64,
 | 
			
		||||
    128: HX711Gain.HX711_GAIN_128,
 | 
			
		||||
    32: HX711Gain.HX711_GAIN_32,
 | 
			
		||||
    64: HX711Gain.HX711_GAIN_64,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(sensor.SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(HX711Sensor),
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeHX711Sensor),
 | 
			
		||||
    vol.Required(CONF_DOUT_PIN): pins.gpio_input_pin_schema,
 | 
			
		||||
    vol.Required(CONF_CLK_PIN): pins.gpio_output_pin_schema,
 | 
			
		||||
    vol.Optional(CONF_GAIN): vol.All(cv.int_, cv.one_of(*GAINS)),
 | 
			
		||||
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
			
		||||
}))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    dout_pin = None
 | 
			
		||||
    for dout_pin in gpio_input_pin_expression(config[CONF_DOUT_PIN]):
 | 
			
		||||
        yield
 | 
			
		||||
    sck_pin = None
 | 
			
		||||
    for sck_pin in gpio_input_pin_expression(config[CONF_CLK_PIN]):
 | 
			
		||||
        yield
 | 
			
		||||
 | 
			
		||||
    rhs = App.make_hx711_sensor(config[CONF_NAME], dout_pin, sck_pin,
 | 
			
		||||
                                config.get(CONF_UPDATE_INTERVAL))
 | 
			
		||||
    make = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    hx711 = make.Phx711
 | 
			
		||||
 | 
			
		||||
    if CONF_GAIN in config:
 | 
			
		||||
        add(make.Phx711.set_gain(GAINS[config[CONF_GAIN]]))
 | 
			
		||||
        add(hx711.set_gain(GAINS[config[CONF_GAIN]]))
 | 
			
		||||
 | 
			
		||||
    sensor.setup_sensor(make.Phx711, make.Pmqtt, config)
 | 
			
		||||
    sensor.setup_sensor(hx711, make.Pmqtt, config)
 | 
			
		||||
    setup_component(hx711, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_HX711'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,34 +1,46 @@
 | 
			
		||||
# coding=utf-8
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
from esphomeyaml.components import i2c, sensor
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.const import CONF_ADDRESS, CONF_CURRENT, CONF_ID, CONF_MAX_CURRENT, \
 | 
			
		||||
    CONF_MAX_VOLTAGE, CONF_NAME, CONF_POWER, CONF_UPDATE_INTERVAL, CONF_BUS_VOLTAGE, \
 | 
			
		||||
    CONF_SHUNT_VOLTAGE, CONF_SHUNT_RESISTANCE
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable
 | 
			
		||||
from esphomeyaml.const import CONF_ADDRESS, CONF_BUS_VOLTAGE, CONF_CURRENT, CONF_ID, \
 | 
			
		||||
    CONF_MAX_CURRENT, CONF_MAX_VOLTAGE, CONF_NAME, CONF_POWER, CONF_SHUNT_RESISTANCE, \
 | 
			
		||||
    CONF_SHUNT_VOLTAGE, CONF_UPDATE_INTERVAL
 | 
			
		||||
from esphomeyaml.helpers import App, PollingComponent, Pvariable, setup_component
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['i2c']
 | 
			
		||||
 | 
			
		||||
INA219Component = sensor.sensor_ns.INA219Component
 | 
			
		||||
INA219VoltageSensor = sensor.sensor_ns.INA219VoltageSensor
 | 
			
		||||
INA219CurrentSensor = sensor.sensor_ns.INA219CurrentSensor
 | 
			
		||||
INA219PowerSensor = sensor.sensor_ns.INA219PowerSensor
 | 
			
		||||
INA219Component = sensor.sensor_ns.class_('INA219Component', PollingComponent, i2c.I2CDevice)
 | 
			
		||||
INA219VoltageSensor = sensor.sensor_ns.class_('INA219VoltageSensor',
 | 
			
		||||
                                              sensor.EmptyPollingParentSensor)
 | 
			
		||||
INA219CurrentSensor = sensor.sensor_ns.class_('INA219CurrentSensor',
 | 
			
		||||
                                              sensor.EmptyPollingParentSensor)
 | 
			
		||||
INA219PowerSensor = sensor.sensor_ns.class_('INA219PowerSensor', sensor.EmptyPollingParentSensor)
 | 
			
		||||
 | 
			
		||||
SENSOR_KEYS = [CONF_BUS_VOLTAGE, CONF_SHUNT_VOLTAGE, CONF_CURRENT,
 | 
			
		||||
               CONF_POWER]
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = vol.All(sensor.PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(INA219Component),
 | 
			
		||||
    vol.Optional(CONF_ADDRESS, default=0x40): cv.i2c_address,
 | 
			
		||||
    vol.Optional(CONF_BUS_VOLTAGE): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_SHUNT_VOLTAGE): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_CURRENT): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_POWER): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_BUS_VOLTAGE): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(INA219VoltageSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_SHUNT_VOLTAGE): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(INA219VoltageSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_CURRENT): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(INA219CurrentSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_POWER): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(INA219PowerSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_SHUNT_RESISTANCE, default=0.1): vol.All(cv.resistance,
 | 
			
		||||
                                                              vol.Range(min=0.0, max=32.0)),
 | 
			
		||||
    vol.Optional(CONF_MAX_VOLTAGE, default=32.0): vol.All(cv.voltage, vol.Range(min=0.0, max=32.0)),
 | 
			
		||||
    vol.Optional(CONF_MAX_CURRENT, default=3.2): vol.All(cv.current, vol.Range(min=0.0)),
 | 
			
		||||
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
			
		||||
}), cv.has_at_least_one_key(CONF_BUS_VOLTAGE, CONF_SHUNT_VOLTAGE, CONF_CURRENT,
 | 
			
		||||
                            CONF_POWER))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema), cv.has_at_least_one_key(*SENSOR_KEYS))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -48,6 +60,7 @@ def to_code(config):
 | 
			
		||||
    if CONF_POWER in config:
 | 
			
		||||
        conf = config[CONF_POWER]
 | 
			
		||||
        sensor.register_sensor(ina.Pmake_power_sensor(conf[CONF_NAME]), conf)
 | 
			
		||||
    setup_component(ina, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_INA219'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
# coding=utf-8
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
from esphomeyaml.components import i2c, sensor
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.const import CONF_ADDRESS, CONF_BUS_VOLTAGE, CONF_CURRENT, CONF_ID, CONF_NAME, \
 | 
			
		||||
    CONF_POWER, CONF_SHUNT_RESISTANCE, CONF_SHUNT_VOLTAGE, CONF_UPDATE_INTERVAL
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add
 | 
			
		||||
from esphomeyaml.helpers import App, PollingComponent, Pvariable, add, setup_component
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['i2c']
 | 
			
		||||
 | 
			
		||||
@@ -13,20 +13,31 @@ CONF_CHANNEL_1 = 'channel_1'
 | 
			
		||||
CONF_CHANNEL_2 = 'channel_2'
 | 
			
		||||
CONF_CHANNEL_3 = 'channel_3'
 | 
			
		||||
 | 
			
		||||
INA3221Component = sensor.sensor_ns.INA3221Component
 | 
			
		||||
INA3221VoltageSensor = sensor.sensor_ns.INA3221VoltageSensor
 | 
			
		||||
INA3221CurrentSensor = sensor.sensor_ns.INA3221CurrentSensor
 | 
			
		||||
INA3221PowerSensor = sensor.sensor_ns.INA3221PowerSensor
 | 
			
		||||
INA3221Component = sensor.sensor_ns.class_('INA3221Component', PollingComponent, i2c.I2CDevice)
 | 
			
		||||
INA3221VoltageSensor = sensor.sensor_ns.class_('INA3221VoltageSensor',
 | 
			
		||||
                                               sensor.EmptyPollingParentSensor)
 | 
			
		||||
INA3221CurrentSensor = sensor.sensor_ns.class_('INA3221CurrentSensor',
 | 
			
		||||
                                               sensor.EmptyPollingParentSensor)
 | 
			
		||||
INA3221PowerSensor = sensor.sensor_ns.class_('INA3221PowerSensor', sensor.EmptyPollingParentSensor)
 | 
			
		||||
 | 
			
		||||
SENSOR_KEYS = [CONF_BUS_VOLTAGE, CONF_SHUNT_VOLTAGE, CONF_CURRENT, CONF_POWER]
 | 
			
		||||
 | 
			
		||||
INA3221_CHANNEL_SCHEMA = vol.All(vol.Schema({
 | 
			
		||||
    vol.Optional(CONF_BUS_VOLTAGE): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_SHUNT_VOLTAGE): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_CURRENT): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_POWER): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_BUS_VOLTAGE): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(INA3221VoltageSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_SHUNT_VOLTAGE): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(INA3221VoltageSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_CURRENT): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(INA3221CurrentSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_POWER): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(INA3221PowerSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_SHUNT_RESISTANCE, default=0.1): vol.All(cv.resistance,
 | 
			
		||||
                                                              vol.Range(min=0.0, max=32.0)),
 | 
			
		||||
}), cv.has_at_least_one_key(CONF_BUS_VOLTAGE, CONF_SHUNT_VOLTAGE, CONF_CURRENT,
 | 
			
		||||
                            CONF_POWER))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema), cv.has_at_least_one_key(*SENSOR_KEYS))
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = sensor.PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(INA3221Component),
 | 
			
		||||
@@ -60,6 +71,8 @@ def to_code(config):
 | 
			
		||||
            c = conf[CONF_POWER]
 | 
			
		||||
            sensor.register_sensor(ina.Pmake_power_sensor(i, c[CONF_NAME]), c)
 | 
			
		||||
 | 
			
		||||
    setup_component(ina, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_INA3221'
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2,33 +2,37 @@ import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml import pins
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.components import sensor, spi
 | 
			
		||||
from esphomeyaml.components.spi import SPIComponent
 | 
			
		||||
from esphomeyaml.const import CONF_CS_PIN, CONF_MAKE_ID, CONF_NAME, CONF_SPI_ID, \
 | 
			
		||||
    CONF_UPDATE_INTERVAL
 | 
			
		||||
from esphomeyaml.helpers import App, Application, get_variable, gpio_output_pin_expression, variable
 | 
			
		||||
from esphomeyaml.helpers import App, Application, get_variable, gpio_output_pin_expression, \
 | 
			
		||||
    variable, setup_component
 | 
			
		||||
 | 
			
		||||
MakeMAX6675Sensor = Application.MakeMAX6675Sensor
 | 
			
		||||
MakeMAX6675Sensor = Application.struct('MakeMAX6675Sensor')
 | 
			
		||||
MAX6675Sensor = sensor.sensor_ns.class_('MAX6675Sensor', sensor.PollingSensorComponent,
 | 
			
		||||
                                        spi.SPIDevice)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(sensor.SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(MAX6675Sensor),
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeMAX6675Sensor),
 | 
			
		||||
    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,
 | 
			
		||||
}))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    spi = None
 | 
			
		||||
    for spi in get_variable(config[CONF_SPI_ID]):
 | 
			
		||||
    for spi_ in get_variable(config[CONF_SPI_ID]):
 | 
			
		||||
        yield
 | 
			
		||||
    cs = None
 | 
			
		||||
    for cs in gpio_output_pin_expression(config[CONF_CS_PIN]):
 | 
			
		||||
        yield
 | 
			
		||||
    rhs = App.make_max6675_sensor(config[CONF_NAME], spi, cs,
 | 
			
		||||
    rhs = App.make_max6675_sensor(config[CONF_NAME], spi_, cs,
 | 
			
		||||
                                  config.get(CONF_UPDATE_INTERVAL))
 | 
			
		||||
    make = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    sensor.setup_sensor(make.Pmax6675, make.Pmqtt, config)
 | 
			
		||||
    max6675 = make.Pmax6675
 | 
			
		||||
    sensor.setup_sensor(max6675, make.Pmqtt, config)
 | 
			
		||||
    setup_component(max6675, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_MAX6675_SENSOR'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,39 +1,51 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.components import sensor, uart
 | 
			
		||||
from esphomeyaml.components.uart import UARTComponent
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.const import CONF_CO2, CONF_MAKE_ID, CONF_NAME, CONF_TEMPERATURE, CONF_UART_ID, \
 | 
			
		||||
    CONF_UPDATE_INTERVAL
 | 
			
		||||
from esphomeyaml.helpers import App, Application, get_variable, variable
 | 
			
		||||
    CONF_UPDATE_INTERVAL, CONF_ID
 | 
			
		||||
from esphomeyaml.helpers import App, Application, PollingComponent, get_variable, setup_component, \
 | 
			
		||||
    variable, Pvariable
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['uart']
 | 
			
		||||
 | 
			
		||||
MakeMHZ19Sensor = Application.MakeMHZ19Sensor
 | 
			
		||||
MakeMHZ19Sensor = Application.struct('MakeMHZ19Sensor')
 | 
			
		||||
MHZ19Component = sensor.sensor_ns.class_('MHZ19Component', PollingComponent, uart.UARTDevice)
 | 
			
		||||
MHZ19TemperatureSensor = sensor.sensor_ns.class_('MHZ19TemperatureSensor',
 | 
			
		||||
                                                 sensor.EmptyPollingParentSensor)
 | 
			
		||||
MHZ19CO2Sensor = sensor.sensor_ns.class_('MHZ19CO2Sensor', sensor.EmptyPollingParentSensor)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = sensor.PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(MHZ19Component),
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeMHZ19Sensor),
 | 
			
		||||
    cv.GenerateID(CONF_UART_ID): cv.use_variable_id(UARTComponent),
 | 
			
		||||
    vol.Required(CONF_CO2): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_TEMPERATURE): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Required(CONF_CO2): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(MHZ19CO2Sensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_TEMPERATURE): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(MHZ19TemperatureSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    uart = None
 | 
			
		||||
    for uart in get_variable(config[CONF_UART_ID]):
 | 
			
		||||
    for uart_ in get_variable(config[CONF_UART_ID]):
 | 
			
		||||
        yield
 | 
			
		||||
    rhs = App.make_mhz19_sensor(uart, config[CONF_CO2][CONF_NAME],
 | 
			
		||||
    rhs = App.make_mhz19_sensor(uart_, config[CONF_CO2][CONF_NAME],
 | 
			
		||||
                                config.get(CONF_UPDATE_INTERVAL))
 | 
			
		||||
    make = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    mhz19 = make.Pmhz19
 | 
			
		||||
    Pvariable(config[CONF_ID], mhz19)
 | 
			
		||||
    sensor.setup_sensor(mhz19.Pget_co2_sensor(), make.Pmqtt, config[CONF_CO2])
 | 
			
		||||
 | 
			
		||||
    if CONF_TEMPERATURE in config:
 | 
			
		||||
        sensor.register_sensor(mhz19.Pmake_temperature_sensor(config[CONF_TEMPERATURE][CONF_NAME]),
 | 
			
		||||
                               config[CONF_TEMPERATURE])
 | 
			
		||||
 | 
			
		||||
    setup_component(mhz19, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_MHZ19'
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
from esphomeyaml.components import i2c, sensor
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.const import CONF_ADDRESS, CONF_ID, CONF_NAME, CONF_TEMPERATURE, \
 | 
			
		||||
    CONF_UPDATE_INTERVAL
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable
 | 
			
		||||
from esphomeyaml.helpers import App, PollingComponent, Pvariable, setup_component
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['i2c']
 | 
			
		||||
 | 
			
		||||
@@ -15,24 +15,41 @@ CONF_GYRO_X = 'gyro_x'
 | 
			
		||||
CONF_GYRO_Y = 'gyro_y'
 | 
			
		||||
CONF_GYRO_Z = 'gyro_z'
 | 
			
		||||
 | 
			
		||||
MPU6050Component = sensor.sensor_ns.MPU6050Component
 | 
			
		||||
MPU6050AccelSensor = sensor.sensor_ns.MPU6050AccelSensor
 | 
			
		||||
MPU6050GyroSensor = sensor.sensor_ns.MPU6050GyroSensor
 | 
			
		||||
MPU6050TemperatureSensor = sensor.sensor_ns.MPU6050TemperatureSensor
 | 
			
		||||
MPU6050Component = sensor.sensor_ns.class_('MPU6050Component', PollingComponent, i2c.I2CDevice)
 | 
			
		||||
MPU6050AccelSensor = sensor.sensor_ns.class_('MPU6050AccelSensor', sensor.EmptyPollingParentSensor)
 | 
			
		||||
MPU6050GyroSensor = sensor.sensor_ns.class_('MPU6050GyroSensor', sensor.EmptyPollingParentSensor)
 | 
			
		||||
MPU6050TemperatureSensor = sensor.sensor_ns.class_('MPU6050TemperatureSensor',
 | 
			
		||||
                                                   sensor.EmptyPollingParentSensor)
 | 
			
		||||
 | 
			
		||||
SENSOR_KEYS = [CONF_ACCEL_X, CONF_ACCEL_Y, CONF_ACCEL_Z,
 | 
			
		||||
               CONF_GYRO_X, CONF_GYRO_Y, CONF_GYRO_Z]
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = vol.All(sensor.PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(MPU6050Component),
 | 
			
		||||
    vol.Optional(CONF_ADDRESS, default=0x68): cv.i2c_address,
 | 
			
		||||
    vol.Optional(CONF_ACCEL_X): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_ACCEL_Y): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_ACCEL_Z): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_GYRO_X): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_GYRO_Y): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_GYRO_Z): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_TEMPERATURE): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_ACCEL_X): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(MPU6050AccelSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_ACCEL_Y): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(MPU6050AccelSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_ACCEL_Z): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(MPU6050AccelSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_GYRO_X): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(MPU6050GyroSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_GYRO_Y): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(MPU6050GyroSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_GYRO_Z): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(MPU6050GyroSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_TEMPERATURE): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(MPU6050TemperatureSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
			
		||||
}), cv.has_at_least_one_key(CONF_ACCEL_X, CONF_ACCEL_Y, CONF_ACCEL_Z,
 | 
			
		||||
                            CONF_GYRO_X, CONF_GYRO_Y, CONF_GYRO_Z))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema), cv.has_at_least_one_key(*SENSOR_KEYS))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -67,6 +84,8 @@ def to_code(config):
 | 
			
		||||
        rhs = mpu.Pmake_temperature_sensor(conf[CONF_NAME])
 | 
			
		||||
        sensor.register_sensor(rhs, conf)
 | 
			
		||||
 | 
			
		||||
    setup_component(mpu, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_MPU6050'
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -3,27 +3,31 @@ import voluptuous as vol
 | 
			
		||||
from esphomeyaml.components import 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
 | 
			
		||||
from esphomeyaml.helpers import App, Application, add, variable, setup_component, Component
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['mqtt']
 | 
			
		||||
 | 
			
		||||
MakeMQTTSubscribeSensor = Application.MakeMQTTSubscribeSensor
 | 
			
		||||
MakeMQTTSubscribeSensor = Application.struct('MakeMQTTSubscribeSensor')
 | 
			
		||||
MQTTSubscribeSensor = sensor.sensor_ns.class_('MQTTSubscribeSensor', sensor.Sensor, Component)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(sensor.SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(MQTTSubscribeSensor),
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeMQTTSubscribeSensor),
 | 
			
		||||
    vol.Required(CONF_TOPIC): cv.subscribe_topic,
 | 
			
		||||
    vol.Optional(CONF_QOS): cv.mqtt_qos,
 | 
			
		||||
}))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    rhs = App.make_mqtt_subscribe_sensor(config[CONF_NAME], config[CONF_TOPIC])
 | 
			
		||||
    make = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    subs = make.Psensor
 | 
			
		||||
 | 
			
		||||
    if CONF_QOS in config:
 | 
			
		||||
        add(make.Psensor.set_qos(config[CONF_QOS]))
 | 
			
		||||
        add(subs.set_qos(config[CONF_QOS]))
 | 
			
		||||
 | 
			
		||||
    sensor.setup_sensor(make.Psensor, make.Pmqtt, config)
 | 
			
		||||
    sensor.setup_sensor(subs, make.Pmqtt, config)
 | 
			
		||||
    setup_component(subs, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_MQTT_SUBSCRIBE_SENSOR'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,22 +1,34 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
from esphomeyaml.components import i2c, sensor
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.const import CONF_ADDRESS, CONF_MAKE_ID, CONF_NAME, CONF_PRESSURE, \
 | 
			
		||||
from esphomeyaml.const import CONF_ADDRESS, CONF_ID, CONF_MAKE_ID, CONF_NAME, CONF_PRESSURE, \
 | 
			
		||||
    CONF_TEMPERATURE, CONF_UPDATE_INTERVAL
 | 
			
		||||
from esphomeyaml.helpers import App, Application, add, variable
 | 
			
		||||
from esphomeyaml.helpers import App, Application, PollingComponent, Pvariable, add, \
 | 
			
		||||
    setup_component, \
 | 
			
		||||
    variable
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['i2c']
 | 
			
		||||
 | 
			
		||||
MakeMS5611Sensor = Application.MakeMS5611Sensor
 | 
			
		||||
MakeMS5611Sensor = Application.struct('MakeMS5611Sensor')
 | 
			
		||||
MS5611Component = sensor.sensor_ns.class_('MS5611Component', PollingComponent, i2c.I2CDevice)
 | 
			
		||||
MS5611TemperatureSensor = sensor.sensor_ns.class_('MS5611TemperatureSensor',
 | 
			
		||||
                                                  sensor.EmptyPollingParentSensor)
 | 
			
		||||
MS5611PressureSensor = sensor.sensor_ns.class_('MS5611PressureSensor',
 | 
			
		||||
                                               sensor.EmptyPollingParentSensor)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = sensor.PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(MS5611Component),
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeMS5611Sensor),
 | 
			
		||||
    vol.Optional(CONF_ADDRESS): cv.i2c_address,
 | 
			
		||||
    vol.Required(CONF_TEMPERATURE): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Required(CONF_PRESSURE): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Required(CONF_TEMPERATURE): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(MS5611TemperatureSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Required(CONF_PRESSURE): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(MS5611PressureSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -24,14 +36,17 @@ def to_code(config):
 | 
			
		||||
                                 config[CONF_PRESSURE][CONF_NAME],
 | 
			
		||||
                                 config.get(CONF_UPDATE_INTERVAL))
 | 
			
		||||
    make = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    ms5611 = make.Pms5611
 | 
			
		||||
    Pvariable(config[CONF_ID], ms5611)
 | 
			
		||||
 | 
			
		||||
    if CONF_ADDRESS in config:
 | 
			
		||||
        add(make.Pms5611.set_address(config[CONF_ADDRESS]))
 | 
			
		||||
        add(ms5611.set_address(config[CONF_ADDRESS]))
 | 
			
		||||
 | 
			
		||||
    sensor.setup_sensor(make.Pms5611.Pget_temperature_sensor(), make.Pmqtt_temperature,
 | 
			
		||||
    sensor.setup_sensor(ms5611.Pget_temperature_sensor(), make.Pmqtt_temperature,
 | 
			
		||||
                        config[CONF_TEMPERATURE])
 | 
			
		||||
    sensor.setup_sensor(make.Pms5611.Pget_pressure_sensor(), make.Pmqtt_pressure,
 | 
			
		||||
    sensor.setup_sensor(ms5611.Pget_pressure_sensor(), make.Pmqtt_pressure,
 | 
			
		||||
                        config[CONF_PRESSURE])
 | 
			
		||||
    setup_component(ms5611, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_MS5611'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,24 +1,26 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.components import sensor, uart
 | 
			
		||||
from esphomeyaml.components.uart import UARTComponent
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.const import CONF_FORMALDEHYDE, CONF_HUMIDITY, CONF_ID, CONF_NAME, CONF_PM_10_0, \
 | 
			
		||||
    CONF_PM_1_0, CONF_PM_2_5, CONF_TEMPERATURE, CONF_TYPE, CONF_UART_ID
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, get_variable
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, get_variable, setup_component, Component
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['uart']
 | 
			
		||||
 | 
			
		||||
PMSX003Component = sensor.sensor_ns.PMSX003Component
 | 
			
		||||
PMSX003Component = sensor.sensor_ns.class_('PMSX003Component', uart.UARTDevice, Component)
 | 
			
		||||
PMSX003Sensor = sensor.sensor_ns.class_('PMSX003Sensor', sensor.Sensor)
 | 
			
		||||
 | 
			
		||||
CONF_PMSX003 = 'PMSX003'
 | 
			
		||||
CONF_PMS5003T = 'PMS5003T'
 | 
			
		||||
CONF_PMS5003ST = 'PMS5003ST'
 | 
			
		||||
 | 
			
		||||
PMSX003Type = sensor.sensor_ns.enum('PMSX003Type')
 | 
			
		||||
PMSX003_TYPES = {
 | 
			
		||||
    CONF_PMSX003: sensor.sensor_ns.PMSX003_TYPE_X003,
 | 
			
		||||
    CONF_PMS5003T: sensor.sensor_ns.PMSX003_TYPE_5003T,
 | 
			
		||||
    CONF_PMS5003ST: sensor.sensor_ns.PMSX003_TYPE_5003ST,
 | 
			
		||||
    CONF_PMSX003: PMSX003Type.PMSX003_TYPE_X003,
 | 
			
		||||
    CONF_PMS5003T: PMSX003Type.PMSX003_TYPE_5003T,
 | 
			
		||||
    CONF_PMS5003ST: PMSX003Type.PMSX003_TYPE_5003ST,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SENSORS_TO_TYPE = {
 | 
			
		||||
@@ -38,25 +40,30 @@ def validate_pmsx003_sensors(value):
 | 
			
		||||
    return value
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PMSX003_SENSOR_SCHEMA = sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(PMSX003Sensor),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = vol.All(sensor.PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(PMSX003Component),
 | 
			
		||||
    cv.GenerateID(CONF_UART_ID): cv.use_variable_id(UARTComponent),
 | 
			
		||||
    vol.Required(CONF_TYPE): vol.All(vol.Upper, cv.one_of(*PMSX003_TYPES)),
 | 
			
		||||
 | 
			
		||||
    vol.Optional(CONF_PM_1_0): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_PM_2_5): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_PM_10_0): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_TEMPERATURE): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_HUMIDITY): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_FORMALDEHYDE): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
}), cv.has_at_least_one_key(*SENSORS_TO_TYPE))
 | 
			
		||||
    vol.Optional(CONF_PM_1_0): cv.nameable(PMSX003_SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_PM_2_5): cv.nameable(PMSX003_SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_PM_10_0): cv.nameable(PMSX003_SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_TEMPERATURE): cv.nameable(PMSX003_SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_HUMIDITY): cv.nameable(PMSX003_SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_FORMALDEHYDE): cv.nameable(PMSX003_SENSOR_SCHEMA),
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema), cv.has_at_least_one_key(*SENSORS_TO_TYPE))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    for uart in get_variable(config[CONF_UART_ID]):
 | 
			
		||||
    for uart_ in get_variable(config[CONF_UART_ID]):
 | 
			
		||||
        yield
 | 
			
		||||
 | 
			
		||||
    rhs = App.make_pmsx003(uart, PMSX003_TYPES[config[CONF_TYPE]])
 | 
			
		||||
    rhs = App.make_pmsx003(uart_, PMSX003_TYPES[config[CONF_TYPE]])
 | 
			
		||||
    pms = Pvariable(config[CONF_ID], rhs)
 | 
			
		||||
 | 
			
		||||
    if CONF_PM_1_0 in config:
 | 
			
		||||
@@ -83,6 +90,8 @@ def to_code(config):
 | 
			
		||||
        conf = config[CONF_FORMALDEHYDE]
 | 
			
		||||
        sensor.register_sensor(pms.make_formaldehyde_sensor(conf[CONF_NAME]), conf)
 | 
			
		||||
 | 
			
		||||
    setup_component(pms, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_PMSX003'
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,17 +6,23 @@ from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.const import CONF_COUNT_MODE, CONF_FALLING_EDGE, CONF_INTERNAL_FILTER, \
 | 
			
		||||
    CONF_MAKE_ID, CONF_NAME, CONF_PIN, CONF_PULL_MODE, CONF_RISING_EDGE, CONF_UPDATE_INTERVAL, \
 | 
			
		||||
    ESP_PLATFORM_ESP32
 | 
			
		||||
from esphomeyaml.helpers import App, Application, add, variable, gpio_input_pin_expression
 | 
			
		||||
from esphomeyaml.helpers import App, Application, add, variable, gpio_input_pin_expression, \
 | 
			
		||||
    setup_component
 | 
			
		||||
 | 
			
		||||
PulseCounterCountMode = sensor.sensor_ns.enum('PulseCounterCountMode')
 | 
			
		||||
COUNT_MODES = {
 | 
			
		||||
    'DISABLE': sensor.sensor_ns.PULSE_COUNTER_DISABLE,
 | 
			
		||||
    'INCREMENT': sensor.sensor_ns.PULSE_COUNTER_INCREMENT,
 | 
			
		||||
    'DECREMENT': sensor.sensor_ns.PULSE_COUNTER_DECREMENT,
 | 
			
		||||
    'DISABLE': PulseCounterCountMode.PULSE_COUNTER_DISABLE,
 | 
			
		||||
    'INCREMENT': PulseCounterCountMode.PULSE_COUNTER_INCREMENT,
 | 
			
		||||
    'DECREMENT': PulseCounterCountMode.PULSE_COUNTER_DECREMENT,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
COUNT_MODE_SCHEMA = vol.All(vol.Upper, cv.one_of(*COUNT_MODES))
 | 
			
		||||
 | 
			
		||||
MakePulseCounterSensor = Application.MakePulseCounterSensor
 | 
			
		||||
PulseCounterBase = sensor.sensor_ns.class_('PulseCounterBase')
 | 
			
		||||
MakePulseCounterSensor = Application.struct('MakePulseCounterSensor')
 | 
			
		||||
PulseCounterSensorComponent = sensor.sensor_ns.class_('PulseCounterSensorComponent',
 | 
			
		||||
                                                      sensor.PollingSensorComponent,
 | 
			
		||||
                                                      PulseCounterBase)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def validate_internal_filter(value):
 | 
			
		||||
@@ -33,6 +39,7 @@ def validate_internal_filter(value):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(sensor.SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(PulseCounterSensorComponent),
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakePulseCounterSensor),
 | 
			
		||||
    vol.Required(CONF_PIN): pins.internal_gpio_input_pin_schema,
 | 
			
		||||
    vol.Optional(CONF_COUNT_MODE): vol.Schema({
 | 
			
		||||
@@ -44,24 +51,26 @@ PLATFORM_SCHEMA = cv.nameable(sensor.SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
 | 
			
		||||
    vol.Optional(CONF_PULL_MODE): cv.invalid("The pull_mode option has been removed in 1.7.0, "
 | 
			
		||||
                                             "please use the pin mode schema now.")
 | 
			
		||||
}))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    pin = None
 | 
			
		||||
    for pin in gpio_input_pin_expression(config[CONF_PIN]):
 | 
			
		||||
        yield
 | 
			
		||||
    rhs = App.make_pulse_counter_sensor(config[CONF_NAME], pin,
 | 
			
		||||
                                        config.get(CONF_UPDATE_INTERVAL))
 | 
			
		||||
    make = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    pcnt = make.Ppcnt
 | 
			
		||||
 | 
			
		||||
    if CONF_COUNT_MODE in config:
 | 
			
		||||
        rising_edge = COUNT_MODES[config[CONF_COUNT_MODE][CONF_RISING_EDGE]]
 | 
			
		||||
        falling_edge = COUNT_MODES[config[CONF_COUNT_MODE][CONF_FALLING_EDGE]]
 | 
			
		||||
        add(pcnt.set_edge_mode(rising_edge, falling_edge))
 | 
			
		||||
    if CONF_INTERNAL_FILTER in config:
 | 
			
		||||
        add(pcnt.set_filter_us(config[CONF_INTERNAL_FILTER]))
 | 
			
		||||
    sensor.setup_sensor(make.Ppcnt, make.Pmqtt, config)
 | 
			
		||||
 | 
			
		||||
    sensor.setup_sensor(pcnt, make.Pmqtt, config)
 | 
			
		||||
    setup_component(pcnt, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_PULSE_COUNTER_SENSOR'
 | 
			
		||||
 
 | 
			
		||||
@@ -4,39 +4,42 @@ import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml import pins
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.const import CONF_MAKE_ID, CONF_NAME, CONF_RESOLUTION
 | 
			
		||||
from esphomeyaml.helpers import App, Application, add, gpio_input_pin_expression, variable
 | 
			
		||||
from esphomeyaml.helpers import App, Application, add, gpio_input_pin_expression, variable, \
 | 
			
		||||
    setup_component, Component
 | 
			
		||||
 | 
			
		||||
RotaryEncoderResolution = sensor.sensor_ns.enum('RotaryEncoderResolution')
 | 
			
		||||
RESOLUTIONS = {
 | 
			
		||||
    '1': sensor.sensor_ns.ROTARY_ENCODER_1_PULSE_PER_CYCLE,
 | 
			
		||||
    '2': sensor.sensor_ns.ROTARY_ENCODER_2_PULSES_PER_CYCLE,
 | 
			
		||||
    '4': sensor.sensor_ns.ROTARY_ENCODER_4_PULSES_PER_CYCLE,
 | 
			
		||||
    '1': RotaryEncoderResolution.ROTARY_ENCODER_1_PULSE_PER_CYCLE,
 | 
			
		||||
    '2': RotaryEncoderResolution.ROTARY_ENCODER_2_PULSES_PER_CYCLE,
 | 
			
		||||
    '4': RotaryEncoderResolution.ROTARY_ENCODER_4_PULSES_PER_CYCLE,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
CONF_PIN_A = 'pin_a'
 | 
			
		||||
CONF_PIN_B = 'pin_b'
 | 
			
		||||
CONF_PIN_RESET = 'pin_reset'
 | 
			
		||||
 | 
			
		||||
MakeRotaryEncoderSensor = Application.MakeRotaryEncoderSensor
 | 
			
		||||
MakeRotaryEncoderSensor = Application.struct('MakeRotaryEncoderSensor')
 | 
			
		||||
RotaryEncoderSensor = sensor.sensor_ns.class_('RotaryEncoderSensor', sensor.Sensor, Component)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(sensor.SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(RotaryEncoderSensor),
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeRotaryEncoderSensor),
 | 
			
		||||
    vol.Required(CONF_PIN_A): pins.internal_gpio_input_pin_schema,
 | 
			
		||||
    vol.Required(CONF_PIN_B): pins.internal_gpio_input_pin_schema,
 | 
			
		||||
    vol.Optional(CONF_PIN_RESET): pins.internal_gpio_input_pin_schema,
 | 
			
		||||
    vol.Optional(CONF_RESOLUTION): vol.All(cv.string, cv.one_of(*RESOLUTIONS)),
 | 
			
		||||
}))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    pin_a = None
 | 
			
		||||
    for pin_a in gpio_input_pin_expression(config[CONF_PIN_A]):
 | 
			
		||||
        yield
 | 
			
		||||
    pin_b = None
 | 
			
		||||
    for pin_b in gpio_input_pin_expression(config[CONF_PIN_B]):
 | 
			
		||||
        yield
 | 
			
		||||
    rhs = App.make_rotary_encoder_sensor(config[CONF_NAME], pin_a, pin_b)
 | 
			
		||||
    make = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    encoder = make.Protary_encoder
 | 
			
		||||
 | 
			
		||||
    if CONF_PIN_RESET in config:
 | 
			
		||||
        pin_i = None
 | 
			
		||||
        for pin_i in gpio_input_pin_expression(config[CONF_PIN_RESET]):
 | 
			
		||||
@@ -45,7 +48,9 @@ def to_code(config):
 | 
			
		||||
    if CONF_RESOLUTION in config:
 | 
			
		||||
        resolution = RESOLUTIONS[config[CONF_RESOLUTION]]
 | 
			
		||||
        add(encoder.set_resolution(resolution))
 | 
			
		||||
 | 
			
		||||
    sensor.setup_sensor(encoder, make.Pmqtt, config)
 | 
			
		||||
    setup_component(encoder, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_ROTARY_ENCODER_SENSOR'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,25 +1,33 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
from esphomeyaml.components import i2c, sensor
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.const import CONF_ACCURACY, CONF_ADDRESS, CONF_HUMIDITY, CONF_MAKE_ID, CONF_NAME, \
 | 
			
		||||
    CONF_TEMPERATURE, CONF_UPDATE_INTERVAL
 | 
			
		||||
from esphomeyaml.helpers import App, Application, variable
 | 
			
		||||
from esphomeyaml.const import CONF_ADDRESS, CONF_HUMIDITY, CONF_MAKE_ID, CONF_NAME, \
 | 
			
		||||
    CONF_TEMPERATURE, CONF_UPDATE_INTERVAL, CONF_ID
 | 
			
		||||
from esphomeyaml.helpers import App, Application, PollingComponent, setup_component, variable, \
 | 
			
		||||
    Pvariable
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['i2c']
 | 
			
		||||
 | 
			
		||||
MakeSHT3XDSensor = Application.MakeSHT3XDSensor
 | 
			
		||||
MakeSHT3XDSensor = Application.struct('MakeSHT3XDSensor')
 | 
			
		||||
SHT3XDComponent = sensor.sensor_ns.class_('SHT3XDComponent', PollingComponent, i2c.I2CDevice)
 | 
			
		||||
SHT3XDTemperatureSensor = sensor.sensor_ns.class_('SHT3XDTemperatureSensor',
 | 
			
		||||
                                                  sensor.EmptyPollingParentSensor)
 | 
			
		||||
SHT3XDHumiditySensor = sensor.sensor_ns.class_('SHT3XDHumiditySensor',
 | 
			
		||||
                                               sensor.EmptyPollingParentSensor)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = sensor.PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(SHT3XDComponent),
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeSHT3XDSensor),
 | 
			
		||||
    vol.Required(CONF_TEMPERATURE): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Required(CONF_HUMIDITY): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Required(CONF_TEMPERATURE): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(SHT3XDTemperatureSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Required(CONF_HUMIDITY): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(SHT3XDHumiditySensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_ADDRESS, default=0x44): cv.i2c_address,
 | 
			
		||||
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
			
		||||
 | 
			
		||||
    vol.Optional(CONF_ACCURACY): cv.invalid("The accuracy option has been removed and now "
 | 
			
		||||
                                            "defaults to HIGH."),
 | 
			
		||||
})
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -27,12 +35,15 @@ def to_code(config):
 | 
			
		||||
                                 config[CONF_HUMIDITY][CONF_NAME],
 | 
			
		||||
                                 config[CONF_ADDRESS],
 | 
			
		||||
                                 config.get(CONF_UPDATE_INTERVAL))
 | 
			
		||||
    sht3xd = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    make = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    sht3xd = make.Psht3xd
 | 
			
		||||
    Pvariable(config[CONF_ID], sht3xd)
 | 
			
		||||
 | 
			
		||||
    sensor.setup_sensor(sht3xd.Psht3xd.Pget_temperature_sensor(), sht3xd.Pmqtt_temperature,
 | 
			
		||||
    sensor.setup_sensor(sht3xd.Pget_temperature_sensor(), make.Pmqtt_temperature,
 | 
			
		||||
                        config[CONF_TEMPERATURE])
 | 
			
		||||
    sensor.setup_sensor(sht3xd.Psht3xd.Pget_humidity_sensor(), sht3xd.Pmqtt_humidity,
 | 
			
		||||
    sensor.setup_sensor(sht3xd.Pget_humidity_sensor(), make.Pmqtt_humidity,
 | 
			
		||||
                        config[CONF_HUMIDITY])
 | 
			
		||||
    setup_component(sht3xd, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_SHT3XD'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
# coding=utf-8
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
from esphomeyaml.components import i2c, sensor
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.const import CONF_ADDRESS, CONF_COLOR_TEMPERATURE, CONF_GAIN, CONF_ID, \
 | 
			
		||||
    CONF_ILLUMINANCE, CONF_INTEGRATION_TIME, CONF_NAME, CONF_UPDATE_INTERVAL
 | 
			
		||||
from esphomeyaml.helpers import App, Pvariable, add
 | 
			
		||||
from esphomeyaml.helpers import App, PollingComponent, Pvariable, add, setup_component
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['i2c']
 | 
			
		||||
 | 
			
		||||
@@ -14,38 +14,58 @@ CONF_GREEN_CHANNEL = 'green_channel'
 | 
			
		||||
CONF_BLUE_CHANNEL = 'blue_channel'
 | 
			
		||||
CONF_CLEAR_CHANNEL = 'clear_channel'
 | 
			
		||||
 | 
			
		||||
TCS34725Component = sensor.sensor_ns.TCS34725Component
 | 
			
		||||
TCS34725Component = sensor.sensor_ns.class_('TCS34725Component', PollingComponent,
 | 
			
		||||
                                            i2c.I2CDevice)
 | 
			
		||||
 | 
			
		||||
TCS34725IntegrationTime = sensor.sensor_ns.enum('TCS34725IntegrationTime')
 | 
			
		||||
TCS34725_INTEGRATION_TIMES = {
 | 
			
		||||
    '2.4ms': sensor.sensor_ns.TCS34725_INTEGRATION_TIME_2_4MS,
 | 
			
		||||
    '24ms': sensor.sensor_ns.TCS34725_INTEGRATION_TIME_24MS,
 | 
			
		||||
    '50ms': sensor.sensor_ns.TCS34725_INTEGRATION_TIME_50MS,
 | 
			
		||||
    '101ms': sensor.sensor_ns.TCS34725_INTEGRATION_TIME_101MS,
 | 
			
		||||
    '154ms': sensor.sensor_ns.TCS34725_INTEGRATION_TIME_154MS,
 | 
			
		||||
    '700ms': sensor.sensor_ns.TCS34725_INTEGRATION_TIME_700MS,
 | 
			
		||||
    '2.4ms': TCS34725IntegrationTime.TCS34725_INTEGRATION_TIME_2_4MS,
 | 
			
		||||
    '24ms': TCS34725IntegrationTime.TCS34725_INTEGRATION_TIME_24MS,
 | 
			
		||||
    '50ms': TCS34725IntegrationTime.TCS34725_INTEGRATION_TIME_50MS,
 | 
			
		||||
    '101ms': TCS34725IntegrationTime.TCS34725_INTEGRATION_TIME_101MS,
 | 
			
		||||
    '154ms': TCS34725IntegrationTime.TCS34725_INTEGRATION_TIME_154MS,
 | 
			
		||||
    '700ms': TCS34725IntegrationTime.TCS34725_INTEGRATION_TIME_700MS,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TCS34725Gain = sensor.sensor_ns.enum('TCS34725Gain')
 | 
			
		||||
TCS34725_GAINS = {
 | 
			
		||||
    '1X': sensor.sensor_ns.TCS34725_GAIN_1X,
 | 
			
		||||
    '4X': sensor.sensor_ns.TCS34725_GAIN_4X,
 | 
			
		||||
    '16X': sensor.sensor_ns.TCS34725_GAIN_16X,
 | 
			
		||||
    '60X': sensor.sensor_ns.TCS34725_GAIN_60X,
 | 
			
		||||
    '1X': TCS34725Gain.TCS34725_GAIN_1X,
 | 
			
		||||
    '4X': TCS34725Gain.TCS34725_GAIN_4X,
 | 
			
		||||
    '16X': TCS34725Gain.TCS34725_GAIN_16X,
 | 
			
		||||
    '60X': TCS34725Gain.TCS34725_GAIN_60X,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TCS35725IlluminanceSensor = sensor.sensor_ns.class_('TCS35725IlluminanceSensor',
 | 
			
		||||
                                                    sensor.EmptyPollingParentSensor)
 | 
			
		||||
TCS35725ColorTemperatureSensor = sensor.sensor_ns.class_('TCS35725ColorTemperatureSensor',
 | 
			
		||||
                                                         sensor.EmptyPollingParentSensor)
 | 
			
		||||
TCS35725ColorChannelSensor = sensor.sensor_ns.class_('TCS35725ColorChannelSensor',
 | 
			
		||||
                                                     sensor.EmptyPollingParentSensor)
 | 
			
		||||
 | 
			
		||||
COLOR_CHANNEL_SENSOR_SCHEMA = sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(TCS35725ColorChannelSensor),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
SENSOR_KEYS = [CONF_RED_CHANNEL, CONF_GREEN_CHANNEL, CONF_BLUE_CHANNEL,
 | 
			
		||||
               CONF_CLEAR_CHANNEL, CONF_ILLUMINANCE, CONF_COLOR_TEMPERATURE]
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = vol.All(sensor.PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(TCS34725Component),
 | 
			
		||||
    vol.Optional(CONF_ADDRESS): cv.i2c_address,
 | 
			
		||||
    vol.Optional(CONF_RED_CHANNEL): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_GREEN_CHANNEL): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_BLUE_CHANNEL): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_CLEAR_CHANNEL): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_ILLUMINANCE): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_COLOR_TEMPERATURE): cv.nameable(sensor.SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_RED_CHANNEL): cv.nameable(COLOR_CHANNEL_SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_GREEN_CHANNEL): cv.nameable(COLOR_CHANNEL_SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_BLUE_CHANNEL): cv.nameable(COLOR_CHANNEL_SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_CLEAR_CHANNEL): cv.nameable(COLOR_CHANNEL_SENSOR_SCHEMA),
 | 
			
		||||
    vol.Optional(CONF_ILLUMINANCE): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(TCS35725IlluminanceSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_COLOR_TEMPERATURE): cv.nameable(sensor.SENSOR_SCHEMA.extend({
 | 
			
		||||
        cv.GenerateID(): cv.declare_variable_id(TCS35725ColorTemperatureSensor),
 | 
			
		||||
    })),
 | 
			
		||||
    vol.Optional(CONF_INTEGRATION_TIME): cv.one_of(*TCS34725_INTEGRATION_TIMES),
 | 
			
		||||
    vol.Optional(CONF_GAIN): vol.All(vol.Upper, cv.one_of(*TCS34725_GAINS)),
 | 
			
		||||
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
			
		||||
}), cv.has_at_least_one_key(CONF_RED_CHANNEL, CONF_GREEN_CHANNEL, CONF_BLUE_CHANNEL,
 | 
			
		||||
                            CONF_CLEAR_CHANNEL, CONF_ILLUMINANCE, CONF_COLOR_TEMPERATURE))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema), cv.has_at_least_one_key(*SENSOR_KEYS))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -76,6 +96,8 @@ def to_code(config):
 | 
			
		||||
        conf = config[CONF_COLOR_TEMPERATURE]
 | 
			
		||||
        sensor.register_sensor(tcs.Pmake_color_temperature_sensor(conf[CONF_NAME]), conf)
 | 
			
		||||
 | 
			
		||||
    setup_component(tcs, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_TCS34725'
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -3,27 +3,32 @@ import voluptuous as vol
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.const import CONF_LAMBDA, CONF_MAKE_ID, CONF_NAME, CONF_UPDATE_INTERVAL
 | 
			
		||||
from esphomeyaml.helpers import App, process_lambda, variable, Application, float_, optional, add
 | 
			
		||||
from esphomeyaml.helpers import App, process_lambda, variable, Application, float_, optional, add, \
 | 
			
		||||
    setup_component
 | 
			
		||||
 | 
			
		||||
MakeTemplateSensor = Application.MakeTemplateSensor
 | 
			
		||||
MakeTemplateSensor = Application.struct('MakeTemplateSensor')
 | 
			
		||||
TemplateSensor = sensor.sensor_ns.class_('TemplateSensor', sensor.PollingSensorComponent)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(sensor.SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(TemplateSensor),
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeTemplateSensor),
 | 
			
		||||
    vol.Required(CONF_LAMBDA): cv.lambda_,
 | 
			
		||||
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
			
		||||
}))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    rhs = App.make_template_sensor(config[CONF_NAME], config.get(CONF_UPDATE_INTERVAL))
 | 
			
		||||
    make = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    sensor.setup_sensor(make.Ptemplate_, make.Pmqtt, config)
 | 
			
		||||
    template = make.Ptemplate_
 | 
			
		||||
 | 
			
		||||
    sensor.setup_sensor(template, make.Pmqtt, config)
 | 
			
		||||
    setup_component(template, config)
 | 
			
		||||
 | 
			
		||||
    template_ = None
 | 
			
		||||
    for template_ in process_lambda(config[CONF_LAMBDA], [],
 | 
			
		||||
                                    return_type=optional.template(float_)):
 | 
			
		||||
        yield
 | 
			
		||||
    add(make.Ptemplate_.set_template(template_))
 | 
			
		||||
    add(template.set_template(template_))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_TEMPLATE_SENSOR'
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										39
									
								
								esphomeyaml/components/sensor/total_daily_energy.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								esphomeyaml/components/sensor/total_daily_energy.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
from esphomeyaml.components import sensor, time
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.const import CONF_MAKE_ID, CONF_NAME, CONF_TIME_ID
 | 
			
		||||
from esphomeyaml.helpers import App, Application, Component, get_variable, setup_component, variable
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['time']
 | 
			
		||||
 | 
			
		||||
CONF_POWER_ID = 'power_id'
 | 
			
		||||
MakeTotalDailyEnergySensor = Application.struct('MakeTotalDailyEnergySensor')
 | 
			
		||||
TotalDailyEnergy = sensor.sensor_ns.class_('TotalDailyEnergy', sensor.Sensor, Component)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(sensor.SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(TotalDailyEnergy),
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeTotalDailyEnergySensor),
 | 
			
		||||
    cv.GenerateID(CONF_TIME_ID): cv.use_variable_id(time.RealTimeClockComponent),
 | 
			
		||||
    vol.Required(CONF_POWER_ID): cv.use_variable_id(sensor.Sensor),
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    for time_ in get_variable(config[CONF_TIME_ID]):
 | 
			
		||||
        yield
 | 
			
		||||
    for sens in get_variable(config[CONF_POWER_ID]):
 | 
			
		||||
        yield
 | 
			
		||||
    rhs = App.make_total_daily_energy_sensor(config[CONF_NAME], time_, sens)
 | 
			
		||||
    make = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    total_energy = make.Ptotal_energy
 | 
			
		||||
 | 
			
		||||
    sensor.setup_sensor(total_energy, make.Pmqtt, config)
 | 
			
		||||
    setup_component(total_energy, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_TOTAL_DAILY_ENERGY_SENSOR'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_hass_config(data, config):
 | 
			
		||||
    return sensor.core_to_hass_config(data, config)
 | 
			
		||||
@@ -1,21 +1,24 @@
 | 
			
		||||
import voluptuous as vol
 | 
			
		||||
 | 
			
		||||
import esphomeyaml.config_validation as cv
 | 
			
		||||
from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.components import sensor, i2c
 | 
			
		||||
from esphomeyaml.const import CONF_ADDRESS, CONF_GAIN, CONF_INTEGRATION_TIME, CONF_MAKE_ID, \
 | 
			
		||||
    CONF_NAME, CONF_UPDATE_INTERVAL
 | 
			
		||||
from esphomeyaml.helpers import App, Application, add, variable
 | 
			
		||||
from esphomeyaml.helpers import App, Application, add, variable, setup_component
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES = ['i2c']
 | 
			
		||||
 | 
			
		||||
TSL2561IntegrationTime = sensor.sensor_ns.enum('TSL2561IntegrationTime')
 | 
			
		||||
INTEGRATION_TIMES = {
 | 
			
		||||
    14: sensor.sensor_ns.TSL2561_INTEGRATION_14MS,
 | 
			
		||||
    101: sensor.sensor_ns.TSL2561_INTEGRATION_101MS,
 | 
			
		||||
    402: sensor.sensor_ns.TSL2561_INTEGRATION_402MS,
 | 
			
		||||
    14: TSL2561IntegrationTime.TSL2561_INTEGRATION_14MS,
 | 
			
		||||
    101: TSL2561IntegrationTime.TSL2561_INTEGRATION_101MS,
 | 
			
		||||
    402: TSL2561IntegrationTime.TSL2561_INTEGRATION_402MS,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TSL2561Gain = sensor.sensor_ns.enum('TSL2561Gain')
 | 
			
		||||
GAINS = {
 | 
			
		||||
    '1X': sensor.sensor_ns.TSL2561_GAIN_1X,
 | 
			
		||||
    '16X': sensor.sensor_ns.TSL2561_GAIN_16X,
 | 
			
		||||
    '1X': TSL2561Gain.TSL2561_GAIN_1X,
 | 
			
		||||
    '16X': TSL2561Gain.TSL2561_GAIN_16X,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
CONF_IS_CS_PACKAGE = 'is_cs_package'
 | 
			
		||||
@@ -28,16 +31,19 @@ def validate_integration_time(value):
 | 
			
		||||
    return value
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
MakeTSL2561Sensor = Application.MakeTSL2561Sensor
 | 
			
		||||
MakeTSL2561Sensor = Application.struct('MakeTSL2561Sensor')
 | 
			
		||||
TSL2561Sensor = sensor.sensor_ns.class_('TSL2561Sensor', sensor.PollingSensorComponent,
 | 
			
		||||
                                        i2c.I2CDevice)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(sensor.SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(TSL2561Sensor),
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeTSL2561Sensor),
 | 
			
		||||
    vol.Optional(CONF_ADDRESS, default=0x39): cv.i2c_address,
 | 
			
		||||
    vol.Optional(CONF_INTEGRATION_TIME): validate_integration_time,
 | 
			
		||||
    vol.Optional(CONF_GAIN): vol.All(vol.Upper, cv.one_of(*GAINS)),
 | 
			
		||||
    vol.Optional(CONF_IS_CS_PACKAGE): cv.boolean,
 | 
			
		||||
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
			
		||||
}))
 | 
			
		||||
}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
@@ -45,13 +51,16 @@ def to_code(config):
 | 
			
		||||
                                  config.get(CONF_UPDATE_INTERVAL))
 | 
			
		||||
    make_tsl = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    tsl2561 = make_tsl.Ptsl2561
 | 
			
		||||
 | 
			
		||||
    if CONF_INTEGRATION_TIME in config:
 | 
			
		||||
        add(tsl2561.set_integration_time(INTEGRATION_TIMES[config[CONF_INTEGRATION_TIME]]))
 | 
			
		||||
    if CONF_GAIN in config:
 | 
			
		||||
        add(tsl2561.set_gain(GAINS[config[CONF_GAIN]]))
 | 
			
		||||
    if CONF_IS_CS_PACKAGE in config:
 | 
			
		||||
        add(tsl2561.set_is_cs_package(config[CONF_IS_CS_PACKAGE]))
 | 
			
		||||
 | 
			
		||||
    sensor.setup_sensor(tsl2561, make_tsl.Pmqtt, config)
 | 
			
		||||
    setup_component(tsl2561, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_TSL2561'
 | 
			
		||||
 
 | 
			
		||||
@@ -6,11 +6,14 @@ from esphomeyaml.components import sensor
 | 
			
		||||
from esphomeyaml.const import CONF_ECHO_PIN, CONF_MAKE_ID, CONF_NAME, CONF_TIMEOUT_METER, \
 | 
			
		||||
    CONF_TIMEOUT_TIME, CONF_TRIGGER_PIN, CONF_UPDATE_INTERVAL
 | 
			
		||||
from esphomeyaml.helpers import App, Application, add, gpio_input_pin_expression, \
 | 
			
		||||
    gpio_output_pin_expression, variable
 | 
			
		||||
    gpio_output_pin_expression, variable, setup_component
 | 
			
		||||
 | 
			
		||||
MakeUltrasonicSensor = Application.MakeUltrasonicSensor
 | 
			
		||||
MakeUltrasonicSensor = Application.struct('MakeUltrasonicSensor')
 | 
			
		||||
UltrasonicSensorComponent = sensor.sensor_ns.class_('UltrasonicSensorComponent',
 | 
			
		||||
                                                    sensor.PollingSensorComponent)
 | 
			
		||||
 | 
			
		||||
PLATFORM_SCHEMA = cv.nameable(sensor.SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
    cv.GenerateID(): cv.declare_variable_id(UltrasonicSensorComponent),
 | 
			
		||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeUltrasonicSensor),
 | 
			
		||||
    vol.Required(CONF_TRIGGER_PIN): pins.gpio_output_pin_schema,
 | 
			
		||||
    vol.Required(CONF_ECHO_PIN): pins.internal_gpio_input_pin_schema,
 | 
			
		||||
@@ -21,21 +24,22 @@ PLATFORM_SCHEMA = cv.nameable(sensor.SENSOR_PLATFORM_SCHEMA.extend({
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def to_code(config):
 | 
			
		||||
    trigger = None
 | 
			
		||||
    for trigger in gpio_output_pin_expression(config[CONF_TRIGGER_PIN]):
 | 
			
		||||
        yield
 | 
			
		||||
    echo = None
 | 
			
		||||
    for echo in gpio_input_pin_expression(config[CONF_ECHO_PIN]):
 | 
			
		||||
        yield
 | 
			
		||||
    rhs = App.make_ultrasonic_sensor(config[CONF_NAME], trigger, echo,
 | 
			
		||||
                                     config.get(CONF_UPDATE_INTERVAL))
 | 
			
		||||
    make = variable(config[CONF_MAKE_ID], rhs)
 | 
			
		||||
    ultrasonic = make.Pultrasonic
 | 
			
		||||
 | 
			
		||||
    if CONF_TIMEOUT_TIME in config:
 | 
			
		||||
        add(ultrasonic.set_timeout_us(config[CONF_TIMEOUT_TIME]))
 | 
			
		||||
    elif CONF_TIMEOUT_METER in config:
 | 
			
		||||
        add(ultrasonic.set_timeout_m(config[CONF_TIMEOUT_METER]))
 | 
			
		||||
 | 
			
		||||
    sensor.setup_sensor(ultrasonic, make.Pmqtt, config)
 | 
			
		||||
    setup_component(ultrasonic, config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BUILD_FLAGS = '-DUSE_ULTRASONIC_SENSOR'
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user