# 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))
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_),
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]))
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({
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), } ), } )
# 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)
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(
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]))
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),
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]))
"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), ), }