Esempio n. 1
0
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.cpp_generator import variable, process_lambda, add
from esphomeyaml.cpp_helpers import setup_component
from esphomeyaml.cpp_types import Application, App, optional, NoArg

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),
}).extend(cv.COMPONENT_SCHEMA.schema), cv.has_at_least_one_key(CONF_LAMBDA, CONF_OPTIMISTIC))


def to_code(config):
    rhs = App.make_template_cover(config[CONF_NAME])
    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:
        for template_ in process_lambda(config[CONF_LAMBDA], [],
                                        return_type=optional.template(cover.CoverState)):
Esempio n. 2
0
import voluptuous as vol

from esphomeyaml import automation
import esphomeyaml.config_validation as cv
from esphomeyaml.const import CONF_ID, CONF_INTERVAL
from esphomeyaml.cpp_generator import Pvariable
from esphomeyaml.cpp_helpers import setup_component
from esphomeyaml.cpp_types import App, NoArg, PollingComponent, Trigger, esphomelib_ns

IntervalTrigger = esphomelib_ns.class_('IntervalTrigger',
                                       Trigger.template(NoArg),
                                       PollingComponent)

CONFIG_SCHEMA = automation.validate_automation(
    vol.Schema({
        vol.Required(CONF_ID):
        cv.declare_variable_id(IntervalTrigger),
        vol.Required(CONF_INTERVAL):
        cv.positive_time_period_milliseconds,
    }).extend(cv.COMPONENT_SCHEMA.schema))


def to_code(config):
    for conf in config:
        rhs = App.register_component(IntervalTrigger.new(
            config[CONF_INTERVAL]))
        trigger = Pvariable(conf[CONF_ID], rhs)
        setup_component(trigger, conf)

        automation.build_automation(trigger, NoArg, conf)
Esempio n. 3
0
            MQTT_MESSAGE_BASE.extend({
                vol.Optional(CONF_LEVEL):
                logger.is_log_level,
            }), validate_message_just_topic),
        vol.Optional(CONF_SSL_FINGERPRINTS):
        vol.All(cv.only_on_esp8266, cv.ensure_list(validate_fingerprint)),
        vol.Optional(CONF_KEEPALIVE):
        cv.positive_time_period_seconds,
        vol.Optional(CONF_REBOOT_TIMEOUT):
        cv.positive_time_period_milliseconds,
        vol.Optional(CONF_ON_MESSAGE):
        automation.validate_automation({
            cv.GenerateID(CONF_TRIGGER_ID):
            cv.declare_variable_id(MQTTMessageTrigger),
            vol.Required(CONF_TOPIC):
            cv.subscribe_topic,
            vol.Optional(CONF_QOS):
            cv.mqtt_qos,
            vol.Optional(CONF_PAYLOAD):
            cv.string_strict,
        }),
        vol.Optional(CONF_ON_JSON_MESSAGE):
        automation.validate_automation({
            cv.GenerateID(CONF_TRIGGER_ID):
            cv.declare_variable_id(MQTTJsonMessageTrigger),
            vol.Required(CONF_TOPIC):
            cv.subscribe_topic,
            vol.Optional(CONF_QOS, default=0):
            cv.mqtt_qos,
        }),
    }), validate_config)
