validate_unit_of_measurement, cv.Optional(CONF_ACCURACY_DECIMALS): validate_accuracy_decimals, cv.Optional(CONF_DEVICE_CLASS): validate_device_class, cv.Optional(CONF_STATE_CLASS): validate_state_class, cv.Optional("last_reset_type"): cv.invalid( "last_reset_type has been removed since 2021.9.0. state_class: total_increasing should be used for total values." ), cv.Optional(CONF_FORCE_UPDATE, default=False): cv.boolean, cv.Optional(CONF_EXPIRE_AFTER): cv.All( cv.requires_component("mqtt"), cv.Any(None, cv.positive_time_period_milliseconds), ), cv.Optional(CONF_FILTERS): validate_filters, cv.Optional(CONF_ON_VALUE): automation.validate_automation({ cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SensorStateTrigger), }), cv.Optional(CONF_ON_RAW_VALUE): automation.validate_automation({ cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SensorRawStateTrigger), }), cv.Optional(CONF_ON_VALUE_RANGE):
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])) if CONF_INTERNAL in config: cg.add(var.set_internal(config[CONF_INTERNAL]))
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) yield mqtt.register_mqtt_component(mqtt_, config)
FilterOutValueFilter = sensor_ns.class_('FilterOutValueFilter', Filter) FilterOutNANFilter = sensor_ns.class_('FilterOutNANFilter', Filter) ThrottleFilter = sensor_ns.class_('ThrottleFilter', Filter) DebounceFilter = sensor_ns.class_('DebounceFilter', Filter, Component) HeartbeatFilter = sensor_ns.class_('HeartbeatFilter', Filter, Component) DeltaFilter = sensor_ns.class_('DeltaFilter', Filter) OrFilter = sensor_ns.class_('OrFilter', Filter) UniqueFilter = sensor_ns.class_('UniqueFilter', Filter) SensorInRangeCondition = sensor_ns.class_('SensorInRangeCondition', Filter) SENSOR_SCHEMA = cv.MQTT_COMPONENT_SCHEMA.extend({ cv.GenerateID(CONF_MQTT_ID): cv.declare_variable_id(MQTTSensorComponent), vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string_strict, vol.Optional(CONF_ICON): cv.icon, vol.Optional(CONF_ACCURACY_DECIMALS): vol.Coerce(int), vol.Optional(CONF_EXPIRE_AFTER): vol.All(cv.requires_component('mqtt'), vol.Any(None, cv.positive_time_period_milliseconds)), vol.Optional(CONF_FILTERS): FILTERS_SCHEMA, vol.Optional(CONF_ON_VALUE): automation.validate_automation({ cv.GenerateID(CONF_TRIGGER_ID): cv.declare_variable_id(SensorStateTrigger), }), 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)), })
CoverClosedTrigger = cover_ns.class_("CoverClosedTrigger", automation.Trigger.template()) CONF_ON_OPEN = "on_open" CONF_ON_CLOSED = "on_closed" COVER_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend( cv.MQTT_COMMAND_COMPONENT_SCHEMA).extend({ cv.GenerateID(): cv.declare_id(Cover), cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTCoverComponent), cv.Optional(CONF_DEVICE_CLASS): cv.one_of(*DEVICE_CLASSES, lower=True), cv.Optional(CONF_POSITION_COMMAND_TOPIC): cv.All(cv.requires_component("mqtt"), cv.subscribe_topic), cv.Optional(CONF_POSITION_STATE_TOPIC): cv.All(cv.requires_component("mqtt"), cv.subscribe_topic), cv.Optional(CONF_TILT_COMMAND_TOPIC): cv.All(cv.requires_component("mqtt"), cv.subscribe_topic), cv.Optional(CONF_TILT_STATE_TOPIC): cv.All(cv.requires_component("mqtt"), cv.subscribe_topic), cv.Optional(CONF_ON_OPEN): automation.validate_automation({ cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(CoverOpenTrigger), }), cv.Optional(CONF_ON_CLOSED): automation.validate_automation({ cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(CoverClosedTrigger),
accuracy_decimals = cv.int_ icon = cv.icon SENSOR_SCHEMA = cv.MQTT_COMPONENT_SCHEMA.extend({ cv.OnlyWith(CONF_MQTT_ID, 'mqtt'): cv.declare_id(mqtt.MQTTSensorComponent), cv.GenerateID(): cv.declare_id(Sensor), cv.Optional(CONF_UNIT_OF_MEASUREMENT): unit_of_measurement, cv.Optional(CONF_ICON): icon, cv.Optional(CONF_ACCURACY_DECIMALS): accuracy_decimals, cv.Optional(CONF_EXPIRE_AFTER): cv.All(cv.requires_component('mqtt'), cv.Any(None, cv.positive_time_period_milliseconds)), cv.Optional(CONF_FILTERS): validate_filters, cv.Optional(CONF_ON_VALUE): automation.validate_automation({ cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SensorStateTrigger), }), cv.Optional(CONF_ON_RAW_VALUE): automation.validate_automation({ cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SensorRawStateTrigger), }), cv.Optional(CONF_ON_VALUE_RANGE): automation.validate_automation(
StateTrigger = climate_ns.class_("StateTrigger", automation.Trigger.template()) CLIMATE_SCHEMA = cv.ENTITY_BASE_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, }), cv.Optional(CONF_ACTION_STATE_TOPIC): cv.All(cv.requires_component("mqtt"), cv.publish_topic), cv.Optional(CONF_AWAY_COMMAND_TOPIC): cv.All(cv.requires_component("mqtt"), cv.publish_topic), cv.Optional(CONF_AWAY_STATE_TOPIC): cv.All(cv.requires_component("mqtt"), cv.publish_topic), cv.Optional(CONF_CURRENT_TEMPERATURE_STATE_TOPIC): cv.All(cv.requires_component("mqtt"), cv.publish_topic), cv.Optional(CONF_FAN_MODE_COMMAND_TOPIC): cv.All(cv.requires_component("mqtt"), cv.publish_topic), cv.Optional(CONF_FAN_MODE_STATE_TOPIC): cv.All(cv.requires_component("mqtt"), cv.publish_topic), cv.Optional(CONF_MODE_COMMAND_TOPIC): cv.All(cv.requires_component("mqtt"), cv.publish_topic), cv.Optional(CONF_MODE_STATE_TOPIC): cv.All(cv.requires_component("mqtt"), cv.publish_topic), cv.Optional(CONF_SWING_MODE_COMMAND_TOPIC):