예제 #1
0
import voluptuous as vol

from esphome import pins
import esphome.config_validation as cv
from esphome.const import CONF_ENABLE_TIME, CONF_ID, CONF_KEEP_ON_TIME, CONF_PIN
from esphome.cpp_generator import Pvariable, add
from esphome.cpp_helpers import gpio_output_pin_expression, setup_component
from esphome.cpp_types import App, Component, esphome_ns

PowerSupplyComponent = esphome_ns.class_('PowerSupplyComponent', Component)

MULTI_CONF = True

CONFIG_SCHEMA = cv.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)


def to_code(config):
    for pin in gpio_output_pin_expression(config[CONF_PIN]):
        yield

    rhs = App.make_power_supply(pin)
    psu = Pvariable(config[CONF_ID], rhs)
예제 #2
0
        return cv.one_of(*UART_SELECTION_ESP8266, upper=True)(value)
    raise NotImplementedError


def validate_local_no_higher_than_global(value):
    global_level = value.get(CONF_LEVEL, 'DEBUG')
    for tag, level in value.get(CONF_LOGS, {}).items():
        if LOG_LEVEL_SEVERITY.index(level) > LOG_LEVEL_SEVERITY.index(
                global_level):
            raise EsphomeError(
                u"The local log level {} for {} must be less severe than the "
                u"global log level {}.".format(level, tag, global_level))
    return value


LogComponent = esphome_ns.class_('LogComponent', Component)

CONFIG_SCHEMA = vol.All(
    cv.Schema({
        cv.GenerateID(): cv.declare_variable_id(LogComponent),
        vol.Optional(CONF_BAUD_RATE, default=115200): cv.positive_int,
        vol.Optional(CONF_TX_BUFFER_SIZE, default=512): cv.validate_bytes,
        vol.Optional(CONF_HARDWARE_UART, default='UART0'): uart_selection,
        vol.Optional(CONF_LEVEL): is_log_level,
        vol.Optional(CONF_LOGS): cv.Schema({
            cv.string: is_log_level,
        })
    }), validate_local_no_higher_than_global)


def to_code(config):
예제 #3
0
import voluptuous as vol

import esphome.config_validation as cv
from esphome.const import CONF_CSS_URL, CONF_ID, CONF_JS_URL, CONF_PORT
from esphome.core import CORE
from esphome.cpp_generator import Pvariable, add
from esphome.cpp_helpers import setup_component
from esphome.cpp_types import App, Component, StoringController, esphome_ns

WebServer = esphome_ns.class_('WebServer', Component, StoringController)

CONFIG_SCHEMA = vol.Schema({
    cv.GenerateID(): cv.declare_variable_id(WebServer),
    vol.Optional(CONF_PORT): cv.port,
    vol.Optional(CONF_CSS_URL): cv.string,
    vol.Optional(CONF_JS_URL): cv.string,
}).extend(cv.COMPONENT_SCHEMA.schema)


def to_code(config):
    rhs = App.init_web_server(config.get(CONF_PORT))
    web_server = Pvariable(config[CONF_ID], rhs)
    if CONF_CSS_URL in config:
        add(web_server.set_css_url(config[CONF_CSS_URL]))
    if CONF_JS_URL in config:
        add(web_server.set_js_url(config[CONF_JS_URL]))

    setup_component(web_server, config)


REQUIRED_BUILD_FLAGS = '-DUSE_WEB_SERVER'
예제 #4
0
import voluptuous as vol

from esphome import pins
import esphome.config_validation as cv
from esphome.const import CONF_CLK_PIN, CONF_ID, CONF_MISO_PIN, CONF_MOSI_PIN
from esphome.cpp_generator import Pvariable, add
from esphome.cpp_helpers import gpio_input_pin_expression, gpio_output_pin_expression, \
    setup_component
from esphome.cpp_types import App, Component, esphome_ns

SPIComponent = esphome_ns.class_('SPIComponent', Component)
SPIDevice = esphome_ns.class_('SPIDevice')
MULTI_CONF = True