Esempio n. 4
0
CONFIG_SCHEMA = vol.Schema({
    vol.Required(CONF_NAME): cv.valid_name,
    vol.Required(CONF_PLATFORM): cv.one_of('ESP8266', 'ESPRESSIF8266', 'ESP32', 'ESPRESSIF32',
                                           upper=True),
    vol.Required(CONF_BOARD): validate_board,
    vol.Optional(CONF_ESPHOMELIB_VERSION, default='latest'): ESPHOMELIB_VERSION_SCHEMA,
    vol.Optional(CONF_ARDUINO_VERSION, default='recommended'): validate_arduino_version,
    vol.Optional(CONF_USE_CUSTOM_CODE, default=False): cv.boolean,
    vol.Optional(CONF_BUILD_PATH, default=default_build_path): cv.string,
    vol.Optional(CONF_PLATFORMIO_OPTIONS): vol.Schema({
        cv.string_strict: vol.Any([cv.string], cv.string),
    }),

    vol.Optional(CONF_BOARD_FLASH_MODE): cv.one_of(*BUILD_FLASH_MODES, lower=True),
    vol.Optional(CONF_ON_BOOT): automation.validate_automation({
        cv.GenerateID(CONF_TRIGGER_ID): cv.declare_variable_id(StartupTrigger),
        vol.Optional(CONF_PRIORITY): cv.float_,
    }),
    vol.Optional(CONF_ON_SHUTDOWN): automation.validate_automation({
        cv.GenerateID(CONF_TRIGGER_ID): cv.declare_variable_id(ShutdownTrigger),
    }),
    vol.Optional(CONF_ON_LOOP): automation.validate_automation({
        cv.GenerateID(CONF_TRIGGER_ID): cv.declare_variable_id(LoopTrigger),
    }),
    vol.Optional(CONF_INCLUDES): cv.ensure_list(cv.file_),
    vol.Optional(CONF_LIBRARIES): cv.ensure_list(cv.string_strict),

    vol.Optional('library_uri'): cv.invalid("The library_uri option has been removed in 1.8.0 and "
                                            "was moved into the esphomelib_version option."),
    vol.Optional('use_build_flags'): cv.invalid("The use_build_flags option has been replaced by "
                                                "use_custom_code option in 1.8.0."),
})
Esempio n. 5
0
SENSOR_SCHEMA = cv.MQTT_COMPONENT_SCHEMA.extend({
    cv.GenerateID(CONF_MQTT_ID):
    cv.declare_variable_id(MQTTSensorComponent),
    vol.Optional(CONF_UNIT_OF_MEASUREMENT):
    cv.string_strict,
    vol.Optional(CONF_ICON):
    cv.icon,
    vol.Optional(CONF_ACCURACY_DECIMALS):
    vol.Coerce(int),
    vol.Optional(CONF_EXPIRE_AFTER):
    vol.Any(None, cv.positive_time_period_milliseconds),
    vol.Optional(CONF_FILTERS):
    FILTERS_SCHEMA,
    vol.Optional(CONF_ON_VALUE):
    automation.validate_automation({
        cv.GenerateID(CONF_TRIGGER_ID):
        cv.declare_variable_id(SensorStateTrigger),
    }),
    vol.Optional(CONF_ON_RAW_VALUE):
    automation.validate_automation({
        cv.GenerateID(CONF_TRIGGER_ID):
        cv.declare_variable_id(SensorRawStateTrigger),
    }),
    vol.Optional(CONF_ON_VALUE_RANGE):
    automation.validate_automation(
        {
            cv.GenerateID(CONF_TRIGGER_ID):
            cv.declare_variable_id(ValueRangeTrigger),
            vol.Optional(CONF_ABOVE):
            cv.float_,
            vol.Optional(CONF_BELOW):
            cv.float_,
Esempio n. 6
0
        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),
    vol.Optional(CONF_DEVICE_CLASS):
    cv.one_of(*DEVICE_CLASSES, lower=True),
    vol.Optional(CONF_FILTERS):
    FILTERS_SCHEMA,
    vol.Optional(CONF_ON_PRESS):
    automation.validate_automation({
        cv.GenerateID(CONF_TRIGGER_ID):
        cv.declare_variable_id(PressTrigger),
    }),
    vol.Optional(CONF_ON_RELEASE):
    automation.validate_automation({
        cv.GenerateID(CONF_TRIGGER_ID):
        cv.declare_variable_id(ReleaseTrigger),
    }),
    vol.Optional(CONF_ON_CLICK):
    automation.validate_automation({
        cv.GenerateID(CONF_TRIGGER_ID):
        cv.declare_variable_id(ClickTrigger),
        vol.Optional(CONF_MIN_LENGTH, default='50ms'):
        cv.positive_time_period_milliseconds,
        vol.Optional(CONF_MAX_LENGTH, default='350ms'):
        cv.positive_time_period_milliseconds,
    }),
Esempio n. 7
0
# pylint: disable=invalid-name
text_sensor_ns = esphomelib_ns.namespace('text_sensor')
TextSensor = text_sensor_ns.class_('TextSensor', Nameable)
MQTTTextSensor = text_sensor_ns.class_('MQTTTextSensor', mqtt.MQTTComponent)

TextSensorStateTrigger = text_sensor_ns.class_('TextSensorStateTrigger',
                                               Trigger.template(std_string))

TEXT_SENSOR_SCHEMA = cv.MQTT_COMPONENT_SCHEMA.extend({
    cv.GenerateID(CONF_MQTT_ID):
    cv.declare_variable_id(MQTTTextSensor),
    vol.Optional(CONF_ICON):
    cv.icon,
    vol.Optional(CONF_ON_VALUE):
    automation.validate_automation({
        cv.GenerateID(CONF_TRIGGER_ID):
        cv.declare_variable_id(TextSensorStateTrigger),
    }),
})

TEXT_SENSOR_PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(TEXT_SENSOR_SCHEMA.schema)


def setup_text_sensor_core_(text_sensor_var, mqtt_var, config):
    if CONF_INTERNAL in config:
        add(text_sensor_var.set_internal(config[CONF_INTERNAL]))
    if CONF_ICON in config:
        add(text_sensor_var.set_icon(config[CONF_ICON]))

    for conf in config.get(CONF_ON_VALUE, []):
        rhs = text_sensor_var.make_state_trigger()
        trigger = Pvariable(conf[CONF_TRIGGER_ID], rhs)
Esempio n. 8
0
            vol.Optional(CONF_LAMBDA): cv.lambda_,
        }, cv.has_exactly_one_key(*FILTER_KEYS))
])

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,
    vol.Optional(CONF_ON_PRESS):
    automation.validate_automation({
        cv.GenerateID(CONF_TRIGGER_ID):
        cv.declare_variable_id(PressTrigger),
    }),
    vol.Optional(CONF_ON_RELEASE):
    automation.validate_automation({
        cv.GenerateID(CONF_TRIGGER_ID):
        cv.declare_variable_id(ReleaseTrigger),
    }),
    vol.Optional(CONF_ON_CLICK):
    automation.validate_automation({
        cv.GenerateID(CONF_TRIGGER_ID):
        cv.declare_variable_id(ClickTrigger),
        vol.Optional(CONF_MIN_LENGTH, default='50ms'):
        cv.positive_time_period_milliseconds,
        vol.Optional(CONF_MAX_LENGTH, default='350ms'):
        cv.positive_time_period_milliseconds,
    }),
