Beispiel #1
0
def elevation(value):
    if isinstance(value, str):
        try:
            value = ELEVATION_MAP[cv.one_of(*ELEVATION_MAP, lower=True, space='_')]
        except cv.Invalid:
            pass
    value = cv.angle(value)
    return cv.float_range(min=-180, max=180)(value)
Beispiel #2
0
        cv.Optional(CONF_AP):
        WIFI_NETWORK_AP,
        cv.Optional(CONF_ENABLE_MDNS, default=True):
        cv.boolean,
        cv.Optional(CONF_DOMAIN, default=".local"):
        cv.domain_name,
        cv.Optional(CONF_REBOOT_TIMEOUT, default="15min"):
        cv.positive_time_period_milliseconds,
        cv.SplitDefault(CONF_POWER_SAVE_MODE, esp8266="none", esp32="light"):
        cv.enum(WIFI_POWER_SAVE_MODES, upper=True),
        cv.Optional(CONF_FAST_CONNECT, default=False):
        cv.boolean,
        cv.Optional(CONF_USE_ADDRESS):
        cv.string_strict,
        cv.SplitDefault(CONF_OUTPUT_POWER, esp8266=20.0):
        cv.All(cv.decibel, cv.float_range(min=10.0, max=20.5)),
        cv.Optional("hostname"):
        cv.invalid("The hostname option has been removed in 1.11.0"),
    }),
    validate,
)


def eap_auth(config):
    if config is None:
        return None
    ca_cert = ""
    if CONF_CERTIFICATE_AUTHORITY in config:
        ca_cert = wpa2_eap.read_relative_config_path(
            config[CONF_CERTIFICATE_AUTHORITY])
    client_cert = ""
Beispiel #3
0
CONF_TEMP_OFFSET = 'temperature_offset'
CONF_IAQ_MODE = 'iaq_mode'
CONF_STATE_SAVE_INTERVAL = 'state_save_interval'

bme680_bsec_ns = cg.esphome_ns.namespace('bme680_bsec')

BME680IAQMode = bme680_bsec_ns.enum('BME680IAQMode')
IAQ_MODE_OPTIONS = {
    'STATIC': BME680IAQMode.BME680_IAQ_MODE_STATIC,
    'MOBILE': BME680IAQMode.BME680_IAQ_MODE_MOBILE,
}

BME680BSECComponent = bme680_bsec_ns.class_('BME680BSECComponent', cg.Component, i2c.I2CDevice)

CONFIG_SCHEMA = cv.Schema({
    cv.GenerateID(): cv.declare_id(BME680BSECComponent),
    cv.Optional(CONF_TEMP_OFFSET, default=0): cv.float_range(min=-100, max=100),
    cv.Optional(CONF_IAQ_MODE, default='STATIC'):
        cv.enum(IAQ_MODE_OPTIONS, upper=True),
    cv.Optional(CONF_STATE_SAVE_INTERVAL, default='6hours'): cv.positive_time_period_minutes,
}).extend(i2c.i2c_device_schema(0x76))

def to_code(config):
    var = cg.new_Pvariable(config[CONF_ID])
    yield cg.register_component(var, config)
    yield i2c.register_i2c_device(var, config)

    cg.add(var.set_temperature_offset(config[CONF_TEMP_OFFSET]))
    cg.add(var.set_iaq_mode(config[CONF_IAQ_MODE]))
    cg.add(var.set_state_save_interval(config[CONF_STATE_SAVE_INTERVAL]))
Beispiel #4
0
CONFIG_SECONDARY = cv.Schema({
    cv.GenerateID(): cv.declare_id(i2c.I2CDevice)
}).extend(i2c.i2c_device_schema(None))

CONFIG_SCHEMA = display.BASIC_DISPLAY_SCHEMA.extend({
    cv.GenerateID():
    cv.declare_id(HT16K33AlphaDisplay),
    cv.Optional(CONF_SCROLL, default=False):
    cv.boolean,
    cv.Optional(CONF_SCROLL_SPEED, default='250ms'):
    cv.positive_time_period_milliseconds,
    cv.Optional(CONF_SCROLL_DWELL, default='2s'):
    cv.positive_time_period_milliseconds,
    cv.Optional(CONF_SCROLL_DELAY, default='3'):
    cv.float_range(min=1),
    cv.Optional(CONF_SECONDARY_DISPLAYS):
    cv.ensure_list(CONFIG_SECONDARY),
}).extend(cv.polling_component_schema('1s')).extend(
    i2c.i2c_device_schema(0x70))


