Exemplo n.º 1
0
# Enums
SelectOperation = select_ns.enum("SelectOperation")
SELECT_OPERATION_OPTIONS = {
    "NEXT": SelectOperation.SELECT_OP_NEXT,
    "PREVIOUS": SelectOperation.SELECT_OP_PREVIOUS,
    "FIRST": SelectOperation.SELECT_OP_FIRST,
    "LAST": SelectOperation.SELECT_OP_LAST,
}

icon = cv.icon


SELECT_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).extend(
    {
        cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTSelectComponent),
        cv.GenerateID(): cv.declare_id(Select),
        cv.Optional(CONF_ON_VALUE): automation.validate_automation(
            {
                cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SelectStateTrigger),
            }
        ),
    }
)


async def setup_select_core_(var, config, *, options: List[str]):
    await setup_entity(var, config)

    cg.add(var.traits.set_options(options))
Exemplo n.º 2
0
NumberInRangeCondition = number_ns.class_("NumberInRangeCondition",
                                          automation.Condition)

NumberMode = number_ns.enum("NumberMode")

NUMBER_MODES = {
    "AUTO": NumberMode.NUMBER_MODE_AUTO,
    "BOX": NumberMode.NUMBER_MODE_BOX,
    "SLIDER": NumberMode.NUMBER_MODE_SLIDER,
}

icon = cv.icon