Esempio n. 9
0
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),
    }).extend(cv.COMPONENT_SCHEMA.schema),
    cv.has_at_least_one_key(CONF_LAMBDA, CONF_OPTIMISTIC))


def to_code(config):
    rhs = App.make_template_cover(config[CONF_NAME])
    make = variable(config[CONF_MAKE_ID], rhs)

    cover.setup_cover(make.Ptemplate_, make.Pmqtt, config)
    setup_component(make.Ptemplate_, config)
Esempio n. 10
0
        None,
        MQTT_MESSAGE_BASE.extend({
            vol.Optional(CONF_LEVEL): logger.is_log_level,
        }), validate_message_just_topic),
    vol.Optional(CONF_SSL_FINGERPRINTS):
    vol.All(cv.only_on_esp8266, cv.ensure_list, [validate_fingerprint]),
    vol.Optional(CONF_KEEPALIVE):
    cv.positive_time_period_seconds,
    vol.Optional(CONF_REBOOT_TIMEOUT):
    cv.positive_time_period_milliseconds,
    vol.Optional(CONF_ON_MESSAGE):
    vol.All(cv.ensure_list, [
        automation.validate_automation({
            cv.GenerateID(CONF_TRIGGER_ID):
            cv.declare_variable_id(MQTTMessageTrigger),
            vol.Required(CONF_TOPIC):
            cv.publish_topic,
            vol.Optional(CONF_QOS, default=0):
            cv.mqtt_qos,
        })
    ])
})