def to_code(config):
    var = cg.new_Pvariable(config[CONF_ID])
    yield cg.register_component(var, config)
    yield display.register_display(var, config)
    yield i2c.register_i2c_device(var, config)

    if CONF_LAMBDA in config:
        lambda_ = yield cg.process_lambda(
            config[CONF_LAMBDA], [(HT16K33AlphaDisplay.operator('ref'), 'it')],
Beispiel #5
0
import esphome.codegen as cg
import esphome.config_validation as cv
from esphome.components import i2c, sensor
from esphome.const import CONF_ID, UNIT_METER, ICON_ARROW_EXPAND_VERTICAL

DEPENDENCIES = ['i2c']

vl53l0x_ns = cg.esphome_ns.namespace('vl53l0x')
VL53L0XSensor = vl53l0x_ns.class_('VL53L0XSensor', sensor.Sensor, cg.PollingComponent,
                                  i2c.I2CDevice)

CONF_SIGNAL_RATE_LIMIT = 'signal_rate_limit'
CONF_LONG_RANGE = 'long_range'

CONFIG_SCHEMA = sensor.sensor_schema(UNIT_METER, ICON_ARROW_EXPAND_VERTICAL, 2).extend({
    cv.GenerateID(): cv.declare_id(VL53L0XSensor),
    cv.Optional(CONF_SIGNAL_RATE_LIMIT, default=0.25): cv.float_range(
        min=0.0, max=512.0, min_included=False, max_included=False),
    cv.Optional(CONF_LONG_RANGE, default=False): cv.boolean,
}).extend(cv.polling_component_schema('60s')).extend(i2c.i2c_device_schema(0x29))


def to_code(config):
    var = cg.new_Pvariable(config[CONF_ID])
    yield cg.register_component(var, config)
    cg.add(var.set_signal_rate_limit(config[CONF_SIGNAL_RATE_LIMIT]))
    cg.add(var.set_long_range(config[CONF_LONG_RANGE]))
    yield sensor.register_sensor(var, config)
    yield i2c.register_i2c_device(var, config)
Beispiel #6
0
    d = m.group(5)

    val = float(deg or 0) + float(minute or 0) / 60 + float(second or 0) / 3600
    if sign == "-":
        val *= -1
    if d and d in "SW":
        val *= -1
    return val


CONFIG_SCHEMA = cv.Schema(
    {
        cv.GenerateID(): cv.declare_id(Sun),
        cv.GenerateID(CONF_TIME_ID): cv.use_id(time.RealTimeClock),
        cv.Required(CONF_LATITUDE): cv.All(
            parse_latlon, cv.float_range(min=-90, max=90)
        ),
        cv.Required(CONF_LONGITUDE): cv.All(
            parse_latlon, cv.float_range(min=-180, max=180)
        ),
        cv.Optional(CONF_ON_SUNRISE): automation.validate_automation(
            {
                cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SunTrigger),
                cv.Optional(CONF_ELEVATION, default=DEFAULT_ELEVATION): elevation,
            }
        ),
        cv.Optional(CONF_ON_SUNSET): automation.validate_automation(
            {
                cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SunTrigger),
                cv.Optional(CONF_ELEVATION, default=DEFAULT_ELEVATION): elevation,
            }
Beispiel #7
0
def validate_driver_address(value):
    if value < 0 or value > 3:
        raise cv.Invalid(
            "Driver address must be 0 to 3 according to MS1 and MS2"
        )
    return value

CONFIG_SCHEMA = cv.All(
    stepper.STEPPER_SCHEMA.extend ({
        cv.Required(CONF_ID): cv.declare_id(TMC2209),
        # Match to your driver
        # SilentStepStick series use 0.11
        # UltiMachine Einsy and Archim2 boards use 0.2
        # Panucatt BSD2660 uses 0.1
        # Watterott TMC5160 uses 0.075
        cv.Required(CONF_R_SENSE): cv.float_range(min=0,max=1),
        cv.Required(CONF_ENABLE_PIN): pins.gpio_output_pin_schema,
        cv.Optional(CONF_INDEX_PIN): validate_index_counter_pin,
        cv.Optional(CONF_DIAG_PIN): pins.gpio_input_pin_schema,
        cv.Optional(CONF_STEP_PIN): pins.gpio_output_pin_schema,
        cv.Optional(CONF_DIR_PIN): pins.gpio_output_pin_schema,
        cv.Optional(CONF_FREEWHEELING_MODE, default="normal"): cv.enum({"normal": 0, "freewheeling": 1, "shorted_coil_ls": 2, "shorted_coil_hs": 3}),
        cv.Optional(CONF_INVERTED, False): cv.boolean,
        cv.Optional(CONF_DRIVER_ADDRESS, default=0): validate_driver_address,
        # StallGuard4 threshold [0... 255] level for stall detection. It compensates for
        # motor specific characteristics and controls sensitivity. A higher value gives a higher
        # sensitivity. A higher value makes StallGuard4 more sensitive and requires less torque to
        # indicate a stall. The double of this value is compared to SG_RESULT.
        # The stall output becomes active if SG_RESULT fall below this value.
        cv.Optional(CONF_STALL_THRESHOLD, default=0): cv.int_range(min=0,max=255),
        cv.Optional(CONF_MICROSTEPS, default=0): cv.one_of(0,2,4,8,16,32,64,128,256, int=True),
CometBlueClimate = cg.global_ns.class_('CometBlueClimate', climate.Climate,
                                       cg.PollingComponent)

CONFIG_SCHEMA = cv.All(
    climate.CLIMATE_SCHEMA.extend({
        cv.GenerateID():
        cv.declare_id(CometBlueClimate),
        cv.GenerateID(CONF_TIME_ID):
        cv.use_id(time.RealTimeClock),
        cv.Required(CONF_MAC_ADDRESS):
        cv.mac_address,
        cv.Optional(CONF_PIN, default=-1):
        cv.int_range(min_included=0, max_included=9999999),
        cv.Optional(CONF_TEMPERATURE_OFFSET, default=0):
        cv.float_range(min_included=-3, max_included=+3),
        cv.Optional(CONF_WINDOW_OPEN_SENSITIVITY, default=4):
        cv.int_range(min_included=0, max_included=4),
        cv.Optional(CONF_WINDOW_OPEN_MINUTES, default=10):
        cv.int_range(min_included=0, max_included=60),
    }).extend(cv.polling_component_schema('4h')))


def to_code(config):
    var = cg.new_Pvariable(config[CONF_ID])
    yield cg.register_component(var, config)
    yield climate.register_climate(var, config)

    cg.add(var.set_address(config[CONF_MAC_ADDRESS].as_hex))
    cg.add(var.set_pin(config[CONF_PIN]))
    cg.add(var.set_temperature_offset(config[CONF_TEMPERATURE_OFFSET]))
Beispiel #9
0
    cv.GenerateID():
    cv.declare_id(LTR390Component),
    cv.Optional(CONF_LIGHT):
    sensor.sensor_schema(UNIT_LUX, ICON_BRIGHTNESS_5, 1),
    cv.Optional(CONF_ALS):
    sensor.sensor_schema(UNIT_COUNTS, ICON_BRIGHTNESS_5, 1),
    cv.Optional(CONF_UVI):
    sensor.sensor_schema(UNIT_UVI, ICON_BRIGHTNESS_5, 5),
    cv.Optional(CONF_UV):
    sensor.sensor_schema(UNIT_COUNTS, ICON_BRIGHTNESS_5, 1),
    cv.Optional(CONF_GAIN, default="X3"):
    cv.enum(GAIN_OPTIONS),
    cv.Optional(CONF_RESOLUTION, default="18"):
    cv.enum(RES_OPTIONS),
    cv.Optional(CONF_WFAC, default=1.0):
    cv.float_range(min=1.0),
}).extend(cv.polling_component_schema('60s')).extend(
    i2c.i2c_device_schema(0x53))

TYPES = {
    CONF_LIGHT: 'set_light_sensor',
    CONF_ALS: 'set_als_sensor',
    CONF_UVI: 'set_uvi_sensor',
    CONF_UV: 'set_uv_sensor',
}


def to_code(config):
    var = cg.new_Pvariable(config[CONF_ID])
    yield cg.register_component(var, config)
    yield i2c.register_i2c_device(var, config)
Beispiel #10
0
    cv.Optional(CONF_HUMIDITY):
    sensor.sensor_schema(
        unit_of_measurement=UNIT_PERCENT,
        icon=ICON_WATER_PERCENT,
        accuracy_decimals=2,
        device_class=DEVICE_CLASS_HUMIDITY,
        state_class=STATE_CLASS_MEASUREMENT,
    ),
    cv.Optional(CONF_PRECISION, default="High"):
    cv.enum(PRECISION_OPTIONS),
    cv.Optional(CONF_HEATER_POWER, default="High"):
    cv.enum(HEATER_POWER_OPTIONS),
    cv.Optional(CONF_HEATER_TIME, default="Long"):
    cv.enum(HEATER_TIME_OPTIONS),
    cv.Optional(CONF_HEATER_MAX_DUTY, default=0.0):
    cv.float_range(min=0.0, max=0.05),
}).extend(cv.polling_component_schema("60s")).extend(
    i2c.i2c_device_schema(0x44)))

