示例#1
0
PCA9685OutputComponent = output.output_ns.namespace('PCA9685OutputComponent')

PHASE_BALANCER_MESSAGE = (
    "The phase_balancer option has been removed in version 1.5.0. "
    "esphomelib will now automatically choose a suitable phase balancer.")

PCA9685_SCHEMA = vol.Schema({
    cv.GenerateID('pca9685'):
    cv.register_variable_id,
    vol.Required(CONF_FREQUENCY):
    vol.All(cv.frequency, vol.Range(min=23.84, max=1525.88)),
    vol.Optional(CONF_ADDRESS):
    cv.i2c_address,
    vol.Optional(CONF_PHASE_BALANCER):
    cv.invalid(PHASE_BALANCER_MESSAGE),
})

CONFIG_SCHEMA = vol.All(cv.ensure_list, [PCA9685_SCHEMA])


def to_code(config):
    for conf in config:
        rhs = App.make_pca9685_component(conf.get(CONF_FREQUENCY))
        pca9685 = Pvariable(PCA9685OutputComponent, conf[CONF_ID], rhs)
        if CONF_ADDRESS in conf:
            add(pca9685.set_address(HexIntLiteral(conf[CONF_ADDRESS])))


BUILD_FLAGS = '-DUSE_PCA9685_OUTPUT'
        vol.Required(CONF_DATA): validate_raw_data,
        vol.Optional(CONF_CARRIER_FREQUENCY): vol.All(cv.frequency, vol.Coerce(int)),
    })),
    vol.Optional(CONF_RC_SWITCH_RAW): RC_SWITCH_RAW_SCHEMA,
    vol.Optional(CONF_RC_SWITCH_TYPE_A): RC_SWITCH_TYPE_A_SCHEMA,
    vol.Optional(CONF_RC_SWITCH_TYPE_B): RC_SWITCH_TYPE_B_SCHEMA,
    vol.Optional(CONF_RC_SWITCH_TYPE_C): RC_SWITCH_TYPE_C_SCHEMA,
    vol.Optional(CONF_RC_SWITCH_TYPE_D): RC_SWITCH_TYPE_D_SCHEMA,

    vol.Optional(CONF_REPEAT): vol.Any(cv.positive_not_null_int, vol.Schema({
        vol.Required(CONF_TIMES): cv.positive_not_null_int,
        vol.Required(CONF_WAIT_TIME): cv.positive_time_period_microseconds,
    })),
    cv.GenerateID(CONF_REMOTE_TRANSMITTER_ID): cv.use_variable_id(RemoteTransmitterComponent),
    cv.GenerateID(CONF_TRANSMITTER_ID): cv.declare_variable_id(RemoteTransmitter),
    vol.Optional(CONF_INVERTED): cv.invalid("Remote Transmitters do not support inverted mode!"),
}), cv.has_exactly_one_key(*REMOTE_KEYS))


def transmitter_base(full_config):
    name = full_config[CONF_NAME]
    key, config = next((k, v) for k, v in full_config.items() if k in REMOTE_KEYS)

    if key == CONF_LG:
        return LGTransmitter.new(name, config[CONF_DATA], config[CONF_NBITS])
    elif key == CONF_NEC:
        return NECTransmitter.new(name, config[CONF_ADDRESS], config[CONF_COMMAND])
    elif key == CONF_PANASONIC:
        return PanasonicTransmitter.new(name, config[CONF_ADDRESS], config[CONF_COMMAND])
    elif key == CONF_SONY:
        return SonyTransmitter.new(name, config[CONF_DATA], config[CONF_NBITS])
