Deduplicate MQTT entity discovery code (#44970)

This commit is contained in:
Erik Montnemery 2021-01-09 14:37:33 +01:00 committed by GitHub
parent 2d9eb25142
commit 6dd6d9b368
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 145 additions and 413 deletions

View file

@ -1,4 +1,5 @@
"""This platform enables the possibility to control a MQTT alarm.""" """This platform enables the possibility to control a MQTT alarm."""
import functools
import logging import logging
import re import re
@ -29,10 +30,6 @@ from homeassistant.const import (
) )
from homeassistant.core import callback from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.dispatcher import (
async_dispatcher_connect,
async_dispatcher_send,
)
from homeassistant.helpers.reload import async_setup_reload_service from homeassistant.helpers.reload import async_setup_reload_service
from homeassistant.helpers.typing import ConfigType, HomeAssistantType from homeassistant.helpers.typing import ConfigType, HomeAssistantType
@ -46,9 +43,7 @@ from . import (
subscription, subscription,
) )
from .. import mqtt from .. import mqtt
from .const import ATTR_DISCOVERY_HASH
from .debug_info import log_messages from .debug_info import log_messages
from .discovery import MQTT_DISCOVERY_DONE, MQTT_DISCOVERY_NEW, clear_discovery_hash
from .mixins import ( from .mixins import (
MQTT_AVAILABILITY_SCHEMA, MQTT_AVAILABILITY_SCHEMA,
MQTT_ENTITY_DEVICE_INFO_SCHEMA, MQTT_ENTITY_DEVICE_INFO_SCHEMA,
@ -57,6 +52,7 @@ from .mixins import (
MqttAvailability, MqttAvailability,
MqttDiscoveryUpdate, MqttDiscoveryUpdate,
MqttEntityDeviceInfo, MqttEntityDeviceInfo,
async_setup_entry_helper,
) )
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -112,35 +108,20 @@ async def async_setup_platform(
): ):
"""Set up MQTT alarm control panel through configuration.yaml.""" """Set up MQTT alarm control panel through configuration.yaml."""
await async_setup_reload_service(hass, DOMAIN, PLATFORMS) await async_setup_reload_service(hass, DOMAIN, PLATFORMS)
await _async_setup_entity(hass, config, async_add_entities) await _async_setup_entity(hass, async_add_entities, config)
async def async_setup_entry(hass, config_entry, async_add_entities): async def async_setup_entry(hass, config_entry, async_add_entities):
"""Set up MQTT alarm control panel dynamically through MQTT discovery.""" """Set up MQTT alarm control panel dynamically through MQTT discovery."""
async def async_discover(discovery_payload): setup = functools.partial(
"""Discover and add an MQTT alarm control panel.""" _async_setup_entity, hass, async_add_entities, config_entry=config_entry
discovery_data = discovery_payload.discovery_data
try:
config = PLATFORM_SCHEMA(discovery_payload)
await _async_setup_entity(
hass, config, async_add_entities, config_entry, discovery_data
)
except Exception:
discovery_hash = discovery_data[ATTR_DISCOVERY_HASH]
clear_discovery_hash(hass, discovery_hash)
async_dispatcher_send(
hass, MQTT_DISCOVERY_DONE.format(discovery_hash), None
)
raise
async_dispatcher_connect(
hass, MQTT_DISCOVERY_NEW.format(alarm.DOMAIN, "mqtt"), async_discover
) )
await async_setup_entry_helper(hass, alarm.DOMAIN, setup, PLATFORM_SCHEMA)
async def _async_setup_entity( async def _async_setup_entity(
hass, config, async_add_entities, config_entry=None, discovery_data=None hass, async_add_entities, config, config_entry=None, discovery_data=None
): ):
"""Set up the MQTT Alarm Control Panel platform.""" """Set up the MQTT Alarm Control Panel platform."""
async_add_entities([MqttAlarm(hass, config, config_entry, discovery_data)]) async_add_entities([MqttAlarm(hass, config, config_entry, discovery_data)])

View file

@ -1,5 +1,6 @@
"""Support for MQTT binary sensors.""" """Support for MQTT binary sensors."""
from datetime import timedelta from datetime import timedelta
import functools
import logging import logging
import voluptuous as vol import voluptuous as vol
@ -21,10 +22,6 @@ from homeassistant.const import (
) )
from homeassistant.core import callback from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.dispatcher import (
async_dispatcher_connect,
async_dispatcher_send,
)
import homeassistant.helpers.event as evt import homeassistant.helpers.event as evt
from homeassistant.helpers.event import async_track_point_in_utc_time from homeassistant.helpers.event import async_track_point_in_utc_time
from homeassistant.helpers.reload import async_setup_reload_service from homeassistant.helpers.reload import async_setup_reload_service
@ -33,9 +30,7 @@ from homeassistant.util import dt as dt_util
from . import CONF_QOS, CONF_STATE_TOPIC, DOMAIN, PLATFORMS, subscription from . import CONF_QOS, CONF_STATE_TOPIC, DOMAIN, PLATFORMS, subscription
from .. import mqtt from .. import mqtt
from .const import ATTR_DISCOVERY_HASH
from .debug_info import log_messages from .debug_info import log_messages
from .discovery import MQTT_DISCOVERY_DONE, MQTT_DISCOVERY_NEW, clear_discovery_hash
from .mixins import ( from .mixins import (
MQTT_AVAILABILITY_SCHEMA, MQTT_AVAILABILITY_SCHEMA,
MQTT_ENTITY_DEVICE_INFO_SCHEMA, MQTT_ENTITY_DEVICE_INFO_SCHEMA,
@ -44,6 +39,7 @@ from .mixins import (
MqttAvailability, MqttAvailability,
MqttDiscoveryUpdate, MqttDiscoveryUpdate,
MqttEntityDeviceInfo, MqttEntityDeviceInfo,
async_setup_entry_helper,
) )
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -79,35 +75,20 @@ async def async_setup_platform(
): ):
"""Set up MQTT binary sensor through configuration.yaml.""" """Set up MQTT binary sensor through configuration.yaml."""
await async_setup_reload_service(hass, DOMAIN, PLATFORMS) await async_setup_reload_service(hass, DOMAIN, PLATFORMS)
await _async_setup_entity(hass, config, async_add_entities) await _async_setup_entity(hass, async_add_entities, config)
async def async_setup_entry(hass, config_entry, async_add_entities): async def async_setup_entry(hass, config_entry, async_add_entities):
"""Set up MQTT binary sensor dynamically through MQTT discovery.""" """Set up MQTT binary sensor dynamically through MQTT discovery."""
async def async_discover(discovery_payload): setup = functools.partial(
"""Discover and add a MQTT binary sensor.""" _async_setup_entity, hass, async_add_entities, config_entry=config_entry
discovery_data = discovery_payload.discovery_data
try:
config = PLATFORM_SCHEMA(discovery_payload)
await _async_setup_entity(
hass, config, async_add_entities, config_entry, discovery_data
)
except Exception:
discovery_hash = discovery_data[ATTR_DISCOVERY_HASH]
clear_discovery_hash(hass, discovery_hash)
async_dispatcher_send(
hass, MQTT_DISCOVERY_DONE.format(discovery_hash), None
)
raise
async_dispatcher_connect(
hass, MQTT_DISCOVERY_NEW.format(binary_sensor.DOMAIN, "mqtt"), async_discover
) )
await async_setup_entry_helper(hass, binary_sensor.DOMAIN, setup, PLATFORM_SCHEMA)
async def _async_setup_entity( async def _async_setup_entity(
hass, config, async_add_entities, config_entry=None, discovery_data=None hass, async_add_entities, config, config_entry=None, discovery_data=None
): ):
"""Set up the MQTT binary sensor.""" """Set up the MQTT binary sensor."""
async_add_entities([MqttBinarySensor(hass, config, config_entry, discovery_data)]) async_add_entities([MqttBinarySensor(hass, config, config_entry, discovery_data)])

