Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 23 additions & 2 deletions homeassistant/components/xiaomi_miio/vacuum.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -35,6 +36,7 @@
STATE_OFF,
STATE_ON,
)
from homeassistant.exceptions import PlatformNotReady
import homeassistant.helpers.config_validation as cv

from .const import (
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand All @@ -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."""
Expand Down