TYPES = {
    CONF_TEMPERATURE: "set_temp_sensor",
    CONF_HUMIDITY: "set_humidity_sensor",
}


async def to_code(config):
    var = cg.new_Pvariable(config[CONF_ID])
    await cg.register_component(var, config)
    await i2c.register_i2c_device(var, config)

    cg.add(var.set_precision_value(config[CONF_PRECISION]))
Beispiel #11
0
    if value.total_seconds > 60:
        raise cv.Invalid("Maximum timeout can not be greater then 60 seconds")
    return value


CONFIG_SCHEMA = cv.All(
    sensor.sensor_schema(
        VL53L0XSensor,
        unit_of_measurement=UNIT_METER,
        icon=ICON_ARROW_EXPAND_VERTICAL,
        accuracy_decimals=2,
        state_class=STATE_CLASS_MEASUREMENT,
    ).extend({
        cv.Optional(CONF_SIGNAL_RATE_LIMIT, default=0.25):
        cv.float_range(min=0.0,
                       max=512.0,
                       min_included=False,
                       max_included=False),
        cv.Optional(CONF_LONG_RANGE, default=False):
        cv.boolean,
        cv.Optional(CONF_TIMEOUT, default="10ms"):
        check_timeout,
        cv.Optional(CONF_ENABLE_PIN):
        pins.gpio_output_pin_schema,
    }).extend(cv.polling_component_schema("60s")).extend(
        i2c.i2c_device_schema(0x29)),
    check_keys,
)