View file

@ -1,4 +1,5 @@
"""Camera that loads a picture from an MQTT topic.""" """Camera that loads a picture from an MQTT topic."""
import functools
import logging import logging
import voluptuous as vol import voluptuous as vol
@ -8,18 +9,12 @@ from homeassistant.components.camera import Camera
from homeassistant.const import CONF_DEVICE, CONF_NAME, CONF_UNIQUE_ID from homeassistant.const import CONF_DEVICE, CONF_NAME, CONF_UNIQUE_ID
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers import config_validation as cv from homeassistant.helpers import config_validation as cv
from homeassistant.helpers.dispatcher import (
async_dispatcher_connect,
async_dispatcher_send,
)
from homeassistant.helpers.reload import async_setup_reload_service from homeassistant.helpers.reload import async_setup_reload_service
from homeassistant.helpers.typing import ConfigType, HomeAssistantType from homeassistant.helpers.typing import ConfigType, HomeAssistantType
from . import CONF_QOS, DOMAIN, PLATFORMS, subscription from . import CONF_QOS, DOMAIN, PLATFORMS, subscription
from .. import mqtt from .. import mqtt
from .const import ATTR_DISCOVERY_HASH
from .debug_info import log_messages from .debug_info import log_messages
from .discovery import MQTT_DISCOVERY_DONE, MQTT_DISCOVERY_NEW, clear_discovery_hash
from .mixins import ( from .mixins import (
MQTT_AVAILABILITY_SCHEMA, MQTT_AVAILABILITY_SCHEMA,
MQTT_ENTITY_DEVICE_INFO_SCHEMA, MQTT_ENTITY_DEVICE_INFO_SCHEMA,
@ -28,6 +23,7 @@ from .mixins import (
MqttAvailability, MqttAvailability,
MqttDiscoveryUpdate, MqttDiscoveryUpdate,
MqttEntityDeviceInfo, MqttEntityDeviceInfo,
async_setup_entry_helper,
) )
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -54,35 +50,20 @@ async def async_setup_platform(
): ):
"""Set up MQTT camera through configuration.yaml.""" """Set up MQTT camera through configuration.yaml."""
await async_setup_reload_service(hass, DOMAIN, PLATFORMS) await async_setup_reload_service(hass, DOMAIN, PLATFORMS)
await _async_setup_entity(config, async_add_entities) await _async_setup_entity(async_add_entities, config)
async def async_setup_entry(hass, config_entry, async_add_entities): async def async_setup_entry(hass, config_entry, async_add_entities):
"""Set up MQTT camera dynamically through MQTT discovery.""" """Set up MQTT camera dynamically through MQTT discovery."""
async def async_discover(discovery_payload): setup = functools.partial(
"""Discover and add a MQTT camera.""" _async_setup_entity, async_add_entities, config_entry=config_entry
discovery_data = discovery_payload.discovery_data
try:
config = PLATFORM_SCHEMA(discovery_payload)
await _async_setup_entity(
config, async_add_entities, config_entry, discovery_data
)
except Exception:
discovery_hash = discovery_data[ATTR_DISCOVERY_HASH]
clear_discovery_hash(hass, discovery_hash)
async_dispatcher_send(
hass, MQTT_DISCOVERY_DONE.format(discovery_hash), None
)
raise
async_dispatcher_connect(
hass, MQTT_DISCOVERY_NEW.format(camera.DOMAIN, "mqtt"), async_discover
) )
await async_setup_entry_helper(hass, camera.DOMAIN, setup, PLATFORM_SCHEMA)
async def _async_setup_entity( async def _async_setup_entity(
config, async_add_entities, config_entry=None, discovery_data=None async_add_entities, config, config_entry=None, discovery_data=None
): ):
"""Set up the MQTT Camera.""" """Set up the MQTT Camera."""
async_add_entities([MqttCamera(config, config_entry, discovery_data)]) async_add_entities([MqttCamera(config, config_entry, discovery_data)])

View file

