From 9e487eb260271c11bb67e9ffaa584941da17b739 Mon Sep 17 00:00:00 2001 From: Kristian Heljas Date: Thu, 11 Mar 2021 14:42:13 +0200 Subject: [PATCH] Hoist mqtt name property and add icon support to MqttEntity (#47165) * hoist common MqttEntity properties * remove default name for MqttEntity Default naming is sensible enough * disable overriding common MqttEntity schema * merge common MqttEntity schemas into MQTT_ENTITY_COMMON_SCHEMA --- .../components/mqtt/alarm_control_panel.py | 66 +++---- .../components/mqtt/binary_sensor.py | 40 ++-- homeassistant/components/mqtt/camera.py | 36 +--- homeassistant/components/mqtt/climate.py | 178 ++++++++---------- homeassistant/components/mqtt/cover.py | 22 +-- .../mqtt/device_tracker/schema_discovery.py | 46 +---- homeassistant/components/mqtt/fan.py | 80 +++----- .../components/mqtt/light/schema_basic.py | 21 +-- .../components/mqtt/light/schema_json.py | 21 +-- .../components/mqtt/light/schema_template.py | 21 +-- homeassistant/components/mqtt/lock.py | 53 ++---- homeassistant/components/mqtt/mixins.py | 23 ++- homeassistant/components/mqtt/number.py | 49 +---- homeassistant/components/mqtt/sensor.py | 43 +---- homeassistant/components/mqtt/switch.py | 50 ++--- .../components/mqtt/vacuum/schema_legacy.py | 25 +-- .../components/mqtt/vacuum/schema_state.py | 26 +-- 17 files changed, 235 insertions(+), 565 deletions(-) diff --git a/homeassistant/components/mqtt/alarm_control_panel.py b/homeassistant/components/mqtt/alarm_control_panel.py index 2f2ba06d6d7..0f10e91e41c 100644 --- a/homeassistant/components/mqtt/alarm_control_panel.py +++ b/homeassistant/components/mqtt/alarm_control_panel.py @@ -14,9 +14,7 @@ from homeassistant.components.alarm_control_panel.const import ( ) from homeassistant.const import ( CONF_CODE, - CONF_DEVICE, CONF_NAME, - CONF_UNIQUE_ID, CONF_VALUE_TEMPLATE, STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_CUSTOM_BYPASS, @@ -44,13 +42,7 @@ from . import ( ) from .. import mqtt from .debug_info import log_messages -from .mixins import ( - MQTT_AVAILABILITY_SCHEMA, - MQTT_ENTITY_DEVICE_INFO_SCHEMA, - MQTT_JSON_ATTRS_SCHEMA, - MqttEntity, - async_setup_entry_helper, -) +from .mixins import MQTT_ENTITY_COMMON_SCHEMA, MqttEntity, async_setup_entry_helper _LOGGER = logging.getLogger(__name__) @@ -70,34 +62,28 @@ DEFAULT_ARM_HOME = "ARM_HOME" DEFAULT_ARM_CUSTOM_BYPASS = "ARM_CUSTOM_BYPASS" DEFAULT_DISARM = "DISARM" DEFAULT_NAME = "MQTT Alarm" -PLATFORM_SCHEMA = ( - mqtt.MQTT_BASE_PLATFORM_SCHEMA.extend( - { - vol.Optional(CONF_CODE): cv.string, - vol.Optional(CONF_CODE_ARM_REQUIRED, default=True): cv.boolean, - vol.Optional(CONF_CODE_DISARM_REQUIRED, default=True): cv.boolean, - vol.Optional( - CONF_COMMAND_TEMPLATE, default=DEFAULT_COMMAND_TEMPLATE - ): cv.template, - vol.Required(CONF_COMMAND_TOPIC): mqtt.valid_publish_topic, - vol.Optional(CONF_DEVICE): MQTT_ENTITY_DEVICE_INFO_SCHEMA, - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, - vol.Optional(CONF_PAYLOAD_ARM_AWAY, default=DEFAULT_ARM_AWAY): cv.string, - vol.Optional(CONF_PAYLOAD_ARM_HOME, default=DEFAULT_ARM_HOME): cv.string, - vol.Optional(CONF_PAYLOAD_ARM_NIGHT, default=DEFAULT_ARM_NIGHT): cv.string, - vol.Optional( - CONF_PAYLOAD_ARM_CUSTOM_BYPASS, default=DEFAULT_ARM_CUSTOM_BYPASS - ): cv.string, - vol.Optional(CONF_PAYLOAD_DISARM, default=DEFAULT_DISARM): cv.string, - vol.Optional(CONF_RETAIN, default=mqtt.DEFAULT_RETAIN): cv.boolean, - vol.Required(CONF_STATE_TOPIC): mqtt.valid_subscribe_topic, - vol.Optional(CONF_UNIQUE_ID): cv.string, - vol.Optional(CONF_VALUE_TEMPLATE): cv.template, - } - ) - .extend(MQTT_AVAILABILITY_SCHEMA.schema) - .extend(MQTT_JSON_ATTRS_SCHEMA.schema) -) +PLATFORM_SCHEMA = mqtt.MQTT_BASE_PLATFORM_SCHEMA.extend( + { + vol.Optional(CONF_CODE): cv.string, + vol.Optional(CONF_CODE_ARM_REQUIRED, default=True): cv.boolean, + vol.Optional(CONF_CODE_DISARM_REQUIRED, default=True): cv.boolean, + vol.Optional( + CONF_COMMAND_TEMPLATE, default=DEFAULT_COMMAND_TEMPLATE + ): cv.template, + vol.Required(CONF_COMMAND_TOPIC): mqtt.valid_publish_topic, + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, + vol.Optional(CONF_PAYLOAD_ARM_AWAY, default=DEFAULT_ARM_AWAY): cv.string, + vol.Optional(CONF_PAYLOAD_ARM_HOME, default=DEFAULT_ARM_HOME): cv.string, + vol.Optional(CONF_PAYLOAD_ARM_NIGHT, default=DEFAULT_ARM_NIGHT): cv.string, + vol.Optional( + CONF_PAYLOAD_ARM_CUSTOM_BYPASS, default=DEFAULT_ARM_CUSTOM_BYPASS + ): cv.string, + vol.Optional(CONF_PAYLOAD_DISARM, default=DEFAULT_DISARM): cv.string, + vol.Optional(CONF_RETAIN, default=mqtt.DEFAULT_RETAIN): cv.boolean, + vol.Required(CONF_STATE_TOPIC): mqtt.valid_subscribe_topic, + vol.Optional(CONF_VALUE_TEMPLATE): cv.template, + } +).extend(MQTT_ENTITY_COMMON_SCHEMA.schema) async def async_setup_platform( @@ -138,7 +124,6 @@ class MqttAlarm(MqttEntity, alarm.AlarmControlPanelEntity): return PLATFORM_SCHEMA def _setup_from_config(self, config): - self._config = config value_template = self._config.get(CONF_VALUE_TEMPLATE) if value_template is not None: value_template.hass = self.hass @@ -186,11 +171,6 @@ class MqttAlarm(MqttEntity, alarm.AlarmControlPanelEntity): }, ) - @property - def name(self): - """Return the name of the device.""" - return self._config[CONF_NAME] - @property def state(self): """Return the state of the device.""" diff --git a/homeassistant/components/mqtt/binary_sensor.py b/homeassistant/components/mqtt/binary_sensor.py index a1f13e7873e..fbd5e7535c5 100644 --- a/homeassistant/components/mqtt/binary_sensor.py +++ b/homeassistant/components/mqtt/binary_sensor.py @@ -11,13 +11,11 @@ from homeassistant.components.binary_sensor import ( BinarySensorEntity, ) from homeassistant.const import ( - CONF_DEVICE, CONF_DEVICE_CLASS, CONF_FORCE_UPDATE, CONF_NAME, CONF_PAYLOAD_OFF, CONF_PAYLOAD_ON, - CONF_UNIQUE_ID, CONF_VALUE_TEMPLATE, ) from homeassistant.core import callback @@ -32,9 +30,7 @@ from . import CONF_QOS, CONF_STATE_TOPIC, DOMAIN, PLATFORMS, subscription from .. import mqtt from .debug_info import log_messages from .mixins import ( - MQTT_AVAILABILITY_SCHEMA, - MQTT_ENTITY_DEVICE_INFO_SCHEMA, - MQTT_JSON_ATTRS_SCHEMA, + MQTT_ENTITY_COMMON_SCHEMA, MqttAvailability, MqttEntity, async_setup_entry_helper, @@ -49,23 +45,17 @@ DEFAULT_PAYLOAD_ON = "ON" DEFAULT_FORCE_UPDATE = False CONF_EXPIRE_AFTER = "expire_after" -PLATFORM_SCHEMA = ( - mqtt.MQTT_RO_PLATFORM_SCHEMA.extend( - { - vol.Optional(CONF_DEVICE): MQTT_ENTITY_DEVICE_INFO_SCHEMA, - vol.Optional(CONF_DEVICE_CLASS): DEVICE_CLASSES_SCHEMA, - vol.Optional(CONF_EXPIRE_AFTER): cv.positive_int, - vol.Optional(CONF_FORCE_UPDATE, default=DEFAULT_FORCE_UPDATE): cv.boolean, - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, - vol.Optional(CONF_OFF_DELAY): cv.positive_int, - vol.Optional(CONF_PAYLOAD_OFF, default=DEFAULT_PAYLOAD_OFF): cv.string, - vol.Optional(CONF_PAYLOAD_ON, default=DEFAULT_PAYLOAD_ON): cv.string, - vol.Optional(CONF_UNIQUE_ID): cv.string, - } - ) - .extend(MQTT_AVAILABILITY_SCHEMA.schema) - .extend(MQTT_JSON_ATTRS_SCHEMA.schema) -) +PLATFORM_SCHEMA = mqtt.MQTT_RO_PLATFORM_SCHEMA.extend( + { + vol.Optional(CONF_DEVICE_CLASS): DEVICE_CLASSES_SCHEMA, + vol.Optional(CONF_EXPIRE_AFTER): cv.positive_int, + vol.Optional(CONF_FORCE_UPDATE, default=DEFAULT_FORCE_UPDATE): cv.boolean, + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, + vol.Optional(CONF_OFF_DELAY): cv.positive_int, + vol.Optional(CONF_PAYLOAD_OFF, default=DEFAULT_PAYLOAD_OFF): cv.string, + vol.Optional(CONF_PAYLOAD_ON, default=DEFAULT_PAYLOAD_ON): cv.string, + } +).extend(MQTT_ENTITY_COMMON_SCHEMA.schema) async def async_setup_platform( @@ -113,7 +103,6 @@ class MqttBinarySensor(MqttEntity, BinarySensorEntity): return PLATFORM_SCHEMA def _setup_from_config(self, config): - self._config = config value_template = self._config.get(CONF_VALUE_TEMPLATE) if value_template is not None: value_template.hass = self.hass @@ -218,11 +207,6 @@ class MqttBinarySensor(MqttEntity, BinarySensorEntity): self.async_write_ha_state() - @property - def name(self): - """Return the name of the binary sensor.""" - return self._config[CONF_NAME] - @property def is_on(self): """Return true if the binary sensor is on.""" diff --git a/homeassistant/components/mqtt/camera.py b/homeassistant/components/mqtt/camera.py index cc58741a923..0a1a35b2ddd 100644 --- a/homeassistant/components/mqtt/camera.py +++ b/homeassistant/components/mqtt/camera.py @@ -5,7 +5,7 @@ import voluptuous as vol from homeassistant.components import camera from homeassistant.components.camera import Camera -from homeassistant.const import CONF_DEVICE, CONF_NAME, CONF_UNIQUE_ID +from homeassistant.const import CONF_NAME from homeassistant.core import callback from homeassistant.helpers import config_validation as cv from homeassistant.helpers.reload import async_setup_reload_service @@ -14,29 +14,17 @@ from homeassistant.helpers.typing import ConfigType, HomeAssistantType from . import CONF_QOS, DOMAIN, PLATFORMS, subscription from .. import mqtt from .debug_info import log_messages -from .mixins import ( - MQTT_AVAILABILITY_SCHEMA, - MQTT_ENTITY_DEVICE_INFO_SCHEMA, - MQTT_JSON_ATTRS_SCHEMA, - MqttEntity, - async_setup_entry_helper, -) +from .mixins import MQTT_ENTITY_COMMON_SCHEMA, MqttEntity, async_setup_entry_helper CONF_TOPIC = "topic" DEFAULT_NAME = "MQTT Camera" -PLATFORM_SCHEMA = ( - mqtt.MQTT_BASE_PLATFORM_SCHEMA.extend( - { - vol.Optional(CONF_DEVICE): MQTT_ENTITY_DEVICE_INFO_SCHEMA, - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, - vol.Required(CONF_TOPIC): mqtt.valid_subscribe_topic, - vol.Optional(CONF_UNIQUE_ID): cv.string, - } - ) - .extend(MQTT_AVAILABILITY_SCHEMA.schema) - .extend(MQTT_JSON_ATTRS_SCHEMA.schema) -) +PLATFORM_SCHEMA = mqtt.MQTT_BASE_PLATFORM_SCHEMA.extend( + { + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, + vol.Required(CONF_TOPIC): mqtt.valid_subscribe_topic, + } +).extend(MQTT_ENTITY_COMMON_SCHEMA.schema) async def async_setup_platform( @@ -77,9 +65,6 @@ class MqttCamera(MqttEntity, Camera): """Return the config schema.""" return PLATFORM_SCHEMA - def _setup_from_config(self, config): - self._config = config - async def _subscribe_topics(self): """(Re)Subscribe to topics.""" @@ -105,8 +90,3 @@ class MqttCamera(MqttEntity, Camera): async def async_camera_image(self): """Return image response.""" return self._last_image - - @property - def name(self): - """Return the name of this camera.""" - return self._config[CONF_NAME] diff --git a/homeassistant/components/mqtt/climate.py b/homeassistant/components/mqtt/climate.py index ede39103791..8ab7a9ca3cf 100644 --- a/homeassistant/components/mqtt/climate.py +++ b/homeassistant/components/mqtt/climate.py @@ -36,12 +36,10 @@ from homeassistant.components.climate.const import ( ) from homeassistant.const import ( ATTR_TEMPERATURE, - CONF_DEVICE, CONF_NAME, CONF_PAYLOAD_OFF, CONF_PAYLOAD_ON, CONF_TEMPERATURE_UNIT, - CONF_UNIQUE_ID, CONF_VALUE_TEMPLATE, PRECISION_HALVES, PRECISION_TENTHS, @@ -63,13 +61,7 @@ from . import ( ) from .. import mqtt from .debug_info import log_messages -from .mixins import ( - MQTT_AVAILABILITY_SCHEMA, - MQTT_ENTITY_DEVICE_INFO_SCHEMA, - MQTT_JSON_ATTRS_SCHEMA, - MqttEntity, - async_setup_entry_helper, -) +from .mixins import MQTT_ENTITY_COMMON_SCHEMA, MqttEntity, async_setup_entry_helper _LOGGER = logging.getLogger(__name__) @@ -178,90 +170,84 @@ TOPIC_KEYS = ( ) SCHEMA_BASE = CLIMATE_PLATFORM_SCHEMA.extend(MQTT_BASE_PLATFORM_SCHEMA.schema) -PLATFORM_SCHEMA = ( - SCHEMA_BASE.extend( - { - vol.Optional(CONF_AUX_COMMAND_TOPIC): mqtt.valid_publish_topic, - vol.Optional(CONF_AUX_STATE_TEMPLATE): cv.template, - vol.Optional(CONF_AUX_STATE_TOPIC): mqtt.valid_subscribe_topic, - vol.Optional(CONF_AWAY_MODE_COMMAND_TOPIC): mqtt.valid_publish_topic, - vol.Optional(CONF_AWAY_MODE_STATE_TEMPLATE): cv.template, - vol.Optional(CONF_AWAY_MODE_STATE_TOPIC): mqtt.valid_subscribe_topic, - vol.Optional(CONF_CURRENT_TEMP_TEMPLATE): cv.template, - vol.Optional(CONF_CURRENT_TEMP_TOPIC): mqtt.valid_subscribe_topic, - vol.Optional(CONF_DEVICE): MQTT_ENTITY_DEVICE_INFO_SCHEMA, - vol.Optional(CONF_FAN_MODE_COMMAND_TEMPLATE): cv.template, - vol.Optional(CONF_FAN_MODE_COMMAND_TOPIC): mqtt.valid_publish_topic, - vol.Optional( - CONF_FAN_MODE_LIST, - default=[FAN_AUTO, FAN_LOW, FAN_MEDIUM, FAN_HIGH], - ): cv.ensure_list, - vol.Optional(CONF_FAN_MODE_STATE_TEMPLATE): cv.template, - vol.Optional(CONF_FAN_MODE_STATE_TOPIC): mqtt.valid_subscribe_topic, - vol.Optional(CONF_HOLD_COMMAND_TEMPLATE): cv.template, - vol.Optional(CONF_HOLD_COMMAND_TOPIC): mqtt.valid_publish_topic, - vol.Optional(CONF_HOLD_STATE_TEMPLATE): cv.template, - vol.Optional(CONF_HOLD_STATE_TOPIC): mqtt.valid_subscribe_topic, - vol.Optional(CONF_HOLD_LIST, default=list): cv.ensure_list, - vol.Optional(CONF_MODE_COMMAND_TEMPLATE): cv.template, - vol.Optional(CONF_MODE_COMMAND_TOPIC): mqtt.valid_publish_topic, - vol.Optional( - CONF_MODE_LIST, - default=[ - HVAC_MODE_AUTO, - HVAC_MODE_OFF, - HVAC_MODE_COOL, - HVAC_MODE_HEAT, - HVAC_MODE_DRY, - HVAC_MODE_FAN_ONLY, - ], - ): cv.ensure_list, - vol.Optional(CONF_MODE_STATE_TEMPLATE): cv.template, - vol.Optional(CONF_MODE_STATE_TOPIC): mqtt.valid_subscribe_topic, - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, - vol.Optional(CONF_PAYLOAD_ON, default="ON"): cv.string, - vol.Optional(CONF_PAYLOAD_OFF, default="OFF"): cv.string, - vol.Optional(CONF_POWER_COMMAND_TOPIC): mqtt.valid_publish_topic, - vol.Optional(CONF_POWER_STATE_TEMPLATE): cv.template, - vol.Optional(CONF_POWER_STATE_TOPIC): mqtt.valid_subscribe_topic, - vol.Optional(CONF_PRECISION): vol.In( - [PRECISION_TENTHS, PRECISION_HALVES, PRECISION_WHOLE] - ), - vol.Optional(CONF_RETAIN, default=mqtt.DEFAULT_RETAIN): cv.boolean, - vol.Optional(CONF_SEND_IF_OFF, default=True): cv.boolean, - vol.Optional(CONF_ACTION_TEMPLATE): cv.template, - vol.Optional(CONF_ACTION_TOPIC): mqtt.valid_subscribe_topic, - vol.Optional(CONF_SWING_MODE_COMMAND_TEMPLATE): cv.template, - vol.Optional(CONF_SWING_MODE_COMMAND_TOPIC): mqtt.valid_publish_topic, - vol.Optional( - CONF_SWING_MODE_LIST, default=[STATE_ON, HVAC_MODE_OFF] - ): cv.ensure_list, - vol.Optional(CONF_SWING_MODE_STATE_TEMPLATE): cv.template, - vol.Optional(CONF_SWING_MODE_STATE_TOPIC): mqtt.valid_subscribe_topic, - vol.Optional(CONF_TEMP_INITIAL, default=21): cv.positive_int, - vol.Optional(CONF_TEMP_MIN, default=DEFAULT_MIN_TEMP): vol.Coerce(float), - vol.Optional(CONF_TEMP_MAX, default=DEFAULT_MAX_TEMP): vol.Coerce(float), - vol.Optional(CONF_TEMP_STEP, default=1.0): vol.Coerce(float), - vol.Optional(CONF_TEMP_COMMAND_TEMPLATE): cv.template, - vol.Optional(CONF_TEMP_COMMAND_TOPIC): mqtt.valid_publish_topic, - vol.Optional(CONF_TEMP_HIGH_COMMAND_TEMPLATE): cv.template, - vol.Optional(CONF_TEMP_HIGH_COMMAND_TOPIC): mqtt.valid_publish_topic, - vol.Optional(CONF_TEMP_HIGH_STATE_TOPIC): mqtt.valid_subscribe_topic, - vol.Optional(CONF_TEMP_HIGH_STATE_TEMPLATE): cv.template, - vol.Optional(CONF_TEMP_LOW_COMMAND_TEMPLATE): cv.template, - vol.Optional(CONF_TEMP_LOW_COMMAND_TOPIC): mqtt.valid_publish_topic, - vol.Optional(CONF_TEMP_LOW_STATE_TEMPLATE): cv.template, - vol.Optional(CONF_TEMP_LOW_STATE_TOPIC): mqtt.valid_subscribe_topic, - vol.Optional(CONF_TEMP_STATE_TEMPLATE): cv.template, - vol.Optional(CONF_TEMP_STATE_TOPIC): mqtt.valid_subscribe_topic, - vol.Optional(CONF_TEMPERATURE_UNIT): cv.temperature_unit, - vol.Optional(CONF_UNIQUE_ID): cv.string, - vol.Optional(CONF_VALUE_TEMPLATE): cv.template, - } - ) - .extend(MQTT_AVAILABILITY_SCHEMA.schema) - .extend(MQTT_JSON_ATTRS_SCHEMA.schema) -) +PLATFORM_SCHEMA = SCHEMA_BASE.extend( + { + vol.Optional(CONF_AUX_COMMAND_TOPIC): mqtt.valid_publish_topic, + vol.Optional(CONF_AUX_STATE_TEMPLATE): cv.template, + vol.Optional(CONF_AUX_STATE_TOPIC): mqtt.valid_subscribe_topic, + vol.Optional(CONF_AWAY_MODE_COMMAND_TOPIC): mqtt.valid_publish_topic, + vol.Optional(CONF_AWAY_MODE_STATE_TEMPLATE): cv.template, + vol.Optional(CONF_AWAY_MODE_STATE_TOPIC): mqtt.valid_subscribe_topic, + vol.Optional(CONF_CURRENT_TEMP_TEMPLATE): cv.template, + vol.Optional(CONF_CURRENT_TEMP_TOPIC): mqtt.valid_subscribe_topic, + vol.Optional(CONF_FAN_MODE_COMMAND_TEMPLATE): cv.template, + vol.Optional(CONF_FAN_MODE_COMMAND_TOPIC): mqtt.valid_publish_topic, + vol.Optional( + CONF_FAN_MODE_LIST, + default=[FAN_AUTO, FAN_LOW, FAN_MEDIUM, FAN_HIGH], + ): cv.ensure_list, + vol.Optional(CONF_FAN_MODE_STATE_TEMPLATE): cv.template, + vol.Optional(CONF_FAN_MODE_STATE_TOPIC): mqtt.valid_subscribe_topic, + vol.Optional(CONF_HOLD_COMMAND_TEMPLATE): cv.template, + vol.Optional(CONF_HOLD_COMMAND_TOPIC): mqtt.valid_publish_topic, + vol.Optional(CONF_HOLD_STATE_TEMPLATE): cv.template, + vol.Optional(CONF_HOLD_STATE_TOPIC): mqtt.valid_subscribe_topic, + vol.Optional(CONF_HOLD_LIST, default=list): cv.ensure_list, + vol.Optional(CONF_MODE_COMMAND_TEMPLATE): cv.template, + vol.Optional(CONF_MODE_COMMAND_TOPIC): mqtt.valid_publish_topic, + vol.Optional( + CONF_MODE_LIST, + default=[ + HVAC_MODE_AUTO, + HVAC_MODE_OFF, + HVAC_MODE_COOL, + HVAC_MODE_HEAT, + HVAC_MODE_DRY, + HVAC_MODE_FAN_ONLY, + ], + ): cv.ensure_list, + vol.Optional(CONF_MODE_STATE_TEMPLATE): cv.template, + vol.Optional(CONF_MODE_STATE_TOPIC): mqtt.valid_subscribe_topic, + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, + vol.Optional(CONF_PAYLOAD_ON, default="ON"): cv.string, + vol.Optional(CONF_PAYLOAD_OFF, default="OFF"): cv.string, + vol.Optional(CONF_POWER_COMMAND_TOPIC): mqtt.valid_publish_topic, + vol.Optional(CONF_POWER_STATE_TEMPLATE): cv.template, + vol.Optional(CONF_POWER_STATE_TOPIC): mqtt.valid_subscribe_topic, + vol.Optional(CONF_PRECISION): vol.In( + [PRECISION_TENTHS, PRECISION_HALVES, PRECISION_WHOLE] + ), + vol.Optional(CONF_RETAIN, default=mqtt.DEFAULT_RETAIN): cv.boolean, + vol.Optional(CONF_SEND_IF_OFF, default=True): cv.boolean, + vol.Optional(CONF_ACTION_TEMPLATE): cv.template, + vol.Optional(CONF_ACTION_TOPIC): mqtt.valid_subscribe_topic, + vol.Optional(CONF_SWING_MODE_COMMAND_TEMPLATE): cv.template, + vol.Optional(CONF_SWING_MODE_COMMAND_TOPIC): mqtt.valid_publish_topic, + vol.Optional( + CONF_SWING_MODE_LIST, default=[STATE_ON, HVAC_MODE_OFF] + ): cv.ensure_list, + vol.Optional(CONF_SWING_MODE_STATE_TEMPLATE): cv.template, + vol.Optional(CONF_SWING_MODE_STATE_TOPIC): mqtt.valid_subscribe_topic, + vol.Optional(CONF_TEMP_INITIAL, default=21): cv.positive_int, + vol.Optional(CONF_TEMP_MIN, default=DEFAULT_MIN_TEMP): vol.Coerce(float), + vol.Optional(CONF_TEMP_MAX, default=DEFAULT_MAX_TEMP): vol.Coerce(float), + vol.Optional(CONF_TEMP_STEP, default=1.0): vol.Coerce(float), + vol.Optional(CONF_TEMP_COMMAND_TEMPLATE): cv.template, + vol.Optional(CONF_TEMP_COMMAND_TOPIC): mqtt.valid_publish_topic, + vol.Optional(CONF_TEMP_HIGH_COMMAND_TEMPLATE): cv.template, + vol.Optional(CONF_TEMP_HIGH_COMMAND_TOPIC): mqtt.valid_publish_topic, + vol.Optional(CONF_TEMP_HIGH_STATE_TOPIC): mqtt.valid_subscribe_topic, + vol.Optional(CONF_TEMP_HIGH_STATE_TEMPLATE): cv.template, + vol.Optional(CONF_TEMP_LOW_COMMAND_TEMPLATE): cv.template, + vol.Optional(CONF_TEMP_LOW_COMMAND_TOPIC): mqtt.valid_publish_topic, + vol.Optional(CONF_TEMP_LOW_STATE_TEMPLATE): cv.template, + vol.Optional(CONF_TEMP_LOW_STATE_TOPIC): mqtt.valid_subscribe_topic, + vol.Optional(CONF_TEMP_STATE_TEMPLATE): cv.template, + vol.Optional(CONF_TEMP_STATE_TOPIC): mqtt.valid_subscribe_topic, + vol.Optional(CONF_TEMPERATURE_UNIT): cv.temperature_unit, + vol.Optional(CONF_VALUE_TEMPLATE): cv.template, + } +).extend(MQTT_ENTITY_COMMON_SCHEMA.schema) async def async_setup_platform( @@ -321,7 +307,6 @@ class MqttClimate(MqttEntity, ClimateEntity): def _setup_from_config(self, config): """(Re)Setup the entity.""" - self._config = config self._topic = {key: config.get(key) for key in TOPIC_KEYS} # set to None in non-optimistic mode @@ -563,11 +548,6 @@ class MqttClimate(MqttEntity, ClimateEntity): self.hass, self._sub_state, topics ) - @property - def name(self): - """Return the name of the climate device.""" - return self._config[CONF_NAME] - @property def temperature_unit(self): """Return the unit of measurement.""" diff --git a/homeassistant/components/mqtt/cover.py b/homeassistant/components/mqtt/cover.py index 7b7f983b1e4..5c7b0c10cf6 100644 --- a/homeassistant/components/mqtt/cover.py +++ b/homeassistant/components/mqtt/cover.py @@ -20,11 +20,9 @@ from homeassistant.components.cover import ( CoverEntity, ) from homeassistant.const import ( - CONF_DEVICE, CONF_DEVICE_CLASS, CONF_NAME, CONF_OPTIMISTIC, - CONF_UNIQUE_ID, CONF_VALUE_TEMPLATE, STATE_CLOSED, STATE_CLOSING, @@ -48,13 +46,7 @@ from . import ( ) from .. import mqtt from .debug_info import log_messages -from .mixins import ( - MQTT_AVAILABILITY_SCHEMA, - MQTT_ENTITY_DEVICE_INFO_SCHEMA, - MQTT_JSON_ATTRS_SCHEMA, - MqttEntity, - async_setup_entry_helper, -) +from .mixins import MQTT_ENTITY_COMMON_SCHEMA, MqttEntity, async_setup_entry_helper _LOGGER = logging.getLogger(__name__) @@ -147,7 +139,6 @@ PLATFORM_SCHEMA = vol.All( mqtt.MQTT_BASE_PLATFORM_SCHEMA.extend( { vol.Optional(CONF_COMMAND_TOPIC): mqtt.valid_publish_topic, - vol.Optional(CONF_DEVICE): MQTT_ENTITY_DEVICE_INFO_SCHEMA, vol.Optional(CONF_DEVICE_CLASS): DEVICE_CLASSES_SCHEMA, vol.Optional(CONF_GET_POSITION_TOPIC): mqtt.valid_subscribe_topic, vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, @@ -183,14 +174,11 @@ PLATFORM_SCHEMA = vol.All( ): cv.boolean, vol.Optional(CONF_TILT_STATUS_TOPIC): mqtt.valid_subscribe_topic, vol.Optional(CONF_TILT_STATUS_TEMPLATE): cv.template, - vol.Optional(CONF_UNIQUE_ID): cv.string, vol.Optional(CONF_VALUE_TEMPLATE): cv.template, vol.Optional(CONF_GET_POSITION_TEMPLATE): cv.template, vol.Optional(CONF_TILT_COMMAND_TEMPLATE): cv.template, } - ) - .extend(MQTT_AVAILABILITY_SCHEMA.schema) - .extend(MQTT_JSON_ATTRS_SCHEMA.schema), + ).extend(MQTT_ENTITY_COMMON_SCHEMA.schema), validate_options, ) @@ -238,7 +226,6 @@ class MqttCover(MqttEntity, CoverEntity): return PLATFORM_SCHEMA def _setup_from_config(self, config): - self._config = config self._optimistic = config[CONF_OPTIMISTIC] or ( config.get(CONF_STATE_TOPIC) is None and config.get(CONF_GET_POSITION_TOPIC) is None @@ -399,11 +386,6 @@ class MqttCover(MqttEntity, CoverEntity): """Return true if we do optimistic updates.""" return self._optimistic - @property - def name(self): - """Return the name of the cover.""" - return self._config[CONF_NAME] - @property def is_closed(self): """Return true if the cover is closed or None if the status is unknown.""" diff --git a/homeassistant/components/mqtt/device_tracker/schema_discovery.py b/homeassistant/components/mqtt/device_tracker/schema_discovery.py index bd5d9a1e60e..a1279f512a5 100644 --- a/homeassistant/components/mqtt/device_tracker/schema_discovery.py +++ b/homeassistant/components/mqtt/device_tracker/schema_discovery.py @@ -10,10 +10,7 @@ from homeassistant.const import ( ATTR_GPS_ACCURACY, ATTR_LATITUDE, ATTR_LONGITUDE, - CONF_DEVICE, - CONF_ICON, CONF_NAME, - CONF_UNIQUE_ID, CONF_VALUE_TEMPLATE, STATE_HOME, STATE_NOT_HOME, @@ -25,33 +22,20 @@ from .. import subscription from ... import mqtt from ..const import CONF_QOS, CONF_STATE_TOPIC from ..debug_info import log_messages -from ..mixins import ( - MQTT_AVAILABILITY_SCHEMA, - MQTT_ENTITY_DEVICE_INFO_SCHEMA, - MQTT_JSON_ATTRS_SCHEMA, - MqttEntity, - async_setup_entry_helper, -) +from ..mixins import MQTT_ENTITY_COMMON_SCHEMA, MqttEntity, async_setup_entry_helper CONF_PAYLOAD_HOME = "payload_home" CONF_PAYLOAD_NOT_HOME = "payload_not_home" CONF_SOURCE_TYPE = "source_type" -PLATFORM_SCHEMA_DISCOVERY = ( - mqtt.MQTT_RO_PLATFORM_SCHEMA.extend( - { - vol.Optional(CONF_DEVICE): MQTT_ENTITY_DEVICE_INFO_SCHEMA, - vol.Optional(CONF_ICON): cv.icon, - vol.Optional(CONF_NAME): cv.string, - vol.Optional(CONF_PAYLOAD_HOME, default=STATE_HOME): cv.string, - vol.Optional(CONF_PAYLOAD_NOT_HOME, default=STATE_NOT_HOME): cv.string, - vol.Optional(CONF_SOURCE_TYPE): vol.In(SOURCE_TYPES), - vol.Optional(CONF_UNIQUE_ID): cv.string, - } - ) - .extend(MQTT_AVAILABILITY_SCHEMA.schema) - .extend(MQTT_JSON_ATTRS_SCHEMA.schema) -) +PLATFORM_SCHEMA_DISCOVERY = mqtt.MQTT_RO_PLATFORM_SCHEMA.extend( + { + vol.Optional(CONF_NAME): cv.string, + vol.Optional(CONF_PAYLOAD_HOME, default=STATE_HOME): cv.string, + vol.Optional(CONF_PAYLOAD_NOT_HOME, default=STATE_NOT_HOME): cv.string, + vol.Optional(CONF_SOURCE_TYPE): vol.In(SOURCE_TYPES), + } +).extend(MQTT_ENTITY_COMMON_SCHEMA.schema) async def async_setup_entry_from_discovery(hass, config_entry, async_add_entities): @@ -87,8 +71,6 @@ class MqttDeviceTracker(MqttEntity, TrackerEntity): def _setup_from_config(self, config): """(Re)Setup the entity.""" - self._config = config - value_template = self._config.get(CONF_VALUE_TEMPLATE) if value_template is not None: value_template.hass = self.hass @@ -125,11 +107,6 @@ class MqttDeviceTracker(MqttEntity, TrackerEntity): }, ) - @property - def icon(self): - """Return the icon of the device.""" - return self._config.get(CONF_ICON) - @property def latitude(self): """Return latitude if provided in device_state_attributes or None.""" @@ -165,11 +142,6 @@ class MqttDeviceTracker(MqttEntity, TrackerEntity): """Return a location name for the current location of the device.""" return self._location_name - @property - def name(self): - """Return the name of the device tracker.""" - return self._config.get(CONF_NAME) - @property def source_type(self): """Return the source type, eg gps or router, of the device.""" diff --git a/homeassistant/components/mqtt/fan.py b/homeassistant/components/mqtt/fan.py index 24d652062ae..c0663370805 100644 --- a/homeassistant/components/mqtt/fan.py +++ b/homeassistant/components/mqtt/fan.py @@ -15,13 +15,11 @@ from homeassistant.components.fan import ( FanEntity, ) from homeassistant.const import ( - CONF_DEVICE, CONF_NAME, CONF_OPTIMISTIC, CONF_PAYLOAD_OFF, CONF_PAYLOAD_ON, CONF_STATE, - CONF_UNIQUE_ID, ) from homeassistant.core import callback import homeassistant.helpers.config_validation as cv @@ -39,13 +37,7 @@ from . import ( ) from .. import mqtt from .debug_info import log_messages -from .mixins import ( - MQTT_AVAILABILITY_SCHEMA, - MQTT_ENTITY_DEVICE_INFO_SCHEMA, - MQTT_JSON_ATTRS_SCHEMA, - MqttEntity, - async_setup_entry_helper, -) +from .mixins import MQTT_ENTITY_COMMON_SCHEMA, MqttEntity, async_setup_entry_helper CONF_STATE_VALUE_TEMPLATE = "state_value_template" CONF_SPEED_STATE_TOPIC = "speed_state_topic" @@ -72,41 +64,35 @@ OSCILLATE_OFF_PAYLOAD = "oscillate_off" OSCILLATION = "oscillation" -PLATFORM_SCHEMA = ( - mqtt.MQTT_RW_PLATFORM_SCHEMA.extend( - { - vol.Optional(CONF_DEVICE): MQTT_ENTITY_DEVICE_INFO_SCHEMA, - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, - vol.Optional(CONF_OPTIMISTIC, default=DEFAULT_OPTIMISTIC): cv.boolean, - vol.Optional(CONF_OSCILLATION_COMMAND_TOPIC): mqtt.valid_publish_topic, - vol.Optional(CONF_OSCILLATION_STATE_TOPIC): mqtt.valid_subscribe_topic, - vol.Optional(CONF_OSCILLATION_VALUE_TEMPLATE): cv.template, - vol.Optional(CONF_PAYLOAD_HIGH_SPEED, default=SPEED_HIGH): cv.string, - vol.Optional(CONF_PAYLOAD_LOW_SPEED, default=SPEED_LOW): cv.string, - vol.Optional(CONF_PAYLOAD_MEDIUM_SPEED, default=SPEED_MEDIUM): cv.string, - vol.Optional(CONF_PAYLOAD_OFF_SPEED, default=SPEED_OFF): cv.string, - vol.Optional(CONF_PAYLOAD_OFF, default=DEFAULT_PAYLOAD_OFF): cv.string, - vol.Optional(CONF_PAYLOAD_ON, default=DEFAULT_PAYLOAD_ON): cv.string, - vol.Optional( - CONF_PAYLOAD_OSCILLATION_OFF, default=OSCILLATE_OFF_PAYLOAD - ): cv.string, - vol.Optional( - CONF_PAYLOAD_OSCILLATION_ON, default=OSCILLATE_ON_PAYLOAD - ): cv.string, - vol.Optional(CONF_SPEED_COMMAND_TOPIC): mqtt.valid_publish_topic, - vol.Optional( - CONF_SPEED_LIST, - default=[SPEED_OFF, SPEED_LOW, SPEED_MEDIUM, SPEED_HIGH], - ): cv.ensure_list, - vol.Optional(CONF_SPEED_STATE_TOPIC): mqtt.valid_subscribe_topic, - vol.Optional(CONF_SPEED_VALUE_TEMPLATE): cv.template, - vol.Optional(CONF_STATE_VALUE_TEMPLATE): cv.template, - vol.Optional(CONF_UNIQUE_ID): cv.string, - } - ) - .extend(MQTT_AVAILABILITY_SCHEMA.schema) - .extend(MQTT_JSON_ATTRS_SCHEMA.schema) -) +PLATFORM_SCHEMA = mqtt.MQTT_RW_PLATFORM_SCHEMA.extend( + { + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, + vol.Optional(CONF_OPTIMISTIC, default=DEFAULT_OPTIMISTIC): cv.boolean, + vol.Optional(CONF_OSCILLATION_COMMAND_TOPIC): mqtt.valid_publish_topic, + vol.Optional(CONF_OSCILLATION_STATE_TOPIC): mqtt.valid_subscribe_topic, + vol.Optional(CONF_OSCILLATION_VALUE_TEMPLATE): cv.template, + vol.Optional(CONF_PAYLOAD_HIGH_SPEED, default=SPEED_HIGH): cv.string, + vol.Optional(CONF_PAYLOAD_LOW_SPEED, default=SPEED_LOW): cv.string, + vol.Optional(CONF_PAYLOAD_MEDIUM_SPEED, default=SPEED_MEDIUM): cv.string, + vol.Optional(CONF_PAYLOAD_OFF_SPEED, default=SPEED_OFF): cv.string, + vol.Optional(CONF_PAYLOAD_OFF, default=DEFAULT_PAYLOAD_OFF): cv.string, + vol.Optional(CONF_PAYLOAD_ON, default=DEFAULT_PAYLOAD_ON): cv.string, + vol.Optional( + CONF_PAYLOAD_OSCILLATION_OFF, default=OSCILLATE_OFF_PAYLOAD + ): cv.string, + vol.Optional( + CONF_PAYLOAD_OSCILLATION_ON, default=OSCILLATE_ON_PAYLOAD + ): cv.string, + vol.Optional(CONF_SPEED_COMMAND_TOPIC): mqtt.valid_publish_topic, + vol.Optional( + CONF_SPEED_LIST, + default=[SPEED_OFF, SPEED_LOW, SPEED_MEDIUM, SPEED_HIGH], + ): cv.ensure_list, + vol.Optional(CONF_SPEED_STATE_TOPIC): mqtt.valid_subscribe_topic, + vol.Optional(CONF_SPEED_VALUE_TEMPLATE): cv.template, + vol.Optional(CONF_STATE_VALUE_TEMPLATE): cv.template, + } +).extend(MQTT_ENTITY_COMMON_SCHEMA.schema) async def async_setup_platform( @@ -158,7 +144,6 @@ class MqttFan(MqttEntity, FanEntity): def _setup_from_config(self, config): """(Re)Setup the entity.""" - self._config = config self._topic = { key: config.get(key) for key in ( @@ -288,11 +273,6 @@ class MqttFan(MqttEntity, FanEntity): """Return true if device is on.""" return self._state - @property - def name(self) -> str: - """Get entity name.""" - return self._config[CONF_NAME] - @property def speed_list(self) -> list: """Get the list of available speeds.""" diff --git a/homeassistant/components/mqtt/light/schema_basic.py b/homeassistant/components/mqtt/light/schema_basic.py index 04f01ea0d3a..e2443ec1df6 100644 --- a/homeassistant/components/mqtt/light/schema_basic.py +++ b/homeassistant/components/mqtt/light/schema_basic.py @@ -17,12 +17,10 @@ from homeassistant.components.light import ( LightEntity, ) from homeassistant.const import ( - CONF_DEVICE, CONF_NAME, CONF_OPTIMISTIC, CONF_PAYLOAD_OFF, CONF_PAYLOAD_ON, - CONF_UNIQUE_ID, CONF_VALUE_TEMPLATE, STATE_ON, ) @@ -34,12 +32,7 @@ import homeassistant.util.color as color_util from .. import CONF_COMMAND_TOPIC, CONF_QOS, CONF_RETAIN, CONF_STATE_TOPIC, subscription from ... import mqtt from ..debug_info import log_messages -from ..mixins import ( - MQTT_AVAILABILITY_SCHEMA, - MQTT_ENTITY_DEVICE_INFO_SCHEMA, - MQTT_JSON_ATTRS_SCHEMA, - MqttEntity, -) +from ..mixins import MQTT_ENTITY_COMMON_SCHEMA, MqttEntity from .schema import MQTT_LIGHT_SCHEMA_SCHEMA _LOGGER = logging.getLogger(__name__) @@ -110,7 +103,6 @@ PLATFORM_SCHEMA_BASIC = ( vol.Optional(CONF_COLOR_TEMP_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_COLOR_TEMP_STATE_TOPIC): mqtt.valid_subscribe_topic, vol.Optional(CONF_COLOR_TEMP_VALUE_TEMPLATE): cv.template, - vol.Optional(CONF_DEVICE): MQTT_ENTITY_DEVICE_INFO_SCHEMA, vol.Optional(CONF_EFFECT_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_EFFECT_LIST): vol.All(cv.ensure_list, [cv.string]), vol.Optional(CONF_EFFECT_STATE_TOPIC): mqtt.valid_subscribe_topic, @@ -132,7 +124,6 @@ PLATFORM_SCHEMA_BASIC = ( vol.Optional(CONF_RGB_STATE_TOPIC): mqtt.valid_subscribe_topic, vol.Optional(CONF_RGB_VALUE_TEMPLATE): cv.template, vol.Optional(CONF_STATE_VALUE_TEMPLATE): cv.template, - vol.Optional(CONF_UNIQUE_ID): cv.string, vol.Optional(CONF_WHITE_VALUE_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional( CONF_WHITE_VALUE_SCALE, default=DEFAULT_WHITE_VALUE_SCALE @@ -144,8 +135,7 @@ PLATFORM_SCHEMA_BASIC = ( vol.Optional(CONF_XY_VALUE_TEMPLATE): cv.template, } ) - .extend(MQTT_AVAILABILITY_SCHEMA.schema) - .extend(MQTT_JSON_ATTRS_SCHEMA.schema) + .extend(MQTT_ENTITY_COMMON_SCHEMA.schema) .extend(MQTT_LIGHT_SCHEMA_SCHEMA.schema) ) @@ -194,8 +184,6 @@ class MqttLight(MqttEntity, LightEntity, RestoreEntity): def _setup_from_config(self, config): """(Re)Setup the entity.""" - self._config = config - topic = { key: config.get(key) for key in ( @@ -540,11 +528,6 @@ class MqttLight(MqttEntity, LightEntity, RestoreEntity): return white_value return None - @property - def name(self): - """Return the name of the device if any.""" - return self._config[CONF_NAME] - @property def is_on(self): """Return true if device is on.""" diff --git a/homeassistant/components/mqtt/light/schema_json.py b/homeassistant/components/mqtt/light/schema_json.py index 8ec5c29db62..99c48aa1c8f 100644 --- a/homeassistant/components/mqtt/light/schema_json.py +++ b/homeassistant/components/mqtt/light/schema_json.py @@ -26,13 +26,11 @@ from homeassistant.components.light import ( from homeassistant.const import ( CONF_BRIGHTNESS, CONF_COLOR_TEMP, - CONF_DEVICE, CONF_EFFECT, CONF_HS, CONF_NAME, CONF_OPTIMISTIC, CONF_RGB, - CONF_UNIQUE_ID, CONF_WHITE_VALUE, CONF_XY, STATE_ON, @@ -46,12 +44,7 @@ import homeassistant.util.color as color_util from .. import CONF_COMMAND_TOPIC, CONF_QOS, CONF_RETAIN, CONF_STATE_TOPIC, subscription from ... import mqtt from ..debug_info import log_messages -from ..mixins import ( - MQTT_AVAILABILITY_SCHEMA, - MQTT_ENTITY_DEVICE_INFO_SCHEMA, - MQTT_JSON_ATTRS_SCHEMA, - MqttEntity, -) +from ..mixins import MQTT_ENTITY_COMMON_SCHEMA, MqttEntity from .schema import MQTT_LIGHT_SCHEMA_SCHEMA from .schema_basic import CONF_BRIGHTNESS_SCALE @@ -89,7 +82,6 @@ PLATFORM_SCHEMA_JSON = ( CONF_BRIGHTNESS_SCALE, default=DEFAULT_BRIGHTNESS_SCALE ): vol.All(vol.Coerce(int), vol.Range(min=1)), vol.Optional(CONF_COLOR_TEMP, default=DEFAULT_COLOR_TEMP): cv.boolean, - vol.Optional(CONF_DEVICE): MQTT_ENTITY_DEVICE_INFO_SCHEMA, vol.Optional(CONF_EFFECT, default=DEFAULT_EFFECT): cv.boolean, vol.Optional(CONF_EFFECT_LIST): vol.All(cv.ensure_list, [cv.string]), vol.Optional( @@ -109,13 +101,11 @@ PLATFORM_SCHEMA_JSON = ( vol.Optional(CONF_RETAIN, default=mqtt.DEFAULT_RETAIN): cv.boolean, vol.Optional(CONF_RGB, default=DEFAULT_RGB): cv.boolean, vol.Optional(CONF_STATE_TOPIC): mqtt.valid_subscribe_topic, - vol.Optional(CONF_UNIQUE_ID): cv.string, vol.Optional(CONF_WHITE_VALUE, default=DEFAULT_WHITE_VALUE): cv.boolean, vol.Optional(CONF_XY, default=DEFAULT_XY): cv.boolean, } ) - .extend(MQTT_AVAILABILITY_SCHEMA.schema) - .extend(MQTT_JSON_ATTRS_SCHEMA.schema) + .extend(MQTT_ENTITY_COMMON_SCHEMA.schema) .extend(MQTT_LIGHT_SCHEMA_SCHEMA.schema) ) @@ -153,8 +143,6 @@ class MqttLightJson(MqttEntity, LightEntity, RestoreEntity): def _setup_from_config(self, config): """(Re)Setup the entity.""" - self._config = config - self._topic = { key: config.get(key) for key in (CONF_STATE_TOPIC, CONF_COMMAND_TOPIC) } @@ -338,11 +326,6 @@ class MqttLightJson(MqttEntity, LightEntity, RestoreEntity): """Return the white property.""" return self._white_value - @property - def name(self): - """Return the name of the device if any.""" - return self._config[CONF_NAME] - @property def is_on(self): """Return true if device is on.""" diff --git a/homeassistant/components/mqtt/light/schema_template.py b/homeassistant/components/mqtt/light/schema_template.py index 665e1a30d99..118746f2229 100644 --- a/homeassistant/components/mqtt/light/schema_template.py +++ b/homeassistant/components/mqtt/light/schema_template.py @@ -21,11 +21,9 @@ from homeassistant.components.light import ( LightEntity, ) from homeassistant.const import ( - CONF_DEVICE, CONF_NAME, CONF_OPTIMISTIC, CONF_STATE_TEMPLATE, - CONF_UNIQUE_ID, STATE_OFF, STATE_ON, ) @@ -37,12 +35,7 @@ import homeassistant.util.color as color_util from .. import CONF_COMMAND_TOPIC, CONF_QOS, CONF_RETAIN, CONF_STATE_TOPIC, subscription from ... import mqtt from ..debug_info import log_messages -from ..mixins import ( - MQTT_AVAILABILITY_SCHEMA, - MQTT_ENTITY_DEVICE_INFO_SCHEMA, - MQTT_JSON_ATTRS_SCHEMA, - MqttEntity, -) +from ..mixins import MQTT_ENTITY_COMMON_SCHEMA, MqttEntity from .schema import MQTT_LIGHT_SCHEMA_SCHEMA _LOGGER = logging.getLogger(__name__) @@ -73,7 +66,6 @@ PLATFORM_SCHEMA_TEMPLATE = ( vol.Optional(CONF_COLOR_TEMP_TEMPLATE): cv.template, vol.Required(CONF_COMMAND_OFF_TEMPLATE): cv.template, vol.Required(CONF_COMMAND_ON_TEMPLATE): cv.template, - vol.Optional(CONF_DEVICE): MQTT_ENTITY_DEVICE_INFO_SCHEMA, vol.Optional(CONF_EFFECT_LIST): vol.All(cv.ensure_list, [cv.string]), vol.Optional(CONF_EFFECT_TEMPLATE): cv.template, vol.Optional(CONF_GREEN_TEMPLATE): cv.template, @@ -83,12 +75,10 @@ PLATFORM_SCHEMA_TEMPLATE = ( vol.Optional(CONF_OPTIMISTIC, default=DEFAULT_OPTIMISTIC): cv.boolean, vol.Optional(CONF_RED_TEMPLATE): cv.template, vol.Optional(CONF_STATE_TEMPLATE): cv.template, - vol.Optional(CONF_UNIQUE_ID): cv.string, vol.Optional(CONF_WHITE_VALUE_TEMPLATE): cv.template, } ) - .extend(MQTT_AVAILABILITY_SCHEMA.schema) - .extend(MQTT_JSON_ATTRS_SCHEMA.schema) + .extend(MQTT_ENTITY_COMMON_SCHEMA.schema) .extend(MQTT_LIGHT_SCHEMA_SCHEMA.schema) ) @@ -127,8 +117,6 @@ class MqttLightTemplate(MqttEntity, LightEntity, RestoreEntity): def _setup_from_config(self, config): """(Re)Setup the entity.""" - self._config = config - self._topics = { key: config.get(key) for key in (CONF_STATE_TOPIC, CONF_COMMAND_TOPIC) } @@ -299,11 +287,6 @@ class MqttLightTemplate(MqttEntity, LightEntity, RestoreEntity): """Return the white property.""" return self._white_value - @property - def name(self): - """Return the name of the entity.""" - return self._config[CONF_NAME] - @property def is_on(self): """Return True if entity is on.""" diff --git a/homeassistant/components/mqtt/lock.py b/homeassistant/components/mqtt/lock.py index e66b93f51c0..cdfa5101548 100644 --- a/homeassistant/components/mqtt/lock.py +++ b/homeassistant/components/mqtt/lock.py @@ -5,13 +5,7 @@ import voluptuous as vol from homeassistant.components import lock from homeassistant.components.lock import LockEntity -from homeassistant.const import ( - CONF_DEVICE, - CONF_NAME, - CONF_OPTIMISTIC, - CONF_UNIQUE_ID, - CONF_VALUE_TEMPLATE, -) +from homeassistant.const import CONF_NAME, CONF_OPTIMISTIC, CONF_VALUE_TEMPLATE from homeassistant.core import callback import homeassistant.helpers.config_validation as cv from homeassistant.helpers.reload import async_setup_reload_service @@ -28,13 +22,7 @@ from . import ( ) from .. import mqtt from .debug_info import log_messages -from .mixins import ( - MQTT_AVAILABILITY_SCHEMA, - MQTT_ENTITY_DEVICE_INFO_SCHEMA, - MQTT_JSON_ATTRS_SCHEMA, - MqttEntity, - async_setup_entry_helper, -) +from .mixins import MQTT_ENTITY_COMMON_SCHEMA, MqttEntity, async_setup_entry_helper CONF_PAYLOAD_LOCK = "payload_lock" CONF_PAYLOAD_UNLOCK = "payload_unlock" @@ -49,26 +37,16 @@ DEFAULT_PAYLOAD_UNLOCK = "UNLOCK" DEFAULT_STATE_LOCKED = "LOCKED" DEFAULT_STATE_UNLOCKED = "UNLOCKED" -PLATFORM_SCHEMA = ( - mqtt.MQTT_RW_PLATFORM_SCHEMA.extend( - { - vol.Optional(CONF_DEVICE): MQTT_ENTITY_DEVICE_INFO_SCHEMA, - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, - vol.Optional(CONF_OPTIMISTIC, default=DEFAULT_OPTIMISTIC): cv.boolean, - vol.Optional(CONF_PAYLOAD_LOCK, default=DEFAULT_PAYLOAD_LOCK): cv.string, - vol.Optional( - CONF_PAYLOAD_UNLOCK, default=DEFAULT_PAYLOAD_UNLOCK - ): cv.string, - vol.Optional(CONF_STATE_LOCKED, default=DEFAULT_STATE_LOCKED): cv.string, - vol.Optional( - CONF_STATE_UNLOCKED, default=DEFAULT_STATE_UNLOCKED - ): cv.string, - vol.Optional(CONF_UNIQUE_ID): cv.string, - } - ) - .extend(MQTT_AVAILABILITY_SCHEMA.schema) - .extend(MQTT_JSON_ATTRS_SCHEMA.schema) -) +PLATFORM_SCHEMA = mqtt.MQTT_RW_PLATFORM_SCHEMA.extend( + { + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, + vol.Optional(CONF_OPTIMISTIC, default=DEFAULT_OPTIMISTIC): cv.boolean, + vol.Optional(CONF_PAYLOAD_LOCK, default=DEFAULT_PAYLOAD_LOCK): cv.string, + vol.Optional(CONF_PAYLOAD_UNLOCK, default=DEFAULT_PAYLOAD_UNLOCK): cv.string, + vol.Optional(CONF_STATE_LOCKED, default=DEFAULT_STATE_LOCKED): cv.string, + vol.Optional(CONF_STATE_UNLOCKED, default=DEFAULT_STATE_UNLOCKED): cv.string, + } +).extend(MQTT_ENTITY_COMMON_SCHEMA.schema) async def async_setup_platform( @@ -111,8 +89,6 @@ class MqttLock(MqttEntity, LockEntity): def _setup_from_config(self, config): """(Re)Setup the entity.""" - self._config = config - self._optimistic = config[CONF_OPTIMISTIC] value_template = self._config.get(CONF_VALUE_TEMPLATE) @@ -153,11 +129,6 @@ class MqttLock(MqttEntity, LockEntity): }, ) - @property - def name(self): - """Return the name of the lock.""" - return self._config[CONF_NAME] - @property def is_locked(self): """Return true if lock is locked.""" diff --git a/homeassistant/components/mqtt/mixins.py b/homeassistant/components/mqtt/mixins.py index 8d9c9533ed3..8bcb5e5ca97 100644 --- a/homeassistant/components/mqtt/mixins.py +++ b/homeassistant/components/mqtt/mixins.py @@ -6,7 +6,7 @@ from typing import Optional import voluptuous as vol -from homeassistant.const import CONF_DEVICE, CONF_NAME, CONF_UNIQUE_ID +from homeassistant.const import CONF_DEVICE, CONF_ICON, CONF_NAME, CONF_UNIQUE_ID from homeassistant.core import callback from homeassistant.helpers import config_validation as cv from homeassistant.helpers.dispatcher import ( @@ -134,10 +134,13 @@ MQTT_ENTITY_DEVICE_INFO_SCHEMA = vol.All( validate_device_has_at_least_one_identifier, ) -MQTT_JSON_ATTRS_SCHEMA = vol.Schema( +MQTT_ENTITY_COMMON_SCHEMA = MQTT_AVAILABILITY_SCHEMA.extend( { + vol.Optional(CONF_DEVICE): MQTT_ENTITY_DEVICE_INFO_SCHEMA, + vol.Optional(CONF_ICON): cv.icon, vol.Optional(CONF_JSON_ATTRS_TOPIC): valid_subscribe_topic, vol.Optional(CONF_JSON_ATTRS_TEMPLATE): cv.template, + vol.Optional(CONF_UNIQUE_ID): cv.string, } ) @@ -527,11 +530,12 @@ class MqttEntity( def __init__(self, hass, config, config_entry, discovery_data): """Init the MQTT Entity.""" self.hass = hass + self._config = config self._unique_id = config.get(CONF_UNIQUE_ID) self._sub_state = None # Load config - self._setup_from_config(config) + self._setup_from_config(self._config) # Initialize mixin classes MqttAttributes.__init__(self, config) @@ -547,7 +551,8 @@ class MqttEntity( async def discovery_update(self, discovery_payload): """Handle updated discovery message.""" config = self.config_schema()(discovery_payload) - self._setup_from_config(config) + self._config = config + self._setup_from_config(self._config) await self.attributes_discovery_update(config) await self.availability_discovery_update(config) await self.device_info_discovery_update(config) @@ -575,6 +580,16 @@ class MqttEntity( async def _subscribe_topics(self): """(Re)Subscribe to topics.""" + @property + def icon(self): + """Return icon of the entity if any.""" + return self._config.get(CONF_ICON) + + @property + def name(self): + """Return the name of the device if any.""" + return self._config.get(CONF_NAME) + @property def should_poll(self): """No polling needed.""" diff --git a/homeassistant/components/mqtt/number.py b/homeassistant/components/mqtt/number.py index aa24f81eb69..e7839f8e483 100644 --- a/homeassistant/components/mqtt/number.py +++ b/homeassistant/components/mqtt/number.py @@ -6,13 +6,7 @@ import voluptuous as vol from homeassistant.components import number from homeassistant.components.number import NumberEntity -from homeassistant.const import ( - CONF_DEVICE, - CONF_ICON, - CONF_NAME, - CONF_OPTIMISTIC, - CONF_UNIQUE_ID, -) +from homeassistant.const import CONF_NAME, CONF_OPTIMISTIC from homeassistant.core import callback from homeassistant.helpers import config_validation as cv from homeassistant.helpers.reload import async_setup_reload_service @@ -30,32 +24,19 @@ from . import ( from .. import mqtt from .const import CONF_RETAIN from .debug_info import log_messages -from .mixins import ( - MQTT_AVAILABILITY_SCHEMA, - MQTT_ENTITY_DEVICE_INFO_SCHEMA, - MQTT_JSON_ATTRS_SCHEMA, - MqttEntity, - async_setup_entry_helper, -) +from .mixins import MQTT_ENTITY_COMMON_SCHEMA, MqttEntity, async_setup_entry_helper _LOGGER = logging.getLogger(__name__) DEFAULT_NAME = "MQTT Number" DEFAULT_OPTIMISTIC = False -PLATFORM_SCHEMA = ( - mqtt.MQTT_RW_PLATFORM_SCHEMA.extend( - { - vol.Optional(CONF_DEVICE): MQTT_ENTITY_DEVICE_INFO_SCHEMA, - vol.Optional(CONF_ICON): cv.icon, - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, - vol.Optional(CONF_OPTIMISTIC, default=DEFAULT_OPTIMISTIC): cv.boolean, - vol.Optional(CONF_UNIQUE_ID): cv.string, - } - ) - .extend(MQTT_AVAILABILITY_SCHEMA.schema) - .extend(MQTT_JSON_ATTRS_SCHEMA.schema) -) +PLATFORM_SCHEMA = mqtt.MQTT_RW_PLATFORM_SCHEMA.extend( + { + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, + vol.Optional(CONF_OPTIMISTIC, default=DEFAULT_OPTIMISTIC): cv.boolean, + } +).extend(MQTT_ENTITY_COMMON_SCHEMA.schema) async def async_setup_platform( @@ -90,7 +71,6 @@ class MqttNumber(MqttEntity, NumberEntity, RestoreEntity): self._current_number = None self._optimistic = config.get(CONF_OPTIMISTIC) - self._unique_id = config.get(CONF_UNIQUE_ID) NumberEntity.__init__(self) MqttEntity.__init__(self, None, config, config_entry, discovery_data) @@ -100,9 +80,6 @@ class MqttNumber(MqttEntity, NumberEntity, RestoreEntity): """Return the config schema.""" return PLATFORM_SCHEMA - def _setup_from_config(self, config): - self._config = config - async def _subscribe_topics(self): """(Re)Subscribe to topics.""" @@ -165,17 +142,7 @@ class MqttNumber(MqttEntity, NumberEntity, RestoreEntity): self._config[CONF_RETAIN], ) - @property - def name(self): - """Return the name of this number.""" - return self._config[CONF_NAME] - @property def assumed_state(self): """Return true if we do optimistic updates.""" return self._optimistic - - @property - def icon(self): - """Return the icon.""" - return self._config.get(CONF_ICON) diff --git a/homeassistant/components/mqtt/sensor.py b/homeassistant/components/mqtt/sensor.py index cb263febe13..d32f4c42383 100644 --- a/homeassistant/components/mqtt/sensor.py +++ b/homeassistant/components/mqtt/sensor.py @@ -8,12 +8,9 @@ import voluptuous as vol from homeassistant.components import sensor from homeassistant.components.sensor import DEVICE_CLASSES_SCHEMA from homeassistant.const import ( - CONF_DEVICE, CONF_DEVICE_CLASS, CONF_FORCE_UPDATE, - CONF_ICON, CONF_NAME, - CONF_UNIQUE_ID, CONF_UNIT_OF_MEASUREMENT, CONF_VALUE_TEMPLATE, ) @@ -29,9 +26,7 @@ from . import CONF_QOS, CONF_STATE_TOPIC, DOMAIN, PLATFORMS, subscription from .. import mqtt from .debug_info import log_messages from .mixins import ( - MQTT_AVAILABILITY_SCHEMA, - MQTT_ENTITY_DEVICE_INFO_SCHEMA, - MQTT_JSON_ATTRS_SCHEMA, + MQTT_ENTITY_COMMON_SCHEMA, MqttAvailability, MqttEntity, async_setup_entry_helper, @@ -41,22 +36,15 @@ CONF_EXPIRE_AFTER = "expire_after" DEFAULT_NAME = "MQTT Sensor" DEFAULT_FORCE_UPDATE = False -PLATFORM_SCHEMA = ( - mqtt.MQTT_RO_PLATFORM_SCHEMA.extend( - { - vol.Optional(CONF_DEVICE): MQTT_ENTITY_DEVICE_INFO_SCHEMA, - vol.Optional(CONF_DEVICE_CLASS): DEVICE_CLASSES_SCHEMA, - vol.Optional(CONF_EXPIRE_AFTER): cv.positive_int, - vol.Optional(CONF_FORCE_UPDATE, default=DEFAULT_FORCE_UPDATE): cv.boolean, - vol.Optional(CONF_ICON): cv.icon, - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, - vol.Optional(CONF_UNIQUE_ID): cv.string, - vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string, - } - ) - .extend(MQTT_AVAILABILITY_SCHEMA.schema) - .extend(MQTT_JSON_ATTRS_SCHEMA.schema) -) +PLATFORM_SCHEMA = mqtt.MQTT_RO_PLATFORM_SCHEMA.extend( + { + vol.Optional(CONF_DEVICE_CLASS): DEVICE_CLASSES_SCHEMA, + vol.Optional(CONF_EXPIRE_AFTER): cv.positive_int, + vol.Optional(CONF_FORCE_UPDATE, default=DEFAULT_FORCE_UPDATE): cv.boolean, + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, + vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string, + } +).extend(MQTT_ENTITY_COMMON_SCHEMA.schema) async def async_setup_platform( @@ -105,7 +93,6 @@ class MqttSensor(MqttEntity, Entity): def _setup_from_config(self, config): """(Re)Setup the entity.""" - self._config = config template = self._config.get(CONF_VALUE_TEMPLATE) if template is not None: template.hass = self.hass @@ -163,11 +150,6 @@ class MqttSensor(MqttEntity, Entity): self._expired = True self.async_write_ha_state() - @property - def name(self): - """Return the name of the sensor.""" - return self._config[CONF_NAME] - @property def unit_of_measurement(self): """Return the unit this state is expressed in.""" @@ -183,11 +165,6 @@ class MqttSensor(MqttEntity, Entity): """Return the state of the entity.""" return self._state - @property - def icon(self): - """Return the icon.""" - return self._config.get(CONF_ICON) - @property def device_class(self) -> Optional[str]: """Return the device class of the sensor.""" diff --git a/homeassistant/components/mqtt/switch.py b/homeassistant/components/mqtt/switch.py index 939d6bb98b1..2b272b0f9be 100644 --- a/homeassistant/components/mqtt/switch.py +++ b/homeassistant/components/mqtt/switch.py @@ -6,13 +6,10 @@ import voluptuous as vol from homeassistant.components import switch from homeassistant.components.switch import SwitchEntity from homeassistant.const import ( - CONF_DEVICE, - CONF_ICON, CONF_NAME, CONF_OPTIMISTIC, CONF_PAYLOAD_OFF, CONF_PAYLOAD_ON, - CONF_UNIQUE_ID, CONF_VALUE_TEMPLATE, STATE_ON, ) @@ -33,13 +30,7 @@ from . import ( ) from .. import mqtt from .debug_info import log_messages -from .mixins import ( - MQTT_AVAILABILITY_SCHEMA, - MQTT_ENTITY_DEVICE_INFO_SCHEMA, - MQTT_JSON_ATTRS_SCHEMA, - MqttEntity, - async_setup_entry_helper, -) +from .mixins import MQTT_ENTITY_COMMON_SCHEMA, MqttEntity, async_setup_entry_helper DEFAULT_NAME = "MQTT Switch" DEFAULT_PAYLOAD_ON = "ON" @@ -48,23 +39,16 @@ DEFAULT_OPTIMISTIC = False CONF_STATE_ON = "state_on" CONF_STATE_OFF = "state_off" -PLATFORM_SCHEMA = ( - mqtt.MQTT_RW_PLATFORM_SCHEMA.extend( - { - vol.Optional(CONF_DEVICE): MQTT_ENTITY_DEVICE_INFO_SCHEMA, - vol.Optional(CONF_ICON): cv.icon, - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, - vol.Optional(CONF_OPTIMISTIC, default=DEFAULT_OPTIMISTIC): cv.boolean, - vol.Optional(CONF_PAYLOAD_OFF, default=DEFAULT_PAYLOAD_OFF): cv.string, - vol.Optional(CONF_PAYLOAD_ON, default=DEFAULT_PAYLOAD_ON): cv.string, - vol.Optional(CONF_STATE_OFF): cv.string, - vol.Optional(CONF_STATE_ON): cv.string, - vol.Optional(CONF_UNIQUE_ID): cv.string, - } - ) - .extend(MQTT_AVAILABILITY_SCHEMA.schema) - .extend(MQTT_JSON_ATTRS_SCHEMA.schema) -) +PLATFORM_SCHEMA = mqtt.MQTT_RW_PLATFORM_SCHEMA.extend( + { + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, + vol.Optional(CONF_OPTIMISTIC, default=DEFAULT_OPTIMISTIC): cv.boolean, + vol.Optional(CONF_PAYLOAD_OFF, default=DEFAULT_PAYLOAD_OFF): cv.string, + vol.Optional(CONF_PAYLOAD_ON, default=DEFAULT_PAYLOAD_ON): cv.string, + vol.Optional(CONF_STATE_OFF): cv.string, + vol.Optional(CONF_STATE_ON): cv.string, + } +).extend(MQTT_ENTITY_COMMON_SCHEMA.schema) async def async_setup_platform( @@ -110,8 +94,6 @@ class MqttSwitch(MqttEntity, SwitchEntity, RestoreEntity): def _setup_from_config(self, config): """(Re)Setup the entity.""" - self._config = config - state_on = config.get(CONF_STATE_ON) self._state_on = state_on if state_on else config[CONF_PAYLOAD_ON] @@ -163,11 +145,6 @@ class MqttSwitch(MqttEntity, SwitchEntity, RestoreEntity): if last_state: self._state = last_state.state == STATE_ON - @property - def name(self): - """Return the name of the switch.""" - return self._config[CONF_NAME] - @property def is_on(self): """Return true if device is on.""" @@ -178,11 +155,6 @@ class MqttSwitch(MqttEntity, SwitchEntity, RestoreEntity): """Return true if we do optimistic updates.""" return self._optimistic - @property - def icon(self): - """Return the icon.""" - return self._config.get(CONF_ICON) - async def async_turn_on(self, **kwargs): """Turn the device on. diff --git a/homeassistant/components/mqtt/vacuum/schema_legacy.py b/homeassistant/components/mqtt/vacuum/schema_legacy.py index ca91b8948d4..f0f00a72bb4 100644 --- a/homeassistant/components/mqtt/vacuum/schema_legacy.py +++ b/homeassistant/components/mqtt/vacuum/schema_legacy.py @@ -17,12 +17,7 @@ from homeassistant.components.vacuum import ( SUPPORT_TURN_ON, VacuumEntity, ) -from homeassistant.const import ( - ATTR_SUPPORTED_FEATURES, - CONF_DEVICE, - CONF_NAME, - CONF_UNIQUE_ID, -) +from homeassistant.const import ATTR_SUPPORTED_FEATURES, CONF_NAME from homeassistant.core import callback import homeassistant.helpers.config_validation as cv from homeassistant.helpers.icon import icon_for_battery_level @@ -30,12 +25,7 @@ from homeassistant.helpers.icon import icon_for_battery_level from .. import subscription from ... import mqtt from ..debug_info import log_messages -from ..mixins import ( - MQTT_AVAILABILITY_SCHEMA, - MQTT_ENTITY_DEVICE_INFO_SCHEMA, - MQTT_JSON_ATTRS_SCHEMA, - MqttEntity, -) +from ..mixins import MQTT_ENTITY_COMMON_SCHEMA, MqttEntity from .schema import MQTT_VACUUM_SCHEMA, services_to_strings, strings_to_services SERVICE_TO_STRING = { @@ -117,7 +107,6 @@ PLATFORM_SCHEMA_LEGACY = ( vol.Inclusive(CONF_CHARGING_TOPIC, "charging"): mqtt.valid_publish_topic, vol.Inclusive(CONF_CLEANING_TEMPLATE, "cleaning"): cv.template, vol.Inclusive(CONF_CLEANING_TOPIC, "cleaning"): mqtt.valid_publish_topic, - vol.Optional(CONF_DEVICE): MQTT_ENTITY_DEVICE_INFO_SCHEMA, vol.Inclusive(CONF_DOCKED_TEMPLATE, "docked"): cv.template, vol.Inclusive(CONF_DOCKED_TOPIC, "docked"): mqtt.valid_publish_topic, vol.Inclusive(CONF_ERROR_TEMPLATE, "error"): cv.template, @@ -152,13 +141,11 @@ PLATFORM_SCHEMA_LEGACY = ( vol.Optional( CONF_SUPPORTED_FEATURES, default=DEFAULT_SERVICE_STRINGS ): vol.All(cv.ensure_list, [vol.In(STRING_TO_SERVICE.keys())]), - vol.Optional(CONF_UNIQUE_ID): cv.string, vol.Optional(mqtt.CONF_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(mqtt.CONF_RETAIN, default=DEFAULT_RETAIN): cv.boolean, } ) - .extend(MQTT_AVAILABILITY_SCHEMA.schema) - .extend(MQTT_JSON_ATTRS_SCHEMA.schema) + .extend(MQTT_ENTITY_COMMON_SCHEMA.schema) .extend(MQTT_VACUUM_SCHEMA.schema) ) @@ -192,7 +179,6 @@ class MqttVacuum(MqttEntity, VacuumEntity): return PLATFORM_SCHEMA_LEGACY def _setup_from_config(self, config): - self._name = config[CONF_NAME] supported_feature_strings = config[CONF_SUPPORTED_FEATURES] self._supported_features = strings_to_services( supported_feature_strings, STRING_TO_SERVICE @@ -338,11 +324,6 @@ class MqttVacuum(MqttEntity, VacuumEntity): }, ) - @property - def name(self): - """Return the name of the vacuum.""" - return self._name - @property def is_on(self): """Return true if vacuum is on.""" diff --git a/homeassistant/components/mqtt/vacuum/schema_state.py b/homeassistant/components/mqtt/vacuum/schema_state.py index 3e43736ab2e..37a12d33df6 100644 --- a/homeassistant/components/mqtt/vacuum/schema_state.py +++ b/homeassistant/components/mqtt/vacuum/schema_state.py @@ -22,24 +22,14 @@ from homeassistant.components.vacuum import ( SUPPORT_STOP, StateVacuumEntity, ) -from homeassistant.const import ( - ATTR_SUPPORTED_FEATURES, - CONF_DEVICE, - CONF_NAME, - CONF_UNIQUE_ID, -) +from homeassistant.const import ATTR_SUPPORTED_FEATURES, CONF_NAME from homeassistant.core import callback import homeassistant.helpers.config_validation as cv from .. import CONF_COMMAND_TOPIC, CONF_QOS, CONF_RETAIN, CONF_STATE_TOPIC, subscription from ... import mqtt from ..debug_info import log_messages -from ..mixins import ( - MQTT_AVAILABILITY_SCHEMA, - MQTT_ENTITY_DEVICE_INFO_SCHEMA, - MQTT_JSON_ATTRS_SCHEMA, - MqttEntity, -) +from ..mixins import MQTT_ENTITY_COMMON_SCHEMA, MqttEntity from .schema import MQTT_VACUUM_SCHEMA, services_to_strings, strings_to_services SERVICE_TO_STRING = { @@ -113,7 +103,6 @@ DEFAULT_PAYLOAD_PAUSE = "pause" PLATFORM_SCHEMA_STATE = ( mqtt.MQTT_BASE_PLATFORM_SCHEMA.extend( { - vol.Optional(CONF_DEVICE): MQTT_ENTITY_DEVICE_INFO_SCHEMA, vol.Optional(CONF_FAN_SPEED_LIST, default=[]): vol.All( cv.ensure_list, [cv.string] ), @@ -136,13 +125,11 @@ PLATFORM_SCHEMA_STATE = ( vol.Optional( CONF_SUPPORTED_FEATURES, default=DEFAULT_SERVICE_STRINGS ): vol.All(cv.ensure_list, [vol.In(STRING_TO_SERVICE.keys())]), - vol.Optional(CONF_UNIQUE_ID): cv.string, vol.Optional(CONF_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_RETAIN, default=DEFAULT_RETAIN): cv.boolean, } ) - .extend(MQTT_AVAILABILITY_SCHEMA.schema) - .extend(MQTT_JSON_ATTRS_SCHEMA.schema) + .extend(MQTT_ENTITY_COMMON_SCHEMA.schema) .extend(MQTT_VACUUM_SCHEMA.schema) ) @@ -171,8 +158,6 @@ class MqttStateVacuum(MqttEntity, StateVacuumEntity): return PLATFORM_SCHEMA_STATE def _setup_from_config(self, config): - self._config = config - self._name = config[CONF_NAME] supported_feature_strings = config[CONF_SUPPORTED_FEATURES] self._supported_features = strings_to_services( supported_feature_strings, STRING_TO_SERVICE @@ -219,11 +204,6 @@ class MqttStateVacuum(MqttEntity, StateVacuumEntity): self.hass, self._sub_state, topics ) - @property - def name(self): - """Return the name of the vacuum.""" - return self._name - @property def state(self): """Return state of vacuum."""