async def to_code(config):
    var = await sensor.new_sensor(config)
Beispiel #12
0
CONFIG_SCHEMA = (
    cv.Schema(
        {
            cv.GenerateID(): cv.declare_id(TCS34725Component),
            cv.Optional(CONF_RED_CHANNEL): color_channel_schema,
            cv.Optional(CONF_GREEN_CHANNEL): color_channel_schema,
            cv.Optional(CONF_BLUE_CHANNEL): color_channel_schema,
            cv.Optional(CONF_CLEAR_CHANNEL): color_channel_schema,
            cv.Optional(CONF_ILLUMINANCE): illuminance_schema,
            cv.Optional(CONF_COLOR_TEMPERATURE): color_temperature_schema,
            cv.Optional(CONF_INTEGRATION_TIME, default="auto"): cv.enum(
                TCS34725_INTEGRATION_TIMES, lower=True
            ),
            cv.Optional(CONF_GAIN, default="1X"): cv.enum(TCS34725_GAINS, upper=True),
            cv.Optional(CONF_GLASS_ATTENUATION_FACTOR, default=1.0): cv.float_range(
                min=1.0
            ),
        }
    )
    .extend(cv.polling_component_schema("60s"))
    .extend(i2c.i2c_device_schema(0x29))
)


async def to_code(config):
    var = cg.new_Pvariable(config[CONF_ID])
    await cg.register_component(var, config)
    await i2c.register_i2c_device(var, config)

    cg.add(var.set_integration_time(config[CONF_INTEGRATION_TIME]))
    cg.add(var.set_gain(config[CONF_GAIN]))
            value = ELEVATION_MAP[cv.one_of(*ELEVATION_MAP,
                                            lower=True,
                                            space='_')(value)]
        except cv.Invalid:
            pass
    value = cv.angle(value)
    return cv.float_range(min=-180, max=180)(value)