@ -1,4 +1,5 @@
"""Support for MQTT climate devices.""" """Support for MQTT climate devices."""
import functools
import logging import logging
import voluptuous as vol import voluptuous as vol
@ -47,10 +48,6 @@ from homeassistant.const import (
) )
from homeassistant.core import callback from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.dispatcher import (
async_dispatcher_connect,
async_dispatcher_send,
)
from homeassistant.helpers.reload import async_setup_reload_service from homeassistant.helpers.reload import async_setup_reload_service
from homeassistant.helpers.typing import ConfigType, HomeAssistantType from homeassistant.helpers.typing import ConfigType, HomeAssistantType
@ -63,9 +60,7 @@ from . import (
subscription, subscription,
) )
from .. import mqtt from .. import mqtt
from .const import ATTR_DISCOVERY_HASH
from .debug_info import log_messages from .debug_info import log_messages
from .discovery import MQTT_DISCOVERY_DONE, MQTT_DISCOVERY_NEW, clear_discovery_hash
from .mixins import ( from .mixins import (
MQTT_AVAILABILITY_SCHEMA, MQTT_AVAILABILITY_SCHEMA,
MQTT_ENTITY_DEVICE_INFO_SCHEMA, MQTT_ENTITY_DEVICE_INFO_SCHEMA,
@ -74,6 +69,7 @@ from .mixins import (
MqttAvailability, MqttAvailability,
MqttDiscoveryUpdate, MqttDiscoveryUpdate,
MqttEntityDeviceInfo, MqttEntityDeviceInfo,
async_setup_entry_helper,
) )
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -248,7 +244,7 @@ PLATFORM_SCHEMA = (
async def async_setup_platform( async def async_setup_platform(
hass: HomeAssistantType, config: ConfigType, async_add_entities, discovery_info=None hass: HomeAssistantType, async_add_entities, config: ConfigType, discovery_info=None
): ):
"""Set up MQTT climate device through configuration.yaml.""" """Set up MQTT climate device through configuration.yaml."""
await async_setup_reload_service(hass, DOMAIN, PLATFORMS) await async_setup_reload_service(hass, DOMAIN, PLATFORMS)
@ -258,29 +254,14 @@ async def async_setup_platform(
async def async_setup_entry(hass, config_entry, async_add_entities): async def async_setup_entry(hass, config_entry, async_add_entities):
"""Set up MQTT climate device dynamically through MQTT discovery.""" """Set up MQTT climate device dynamically through MQTT discovery."""
async def async_discover(discovery_payload): setup = functools.partial(
"""Discover and add a MQTT climate device.""" _async_setup_entity, hass, async_add_entities, config_entry=config_entry
discovery_data = discovery_payload.discovery_data
try:
config = PLATFORM_SCHEMA(discovery_payload)
await _async_setup_entity(
hass, config, async_add_entities, config_entry, discovery_data
)
except Exception:
discovery_hash = discovery_data[ATTR_DISCOVERY_HASH]
clear_discovery_hash(hass, discovery_hash)
async_dispatcher_send(
hass, MQTT_DISCOVERY_DONE.format(discovery_hash), None
)
raise
async_dispatcher_connect(
hass, MQTT_DISCOVERY_NEW.format(climate.DOMAIN, "mqtt"), async_discover
) )
await async_setup_entry_helper(hass, climate.DOMAIN, setup, PLATFORM_SCHEMA)
async def _async_setup_entity( async def _async_setup_entity(
hass, config, async_add_entities, config_entry=None, discovery_data=None hass, async_add_entities, config, config_entry=None, discovery_data=None
): ):
"""Set up the MQTT climate devices.""" """Set up the MQTT climate devices."""
async_add_entities([MqttClimate(hass, config, config_entry, discovery_data)]) async_add_entities([MqttClimate(hass, config, config_entry, discovery_data)])

View file

@ -1,4 +1,5 @@
"""Support for MQTT cover devices.""" """Support for MQTT cover devices."""
import functools
import logging import logging
import voluptuous as vol import voluptuous as vol
@ -33,10 +34,6 @@ from homeassistant.const import (
) )
from homeassistant.core import callback from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.dispatcher import (
async_dispatcher_connect,
async_dispatcher_send,
)
from homeassistant.helpers.reload import async_setup_reload_service from homeassistant.helpers.reload import async_setup_reload_service
from homeassistant.helpers.typing import ConfigType, HomeAssistantType from homeassistant.helpers.typing import ConfigType, HomeAssistantType
@ -50,9 +47,7 @@ from . import (
subscription, subscription,
) )
from .. import mqtt from .. import mqtt
from .const import ATTR_DISCOVERY_HASH
from .debug_info import log_messages from .debug_info import log_messages
from .discovery import MQTT_DISCOVERY_DONE, MQTT_DISCOVERY_NEW, clear_discovery_hash
from .mixins import ( from .mixins import (
MQTT_AVAILABILITY_SCHEMA, MQTT_AVAILABILITY_SCHEMA,
MQTT_ENTITY_DEVICE_INFO_SCHEMA, MQTT_ENTITY_DEVICE_INFO_SCHEMA,
@ -61,6 +56,7 @@ from .mixins import (
MqttAvailability, MqttAvailability,
MqttDiscoveryUpdate, MqttDiscoveryUpdate,
MqttEntityDeviceInfo, MqttEntityDeviceInfo,
async_setup_entry_helper,
) )
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -183,35 +179,20 @@ async def async_setup_platform(
): ):
"""Set up MQTT cover through configuration.yaml.""" """Set up MQTT cover through configuration.yaml."""
await async_setup_reload_service(hass, DOMAIN, PLATFORMS) await async_setup_reload_service(hass, DOMAIN, PLATFORMS)
await _async_setup_entity(hass, config, async_add_entities) await _async_setup_entity(hass, async_add_entities, config)
async def async_setup_entry(hass, config_entry, async_add_entities): async def async_setup_entry(hass, config_entry, async_add_entities):
"""Set up MQTT cover dynamically through MQTT discovery.""" """Set up MQTT cover dynamically through MQTT discovery."""
async def async_discover(discovery_payload): setup = functools.partial(
"""Discover and add an MQTT cover.""" _async_setup_entity, hass, async_add_entities, config_entry=config_entry
discovery_data = discovery_payload.discovery_data
try:
config = PLATFORM_SCHEMA(discovery_payload)
await _async_setup_entity(
hass, config, async_add_entities, config_entry, discovery_data
)
except Exception:
discovery_hash = discovery_data[ATTR_DISCOVERY_HASH]
clear_discovery_hash(hass, discovery_hash)
async_dispatcher_send(
hass, MQTT_DISCOVERY_DONE.format(discovery_hash), None
)
raise
async_dispatcher_connect(
hass, MQTT_DISCOVERY_NEW.format(cover.DOMAIN, "mqtt"), async_discover
) )
await async_setup_entry_helper(hass, cover.DOMAIN, setup, PLATFORM_SCHEMA)
async def _async_setup_entity( async def _async_setup_entity(
hass, config, async_add_entities, config_entry=None, discovery_data=None hass, async_add_entities, config, config_entry=None, discovery_data=None
): ):
"""Set up the MQTT Cover.""" """Set up the MQTT Cover."""
async_add_entities([MqttCover(hass, config, config_entry, discovery_data)]) async_add_entities([MqttCover(hass, config, config_entry, discovery_data)])

View file

@ -1,18 +1,14 @@
"""Provides device automations for MQTT.""" """Provides device automations for MQTT."""
import functools
import logging import logging
import voluptuous as vol import voluptuous as vol
from homeassistant.helpers.device_registry import EVENT_DEVICE_REGISTRY_UPDATED from homeassistant.helpers.device_registry import EVENT_DEVICE_REGISTRY_UPDATED
from homeassistant.helpers.dispatcher import (
async_dispatcher_connect,
async_dispatcher_send,
)
from . import device_trigger from . import device_trigger
from .. import mqtt from .. import mqtt
from .const import ATTR_DISCOVERY_HASH from .mixins import async_setup_entry_helper
from .discovery import MQTT_DISCOVERY_DONE, MQTT_DISCOVERY_NEW, clear_discovery_hash
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -36,24 +32,14 @@ async def async_setup_entry(hass, config_entry):
return return
await device_trigger.async_device_removed(hass, event.data["device_id"]) await device_trigger.async_device_removed(hass, event.data["device_id"])
async def async_discover(discovery_payload): setup = functools.partial(_async_setup_automation, hass, config_entry=config_entry)
"""Discover and add an MQTT device automation.""" await async_setup_entry_helper(hass, "device_automation", setup, PLATFORM_SCHEMA)
discovery_data = discovery_payload.discovery_data
try:
config = PLATFORM_SCHEMA(discovery_payload)
if config[CONF_AUTOMATION_TYPE] == AUTOMATION_TYPE_TRIGGER:
await device_trigger.async_setup_trigger(
hass, config, config_entry, discovery_data
)
except Exception:
discovery_hash = discovery_data[ATTR_DISCOVERY_HASH]
clear_discovery_hash(hass, discovery_hash)
async_dispatcher_send(
hass, MQTT_DISCOVERY_DONE.format(discovery_hash), None
)
raise
async_dispatcher_connect(
hass, MQTT_DISCOVERY_NEW.format("device_automation", "mqtt"), async_discover
)
hass.bus.async_listen(EVENT_DEVICE_REGISTRY_UPDATED, async_device_removed) hass.bus.async_listen(EVENT_DEVICE_REGISTRY_UPDATED, async_device_removed)
async def _async_setup_automation(hass, config, config_entry, discovery_data):
"""Set up an MQTT device automation."""
if config[CONF_AUTOMATION_TYPE] == AUTOMATION_TYPE_TRIGGER:
await device_trigger.async_setup_trigger(
hass, config, config_entry, discovery_data
)

View file

@ -1,4 +1,5 @@
"""Support for tracking MQTT enabled devices identified through discovery.""" """Support for tracking MQTT enabled devices identified through discovery."""
import functools
import logging import logging
import voluptuous as vol import voluptuous as vol
@ -20,16 +21,11 @@ from homeassistant.const import (
) )
from homeassistant.core import callback from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.dispatcher import (
async_dispatcher_connect,
async_dispatcher_send,
)
from .. import subscription from .. import subscription
from ... import mqtt from ... import mqtt
from ..const import ATTR_DISCOVERY_HASH, CONF_QOS, CONF_STATE_TOPIC from ..const import CONF_QOS, CONF_STATE_TOPIC
from ..debug_info import log_messages from ..debug_info import log_messages
from ..discovery import MQTT_DISCOVERY_DONE, MQTT_DISCOVERY_NEW, clear_discovery_hash
from ..mixins import ( from ..mixins import (
MQTT_AVAILABILITY_SCHEMA, MQTT_AVAILABILITY_SCHEMA,
MQTT_ENTITY_DEVICE_INFO_SCHEMA, MQTT_ENTITY_DEVICE_INFO_SCHEMA,
@ -38,6 +34,7 @@ from ..mixins import (
MqttAvailability, MqttAvailability,
MqttDiscoveryUpdate, MqttDiscoveryUpdate,
MqttEntityDeviceInfo, MqttEntityDeviceInfo,
async_setup_entry_helper,
) )
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -66,29 +63,16 @@ PLATFORM_SCHEMA_DISCOVERY = (
async def async_setup_entry_from_discovery(hass, config_entry, async_add_entities): async def async_setup_entry_from_discovery(hass, config_entry, async_add_entities):
"""Set up MQTT device tracker dynamically through MQTT discovery.""" """Set up MQTT device tracker dynamically through MQTT discovery."""
async def async_discover(discovery_payload): setup = functools.partial(
"""Discover and add an MQTT device tracker.""" _async_setup_entity, hass, async_add_entities, config_entry=config_entry
discovery_data = discovery_payload.discovery_data )
try: await async_setup_entry_helper(
config = PLATFORM_SCHEMA_DISCOVERY(discovery_payload) hass, device_tracker.DOMAIN, setup, PLATFORM_SCHEMA_DISCOVERY
await _async_setup_entity(
hass, config, async_add_entities, config_entry, discovery_data
)
except Exception:
discovery_hash = discovery_data[ATTR_DISCOVERY_HASH]
clear_discovery_hash(hass, discovery_hash)
async_dispatcher_send(
hass, MQTT_DISCOVERY_DONE.format(discovery_hash), None
)
raise
async_dispatcher_connect(
hass, MQTT_DISCOVERY_NEW.format(device_tracker.DOMAIN, "mqtt"), async_discover
) )
async def _async_setup_entity( async def _async_setup_entity(
hass, config, async_add_entities, config_entry=None, discovery_data=None hass, async_add_entities, config, config_entry=None, discovery_data=None
): ):
"""Set up the MQTT Device Tracker entity.""" """Set up the MQTT Device Tracker entity."""
async_add_entities([MqttDeviceTracker(hass, config, config_entry, discovery_data)]) async_add_entities([MqttDeviceTracker(hass, config, config_entry, discovery_data)])

View file

@ -1,4 +1,5 @@
"""Support for MQTT fans.""" """Support for MQTT fans."""
import functools
import logging import logging
import voluptuous as vol import voluptuous as vol
@ -25,10 +26,6 @@ from homeassistant.const import (
) )
from homeassistant.core import callback from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.dispatcher import (
async_dispatcher_connect,
async_dispatcher_send,
)
from homeassistant.helpers.reload import async_setup_reload_service from homeassistant.helpers.reload import async_setup_reload_service
from homeassistant.helpers.typing import ConfigType, HomeAssistantType from homeassistant.helpers.typing import ConfigType, HomeAssistantType
@ -42,9 +39,7 @@ from . import (
subscription, subscription,
) )
from .. import mqtt from .. import mqtt
from .const import ATTR_DISCOVERY_HASH
from .debug_info import log_messages from .debug_info import log_messages
from .discovery import MQTT_DISCOVERY_DONE, MQTT_DISCOVERY_NEW, clear_discovery_hash
from .mixins import ( from .mixins import (
MQTT_AVAILABILITY_SCHEMA, MQTT_AVAILABILITY_SCHEMA,
MQTT_ENTITY_DEVICE_INFO_SCHEMA, MQTT_ENTITY_DEVICE_INFO_SCHEMA,
@ -53,6 +48,7 @@ from .mixins import (
MqttAvailability, MqttAvailability,
MqttDiscoveryUpdate, MqttDiscoveryUpdate,
MqttEntityDeviceInfo, MqttEntityDeviceInfo,
async_setup_entry_helper,
) )
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -124,35 +120,20 @@ async def async_setup_platform(
): ):
"""Set up MQTT fan through configuration.yaml.""" """Set up MQTT fan through configuration.yaml."""
await async_setup_reload_service(hass, DOMAIN, PLATFORMS) await async_setup_reload_service(hass, DOMAIN, PLATFORMS)
await _async_setup_entity(hass, config, async_add_entities) await _async_setup_entity(hass, async_add_entities, config)
async def async_setup_entry(hass, config_entry, async_add_entities): async def async_setup_entry(hass, config_entry, async_add_entities):
"""Set up MQTT fan dynamically through MQTT discovery.""" """Set up MQTT fan dynamically through MQTT discovery."""
async def async_discover(discovery_payload): setup = functools.partial(
"""Discover and add a MQTT fan.""" _async_setup_entity, hass, async_add_entities, config_entry=config_entry
discovery_data = discovery_payload.discovery_data
try:
config = PLATFORM_SCHEMA(discovery_payload)
await _async_setup_entity(
hass, config, async_add_entities, config_entry, discovery_data
)
except Exception:
discovery_hash = discovery_data[ATTR_DISCOVERY_HASH]
clear_discovery_hash(hass, discovery_hash)
async_dispatcher_send(
hass, MQTT_DISCOVERY_DONE.format(discovery_hash), None
)
raise
async_dispatcher_connect(
hass, MQTT_DISCOVERY_NEW.format(fan.DOMAIN, "mqtt"), async_discover
) )
await async_setup_entry_helper(hass, fan.DOMAIN, setup, PLATFORM_SCHEMA)
async def _async_setup_entity( async def _async_setup_entity(
hass, config, async_add_entities, config_entry=None, discovery_data=None hass, async_add_entities, config, config_entry=None, discovery_data=None
): ):
"""Set up the MQTT fan.""" """Set up the MQTT fan."""
async_add_entities([MqttFan(hass, config, config_entry, discovery_data)]) async_add_entities([MqttFan(hass, config, config_entry, discovery_data)])

