diff --git a/homeassistant/components/xiaomi_miio/vacuum.py b/homeassistant/components/xiaomi_miio/vacuum.py index 416918e6f4360..9f88a9224664f 100644 --- a/homeassistant/components/xiaomi_miio/vacuum.py +++ b/homeassistant/components/xiaomi_miio/vacuum.py @@ -2,6 +2,7 @@ import asyncio from functools import partial import logging +from typing import Optional from miio import DeviceException, Vacuum # pylint: disable=import-error import voluptuous as vol @@ -35,6 +36,7 @@ STATE_OFF, STATE_ON, ) +from homeassistant.exceptions import PlatformNotReady import homeassistant.helpers.config_validation as cv from .const import ( @@ -189,7 +191,20 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= _LOGGER.info("Initializing with host %s (token %s...)", host, token[:5]) vacuum = Vacuum(host, token) - mirobo = MiroboVacuum(name, vacuum) + try: + device_info = await hass.async_add_executor_job(vacuum.info) + except DeviceException: + raise PlatformNotReady + + unique_id = device_info.mac_address + _LOGGER.debug( + "%s %s %s detected", + device_info.model, + device_info.firmware_version, + device_info.hardware_version, + ) + + mirobo = MiroboVacuum(name, vacuum, unique_id) hass.data[DATA_KEY][host] = mirobo async_add_entities([mirobo], update_before_add=True) @@ -232,10 +247,11 @@ async def async_service_handler(service): class MiroboVacuum(StateVacuumDevice): """Representation of a Xiaomi Vacuum cleaner robot.""" - def __init__(self, name, vacuum): + def __init__(self, name, vacuum, unique_id): """Initialize the Xiaomi vacuum cleaner robot handler.""" self._name = name self._vacuum = vacuum + self._unique_id = unique_id self.vacuum_state = None self._available = False @@ -247,6 +263,11 @@ def __init__(self, name, vacuum): self._fan_speeds = None self._fan_speeds_reverse = None + @property + def unique_id(self) -> Optional[str]: + """Return a unique ID.""" + return self._unique_id + @property def name(self): """Return the name of the device."""