NUMBER_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(
    cv.MQTT_COMMAND_COMPONENT_SCHEMA).extend({
        cv.OnlyWith(CONF_MQTT_ID, "mqtt"):
        cv.declare_id(mqtt.MQTTNumberComponent),
        cv.GenerateID():
        cv.declare_id(Number),
        cv.Optional(CONF_ON_VALUE):
        automation.validate_automation({
            cv.GenerateID(CONF_TRIGGER_ID):
            cv.declare_id(NumberStateTrigger),
        }),
        cv.Optional(CONF_ON_VALUE_RANGE):
        automation.validate_automation(
            {
                cv.GenerateID(CONF_TRIGGER_ID):
                cv.declare_id(ValueRangeTrigger),
                cv.Optional(CONF_ABOVE): cv.templatable(cv.float_),
                cv.Optional(CONF_BELOW): cv.templatable(cv.float_),
Exemplo n.º 3
0
TurnOnAction = fan_ns.class_('TurnOnAction', automation.Action)
TurnOffAction = fan_ns.class_('TurnOffAction', automation.Action)
ToggleAction = fan_ns.class_('ToggleAction', automation.Action)

FanSpeed = fan_ns.enum('FanSpeed')
FAN_SPEEDS = {
    'OFF': FanSpeed.FAN_SPEED_OFF,
    'LOW': FanSpeed.FAN_SPEED_LOW,
    'MEDIUM': FanSpeed.FAN_SPEED_MEDIUM,
    'HIGH': FanSpeed.FAN_SPEED_HIGH,
}

FAN_SCHEMA = cv.MQTT_COMMAND_COMPONENT_SCHEMA.extend({
    cv.GenerateID():
    cv.declare_id(FanState),
    cv.OnlyWith(CONF_MQTT_ID, 'mqtt'):
    cv.declare_id(mqtt.MQTTFanComponent),
    cv.Optional(CONF_OSCILLATION_STATE_TOPIC):
    cv.All(cv.requires_component('mqtt'), cv.publish_topic),
    cv.Optional(CONF_OSCILLATION_COMMAND_TOPIC):
    cv.All(cv.requires_component('mqtt'), cv.subscribe_topic),
    cv.Optional(CONF_SPEED_STATE_TOPIC):
    cv.All(cv.requires_component('mqtt'), cv.publish_topic),
    cv.Optional(CONF_SPEED_COMMAND_TOPIC):
    cv.All(cv.requires_component('mqtt'), cv.subscribe_topic),
})


@coroutine
def setup_fan_core_(var, config):
    cg.add(var.set_name(config[CONF_NAME]))
Exemplo n.º 4
0
        state = new_state
        tim = {
            CONF_STATE: new_state,
            CONF_MIN_LENGTH: min_length,
        }
        if max_length is not None:
            tim[CONF_MAX_LENGTH] = max_length
        timings.append(tim)
    return timings


device_class = cv.one_of(*DEVICE_CLASSES, lower=True, space='_')

BINARY_SENSOR_SCHEMA = cv.MQTT_COMPONENT_SCHEMA.extend({
    cv.GenerateID(): cv.declare_id(BinarySensor),
    cv.OnlyWith(CONF_MQTT_ID, 'mqtt'): cv.declare_id(mqtt.MQTTBinarySensorComponent),

    cv.Optional(CONF_DEVICE_CLASS): device_class,
    cv.Optional(CONF_FILTERS): validate_filters,
    cv.Optional(CONF_ON_PRESS): automation.validate_automation({
        cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(PressTrigger),
    }),
    cv.Optional(CONF_ON_RELEASE): automation.validate_automation({
        cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ReleaseTrigger),
    }),
    cv.Optional(CONF_ON_CLICK): automation.validate_automation({
        cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ClickTrigger),
        cv.Optional(CONF_MIN_LENGTH, default='50ms'): cv.positive_time_period_milliseconds,
        cv.Optional(CONF_MAX_LENGTH, default='350ms'): cv.positive_time_period_milliseconds,
    }),
    cv.Optional(CONF_ON_DOUBLE_CLICK): automation.validate_automation({
Exemplo n.º 5
0
IS_PLATFORM_COMPONENT = True

LightRestoreMode = light_ns.enum("LightRestoreMode")
RESTORE_MODES = {
    "RESTORE_DEFAULT_OFF": LightRestoreMode.LIGHT_RESTORE_DEFAULT_OFF,
    "RESTORE_DEFAULT_ON": LightRestoreMode.LIGHT_RESTORE_DEFAULT_ON,
    "ALWAYS_OFF": LightRestoreMode.LIGHT_ALWAYS_OFF,
    "ALWAYS_ON": LightRestoreMode.LIGHT_ALWAYS_ON,
    "RESTORE_INVERTED_DEFAULT_OFF": LightRestoreMode.LIGHT_RESTORE_INVERTED_DEFAULT_OFF,
    "RESTORE_INVERTED_DEFAULT_ON": LightRestoreMode.LIGHT_RESTORE_INVERTED_DEFAULT_ON,
}

LIGHT_SCHEMA = cv.MQTT_COMMAND_COMPONENT_SCHEMA.extend(
    {
        cv.GenerateID(): cv.declare_id(LightState),
        cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTJSONLightComponent),
        cv.Optional(CONF_RESTORE_MODE, default="restore_default_off"): cv.enum(
            RESTORE_MODES, upper=True, space="_"
        ),
        cv.Optional(CONF_ON_TURN_ON): auto.validate_automation(
            {
                cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(LightTurnOnTrigger),
            }
        ),
        cv.Optional(CONF_ON_TURN_OFF): auto.validate_automation(
            {
                cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(LightTurnOffTrigger),
            }
        ),
    }
)
Exemplo n.º 6
0
# Actions
TurnOnAction = fan_ns.class_('TurnOnAction', automation.Action)
TurnOffAction = fan_ns.class_('TurnOffAction', automation.Action)
ToggleAction = fan_ns.class_('ToggleAction', automation.Action)

FanSpeed = fan_ns.enum('FanSpeed')
FAN_SPEEDS = {
    'OFF': FanSpeed.FAN_SPEED_OFF,
    'LOW': FanSpeed.FAN_SPEED_LOW,
    'MEDIUM': FanSpeed.FAN_SPEED_MEDIUM,
    'HIGH': FanSpeed.FAN_SPEED_HIGH,
}

FAN_SCHEMA = cv.MQTT_COMMAND_COMPONENT_SCHEMA.extend({
    cv.GenerateID(): cv.declare_id(FanState),
    cv.OnlyWith(CONF_MQTT_ID, 'mqtt'): cv.declare_id(mqtt.MQTTFanComponent),
    cv.Optional(CONF_OSCILLATION_STATE_TOPIC): cv.All(cv.requires_component('mqtt'),
                                                      cv.publish_topic),
    cv.Optional(CONF_OSCILLATION_COMMAND_TOPIC): cv.All(cv.requires_component('mqtt'),
                                                        cv.subscribe_topic),
})


@coroutine
def setup_fan_core_(var, config):
    cg.add(var.set_name(config[CONF_NAME]))
    if CONF_INTERNAL in config:
        cg.add(var.set_internal(config[CONF_INTERNAL]))

    if CONF_MQTT_ID in config:
        mqtt_ = cg.new_Pvariable(config[CONF_MQTT_ID], var)
Exemplo n.º 7
0
        tim = {
            CONF_STATE: new_state,
            CONF_MIN_LENGTH: min_length,
        }
        if max_length is not None:
            tim[CONF_MAX_LENGTH] = max_length
        timings.append(tim)
    return timings


device_class = cv.one_of(*DEVICE_CLASSES, lower=True, space="_")

BINARY_SENSOR_SCHEMA = cv.NAMEABLE_SCHEMA.extend(cv.MQTT_COMPONENT_SCHEMA).extend(
    {
        cv.GenerateID(): cv.declare_id(BinarySensor),
        cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(
            mqtt.MQTTBinarySensorComponent
        ),
        cv.Optional(CONF_DEVICE_CLASS): device_class,
        cv.Optional(CONF_FILTERS): validate_filters,
        cv.Optional(CONF_ON_PRESS): automation.validate_automation(
            {
                cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(PressTrigger),
            }
        ),
        cv.Optional(CONF_ON_RELEASE): automation.validate_automation(
            {
                cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ReleaseTrigger),
            }
        ),
        cv.Optional(CONF_ON_CLICK): automation.validate_automation(
Exemplo n.º 8
0
TextSensorStateTrigger = text_sensor_ns.class_(
    "TextSensorStateTrigger", automation.Trigger.template(cg.std_string)
)
TextSensorPublishAction = text_sensor_ns.class_(
    "TextSensorPublishAction", automation.Action
)
TextSensorStateCondition = text_sensor_ns.class_(
    "TextSensorStateCondition", automation.Condition
)

icon = cv.icon

TEXT_SENSOR_SCHEMA = cv.NAMEABLE_SCHEMA.extend(cv.MQTT_COMPONENT_SCHEMA).extend(
    {
        cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTTextSensor),
        cv.Optional(CONF_ICON): icon,
        cv.Optional(CONF_ON_VALUE): automation.validate_automation(
            {
                cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(TextSensorStateTrigger),
            }
        ),
    }
)


async def setup_text_sensor_core_(var, config):
    cg.add(var.set_name(config[CONF_NAME]))
    cg.add(var.set_disabled_by_default(config[CONF_DISABLED_BY_DEFAULT]))
    if CONF_INTERNAL in config:
        cg.add(var.set_internal(config[CONF_INTERNAL]))
Exemplo n.º 9
0
validate_presets = cv.enum(ALLOWED_CLIMATE_PRESETS, upper=True)
validate_swing_modes = cv.enum(ALLOWED_CLIMATE_SWING_MODES, upper=True)
validate_custom_fan_modes = cv.enum(CUSTOM_FAN_MODES, upper=True)
validate_custom_presets = cv.enum(CUSTOM_PRESETS, upper=True)

CONFIG_SCHEMA = cv.All(
    climate.CLIMATE_SCHEMA.extend({
        cv.GenerateID():
        cv.declare_id(AirConditioner),
        cv.Optional(CONF_PERIOD, default="1s"):
        cv.time_period,
        cv.Optional(CONF_TIMEOUT, default="2s"):
        cv.time_period,
        cv.Optional(CONF_NUM_ATTEMPTS, default=3):
        cv.int_range(min=1, max=5),
        cv.OnlyWith(CONF_TRANSMITTER_ID, "remote_transmitter"):
        cv.use_id(remote_transmitter.RemoteTransmitterComponent),
        cv.Optional(CONF_BEEPER, default=False):
        cv.boolean,
        cv.Optional(CONF_AUTOCONF, default=True):
        cv.boolean,
        cv.Optional(CONF_SUPPORTED_MODES):
        cv.ensure_list(validate_modes),
        cv.Optional(CONF_SUPPORTED_SWING_MODES):
        cv.ensure_list(validate_swing_modes),
        cv.Optional(CONF_SUPPORTED_PRESETS):
        cv.ensure_list(validate_presets),
        cv.Optional(CONF_CUSTOM_PRESETS):
        cv.ensure_list(validate_custom_presets),
        cv.Optional(CONF_CUSTOM_FAN_MODES):
        cv.ensure_list(validate_custom_fan_modes),
Exemplo n.º 10
0
CLIMATE_SWING_MODES = {
    "OFF": ClimateSwingMode.CLIMATE_SWING_OFF,
    "BOTH": ClimateSwingMode.CLIMATE_SWING_BOTH,
    "VERTICAL": ClimateSwingMode.CLIMATE_SWING_VERTICAL,
    "HORIZONTAL": ClimateSwingMode.CLIMATE_SWING_HORIZONTAL,
}

validate_climate_swing_mode = cv.enum(CLIMATE_SWING_MODES, upper=True)

# Actions
ControlAction = climate_ns.class_("ControlAction", automation.Action)

CLIMATE_SCHEMA = cv.NAMEABLE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).extend(
    {
        cv.GenerateID(): cv.declare_id(Climate),
        cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTClimateComponent),
        cv.Optional(CONF_VISUAL, default={}): cv.Schema(
            {
                cv.Optional(CONF_MIN_TEMPERATURE): cv.temperature,
                cv.Optional(CONF_MAX_TEMPERATURE): cv.temperature,
                cv.Optional(CONF_TEMPERATURE_STEP): cv.temperature,
            }
        ),
        # TODO: MQTT topic options
    }
)


async def setup_climate_core_(var, config):
    cg.add(var.set_name(config[CONF_NAME]))
    cg.add(var.set_disabled_by_default(config[CONF_DISABLED_BY_DEFAULT]))
Exemplo n.º 11
0
    "ValueRangeTrigger", automation.Trigger.template(cg.float_), cg.Component
)

# Actions
NumberSetAction = number_ns.class_("NumberSetAction", automation.Action)

# Conditions
NumberInRangeCondition = number_ns.class_(
    "NumberInRangeCondition", automation.Condition
)

icon = cv.icon

NUMBER_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).extend(
    {
        cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTNumberComponent),
        cv.GenerateID(): cv.declare_id(Number),
        cv.Optional(CONF_ON_VALUE): automation.validate_automation(
            {
                cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(NumberStateTrigger),
            }
        ),
        cv.Optional(CONF_ON_VALUE_RANGE): automation.validate_automation(
            {
                cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ValueRangeTrigger),
                cv.Optional(CONF_ABOVE): cv.float_,
                cv.Optional(CONF_BELOW): cv.float_,
            },
            cv.has_at_least_one_key(CONF_ABOVE, CONF_BELOW),
        ),
    }