View file

@ -1,19 +1,15 @@
"""Support for MQTT lights.""" """Support for MQTT lights."""
import functools
import logging import logging
import voluptuous as vol import voluptuous as vol
from homeassistant.components import light from homeassistant.components import light
from homeassistant.helpers.dispatcher import (
async_dispatcher_connect,
async_dispatcher_send,
)
from homeassistant.helpers.reload import async_setup_reload_service from homeassistant.helpers.reload import async_setup_reload_service
from homeassistant.helpers.typing import ConfigType, HomeAssistantType from homeassistant.helpers.typing import ConfigType, HomeAssistantType
from .. import DOMAIN, PLATFORMS from .. import DOMAIN, PLATFORMS
from ..const import ATTR_DISCOVERY_HASH from ..mixins import async_setup_entry_helper
from ..discovery import MQTT_DISCOVERY_DONE, MQTT_DISCOVERY_NEW, clear_discovery_hash
from .schema import CONF_SCHEMA, MQTT_LIGHT_SCHEMA_SCHEMA from .schema import CONF_SCHEMA, MQTT_LIGHT_SCHEMA_SCHEMA
from .schema_basic import PLATFORM_SCHEMA_BASIC, async_setup_entity_basic from .schema_basic import PLATFORM_SCHEMA_BASIC, async_setup_entity_basic
from .schema_json import PLATFORM_SCHEMA_JSON, async_setup_entity_json from .schema_json import PLATFORM_SCHEMA_JSON, async_setup_entity_json
@ -42,35 +38,20 @@ async def async_setup_platform(
): ):
"""Set up MQTT light through configuration.yaml.""" """Set up MQTT light through configuration.yaml."""
await async_setup_reload_service(hass, DOMAIN, PLATFORMS) await async_setup_reload_service(hass, DOMAIN, PLATFORMS)
await _async_setup_entity(hass, config, async_add_entities) await _async_setup_entity(hass, async_add_entities, config)
async def async_setup_entry(hass, config_entry, async_add_entities): async def async_setup_entry(hass, config_entry, async_add_entities):
"""Set up MQTT light dynamically through MQTT discovery.""" """Set up MQTT light dynamically through MQTT discovery."""
async def async_discover(discovery_payload): setup = functools.partial(
"""Discover and add a MQTT light.""" _async_setup_entity, hass, async_add_entities, config_entry=config_entry
discovery_data = discovery_payload.discovery_data
try:
config = PLATFORM_SCHEMA(discovery_payload)
await _async_setup_entity(
hass, config, async_add_entities, config_entry, discovery_data
)
except Exception:
discovery_hash = discovery_data[ATTR_DISCOVERY_HASH]
clear_discovery_hash(hass, discovery_hash)
async_dispatcher_send(
hass, MQTT_DISCOVERY_DONE.format(discovery_hash), None
)
raise
async_dispatcher_connect(
hass, MQTT_DISCOVERY_NEW.format(light.DOMAIN, "mqtt"), async_discover
) )
await async_setup_entry_helper(hass, light.DOMAIN, setup, PLATFORM_SCHEMA)
async def _async_setup_entity( async def _async_setup_entity(
hass, config, async_add_entities, config_entry=None, discovery_data=None hass, async_add_entities, config, config_entry=None, discovery_data=None
): ):
"""Set up a MQTT Light.""" """Set up a MQTT Light."""
setup_entity = { setup_entity = {

View file

@ -1,4 +1,5 @@
"""Support for MQTT locks.""" """Support for MQTT locks."""
import functools
import logging import logging
import voluptuous as vol import voluptuous as vol
@ -14,10 +15,6 @@ from homeassistant.const import (
) )
from homeassistant.core import callback from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.dispatcher import (
async_dispatcher_connect,
async_dispatcher_send,
)
from homeassistant.helpers.reload import async_setup_reload_service from homeassistant.helpers.reload import async_setup_reload_service
from homeassistant.helpers.typing import ConfigType, HomeAssistantType from homeassistant.helpers.typing import ConfigType, HomeAssistantType
@ -31,9 +28,7 @@ from . import (
subscription, subscription,
) )
from .. import mqtt from .. import mqtt
from .const import ATTR_DISCOVERY_HASH
from .debug_info import log_messages from .debug_info import log_messages
from .discovery import MQTT_DISCOVERY_DONE, MQTT_DISCOVERY_NEW, clear_discovery_hash
from .mixins import ( from .mixins import (
MQTT_AVAILABILITY_SCHEMA, MQTT_AVAILABILITY_SCHEMA,
MQTT_ENTITY_DEVICE_INFO_SCHEMA, MQTT_ENTITY_DEVICE_INFO_SCHEMA,
@ -42,6 +37,7 @@ from .mixins import (
MqttAvailability, MqttAvailability,
MqttDiscoveryUpdate, MqttDiscoveryUpdate,
MqttEntityDeviceInfo, MqttEntityDeviceInfo,
async_setup_entry_helper,
) )
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -86,35 +82,20 @@ async def async_setup_platform(
): ):
"""Set up MQTT lock panel through configuration.yaml.""" """Set up MQTT lock panel through configuration.yaml."""
await async_setup_reload_service(hass, DOMAIN, PLATFORMS) await async_setup_reload_service(hass, DOMAIN, PLATFORMS)
await _async_setup_entity(hass, config, async_add_entities) await _async_setup_entity(hass, async_add_entities, config)
async def async_setup_entry(hass, config_entry, async_add_entities): async def async_setup_entry(hass, config_entry, async_add_entities):
"""Set up MQTT lock dynamically through MQTT discovery.""" """Set up MQTT lock dynamically through MQTT discovery."""
async def async_discover(discovery_payload): setup = functools.partial(
"""Discover and add an MQTT lock.""" _async_setup_entity, hass, async_add_entities, config_entry=config_entry
discovery_data = discovery_payload.discovery_data
try:
config = PLATFORM_SCHEMA(discovery_payload)
await _async_setup_entity(
hass, config, async_add_entities, config_entry, discovery_data
)
except Exception:
discovery_hash = discovery_data[ATTR_DISCOVERY_HASH]
clear_discovery_hash(hass, discovery_hash)
async_dispatcher_send(
hass, MQTT_DISCOVERY_DONE.format(discovery_hash), None
)
raise
async_dispatcher_connect(
hass, MQTT_DISCOVERY_NEW.format(lock.DOMAIN, "mqtt"), async_discover
) )
await async_setup_entry_helper(hass, lock.DOMAIN, setup, PLATFORM_SCHEMA)
async def _async_setup_entity( async def _async_setup_entity(
hass, config, async_add_entities, config_entry=None, discovery_data=None hass, async_add_entities, config, config_entry=None, discovery_data=None
): ):
"""Set up the MQTT Lock platform.""" """Set up the MQTT Lock platform."""
async_add_entities([MqttLock(hass, config, config_entry, discovery_data)]) async_add_entities([MqttLock(hass, config, config_entry, discovery_data)])