def exp_mqtt_message(config):
    if config is None:
        return optional(TemplateArguments(MQTTMessage))
    exp = StructInitializer(MQTTMessage, ('topic', config[CONF_TOPIC]),
                            ('payload', config.get(CONF_PAYLOAD, "")),
                            ('qos', config[CONF_QOS]),
                            ('retain', config[CONF_RETAIN]))
    return exp
Esempio n. 11
0
    CONF_TURN_ON_ACTION, CONF_OPTIMISTIC
from esphomeyaml.helpers import App, Application, process_lambda, variable, NoArg, add, bool_, \
    optional

MakeTemplateSwitch = Application.MakeTemplateSwitch

PLATFORM_SCHEMA = cv.nameable(
    switch.SWITCH_PLATFORM_SCHEMA.extend({
        cv.GenerateID(CONF_MAKE_ID):
        cv.declare_variable_id(MakeTemplateSwitch),
        vol.Optional(CONF_LAMBDA):
        cv.lambda_,
        vol.Optional(CONF_OPTIMISTIC):
        cv.boolean,
        vol.Optional(CONF_TURN_OFF_ACTION):
        automation.validate_automation(),
        vol.Optional(CONF_TURN_ON_ACTION):
        automation.validate_automation(),
    }), cv.has_at_least_one_key(CONF_LAMBDA, CONF_OPTIMISTIC))


def to_code(config):
    rhs = App.make_template_switch(config[CONF_NAME])
    make = variable(config[CONF_MAKE_ID], rhs)

    if CONF_LAMBDA in config:
        template_ = None
        for template_ in process_lambda(config[CONF_LAMBDA], [],
                                        return_type=optional.template(bool_)):
            yield
        add(make.Ptemplate_.set_state_lambda(template_))