CONFIG_SCHEMA = cv.Schema({
    cv.GenerateID():
    cv.declare_id(Sun),
    cv.GenerateID(CONF_TIME_ID):
    cv.use_id(time.RealTimeClock),
    cv.Required(CONF_LATITUDE):
    cv.float_range(min=-90, max=90),
    cv.Required(CONF_LONGITUDE):
    cv.float_range(min=-180, max=180),
    cv.Optional(CONF_ON_SUNRISE):
    automation.validate_automation({
        cv.GenerateID(CONF_TRIGGER_ID):
        cv.declare_id(SunTrigger),
        cv.Optional(CONF_ELEVATION, default=DEFAULT_ELEVATION):
        elevation,
    }),
    cv.Optional(CONF_ON_SUNSET):
    automation.validate_automation({
        cv.GenerateID(CONF_TRIGGER_ID):
        cv.declare_id(SunTrigger),
        cv.Optional(CONF_ELEVATION, default=DEFAULT_ELEVATION):
        elevation,
Beispiel #14
0
    cv.enum(DIRECTION_TYPE, upper=True),
})

GRAPH_SCHEMA = cv.Schema({
    cv.Required(CONF_ID):
    cv.declare_id(Graph_),
    cv.Required(CONF_DURATION):
    cv.positive_time_period_seconds,
    cv.Required(CONF_WIDTH):
    cv.positive_not_null_int,
    cv.Required(CONF_HEIGHT):
    cv.positive_not_null_int,
    cv.Optional(CONF_X_GRID):
    cv.positive_time_period_seconds,
    cv.Optional(CONF_Y_GRID):
    cv.float_range(min=0, min_included=False),
    cv.Optional(CONF_BORDER):
    cv.boolean,
    # Single trace options in base
    cv.Optional(CONF_SENSOR):
    cv.use_id(sensor.Sensor),
    cv.Optional(CONF_LINE_THICKNESS):
    cv.positive_int,
    cv.Optional(CONF_LINE_TYPE):
    cv.enum(LINE_TYPE, upper=True),
    cv.Optional(CONF_COLOR):
    cv.use_id(color.ColorStruct),
    # Axis specific options (Future feature may be to add second Y-axis)
    cv.Optional(CONF_MIN_VALUE):
    cv.float_,
    cv.Optional(CONF_MAX_VALUE):
Beispiel #15
0

def elevation(value):
    if isinstance(value, str):
        try:
            value = ELEVATION_MAP[cv.one_of(*ELEVATION_MAP, lower=True, space='_')]
        except cv.Invalid:
            pass
    value = cv.angle(value)
    return cv.float_range(min=-180, max=180)(value)


CONFIG_SCHEMA = cv.Schema({
    cv.GenerateID(): cv.declare_id(Sun),
    cv.GenerateID(CONF_TIME_ID): cv.use_id(time.RealTimeClock),
    cv.Required(CONF_LATITUDE): cv.float_range(min=-90, max=90),
    cv.Required(CONF_LONGITUDE): cv.float_range(min=-180, max=180),

    cv.Optional(CONF_ON_SUNRISE): automation.validate_automation({
        cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SunTrigger),
        cv.Optional(CONF_ELEVATION, default=0.0): elevation,
    }),
    cv.Optional(CONF_ON_SUNSET): automation.validate_automation({
        cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SunTrigger),
        cv.Optional(CONF_ELEVATION, default=0.0): elevation,
    }),
})


def to_code(config):
    var = cg.new_Pvariable(config[CONF_ID])
Beispiel #16
0
        cv.Optional(CONF_EAP):
        EAP_AUTH_SCHEMA,
        cv.Optional(CONF_AP):
        wifi_network_ap,
        cv.Optional(CONF_DOMAIN, default=".local"):
        cv.domain_name,
        cv.Optional(CONF_REBOOT_TIMEOUT, default="15min"):
        cv.positive_time_period_milliseconds,
        cv.SplitDefault(CONF_POWER_SAVE_MODE, esp8266="none", esp32="light"):
        cv.enum(WIFI_POWER_SAVE_MODES, upper=True),
        cv.Optional(CONF_FAST_CONNECT, default=False):
        cv.boolean,
        cv.Optional(CONF_USE_ADDRESS):
        cv.string_strict,
        cv.SplitDefault(CONF_OUTPUT_POWER, esp8266=20.0):
        cv.All(cv.decibel, cv.float_range(min=8.5, max=20.5)),
        cv.Optional("enable_mdns"):
        cv.invalid(
            "This option has been removed. Please use the [disabled] option under the "
            "new mdns component instead."),
    }),
    _validate,
)


def eap_auth(config):
    if config is None:
        return None
    ca_cert = ""
    if CONF_CERTIFICATE_AUTHORITY in config:
        ca_cert = wpa2_eap.read_relative_config_path(