View file

@ -30,6 +30,7 @@ from .const import (
from .debug_info import log_messages from .debug_info import log_messages
from .discovery import ( from .discovery import (
MQTT_DISCOVERY_DONE, MQTT_DISCOVERY_DONE,
MQTT_DISCOVERY_NEW,
MQTT_DISCOVERY_UPDATED, MQTT_DISCOVERY_UPDATED,
clear_discovery_hash, clear_discovery_hash,
set_discovery_hash, set_discovery_hash,
@ -130,6 +131,28 @@ MQTT_JSON_ATTRS_SCHEMA = vol.Schema(
) )
async def async_setup_entry_helper(hass, domain, async_setup, schema):
"""Set up entity, automation or tag creation dynamically through MQTT discovery."""
async def async_discover(discovery_payload):
"""Discover and add an MQTT entity, automation or tag."""
discovery_data = discovery_payload.discovery_data
try:
config = schema(discovery_payload)
await async_setup(config, discovery_data=discovery_data)
except Exception:
discovery_hash = discovery_data[ATTR_DISCOVERY_HASH]
clear_discovery_hash(hass, discovery_hash)
async_dispatcher_send(
hass, MQTT_DISCOVERY_DONE.format(discovery_hash), None
)
raise
async_dispatcher_connect(
hass, MQTT_DISCOVERY_NEW.format(domain, "mqtt"), async_discover
)
class MqttAttributes(Entity): class MqttAttributes(Entity):
"""Mixin used for platforms that support JSON attributes.""" """Mixin used for platforms that support JSON attributes."""

View file

@ -1,4 +1,5 @@
"""Configure number in a device through MQTT topic.""" """Configure number in a device through MQTT topic."""
import functools
import logging import logging
import voluptuous as vol import voluptuous as vol
@ -14,10 +15,6 @@ from homeassistant.const import (
) )
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers import config_validation as cv from homeassistant.helpers import config_validation as cv
from homeassistant.helpers.dispatcher import (
async_dispatcher_connect,
async_dispatcher_send,
)
from homeassistant.helpers.reload import async_setup_reload_service from homeassistant.helpers.reload import async_setup_reload_service
from homeassistant.helpers.restore_state import RestoreEntity from homeassistant.helpers.restore_state import RestoreEntity
from homeassistant.helpers.typing import ConfigType, HomeAssistantType from homeassistant.helpers.typing import ConfigType, HomeAssistantType
@ -31,9 +28,7 @@ from . import (
subscription, subscription,
) )
from .. import mqtt from .. import mqtt
from .const import ATTR_DISCOVERY_HASH
from .debug_info import log_messages from .debug_info import log_messages
from .discovery import MQTT_DISCOVERY_DONE, MQTT_DISCOVERY_NEW, clear_discovery_hash
from .mixins import ( from .mixins import (
MQTT_AVAILABILITY_SCHEMA, MQTT_AVAILABILITY_SCHEMA,
MQTT_ENTITY_DEVICE_INFO_SCHEMA, MQTT_ENTITY_DEVICE_INFO_SCHEMA,
@ -42,6 +37,7 @@ from .mixins import (
MqttAvailability, MqttAvailability,
MqttDiscoveryUpdate, MqttDiscoveryUpdate,
MqttEntityDeviceInfo, MqttEntityDeviceInfo,
async_setup_entry_helper,
) )
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -69,35 +65,20 @@ async def async_setup_platform(
): ):
"""Set up MQTT number through configuration.yaml.""" """Set up MQTT number through configuration.yaml."""
await async_setup_reload_service(hass, DOMAIN, PLATFORMS) await async_setup_reload_service(hass, DOMAIN, PLATFORMS)
await _async_setup_entity(config, async_add_entities) await _async_setup_entity(async_add_entities, config)
async def async_setup_entry(hass, config_entry, async_add_entities): async def async_setup_entry(hass, config_entry, async_add_entities):
"""Set up MQTT number dynamically through MQTT discovery.""" """Set up MQTT number dynamically through MQTT discovery."""
async def async_discover(discovery_payload): setup = functools.partial(
"""Discover and add a MQTT number.""" _async_setup_entity, async_add_entities, config_entry=config_entry
discovery_data = discovery_payload.discovery_data
try:
config = PLATFORM_SCHEMA(discovery_payload)
await _async_setup_entity(
config, async_add_entities, config_entry, discovery_data
)
except Exception:
discovery_hash = discovery_data[ATTR_DISCOVERY_HASH]
clear_discovery_hash(hass, discovery_hash)
async_dispatcher_send(
hass, MQTT_DISCOVERY_DONE.format(discovery_hash), None
)
raise
async_dispatcher_connect(
hass, MQTT_DISCOVERY_NEW.format(number.DOMAIN, "mqtt"), async_discover
) )
await async_setup_entry_helper(hass, number.DOMAIN, setup, PLATFORM_SCHEMA)
async def _async_setup_entity( async def _async_setup_entity(
config, async_add_entities, config_entry=None, discovery_data=None async_add_entities, config, config_entry=None, discovery_data=None
): ):
"""Set up the MQTT number.""" """Set up the MQTT number."""
async_add_entities([MqttNumber(config, config_entry, discovery_data)]) async_add_entities([MqttNumber(config, config_entry, discovery_data)])

