コード例 #1
0
def validate_cron_keys(value):
    if CONF_CRON in value:
        for key in value.keys():
            if key in CRON_KEYS:
                raise vol.Invalid(
                    "Cannot use option {} when cron: is specified.".format(
                        key))
        cron_ = value[CONF_CRON]
        value = {x: value[x] for x in value if x != CONF_CRON}
        value.update(cron_)
        return value
    return cv.has_at_least_one_key(*CRON_KEYS)(value)
コード例 #2
0
                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, lower=True),
        vol.Optional(CONF_GAIN):
        vol.All(vol.Upper, cv.one_of(*TCS34725_GAINS), upper=True),
        vol.Optional(CONF_UPDATE_INTERVAL):
        cv.update_interval,
    }).extend(cv.COMPONENT_SCHEMA.schema),
    cv.has_at_least_one_key(*SENSOR_KEYS))


def to_code(config):
    rhs = App.make_tcs34725(config.get(CONF_UPDATE_INTERVAL))
    tcs = Pvariable(config[CONF_ID], rhs)
    if CONF_ADDRESS in config:
        add(tcs.set_address(config[CONF_ADDRESS]))
    if CONF_INTEGRATION_TIME in config:
        add(
            tcs.set_integration_time(
                TCS34725_INTEGRATION_TIMES[config[CONF_INTEGRATION_TIME]]))
    if CONF_GAIN in config:
        add(tcs.set_gain(TCS34725_GAINS[config[CONF_GAIN]]))
    if CONF_RED_CHANNEL in config:
        conf = config[CONF_RED_CHANNEL]
コード例 #3
0
ファイル: __init__.py プロジェクト: khzd/pi4home
                 vol.Optional(CONF_STATE, default=True):
                 cv.boolean,
                 vol.Optional(CONF_BRIGHTNESS, default=1.0):
                 cv.percentage,
                 vol.Optional(CONF_RED, default=1.0):
                 cv.percentage,
                 vol.Optional(CONF_GREEN, default=1.0):
                 cv.percentage,
                 vol.Optional(CONF_BLUE, default=1.0):
                 cv.percentage,
                 vol.Optional(CONF_WHITE, default=1.0):
                 cv.percentage,
                 vol.Required(CONF_DURATION):
                 cv.positive_time_period_milliseconds,
             }),
             cv.has_at_least_one_key(CONF_STATE, CONF_BRIGHTNESS, CONF_RED,
                                     CONF_GREEN, CONF_BLUE, CONF_WHITE)),
         vol.Length(min=2)),
 }),
 vol.Optional(CONF_FLICKER):
 cv.Schema({
     cv.GenerateID(CONF_EFFECT_ID):
     cv.declare_variable_id(FlickerLightEffect),
     vol.Optional(CONF_NAME, default="Flicker"):
     cv.string,
     vol.Optional(CONF_ALPHA):
     cv.percentage,
     vol.Optional(CONF_INTENSITY):
     cv.percentage,
 }),
 vol.Optional(CONF_ADDRESSABLE_LAMBDA):
 cv.Schema({
コード例 #4
0
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),
        vol.Optional(CONF_RESOLUTION):
        vol.All(vol.Coerce(int), vol.Range(min=9, max=12)),
    }), cv.has_at_least_one_key(CONF_ADDRESS, CONF_INDEX))


def to_code(config):
    for hub in get_variable(config[CONF_DALLAS_ID]):
        yield
    if CONF_ADDRESS in config:
        address = HexIntLiteral(config[CONF_ADDRESS])
        rhs = hub.Pget_sensor_by_address(config[CONF_NAME], address,
                                         config.get(CONF_RESOLUTION))
    else:
        rhs = hub.Pget_sensor_by_index(config[CONF_NAME], config[CONF_INDEX],
                                       config.get(CONF_RESOLUTION))
    sensor.register_sensor(rhs, config)

コード例 #5
0
def validate_rx_pin(value):
    value = pins.input_pin(value)
    if CORE.is_esp8266 and value >= 16:
        raise vol.Invalid(
            "Pins GPIO16 and GPIO17 cannot be used as RX pins on ESP8266.")
    return value