CONFIG_SCHEMA = vol.All(
    vol.Schema({
        cv.GenerateID(): cv.declare_variable_id(SPIComponent),
        vol.Required(CONF_CLK_PIN): pins.gpio_output_pin_schema,
        vol.Optional(CONF_MISO_PIN): pins.gpio_input_pin_schema,
        vol.Optional(CONF_MOSI_PIN): pins.gpio_output_pin_schema,
    }), cv.has_at_least_one_key(CONF_MISO_PIN, CONF_MOSI_PIN))


def to_code(config):
    for clk in gpio_output_pin_expression(config[CONF_CLK_PIN]):
        yield
    rhs = App.init_spi(clk)
    spi = Pvariable(config[CONF_ID], rhs)
    if CONF_MISO_PIN in config:
        for miso in gpio_input_pin_expression(config[CONF_MISO_PIN]):
            yield
예제 #5
0
import voluptuous as vol

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

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

CONFIG_SCHEMA = automation.validate_automation(
    vol.Schema({
        cv.GenerateID():
        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(conf[CONF_INTERVAL]))
        trigger = Pvariable(conf[CONF_ID], rhs)
        setup_component(trigger, conf)

        automation.build_automation(trigger, NoArg, conf)
예제 #6
0
import voluptuous as vol

from esphome import config_validation as cv
from esphome.const import CONF_ID, CONF_SCAN_INTERVAL, CONF_TYPE, CONF_UUID, ESP_PLATFORM_ESP32
from esphome.cpp_generator import Pvariable, RawExpression, add
from esphome.cpp_helpers import setup_component
from esphome.cpp_types import App, Component, esphome_ns

ESP_PLATFORMS = [ESP_PLATFORM_ESP32]
CONFLICTS_WITH = ['esp32_ble_tracker']

ESP32BLEBeacon = esphome_ns.class_('ESP32BLEBeacon', Component)

CONF_MAJOR = 'major'
CONF_MINOR = 'minor'

CONFIG_SCHEMA = cv.Schema({
    cv.GenerateID(): cv.declare_variable_id(ESP32BLEBeacon),
    vol.Required(CONF_TYPE): cv.one_of('IBEACON', upper=True),
    vol.Required(CONF_UUID): cv.uuid,
    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)]
    rhs = App.make_esp32_ble_beacon(uuid_arr)
    ble = Pvariable(config[CONF_ID], rhs)
예제 #7
0
EthernetType = esphome_ns.enum('EthernetType')
ETHERNET_TYPES = {
    'LAN8720': EthernetType.ETHERNET_TYPE_LAN8720,
    'TLK110': EthernetType.ETHERNET_TYPE_TLK110,
}

eth_clock_mode_t = global_ns.enum('eth_clock_mode_t')
CLK_MODES = {
    'GPIO0_IN': eth_clock_mode_t.ETH_CLOCK_GPIO0_IN,
    'GPIO0_OUT': eth_clock_mode_t.ETH_CLOCK_GPIO0_OUT,
    'GPIO16_OUT': eth_clock_mode_t.ETH_CLOCK_GPIO16_OUT,
    'GPIO17_OUT': eth_clock_mode_t.ETH_CLOCK_GPIO17_OUT,
}

EthernetComponent = esphome_ns.class_('EthernetComponent', Component)


def validate(config):
    if CONF_USE_ADDRESS not in config:
        if CONF_MANUAL_IP in config:
            use_address = str(config[CONF_MANUAL_IP][CONF_STATIC_IP])
        else:
            use_address = CORE.name + config[CONF_DOMAIN]
        config[CONF_USE_ADDRESS] = use_address
    return config


CONFIG_SCHEMA = vol.All(
    cv.Schema({
        cv.GenerateID():
예제 #8
0
import voluptuous as vol

import esphome.config_validation as cv
from esphome.const import CONF_AP, CONF_BSSID, CONF_CHANNEL, CONF_DNS1, CONF_DNS2, \
    CONF_DOMAIN, CONF_FAST_CONNECT, CONF_GATEWAY, CONF_ID, CONF_MANUAL_IP, CONF_NETWORKS, \
    CONF_PASSWORD, CONF_POWER_SAVE_MODE, CONF_REBOOT_TIMEOUT, CONF_SSID, CONF_STATIC_IP, \
    CONF_SUBNET, CONF_USE_ADDRESS, CONF_HIDDEN
from esphome.core import CORE, HexInt
from esphome.cpp_generator import Pvariable, StructInitializer, add, variable
from esphome.cpp_types import App, Component, esphome_ns, global_ns

IPAddress = global_ns.class_('IPAddress')
ManualIP = esphome_ns.struct('ManualIP')
WiFiComponent = esphome_ns.class_('WiFiComponent', Component)
WiFiAP = esphome_ns.struct('WiFiAP')

WiFiPowerSaveMode = esphome_ns.enum('WiFiPowerSaveMode')
WIFI_POWER_SAVE_MODES = {
    'NONE': WiFiPowerSaveMode.WIFI_POWER_SAVE_NONE,
    'LIGHT': WiFiPowerSaveMode.WIFI_POWER_SAVE_LIGHT,
    'HIGH': WiFiPowerSaveMode.WIFI_POWER_SAVE_HIGH,
}


def validate_password(value):
    value = cv.string_strict(value)
    if not value:
        return value
    if len(value) < 8:
        raise vol.Invalid(u"WPA password must be at least 8 characters long")
    if len(value) > 64:
예제 #9
0
def shorthand_input_pullup_pin(value):
    value = input_pullup_pin(value)
    return {CONF_NUMBER: value}


def validate_has_interrupt(value):
    if CORE.is_esp8266:
        if value[CONF_NUMBER] >= 16:
            raise vol.Invalid(
                "Pins GPIO16 and GPIO17 do not support interrupts and cannot be used "
                "here, got {}".format(value[CONF_NUMBER]))
    return value


I2CDevice = esphome_ns.class_('I2CDevice')
PCF8574Component = io_ns.class_('PCF8574Component', Component, I2CDevice)
MCP23017 = io_ns.class_('MCP23017', Component, I2CDevice)

PCF8574_OUTPUT_PIN_SCHEMA = cv.Schema({
    vol.Required(CONF_PCF8574):
    cv.use_variable_id(PCF8574Component),
    vol.Required(CONF_NUMBER):
    vol.Coerce(int),
    vol.Optional(CONF_MODE):
    cv.one_of("OUTPUT", upper=True),
    vol.Optional(CONF_INVERTED, default=False):
    cv.boolean,
})

PCF8574_INPUT_PIN_SCHEMA = PCF8574_OUTPUT_PIN_SCHEMA.extend({
예제 #10
0
import voluptuous as vol

from esphome import pins
import esphome.config_validation as cv
from esphome.const import CONF_BAUD_RATE, CONF_ID, CONF_RX_PIN, CONF_TX_PIN
from esphome.cpp_generator import Pvariable, add
from esphome.cpp_helpers import setup_component
from esphome.cpp_types import App, Component, esphome_ns

UARTComponent = esphome_ns.class_('UARTComponent', Component)
UARTDevice = esphome_ns.class_('UARTDevice')
MULTI_CONF = True

CONFIG_SCHEMA = vol.All(vol.Schema({
    cv.GenerateID(): cv.declare_variable_id(UARTComponent),
    vol.Optional(CONF_TX_PIN): pins.output_pin,
    vol.Optional(CONF_RX_PIN): pins.input_pin,
    vol.Required(CONF_BAUD_RATE): cv.positive_int,
}).extend(cv.COMPONENT_SCHEMA.schema), cv.has_at_least_one_key(CONF_TX_PIN, CONF_RX_PIN))


def to_code(config):
    rhs = App.init_uart(config[CONF_BAUD_RATE])
    var = Pvariable(config[CONF_ID], rhs)

    if CONF_TX_PIN in config:
        add(var.set_tx_pin(config[CONF_TX_PIN]))
    if CONF_RX_PIN in config:
        add(var.set_rx_pin(config[CONF_RX_PIN]))

    setup_component(var, config)
예제 #11
0
import voluptuous as vol

import esphome.config_validation as cv
from esphome.const import CONF_COMPONENTS, CONF_ID, CONF_LAMBDA
from esphome.cpp_generator import Pvariable, process_lambda, variable
from esphome.cpp_helpers import setup_component
from esphome.cpp_types import Component, ComponentPtr, esphome_ns, std_vector

CustomComponentConstructor = esphome_ns.class_('CustomComponentConstructor')
MULTI_CONF = True

CONFIG_SCHEMA = vol.Schema({
    cv.GenerateID():
    cv.declare_variable_id(CustomComponentConstructor),
    vol.Required(CONF_LAMBDA):
    cv.lambda_,
    vol.Optional(CONF_COMPONENTS):
    cv.ensure_list(
        vol.Schema({
            cv.GenerateID(): cv.declare_variable_id(Component)
        }).extend(cv.COMPONENT_SCHEMA.schema)),
})


def to_code(config):
    for template_ in process_lambda(
            config[CONF_LAMBDA], [],
            return_type=std_vector.template(ComponentPtr)):
        yield

    rhs = CustomComponentConstructor(template_)
예제 #12
0
from esphome.const import CONF_ID, CONF_MODE, CONF_NUMBER, CONF_PINS, CONF_RUN_CYCLES, \
    CONF_RUN_DURATION, CONF_SLEEP_DURATION, CONF_WAKEUP_PIN
from esphome.cpp_generator import Pvariable, StructInitializer, add, get_variable
from esphome.cpp_helpers import gpio_input_pin_expression, setup_component
from esphome.cpp_types import Action, App, Component, esphome_ns, global_ns


def validate_pin_number(value):
    valid_pins = [0, 2, 4, 12, 13, 14, 15, 25, 26, 27, 32, 39]
    if value[CONF_NUMBER] not in valid_pins:
        raise vol.Invalid(u"Only pins {} support wakeup"
                          u"".format(', '.join(str(x) for x in valid_pins)))
    return value


DeepSleepComponent = esphome_ns.class_('DeepSleepComponent', Component)
EnterDeepSleepAction = esphome_ns.class_('EnterDeepSleepAction', Action)
PreventDeepSleepAction = esphome_ns.class_('PreventDeepSleepAction', Action)

WakeupPinMode = esphome_ns.enum('WakeupPinMode')
WAKEUP_PIN_MODES = {
    '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 = esphome_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,
예제 #13
0
import voluptuous as vol

from esphome.components import binary_sensor
from esphome.components.esp32_ble_tracker import CONF_ESP32_BLE_ID, ESP32BLETracker, \
    make_address_array
import esphome.config_validation as cv
from esphome.const import CONF_MAC_ADDRESS, CONF_NAME
from esphome.cpp_generator import get_variable
from esphome.cpp_types import esphome_ns

DEPENDENCIES = ['esp32_ble_tracker']
ESP32BLEPresenceDevice = esphome_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)
    }))


def to_code(config):
    for hub in get_variable(config[CONF_ESP32_BLE_ID]):
        yield
    rhs = hub.make_presence_sensor(
        config[CONF_NAME], make_address_array(config[CONF_MAC_ADDRESS]))
    binary_sensor.register_binary_sensor(rhs, config)
예제 #14
0
import voluptuous as vol

from esphome import config_validation as cv, pins
from esphome.const import CONF_FREQUENCY, CONF_ID, CONF_NAME, CONF_PIN, CONF_SCL, CONF_SDA, \
    ESP_PLATFORM_ESP32
from esphome.cpp_generator import Pvariable, add
from esphome.cpp_types import App, Nameable, PollingComponent, esphome_ns

ESP_PLATFORMS = [ESP_PLATFORM_ESP32]

ESP32Camera = esphome_ns.class_('ESP32Camera', PollingComponent, Nameable)
ESP32CameraFrameSize = esphome_ns.enum('ESP32CameraFrameSize')
FRAME_SIZES = {
    '160X120': ESP32CameraFrameSize.ESP32_CAMERA_SIZE_160X120,
    'QQVGA': ESP32CameraFrameSize.ESP32_CAMERA_SIZE_160X120,
    '128x160': ESP32CameraFrameSize.ESP32_CAMERA_SIZE_128X160,
    'QQVGA2': ESP32CameraFrameSize.ESP32_CAMERA_SIZE_128X160,
    '176X144': ESP32CameraFrameSize.ESP32_CAMERA_SIZE_176X144,
    'QCIF': ESP32CameraFrameSize.ESP32_CAMERA_SIZE_176X144,
    '240X176': ESP32CameraFrameSize.ESP32_CAMERA_SIZE_240X176,
    'HQVGA': ESP32CameraFrameSize.ESP32_CAMERA_SIZE_240X176,
    '320X240': ESP32CameraFrameSize.ESP32_CAMERA_SIZE_320X240,
    'QVGA': ESP32CameraFrameSize.ESP32_CAMERA_SIZE_320X240,
    '400X296': ESP32CameraFrameSize.ESP32_CAMERA_SIZE_400X296,
    'CIF': ESP32CameraFrameSize.ESP32_CAMERA_SIZE_400X296,
    '640X480': ESP32CameraFrameSize.ESP32_CAMERA_SIZE_640X480,
    'VGA': ESP32CameraFrameSize.ESP32_CAMERA_SIZE_640X480,
    '800X600': ESP32CameraFrameSize.ESP32_CAMERA_SIZE_800X600,
    'SVGA': ESP32CameraFrameSize.ESP32_CAMERA_SIZE_800X600,
    '1024X768': ESP32CameraFrameSize.ESP32_CAMERA_SIZE_1024X768,
    'XGA': ESP32CameraFrameSize.ESP32_CAMERA_SIZE_1024X768,
예제 #15
0
import voluptuous as vol

from esphome import config_validation as cv, pins
from esphome.const import CONF_ID, CONF_PIN
from esphome.cpp_generator import Pvariable
from esphome.cpp_helpers import gpio_output_pin_expression, setup_component
from esphome.cpp_types import App, Component, esphome_ns

StatusLEDComponent = esphome_ns.class_('StatusLEDComponent', Component)

CONFIG_SCHEMA = cv.Schema({
    cv.GenerateID():
    cv.declare_variable_id(StatusLEDComponent),
    vol.Optional(CONF_PIN):
    pins.gpio_output_pin_schema,
}).extend(cv.COMPONENT_SCHEMA.schema)


def to_code(config):
    for pin in gpio_output_pin_expression(config[CONF_PIN]):
        yield
    rhs = App.make_status_led(pin)
    var = Pvariable(config[CONF_ID], rhs)

    setup_component(var, config)


BUILD_FLAGS = '-DUSE_STATUS_LED'
예제 #16
0
import voluptuous as vol

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

Script = esphome_ns.class_('Script', Trigger.template(NoArg))
ScriptExecuteAction = esphome_ns.class_('ScriptExecuteAction', Action)
ScriptStopAction = esphome_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),
})
예제 #17
0
import voluptuous as vol

from esphome.automation import CONDITION_REGISTRY, Condition
import esphome.config_validation as cv
from esphome.const import CONF_AP, CONF_BSSID, CONF_CHANNEL, CONF_DNS1, CONF_DNS2, CONF_DOMAIN, \
    CONF_FAST_CONNECT, CONF_GATEWAY, CONF_HIDDEN, CONF_ID, CONF_MANUAL_IP, CONF_NETWORKS, \
    CONF_PASSWORD, CONF_POWER_SAVE_MODE, CONF_REBOOT_TIMEOUT, CONF_SSID, CONF_STATIC_IP, \
    CONF_SUBNET, CONF_USE_ADDRESS
from esphome.core import CORE, HexInt
from esphome.cpp_generator import Pvariable, StructInitializer, add, variable
from esphome.cpp_types import App, Component, esphome_ns, global_ns

IPAddress = global_ns.class_('IPAddress')
ManualIP = esphome_ns.struct('ManualIP')
WiFiComponent = esphome_ns.class_('WiFiComponent', Component)
WiFiAP = esphome_ns.struct('WiFiAP')

WiFiPowerSaveMode = esphome_ns.enum('WiFiPowerSaveMode')
WIFI_POWER_SAVE_MODES = {
    'NONE': WiFiPowerSaveMode.WIFI_POWER_SAVE_NONE,
    'LIGHT': WiFiPowerSaveMode.WIFI_POWER_SAVE_LIGHT,
    'HIGH': WiFiPowerSaveMode.WIFI_POWER_SAVE_HIGH,
}
WiFiConnectedCondition = esphome_ns.class_('WiFiConnectedCondition', Condition)


def validate_password(value):
    value = cv.string_strict(value)
    if not value:
        return value
    if len(value) < 8:
예제 #18
0
import voluptuous as vol

from esphome.components import sensor
from esphome.components.esp32_ble_tracker import CONF_ESP32_BLE_ID, ESP32BLETracker, \
    make_address_array
import esphome.config_validation as cv
from esphome.const import CONF_MAC_ADDRESS, CONF_NAME
from esphome.cpp_generator import get_variable
from esphome.cpp_types import esphome_ns

DEPENDENCIES = ['esp32_ble_tracker']

ESP32BLERSSISensor = esphome_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):
    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]))
    sensor.register_sensor(rhs, config)