View file

@ -1,4 +1,5 @@
"""Support for MQTT scenes.""" """Support for MQTT scenes."""
import functools
import logging import logging
import voluptuous as vol import voluptuous as vol
@ -7,18 +8,17 @@ from homeassistant.components import scene
from homeassistant.components.scene import Scene from homeassistant.components.scene import Scene
from homeassistant.const import CONF_ICON, CONF_NAME, CONF_PAYLOAD_ON, CONF_UNIQUE_ID from homeassistant.const import CONF_ICON, CONF_NAME, CONF_PAYLOAD_ON, CONF_UNIQUE_ID
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.dispatcher import (
async_dispatcher_connect,
async_dispatcher_send,
)
from homeassistant.helpers.reload import async_setup_reload_service from homeassistant.helpers.reload import async_setup_reload_service
from homeassistant.helpers.typing import ConfigType, HomeAssistantType from homeassistant.helpers.typing import ConfigType, HomeAssistantType
from . import CONF_COMMAND_TOPIC, CONF_QOS, CONF_RETAIN, DOMAIN, PLATFORMS from . import CONF_COMMAND_TOPIC, CONF_QOS, CONF_RETAIN, DOMAIN, PLATFORMS
from .. import mqtt from .. import mqtt
from .const import ATTR_DISCOVERY_HASH from .mixins import (
from .discovery import MQTT_DISCOVERY_DONE, MQTT_DISCOVERY_NEW, clear_discovery_hash MQTT_AVAILABILITY_SCHEMA,
from .mixins import MQTT_AVAILABILITY_SCHEMA, MqttAvailability, MqttDiscoveryUpdate MqttAvailability,
MqttDiscoveryUpdate,
async_setup_entry_helper,
)
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -42,35 +42,20 @@ async def async_setup_platform(
): ):
"""Set up MQTT scene through configuration.yaml.""" """Set up MQTT scene through configuration.yaml."""
await async_setup_reload_service(hass, DOMAIN, PLATFORMS) await async_setup_reload_service(hass, DOMAIN, PLATFORMS)
await _async_setup_entity(config, async_add_entities) await _async_setup_entity(async_add_entities, config)
async def async_setup_entry(hass, config_entry, async_add_entities): async def async_setup_entry(hass, config_entry, async_add_entities):
"""Set up MQTT scene dynamically through MQTT discovery.""" """Set up MQTT scene dynamically through MQTT discovery."""
async def async_discover(discovery_payload): setup = functools.partial(
"""Discover and add a MQTT scene.""" _async_setup_entity, async_add_entities, config_entry=config_entry
discovery_data = discovery_payload.discovery_data
try:
config = PLATFORM_SCHEMA(discovery_payload)
await _async_setup_entity(
config, async_add_entities, config_entry, discovery_data
)
except Exception:
discovery_hash = discovery_data[ATTR_DISCOVERY_HASH]
clear_discovery_hash(hass, discovery_hash)
async_dispatcher_send(
hass, MQTT_DISCOVERY_DONE.format(discovery_hash), None
)
raise
async_dispatcher_connect(
hass, MQTT_DISCOVERY_NEW.format(scene.DOMAIN, "mqtt"), async_discover
) )
await async_setup_entry_helper(hass, scene.DOMAIN, setup, PLATFORM_SCHEMA)
async def _async_setup_entity( async def _async_setup_entity(
config, async_add_entities, config_entry=None, discovery_data=None async_add_entities, config, config_entry=None, discovery_data=None
): ):
"""Set up the MQTT scene.""" """Set up the MQTT scene."""
async_add_entities([MqttScene(config, config_entry, discovery_data)]) async_add_entities([MqttScene(config, config_entry, discovery_data)])