CONFIG_SCHEMA = vol.All(
    cv.Schema({
        cv.GenerateID(): cv.declare_variable_id(UARTComponent),
        vol.Optional(CONF_TX_PIN): pins.output_pin,
        vol.Optional(CONF_RX_PIN): validate_rx_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)


BUILD_FLAGS = '-DUSE_UART'
コード例 #6
0
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.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),
    })),
    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
}).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]):
        yield

    rhs = App.make_cse7766(uart_, config.get(CONF_UPDATE_INTERVAL))
    cse = Pvariable(config[CONF_ID], rhs)

    if CONF_VOLTAGE in config:
        conf = config[CONF_VOLTAGE]
        sensor.register_sensor(cse.make_voltage_sensor(conf[CONF_NAME]), conf)
    if CONF_CURRENT in config:
        conf = config[CONF_CURRENT]
        sensor.register_sensor(cse.make_current_sensor(conf[CONF_NAME]), conf)
コード例 #7
0
        vol.Required(CONF_TYPE):
        cv.one_of(*PMSX003_TYPES, upper=True),
        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]):
        yield

    rhs = App.make_pmsx003(uart_, PMSX003_TYPES[config[CONF_TYPE]])
    pms = Pvariable(config[CONF_ID], rhs)

    if CONF_PM_1_0 in config:
        conf = config[CONF_PM_1_0]
        sensor.register_sensor(pms.make_pm_1_0_sensor(conf[CONF_NAME]), conf)

    if CONF_PM_2_5 in config:
        conf = config[CONF_PM_2_5]
コード例 #8
0
ファイル: spi.py プロジェクト: khzd/pi4home
from pi4home.cpp_generator import Pvariable, add
from pi4home.cpp_helpers import gpio_input_pin_expression, gpio_output_pin_expression, \
    setup_component
from pi4home.cpp_types import App, Component, pi4home_ns

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

CONFIG_SCHEMA = vol.All(
    cv.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
        add(spi.set_miso(miso))
    if CONF_MOSI_PIN in config:
        for mosi in gpio_input_pin_expression(config[CONF_MOSI_PIN]):
            yield
        add(spi.set_mosi(mosi))
コード例 #9
0
ファイル: automation.py プロジェクト: khzd/pi4home
OR_CONDITION_SCHEMA = validate_recursive_condition


@CONDITION_REGISTRY.register(CONF_OR, OR_CONDITION_SCHEMA)
def or_condition_to_code(config, condition_id, template_arg, args):
    for conditions in build_conditions(config, template_arg, args):
        yield
    rhs = OrCondition.new(template_arg, conditions)
    type = OrCondition.template(template_arg)
    yield Pvariable(condition_id, rhs, type=type)


RANGE_CONDITION_SCHEMA = vol.All(cv.Schema({
    vol.Optional(CONF_ABOVE): cv.templatable(cv.float_),
    vol.Optional(CONF_BELOW): cv.templatable(cv.float_),
}), cv.has_at_least_one_key(CONF_ABOVE, CONF_BELOW))


@CONDITION_REGISTRY.register(CONF_RANGE, RANGE_CONDITION_SCHEMA)
def range_condition_to_code(config, condition_id, template_arg, args):
    for conditions in build_conditions(config, template_arg, args):
        yield
    rhs = RangeCondition.new(template_arg, conditions)
    type = RangeCondition.template(template_arg)
    condition = Pvariable(condition_id, rhs, type=type)
    if CONF_ABOVE in config:
        for template_ in templatable(config[CONF_ABOVE], args, float_):
            yield
        condition.set_min(template_)
    if CONF_BELOW in config:
        for template_ in templatable(config[CONF_BELOW], args, float_):
コード例 #10
0
    })),
    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,
}).extend(cv.COMPONENT_SCHEMA.schema), cv.has_at_least_one_key(*SENSOR_KEYS))