Esempio n. 12
0
FILTERS_SCHEMA = vol.All(cv.ensure_list, [vol.All({
    vol.Optional(CONF_INVERT): None,
    vol.Optional(CONF_DELAYED_ON): cv.positive_time_period_milliseconds,
    vol.Optional(CONF_DELAYED_OFF): cv.positive_time_period_milliseconds,
    vol.Optional(CONF_HEARTBEAT): cv.positive_time_period_milliseconds,
    vol.Optional(CONF_LAMBDA): cv.lambda_,
}, cv.has_exactly_one_key(*FILTER_KEYS))])

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,
    vol.Optional(CONF_ON_PRESS): vol.All(cv.ensure_list, [automation.validate_automation({
        cv.GenerateID(CONF_TRIGGER_ID): cv.declare_variable_id(PressTrigger),
    })]),
    vol.Optional(CONF_ON_RELEASE): vol.All(cv.ensure_list, [automation.validate_automation({
        cv.GenerateID(CONF_TRIGGER_ID): cv.declare_variable_id(ReleaseTrigger),
    })]),
    vol.Optional(CONF_ON_CLICK): vol.All(cv.ensure_list, [automation.validate_automation({
        cv.GenerateID(CONF_TRIGGER_ID): cv.declare_variable_id(ClickTrigger),
        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_DOUBLE_CLICK):
        vol.All(cv.ensure_list, [automation.validate_automation({
            cv.GenerateID(CONF_TRIGGER_ID): cv.declare_variable_id(DoubleClickTrigger),
            vol.Optional(CONF_MIN_LENGTH, default='50ms'): cv.positive_time_period_milliseconds,
            vol.Optional(CONF_MAX_LENGTH, default='350ms'): cv.positive_time_period_milliseconds,
        })]),
Esempio n. 13
0
PN532Component = binary_sensor.binary_sensor_ns.PN532Component
PN532Trigger = binary_sensor.binary_sensor_ns.PN532Trigger

CONFIG_SCHEMA = vol.All(cv.ensure_list, [
    vol.Schema({
        cv.GenerateID():
        cv.declare_variable_id(PN532Component),
        cv.GenerateID(CONF_SPI_ID):
        cv.use_variable_id(SPIComponent),
        vol.Required(CONF_CS_PIN):
        pins.gpio_output_pin_schema,
        vol.Optional(CONF_UPDATE_INTERVAL):
        cv.update_interval,
        vol.Optional(CONF_ON_TAG):
        automation.validate_automation({
            cv.GenerateID(CONF_TRIGGER_ID):
            cv.declare_variable_id(PN532Trigger),
        }),
    })
])


def to_code(config):
    for conf in config:
        spi = None
        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))
        pn532 = Pvariable(conf[CONF_ID], rhs)
Esempio n. 14
0
DEFAULT_LIBRARY_URI = u'https://github.com/OttoWinter/esphomelib.git#v1.7.0'

BUILD_FLASH_MODES = ['qio', 'qout', 'dio', 'dout']
StartupTrigger = esphomelib_ns.StartupTrigger
ShutdownTrigger = esphomelib_ns.ShutdownTrigger

CORE_SCHEMA = vol.Schema({
    vol.Required(CONF_NAME): cv.valid_name,
    vol.Required(CONF_PLATFORM): cv.string,
    vol.Required(CONF_BOARD): cv.string,
    vol.Optional(CONF_LIBRARY_URI, default=DEFAULT_LIBRARY_URI): cv.string,
    vol.Optional(CONF_SIMPLIFY, default=True): cv.boolean,
    vol.Optional(CONF_USE_BUILD_FLAGS, default=True): cv.boolean,
    vol.Optional(CONF_BOARD_FLASH_MODE): vol.All(vol.Lower, cv.one_of(*BUILD_FLASH_MODES)),
    vol.Optional(CONF_ON_BOOT): vol.All(cv.ensure_list, [automation.validate_automation({
        cv.GenerateID(CONF_TRIGGER_ID): cv.declare_variable_id(StartupTrigger),
        vol.Optional(CONF_PRIORITY): vol.Coerce(float),
    })]),
    vol.Optional(CONF_ON_SHUTDOWN): vol.All(cv.ensure_list, [automation.validate_automation({
        cv.GenerateID(CONF_TRIGGER_ID): cv.declare_variable_id(ShutdownTrigger),
    })]),
    vol.Optional(CONF_BUILD_PATH): cv.string,
})

REQUIRED_COMPONENTS = [
    CONF_ESPHOMEYAML, CONF_WIFI
]

_COMPONENT_CACHE = {}
_ALL_COMPONENTS = []

Esempio n. 15
0
    cv.string,
    vol.Required(CONF_BOARD):
    cv.string,
    vol.Optional(CONF_LIBRARY_URI, default=DEFAULT_LIBRARY_URI):
    cv.string,
    vol.Optional(CONF_SIMPLIFY, default=True):
    cv.boolean,
    vol.Optional(CONF_USE_BUILD_FLAGS, default=True):
    cv.boolean,
    vol.Optional(CONF_BOARD_FLASH_MODE):
    vol.All(vol.Lower, cv.one_of(*BUILD_FLASH_MODES)),
    vol.Optional(CONF_ON_BOOT):
    vol.All(cv.ensure_list, [
        automation.validate_automation({
            cv.GenerateID(CONF_TRIGGER_ID):
            cv.declare_variable_id(StartupTrigger),
            vol.Optional(CONF_PRIORITY):
            vol.Coerce(float),
        })
    ]),
    vol.Optional(CONF_ON_SHUTDOWN):
    vol.All(cv.ensure_list, [
        automation.validate_automation({
            cv.GenerateID(CONF_TRIGGER_ID):
            cv.declare_variable_id(ShutdownTrigger),
        })
    ]),
})

REQUIRED_COMPONENTS = [CONF_ESPHOMEYAML, CONF_WIFI]

_COMPONENT_CACHE = {}
Esempio n. 16
0
import voluptuous as vol