示例#3
0
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

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."""

ADS1115_SCHEMA = vol.Schema({
    cv.GenerateID('ads1115'):
    cv.register_variable_id,
    vol.Required(CONF_ADDRESS):
    cv.i2c_address,
    vol.Optional(CONF_RATE):
    cv.invalid(RATE_REMOVE_MESSAGE)
})

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(ADS1115Component, conf[CONF_ID], rhs)


BUILD_FLAGS = '-DUSE_ADS1115_SENSOR'
示例#4
0
        vol.Optional(CONF_MAX_LENGTH, default='350ms'):
        cv.positive_time_period_milliseconds,
    }),
    vol.Optional(CONF_ON_DOUBLE_CLICK):
    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,
    }),
    vol.Optional(CONF_INVERTED):
    cv.invalid(
        "The inverted binary_sensor property has been replaced by the "
        "new 'invert' binary  sensor filter. Please see "
        "https://esphomelib.com/esphomeyaml/components/binary_sensor/index.html."
    ),
})

BINARY_SENSOR_PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
    BINARY_SENSOR_SCHEMA.schema)


def setup_filter(config):
    if CONF_INVERT in config:
        yield InvertFilter.new()
    elif CONF_DELAYED_OFF in config:
        yield App.register_component(
            DelayedOffFilter.new(config[CONF_DELAYED_OFF]))
    elif CONF_DELAYED_ON in config:
示例#5
0
    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."),
})


def preload_core_config(config):
    if CONF_ESPHOMEYAML not in config:
        raise EsphomeyamlError(u"No esphomeyaml section in config")
    core_conf = config[CONF_ESPHOMEYAML]
    if CONF_PLATFORM not in core_conf:
        raise EsphomeyamlError("esphomeyaml.platform not specified.")
    if CONF_BOARD not in core_conf:
        raise EsphomeyamlError("esphomeyaml.board not specified.")
    if CONF_NAME not in core_conf:
        raise EsphomeyamlError("esphomeyaml.name not specified.")
示例#6
0
import voluptuous as vol

import esphomeyaml.config_validation as cv
from esphomeyaml.components import switch
from esphomeyaml.const import CONF_INVERTED, CONF_MAKE_ID, CONF_NAME
from esphomeyaml.helpers import App, Application, variable

MakeRestartSwitch = Application.MakeRestartSwitch

PLATFORM_SCHEMA = cv.nameable(switch.SWITCH_PLATFORM_SCHEMA.extend({
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeRestartSwitch),
    vol.Optional(CONF_INVERTED): cv.invalid("Restart switches do not support inverted mode!"),
}))


def to_code(config):
    rhs = App.make_restart_switch(config[CONF_NAME])
    restart = variable(config[CONF_MAKE_ID], rhs)
    switch.setup_switch(restart.Prestart, restart.Pmqtt, config)


BUILD_FLAGS = '-DUSE_RESTART_SWITCH'
示例#7
0
MakeSHT3XDSensor = Application.MakeSHT3XDSensor

PLATFORM_SCHEMA = sensor.PLATFORM_SCHEMA.extend({
    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.Optional(CONF_ADDRESS, default=0x44):
    cv.i2c_address,
    vol.Optional(CONF_UPDATE_INTERVAL):
    cv.positive_time_period_milliseconds,
    vol.Optional(CONF_ACCURACY):
    cv.invalid("The accuracy option has been removed and now "
               "defaults to HIGH."),
})


def to_code(config):
    rhs = App.make_sht3xd_sensor(config[CONF_TEMPERATURE][CONF_NAME],
                                 config[CONF_HUMIDITY][CONF_NAME],
                                 config[CONF_ADDRESS],
                                 config.get(CONF_UPDATE_INTERVAL))
    sht3xd = variable(config[CONF_MAKE_ID], rhs)

    sensor.setup_sensor(sht3xd.Psht3xd.Pget_temperature_sensor(),
                        sht3xd.Pmqtt_temperature, config[CONF_TEMPERATURE])
    sensor.setup_sensor(sht3xd.Psht3xd.Pget_humidity_sensor(),
                        sht3xd.Pmqtt_humidity, config[CONF_HUMIDITY])
        RC_SWITCH_TYPE_D_SCHEMA,
        vol.Optional(CONF_REPEAT):
        vol.Any(
            cv.positive_not_null_int,
            vol.Schema({
                vol.Required(CONF_TIMES):
                cv.positive_not_null_int,
                vol.Required(CONF_WAIT_TIME):
                cv.positive_time_period_microseconds,
            })),
        cv.GenerateID(CONF_REMOTE_TRANSMITTER_ID):
        cv.use_variable_id(RemoteTransmitterComponent),
        cv.GenerateID(CONF_TRANSMITTER_ID):
        cv.declare_variable_id(RemoteTransmitter),
        vol.Optional(CONF_INVERTED):
        cv.invalid("Remote Transmitters do not support inverted mode!"),
    }), cv.has_exactly_one_key(*REMOTE_KEYS))


def transmitter_base(full_config):
    name = full_config[CONF_NAME]
    key, config = next(
        (k, v) for k, v in full_config.items() if k in REMOTE_KEYS)

    if key == CONF_LG:
        return LGTransmitter.new(name, config[CONF_DATA], config[CONF_NBITS])
    if key == CONF_NEC:
        return NECTransmitter.new(name, config[CONF_ADDRESS],
                                  config[CONF_COMMAND])
    if key == CONF_PANASONIC:
        return PanasonicTransmitter.new(name, config[CONF_ADDRESS],
示例#9
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.")
示例#10
0
import voluptuous as vol

import esphomeyaml.config_validation as cv
from esphomeyaml.components import switch
from esphomeyaml.const import CONF_INVERTED, CONF_MAKE_ID, CONF_NAME
from esphomeyaml.helpers import App, Application, variable

MakeRestartSwitch = Application.MakeRestartSwitch

PLATFORM_SCHEMA = switch.PLATFORM_SCHEMA.extend({
    cv.GenerateID(CONF_MAKE_ID):
    cv.declare_variable_id(MakeRestartSwitch),
    vol.Optional(CONF_INVERTED):
    cv.invalid("Restart switches do not support inverted mode!"),
}).extend(switch.SWITCH_SCHEMA.schema)


def to_code(config):
    rhs = App.make_restart_switch(config[CONF_NAME])
    restart = variable(config[CONF_MAKE_ID], rhs)
    switch.setup_switch(restart.Prestart, restart.Pmqtt, config)


BUILD_FLAGS = '-DUSE_RESTART_SWITCH'
示例#11
0
    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_ON_LOOP):
    vol.All(cv.ensure_list, [
        automation.validate_automation({
            cv.GenerateID(CONF_TRIGGER_ID):
            cv.declare_variable_id(LoopTrigger),
        })
    ]),
    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.")
})


def preload_core_config(config):
    if CONF_ESPHOMEYAML not in config:
        raise ESPHomeYAMLError(u"No esphomeyaml section in config")
    core_conf = config[CONF_ESPHOMEYAML]
    if CONF_PLATFORM not in core_conf:
        raise ESPHomeYAMLError("esphomeyaml.platform not specified.")
    if CONF_BOARD not in core_conf:
        raise ESPHomeYAMLError("esphomeyaml.board not specified.")
    if CONF_NAME not in core_conf:
        raise ESPHomeYAMLError("esphomeyaml.name not specified.")

    try:
示例#12
0
    raise vol.Invalid(
        "data must either be a string wrapped in quotes or a list of bytes")


PLATFORM_SCHEMA = cv.nameable(
    switch.SWITCH_PLATFORM_SCHEMA.extend({
        cv.GenerateID():
        cv.declare_variable_id(UARTSwitch),
        cv.GenerateID(CONF_MAKE_ID):
        cv.declare_variable_id(MakeUARTSwitch),
        cv.GenerateID(CONF_UART_ID):
        cv.use_variable_id(UARTComponent),
        vol.Required(CONF_DATA):
        validate_data,
        vol.Optional(CONF_INVERTED):
        cv.invalid("UART switches do not support inverted mode!"),
    }))


def to_code(config):
    for uart_ in get_variable(config[CONF_UART_ID]):
        yield
    data = config[CONF_DATA]
    if isinstance(data, str):
        data = [HexInt(ord(x)) for x in data]
    rhs = App.make_uart_switch(uart_, config[CONF_NAME],
                               ArrayInitializer(*data, multiline=False))
    restart = variable(config[CONF_MAKE_ID], rhs)
    switch.setup_switch(restart.Puart, restart.Pmqtt, config)

示例#13
0
from esphomeyaml.helpers import App, HexIntLiteral, Pvariable, add

DEPENDENCIES = ['i2c']

PCA9685OutputComponent = output.output_ns.namespace('PCA9685OutputComponent')

PHASE_BALANCER_MESSAGE = ("The phase_balancer option has been removed in version 1.5.0. "
                          "esphomelib will now automatically choose a suitable phase balancer.")

PCA9685_SCHEMA = vol.Schema({
    cv.GenerateID(): cv.declare_variable_id(PCA9685OutputComponent),
    vol.Required(CONF_FREQUENCY): vol.All(cv.frequency,
                                          vol.Range(min=23.84, max=1525.88)),
    vol.Optional(CONF_ADDRESS): cv.i2c_address,

    vol.Optional(CONF_PHASE_BALANCER): cv.invalid(PHASE_BALANCER_MESSAGE),
})

CONFIG_SCHEMA = vol.All(cv.ensure_list, [PCA9685_SCHEMA])


def to_code(config):
    for conf in config:
        rhs = App.make_pca9685_component(conf.get(CONF_FREQUENCY))
        pca9685 = Pvariable(conf[CONF_ID], rhs)
        if CONF_ADDRESS in conf:
            add(pca9685.set_address(HexIntLiteral(conf[CONF_ADDRESS])))


BUILD_FLAGS = '-DUSE_PCA9685_OUTPUT'
示例#14
0
        vol.Exclusive(CONF_RAW, 'code'):
        vol.Schema({
            vol.Required(CONF_CARRIER_FREQUENCY):
            vol.All(cv.frequency, vol.Coerce(int)),
            vol.Required(CONF_DATA): [vol.Coerce(int)],
        }),
        vol.Optional(CONF_REPEAT):
        vol.Any(
            cv.positive_not_null_int,
            vol.Schema({
                vol.Required(CONF_TIMES):
                cv.positive_not_null_int,
                vol.Required(CONF_WAIT_TIME):
                cv.positive_time_period_microseconds,
                vol.Optional('wait_time_us'):
                cv.invalid(WAIT_TIME_MESSAGE),
            })),
        vol.Optional(CONF_IR_TRANSMITTER_ID):
        cv.variable_id,
        vol.Optional(CONF_INVERTED):
        cv.invalid("IR Transmitters do not support inverted mode!"),
    }).extend(switch.SWITCH_SCHEMA.schema), cv.has_at_least_one_key(*IR_KEYS))

# pylint: disable=invalid-name
ir_ns = switch.switch_ns.namespace('ir')
SendData = ir_ns.namespace('SendData')
DataTransmitter = IRTransmitterComponent.DataTransmitter


def safe_hex(value):
    if value is None:
示例#15
0
import esphomeyaml.config_validation as cv
from esphomeyaml.components import switch
from esphomeyaml.const import CONF_INVERTED, CONF_MAKE_ID, CONF_NAME
from esphomeyaml.helpers import App, Application, variable

MakeShutdownSwitch = Application.struct('MakeShutdownSwitch')
ShutdownSwitch = switch.switch_ns.class_('ShutdownSwitch', switch.Switch)

PLATFORM_SCHEMA = cv.nameable(
    switch.SWITCH_PLATFORM_SCHEMA.extend({
        cv.GenerateID():
        cv.declare_variable_id(ShutdownSwitch),
        cv.GenerateID(CONF_MAKE_ID):
        cv.declare_variable_id(MakeShutdownSwitch),
        vol.Optional(CONF_INVERTED):
        cv.invalid("Shutdown switches do not support inverted mode!"),
    }))


def to_code(config):
    rhs = App.make_shutdown_switch(config[CONF_NAME])
    shutdown = variable(config[CONF_MAKE_ID], rhs)
    switch.setup_switch(shutdown.Pshutdown, shutdown.Pmqtt, config)


BUILD_FLAGS = '-DUSE_SHUTDOWN_SWITCH'


def to_hass_config(data, config):
    return switch.core_to_hass_config(data, config)
示例#16
0
I2CDevice = pins.I2CDevice

CONFIG_SCHEMA = vol.Schema({
    cv.GenerateID():
    cv.declare_variable_id(I2CComponent),
    vol.Optional(CONF_SDA, default='SDA'):
    pins.input_pullup_pin,
    vol.Optional(CONF_SCL, default='SCL'):
    pins.input_pullup_pin,
    vol.Optional(CONF_FREQUENCY):
    vol.All(cv.frequency, vol.Range(min=0, min_included=False)),
    vol.Optional(CONF_SCAN):
    cv.boolean,
    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):
    rhs = App.init_i2c(config[CONF_SDA], config[CONF_SCL],
                       config.get(CONF_SCAN))
    i2c = Pvariable(config[CONF_ID], rhs)
    if CONF_FREQUENCY in config:
        add(i2c.set_frequency(config[CONF_FREQUENCY]))

    setup_component(i2c, config)


BUILD_FLAGS = '-DUSE_I2C'
示例#17
0
    sensor.SENSOR_PLATFORM_SCHEMA.extend({
        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({
            vol.Required(CONF_RISING_EDGE): COUNT_MODE_SCHEMA,
            vol.Required(CONF_FALLING_EDGE): COUNT_MODE_SCHEMA,
        }),
        vol.Optional(CONF_INTERNAL_FILTER):
        validate_internal_filter,
        vol.Optional(CONF_UPDATE_INTERVAL):
        cv.positive_time_period_milliseconds,
        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.")
    }))


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))
示例#18
0
        vol.Required(CONF_DATA): cv.hex_uint32_t,
        vol.Optional(CONF_NBITS, default=12): vol.All(vol.Coerce(int), vol.Range(min=0, max=32)),
    }),
    vol.Exclusive(CONF_PANASONIC, 'code'): vol.Schema({
        vol.Required(CONF_ADDRESS): cv.hex_uint16_t,
        vol.Required(CONF_COMMAND): cv.hex_uint32_t,
    }),
    vol.Exclusive(CONF_RAW, 'code'): vol.Schema({
        vol.Required(CONF_CARRIER_FREQUENCY): vol.All(cv.frequency, vol.Coerce(int)),
        vol.Required(CONF_DATA): [vol.Coerce(int)],
    }),
    vol.Optional(CONF_REPEAT): vol.Any(cv.positive_not_null_int, vol.Schema({
        vol.Required(CONF_TIMES): cv.positive_not_null_int,
        vol.Required(CONF_WAIT_TIME): cv.positive_time_period_microseconds,

        vol.Optional('wait_time_us'): cv.invalid(WAIT_TIME_MESSAGE),
    })),
    cv.GenerateID(CONF_IR_TRANSMITTER_ID): cv.use_variable_id(IRTransmitterComponent),
    vol.Optional(CONF_INVERTED): cv.invalid("IR Transmitters do not support inverted mode!"),
}).extend(switch.SWITCH_SCHEMA.schema), cv.has_at_least_one_key(*IR_KEYS))

# pylint: disable=invalid-name
ir_ns = switch.switch_ns.namespace('ir')
SendData = ir_ns.namespace('SendData')
DataTransmitter = IRTransmitterComponent.DataTransmitter


def safe_hex(value):
    if value is None:
        return None
    return HexIntLiteral(value)