def to_code(config):
    rhs = App.make_ina219(config[CONF_SHUNT_RESISTANCE],
                          config[CONF_MAX_CURRENT], config[CONF_MAX_VOLTAGE],
                          config[CONF_ADDRESS], config.get(CONF_UPDATE_INTERVAL))
    ina = Pvariable(config[CONF_ID], rhs)
    if CONF_BUS_VOLTAGE in config:
        conf = config[CONF_BUS_VOLTAGE]
        sensor.register_sensor(ina.Pmake_bus_voltage_sensor(conf[CONF_NAME]), conf)
    if CONF_SHUNT_VOLTAGE in config:
        conf = config[CONF_SHUNT_VOLTAGE]
        sensor.register_sensor(ina.Pmake_shunt_voltage_sensor(conf[CONF_NAME]), conf)
    if CONF_CURRENT in config:
        conf = config[CONF_CURRENT]
コード例 #11
0
            cv.declare_variable_id(BME680GasResistanceSensor),
        })),
    vol.Optional(CONF_IIR_FILTER):
    cv.one_of(*IIR_FILTER_OPTIONS, upper=True),
    vol.Optional(CONF_HEATER):
    vol.Any(
        None,
        vol.All(
            cv.Schema(
                {
                    vol.Optional(CONF_TEMPERATURE, default=320):
                    vol.All(vol.Coerce(int), vol.Range(200, 400)),
                    vol.Optional(CONF_DURATION, default='150ms'):
                    vol.All(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):
    rhs = App.make_bme680_sensor(config[CONF_TEMPERATURE][CONF_NAME],
                                 config[CONF_PRESSURE][CONF_NAME],
                                 config[CONF_HUMIDITY][CONF_NAME],
                                 config[CONF_GAS_RESISTANCE][CONF_NAME],
                                 config[CONF_ADDRESS],
                                 config.get(CONF_UPDATE_INTERVAL))
    bme680 = Pvariable(config[CONF_ID], rhs)
    if CONF_OVERSAMPLING in config[CONF_TEMPERATURE]:
        constant = OVERSAMPLING_OPTIONS[config[CONF_TEMPERATURE]
コード例 #12
0
PLATFORM_SCHEMA = vol.All(
    sensor.PLATFORM_SCHEMA.extend({
        cv.GenerateID():
        cv.declare_variable_id(SDS011Component),
        cv.GenerateID(CONF_UART_ID):
        cv.use_variable_id(UARTComponent),
        vol.Optional(CONF_RX_ONLY):
        cv.boolean,
        vol.Optional(CONF_PM_2_5):
        cv.nameable(SDS011_SENSOR_SCHEMA),
        vol.Optional(CONF_PM_10_0):
        cv.nameable(SDS011_SENSOR_SCHEMA),
        vol.Optional(CONF_UPDATE_INTERVAL):
        cv.positive_time_period_minutes,
    }).extend(cv.COMPONENT_SCHEMA.schema),
    cv.has_at_least_one_key(CONF_PM_2_5, CONF_PM_10_0),
    validate_sds011_rx_mode)


def to_code(config):
    for uart_ in get_variable(config[CONF_UART_ID]):
        yield

    rhs = App.make_sds011(uart_)
    sds011 = Pvariable(config[CONF_ID], rhs)

    if CONF_UPDATE_INTERVAL in config:
        add(sds011.set_update_interval_min(config.get(CONF_UPDATE_INTERVAL)))
    if CONF_RX_ONLY in config:
        add(sds011.set_rx_mode_only(config[CONF_RX_ONLY]))
コード例 #13
0
ファイル: __init__.py プロジェクト: khzd/pi4home
    }),
    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_,
        }, cv.has_at_least_one_key(CONF_ABOVE, CONF_BELOW)),
})

SENSOR_PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(SENSOR_SCHEMA.schema)


def setup_filter(config):
    if CONF_OFFSET in config:
        yield OffsetFilter.new(config[CONF_OFFSET])
    elif CONF_MULTIPLY in config:
        yield MultiplyFilter.new(config[CONF_MULTIPLY])
    elif CONF_FILTER_OUT in config:
        yield FilterOutValueFilter.new(config[CONF_FILTER_OUT])
    elif CONF_SLIDING_WINDOW_MOVING_AVERAGE in config:
        conf = config[CONF_SLIDING_WINDOW_MOVING_AVERAGE]
        yield SlidingWindowMovingAverageFilter.new(