예제 #19
0
import voluptuous as vol

from esphome import config_validation as cv
from esphome.const import CONF_ID, CONF_INITIAL_VALUE, CONF_RESTORE_VALUE, CONF_TYPE
from esphome.cpp_generator import Pvariable, RawExpression, TemplateArguments, add
from esphome.cpp_helpers import setup_component
from esphome.cpp_types import App, Component, esphome_ns

GlobalVariableComponent = esphome_ns.class_('GlobalVariableComponent', Component)

MULTI_CONF = True

CONFIG_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)


def to_code(config):
    type_ = RawExpression(config[CONF_TYPE])
    template_args = TemplateArguments(type_)
    res_type = GlobalVariableComponent.template(template_args)
    initial_value = None
    if CONF_INITIAL_VALUE in config:
        initial_value = RawExpression(config[CONF_INITIAL_VALUE])
    rhs = App.Pmake_global_variable(template_args, initial_value)
    glob = Pvariable(config[CONF_ID], rhs, type=res_type)

    if config.get(CONF_RESTORE_VALUE, False):
예제 #20
0
        except vol.Invalid as err:
            err.prepend(path)
            raise err
        value[i] = {
            CONF_ACTION_ID:
            cv.declare_variable_id(Action)(item[CONF_ACTION_ID]),
            key: action,
        }
    return value