View file

@ -1,5 +1,6 @@
"""Support for MQTT sensors.""" """Support for MQTT sensors."""
from datetime import timedelta from datetime import timedelta
import functools
import logging import logging
from typing import Optional from typing import Optional
@ -19,10 +20,6 @@ from homeassistant.const import (
) )
from homeassistant.core import callback from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.dispatcher import (
async_dispatcher_connect,
async_dispatcher_send,
)
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.helpers.event import async_track_point_in_utc_time from homeassistant.helpers.event import async_track_point_in_utc_time
from homeassistant.helpers.reload import async_setup_reload_service from homeassistant.helpers.reload import async_setup_reload_service
@ -31,9 +28,7 @@ from homeassistant.util import dt as dt_util
from . import CONF_QOS, CONF_STATE_TOPIC, DOMAIN, PLATFORMS, subscription from . import CONF_QOS, CONF_STATE_TOPIC, DOMAIN, PLATFORMS, subscription
from .. import mqtt from .. import mqtt
from .const import ATTR_DISCOVERY_HASH
from .debug_info import log_messages from .debug_info import log_messages
from .discovery import MQTT_DISCOVERY_DONE, MQTT_DISCOVERY_NEW, clear_discovery_hash
from .mixins import ( from .mixins import (
MQTT_AVAILABILITY_SCHEMA, MQTT_AVAILABILITY_SCHEMA,
MQTT_ENTITY_DEVICE_INFO_SCHEMA, MQTT_ENTITY_DEVICE_INFO_SCHEMA,
@ -42,6 +37,7 @@ from .mixins import (
MqttAvailability, MqttAvailability,
MqttDiscoveryUpdate, MqttDiscoveryUpdate,
MqttEntityDeviceInfo, MqttEntityDeviceInfo,
async_setup_entry_helper,
) )
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -73,35 +69,20 @@ async def async_setup_platform(
): ):
"""Set up MQTT sensors through configuration.yaml.""" """Set up MQTT sensors through configuration.yaml."""
await async_setup_reload_service(hass, DOMAIN, PLATFORMS) await async_setup_reload_service(hass, DOMAIN, PLATFORMS)
await _async_setup_entity(hass, config, async_add_entities) await _async_setup_entity(hass, async_add_entities, config)
async def async_setup_entry(hass, config_entry, async_add_entities): async def async_setup_entry(hass, config_entry, async_add_entities):
"""Set up MQTT sensors dynamically through MQTT discovery.""" """Set up MQTT sensors dynamically through MQTT discovery."""
async def async_discover_sensor(discovery_payload): setup = functools.partial(
"""Discover and add a discovered MQTT sensor.""" _async_setup_entity, hass, async_add_entities, config_entry=config_entry
discovery_data = discovery_payload.discovery_data
try:
config = PLATFORM_SCHEMA(discovery_payload)
await _async_setup_entity(
hass, config, async_add_entities, config_entry, discovery_data
)
except Exception:
discovery_hash = discovery_data[ATTR_DISCOVERY_HASH]
clear_discovery_hash(hass, discovery_hash)
async_dispatcher_send(
hass, MQTT_DISCOVERY_DONE.format(discovery_hash), None
)
raise
async_dispatcher_connect(
hass, MQTT_DISCOVERY_NEW.format(sensor.DOMAIN, "mqtt"), async_discover_sensor
) )
await async_setup_entry_helper(hass, sensor.DOMAIN, setup, PLATFORM_SCHEMA)
async def _async_setup_entity( async def _async_setup_entity(
hass, config: ConfigType, async_add_entities, config_entry=None, discovery_data=None hass, async_add_entities, config: ConfigType, config_entry=None, discovery_data=None
): ):
"""Set up MQTT sensor.""" """Set up MQTT sensor."""
async_add_entities([MqttSensor(hass, config, config_entry, discovery_data)]) async_add_entities([MqttSensor(hass, config, config_entry, discovery_data)])

View file

@ -1,4 +1,5 @@
"""Support for MQTT switches.""" """Support for MQTT switches."""
import functools
import logging import logging
import voluptuous as vol import voluptuous as vol
@ -18,10 +19,6 @@ from homeassistant.const import (
) )
from homeassistant.core import callback from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.dispatcher import (
async_dispatcher_connect,
async_dispatcher_send,
)
from homeassistant.helpers.reload import async_setup_reload_service from homeassistant.helpers.reload import async_setup_reload_service
from homeassistant.helpers.restore_state import RestoreEntity from homeassistant.helpers.restore_state import RestoreEntity
from homeassistant.helpers.typing import ConfigType, HomeAssistantType from homeassistant.helpers.typing import ConfigType, HomeAssistantType
@ -36,9 +33,7 @@ from . import (
subscription, subscription,
) )
from .. import mqtt from .. import mqtt
from .const import ATTR_DISCOVERY_HASH
from .debug_info import log_messages from .debug_info import log_messages
from .discovery import MQTT_DISCOVERY_DONE, MQTT_DISCOVERY_NEW, clear_discovery_hash
from .mixins import ( from .mixins import (
MQTT_AVAILABILITY_SCHEMA, MQTT_AVAILABILITY_SCHEMA,
MQTT_ENTITY_DEVICE_INFO_SCHEMA, MQTT_ENTITY_DEVICE_INFO_SCHEMA,
@ -47,6 +42,7 @@ from .mixins import (
MqttAvailability, MqttAvailability,
MqttDiscoveryUpdate, MqttDiscoveryUpdate,
MqttEntityDeviceInfo, MqttEntityDeviceInfo,
async_setup_entry_helper,
) )
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -82,35 +78,20 @@ async def async_setup_platform(
): ):
"""Set up MQTT switch through configuration.yaml.""" """Set up MQTT switch through configuration.yaml."""
await async_setup_reload_service(hass, DOMAIN, PLATFORMS) await async_setup_reload_service(hass, DOMAIN, PLATFORMS)
await _async_setup_entity(hass, config, async_add_entities) await _async_setup_entity(hass, async_add_entities, config)
async def async_setup_entry(hass, config_entry, async_add_entities): async def async_setup_entry(hass, config_entry, async_add_entities):
"""Set up MQTT switch dynamically through MQTT discovery.""" """Set up MQTT switch dynamically through MQTT discovery."""
async def async_discover(discovery_payload): setup = functools.partial(
"""Discover and add a MQTT switch.""" _async_setup_entity, hass, async_add_entities, config_entry=config_entry
discovery_data = discovery_payload.discovery_data
try:
config = PLATFORM_SCHEMA(discovery_payload)
await _async_setup_entity(
hass, config, async_add_entities, config_entry, discovery_data
)
except Exception:
discovery_hash = discovery_data[ATTR_DISCOVERY_HASH]
clear_discovery_hash(hass, discovery_hash)
async_dispatcher_send(
hass, MQTT_DISCOVERY_DONE.format(discovery_hash), None
)
raise
async_dispatcher_connect(
hass, MQTT_DISCOVERY_NEW.format(switch.DOMAIN, "mqtt"), async_discover
) )
await async_setup_entry_helper(hass, switch.DOMAIN, setup, PLATFORM_SCHEMA)
async def _async_setup_entity( async def _async_setup_entity(
hass, config, async_add_entities, config_entry=None, discovery_data=None hass, async_add_entities, config, config_entry=None, discovery_data=None
): ):
"""Set up the MQTT switch.""" """Set up the MQTT switch."""
async_add_entities([MqttSwitch(hass, config, config_entry, discovery_data)]) async_add_entities([MqttSwitch(hass, config, config_entry, discovery_data)])