from esphomeyaml import automation
from esphomeyaml.automation import ACTION_REGISTRY, maybe_simple_id
import esphomeyaml.config_validation as cv
from esphomeyaml.const import CONF_ID
from esphomeyaml.cpp_generator import Pvariable, get_variable
from esphomeyaml.cpp_types import Action, NoArg, Trigger, esphomelib_ns

Script = esphomelib_ns.class_('Script', Trigger.template(NoArg))
ScriptExecuteAction = esphomelib_ns.class_('ScriptExecuteAction', Action)
ScriptStopAction = esphomelib_ns.class_('ScriptStopAction', Action)

CONFIG_SCHEMA = automation.validate_automation({
    vol.Required(CONF_ID):
    cv.declare_variable_id(Script),
})


def to_code(config):
    for conf in config:
        trigger = Pvariable(conf[CONF_ID], Script.new())
        automation.build_automation(trigger, NoArg, conf)


CONF_SCRIPT_EXECUTE = 'script.execute'
SCRIPT_EXECUTE_ACTION_SCHEMA = maybe_simple_id({
    vol.Required(CONF_ID):
    cv.use_variable_id(Script),
})
Esempio n. 17
0
        return convert_tz(pytz.timezone(value))
    except Exception:  # pylint: disable=broad-except
        return value


TIME_PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
    vol.Optional(CONF_TIMEZONE, default=detect_tz):
    validate_tz,
    vol.Optional(CONF_ON_TIME):
    automation.validate_automation(
        {
            cv.GenerateID(CONF_TRIGGER_ID):
            cv.declare_variable_id(CronTrigger),
            vol.Optional(CONF_SECONDS): validate_cron_seconds,
            vol.Optional(CONF_MINUTES): validate_cron_minutes,
            vol.Optional(CONF_HOURS): validate_cron_hours,
            vol.Optional(CONF_DAYS_OF_MONTH): validate_cron_days_of_month,
            vol.Optional(CONF_MONTHS): validate_cron_months,
            vol.Optional(CONF_DAYS_OF_WEEK): validate_cron_days_of_week,
            vol.Optional(CONF_CRON): validate_cron_raw,
        }, validate_cron_keys),
})


def setup_time_core_(time_var, config):
    add(time_var.set_timezone(config[CONF_TIMEZONE]))

    for conf in config.get(CONF_ON_TIME, []):
        rhs = App.register_component(time_var.Pmake_cron_trigger())
        trigger = Pvariable(conf[CONF_TRIGGER_ID], rhs)
Esempio n. 18
0
import esphomeyaml.config_validation as cv
from esphomeyaml import automation
from esphomeyaml.components import switch
from esphomeyaml.const import CONF_LAMBDA, CONF_MAKE_ID, CONF_NAME, CONF_TURN_OFF_ACTION, \
    CONF_TURN_ON_ACTION, CONF_OPTIMISTIC
from esphomeyaml.helpers import App, Application, process_lambda, variable, NoArg, add, bool_, \
    optional

MakeTemplateSwitch = Application.MakeTemplateSwitch

PLATFORM_SCHEMA = cv.nameable(switch.SWITCH_PLATFORM_SCHEMA.extend({
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeTemplateSwitch),
    vol.Optional(CONF_LAMBDA): cv.lambda_,
    vol.Optional(CONF_OPTIMISTIC): cv.boolean,
    vol.Optional(CONF_TURN_OFF_ACTION): automation.validate_automation(),
    vol.Optional(CONF_TURN_ON_ACTION): automation.validate_automation(),
}), cv.has_at_least_one_key(CONF_LAMBDA, CONF_OPTIMISTIC))


def to_code(config):
    rhs = App.make_template_switch(config[CONF_NAME])
    make = variable(config[CONF_MAKE_ID], rhs)

    switch.setup_switch(make.Ptemplate_, make.Pmqtt, config)

    if CONF_LAMBDA in config:
        template_ = None
        for template_ in process_lambda(config[CONF_LAMBDA], [],
                                        return_type=optional.template(bool_)):
            yield