ACTION_REGISTRY = ServiceRegistry()
CONDITION_REGISTRY = ServiceRegistry()

# pylint: disable=invalid-name
DelayAction = esphome_ns.class_('DelayAction', Action, Component)
LambdaAction = esphome_ns.class_('LambdaAction', Action)
IfAction = esphome_ns.class_('IfAction', Action)
WhileAction = esphome_ns.class_('WhileAction', Action)
WaitUntilAction = esphome_ns.class_('WaitUntilAction', Action, Component)
UpdateComponentAction = esphome_ns.class_('UpdateComponentAction', Action)
Automation = esphome_ns.class_('Automation')

Condition = esphome_ns.class_('Condition')
AndCondition = esphome_ns.class_('AndCondition', Condition)
OrCondition = esphome_ns.class_('OrCondition', Condition)
RangeCondition = esphome_ns.class_('RangeCondition', Condition)
LambdaCondition = esphome_ns.class_('LambdaCondition', Condition)


def validate_automation(extra_schema=None,
예제 #21
0
import logging

import voluptuous as vol

import esphome.config_validation as cv
from esphome.const import CONF_ID, CONF_OTA, CONF_PASSWORD, CONF_PORT, CONF_SAFE_MODE
from esphome.core import CORE
from esphome.cpp_generator import Pvariable, add
from esphome.cpp_types import App, Component, esphome_ns

_LOGGER = logging.getLogger(__name__)

OTAComponent = esphome_ns.class_('OTAComponent', Component)

CONFIG_SCHEMA = vol.Schema({
    cv.GenerateID():
    cv.declare_variable_id(OTAComponent),
    vol.Optional(CONF_SAFE_MODE, default=True):
    cv.boolean,
    vol.Optional(CONF_PORT):
    cv.port,
    vol.Optional(CONF_PASSWORD):
    cv.string,
})


def to_code(config):
    rhs = App.init_ota()
    ota = Pvariable(config[CONF_ID], rhs)
    if CONF_PASSWORD in config:
        add(ota.set_auth_password(config[CONF_PASSWORD]))
import voluptuous as vol

from esphome import config_validation as cv
from esphome.components import sensor
from esphome.const import CONF_ID, CONF_SCAN_INTERVAL, ESP_PLATFORM_ESP32
from esphome.core import HexInt
from esphome.cpp_generator import Pvariable, add
from esphome.cpp_helpers import setup_component
from esphome.cpp_types import App, Component, esphome_ns

ESP_PLATFORMS = [ESP_PLATFORM_ESP32]

CONF_ESP32_BLE_ID = 'esp32_ble_id'
ESP32BLETracker = esphome_ns.class_('ESP32BLETracker', Component)
XiaomiSensor = esphome_ns.class_('XiaomiSensor', sensor.Sensor)
XiaomiDevice = esphome_ns.class_('XiaomiDevice')
XIAOMI_SENSOR_SCHEMA = sensor.SENSOR_SCHEMA.extend(
    {cv.GenerateID(): cv.declare_variable_id(XiaomiSensor)})

CONFIG_SCHEMA = cv.Schema({
    cv.GenerateID():
    cv.declare_variable_id(ESP32BLETracker),
    vol.Optional(CONF_SCAN_INTERVAL):
    cv.positive_time_period_seconds,
}).extend(cv.COMPONENT_SCHEMA.schema)


def make_address_array(address):
    return [HexInt(i) for i in address.parts]

예제 #23
0
import voluptuous as vol

from esphome import pins
import esphome.config_validation as cv
from esphome.const import CONF_FREQUENCY, CONF_ID, CONF_RECEIVE_TIMEOUT, CONF_SCAN, CONF_SCL, \
    CONF_SDA
from esphome.cpp_generator import Pvariable, add
from esphome.cpp_helpers import setup_component
from esphome.cpp_types import App, Component, esphome_ns

I2CComponent = esphome_ns.class_('I2CComponent', Component)
I2CDevice = pins.I2CDevice

CONFIG_SCHEMA = cv.Schema({
    cv.GenerateID():
    cv.declare_variable_id(I2CComponent),
    vol.Optional(CONF_SDA, default='SDA'):
    pins.input_pin,
    vol.Optional(CONF_SCL, default='SCL'):
    pins.input_pin,
    vol.Optional(CONF_FREQUENCY):
    vol.All(cv.frequency, vol.Range(min=0, min_included=False)),
    vol.Optional(CONF_SCAN, default=True):
    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)

예제 #24
0
import voluptuous as vol

from esphome.automation import ACTION_REGISTRY
from esphome.components.output import FloatOutput
import esphome.config_validation as cv
from esphome.const import CONF_ID, CONF_IDLE_LEVEL, CONF_MAX_LEVEL, CONF_MIN_LEVEL, CONF_OUTPUT, \
    CONF_LEVEL
from esphome.cpp_generator import Pvariable, add, get_variable, templatable
from esphome.cpp_helpers import setup_component
from esphome.cpp_types import App, Component, esphome_ns, Action, float_

Servo = esphome_ns.class_('Servo', Component)
ServoWriteAction = esphome_ns.class_('ServoWriteAction', Action)

MULTI_CONF = True

CONFIG_SCHEMA = cv.Schema({
    vol.Required(CONF_ID):
    cv.declare_variable_id(Servo),
    vol.Required(CONF_OUTPUT):
    cv.use_variable_id(FloatOutput),
    vol.Optional(CONF_MIN_LEVEL, default='3%'):
    cv.percentage,
    vol.Optional(CONF_IDLE_LEVEL, default='7.5%'):
    cv.percentage,
    vol.Optional(CONF_MAX_LEVEL, default='12%'):
    cv.percentage,
}).extend(cv.COMPONENT_SCHEMA.schema)


def to_code(config):