View file

@ -1,4 +1,5 @@
"""Provides tag scanning for MQTT.""" """Provides tag scanning for MQTT."""
import functools
import logging import logging
import voluptuous as vol import voluptuous as vol
@ -14,16 +15,12 @@ from homeassistant.helpers.dispatcher import (
from . import CONF_QOS, CONF_TOPIC, DOMAIN, subscription from . import CONF_QOS, CONF_TOPIC, DOMAIN, subscription
from .. import mqtt from .. import mqtt
from .const import ATTR_DISCOVERY_HASH, ATTR_DISCOVERY_TOPIC from .const import ATTR_DISCOVERY_HASH, ATTR_DISCOVERY_TOPIC
from .discovery import ( from .discovery import MQTT_DISCOVERY_DONE, MQTT_DISCOVERY_UPDATED, clear_discovery_hash
MQTT_DISCOVERY_DONE,
MQTT_DISCOVERY_NEW,
MQTT_DISCOVERY_UPDATED,
clear_discovery_hash,
)
from .mixins import ( from .mixins import (
CONF_CONNECTIONS, CONF_CONNECTIONS,
CONF_IDENTIFIERS, CONF_IDENTIFIERS,
MQTT_ENTITY_DEVICE_INFO_SCHEMA, MQTT_ENTITY_DEVICE_INFO_SCHEMA,
async_setup_entry_helper,
cleanup_device_registry, cleanup_device_registry,
device_info_from_config, device_info_from_config,
validate_device_has_at_least_one_identifier, validate_device_has_at_least_one_identifier,
@ -49,23 +46,8 @@ PLATFORM_SCHEMA = mqtt.MQTT_BASE_PLATFORM_SCHEMA.extend(
async def async_setup_entry(hass, config_entry): async def async_setup_entry(hass, config_entry):
"""Set up MQTT tag scan dynamically through MQTT discovery.""" """Set up MQTT tag scan dynamically through MQTT discovery."""
async def async_discover(discovery_payload): setup = functools.partial(async_setup_tag, hass, config_entry=config_entry)
"""Discover and add MQTT tag scan.""" await async_setup_entry_helper(hass, "tag", setup, PLATFORM_SCHEMA)
discovery_data = discovery_payload.discovery_data
try:
config = PLATFORM_SCHEMA(discovery_payload)
await async_setup_tag(hass, config, config_entry, discovery_data)
except Exception:
discovery_hash = discovery_data[ATTR_DISCOVERY_HASH]
clear_discovery_hash(hass, discovery_hash)
async_dispatcher_send(
hass, MQTT_DISCOVERY_DONE.format(discovery_hash), None
)
raise
async_dispatcher_connect(
hass, MQTT_DISCOVERY_NEW.format("tag", "mqtt"), async_discover
)
async def async_setup_tag(hass, config, config_entry, discovery_data): async def async_setup_tag(hass, config, config_entry, discovery_data):

View file

@ -1,18 +1,14 @@
"""Support for MQTT vacuums.""" """Support for MQTT vacuums."""
import functools
import logging import logging
import voluptuous as vol import voluptuous as vol
from homeassistant.components.vacuum import DOMAIN from homeassistant.components.vacuum import DOMAIN
from homeassistant.helpers.dispatcher import (
async_dispatcher_connect,
async_dispatcher_send,
)
from homeassistant.helpers.reload import async_setup_reload_service from homeassistant.helpers.reload import async_setup_reload_service
from .. import DOMAIN as MQTT_DOMAIN, PLATFORMS from .. import DOMAIN as MQTT_DOMAIN, PLATFORMS
from ..const import ATTR_DISCOVERY_HASH from ..mixins import async_setup_entry_helper
from ..discovery import MQTT_DISCOVERY_DONE, MQTT_DISCOVERY_NEW, clear_discovery_hash
from .schema import CONF_SCHEMA, LEGACY, MQTT_VACUUM_SCHEMA, STATE from .schema import CONF_SCHEMA, LEGACY, MQTT_VACUUM_SCHEMA, STATE
from .schema_legacy import PLATFORM_SCHEMA_LEGACY, async_setup_entity_legacy from .schema_legacy import PLATFORM_SCHEMA_LEGACY, async_setup_entity_legacy
from .schema_state import PLATFORM_SCHEMA_STATE, async_setup_entity_state from .schema_state import PLATFORM_SCHEMA_STATE, async_setup_entity_state
@ -34,35 +30,20 @@ PLATFORM_SCHEMA = vol.All(
async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): async def async_setup_platform(hass, config, async_add_entities, discovery_info=None):
"""Set up MQTT vacuum through configuration.yaml.""" """Set up MQTT vacuum through configuration.yaml."""
await async_setup_reload_service(hass, MQTT_DOMAIN, PLATFORMS) await async_setup_reload_service(hass, MQTT_DOMAIN, PLATFORMS)
await _async_setup_entity(config, async_add_entities) await _async_setup_entity(async_add_entities, config)
async def async_setup_entry(hass, config_entry, async_add_entities): async def async_setup_entry(hass, config_entry, async_add_entities):
"""Set up MQTT vacuum dynamically through MQTT discovery.""" """Set up MQTT vacuum dynamically through MQTT discovery."""
async def async_discover(discovery_payload): setup = functools.partial(
"""Discover and add a MQTT vacuum.""" _async_setup_entity, async_add_entities, config_entry=config_entry
discovery_data = discovery_payload.discovery_data
try:
config = PLATFORM_SCHEMA(discovery_payload)
await _async_setup_entity(
config, async_add_entities, config_entry, discovery_data
)
except Exception:
discovery_hash = discovery_data[ATTR_DISCOVERY_HASH]
clear_discovery_hash(hass, discovery_hash)
async_dispatcher_send(
hass, MQTT_DISCOVERY_DONE.format(discovery_hash), None
)
raise
async_dispatcher_connect(
hass, MQTT_DISCOVERY_NEW.format(DOMAIN, "mqtt"), async_discover
) )
await async_setup_entry_helper(hass, DOMAIN, setup, PLATFORM_SCHEMA)
async def _async_setup_entity( async def _async_setup_entity(
config, async_add_entities, config_entry=None, discovery_data=None async_add_entities, config, config_entry=None, discovery_data=None
): ):
"""Set up the MQTT vacuum.""" """Set up the MQTT vacuum."""
setup_entity = {LEGACY: async_setup_entity_legacy, STATE: async_setup_entity_state} setup_entity = {LEGACY: async_setup_entity_legacy, STATE: async_setup_entity_state}