mirror of
https://github.com/home-assistant/core.git
synced 2025-07-17 18:27:09 +00:00
Move imports in xiaomi_miio (#27773)
* move imports in xiaomi_miio * reorder imports with isort * fix pylint error * Rename imports
This commit is contained in:
parent
f2c56cff43
commit
f8d3ea20b6
@ -1,6 +1,7 @@
|
|||||||
"""Support for Xiaomi Mi WiFi Repeater 2."""
|
"""Support for Xiaomi Mi WiFi Repeater 2."""
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
from miio import DeviceException, WifiRepeater # pylint: disable=import-error
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.device_tracker import (
|
from homeassistant.components.device_tracker import (
|
||||||
@ -23,8 +24,6 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
|
|||||||
|
|
||||||
def get_scanner(hass, config):
|
def get_scanner(hass, config):
|
||||||
"""Return a Xiaomi MiIO device scanner."""
|
"""Return a Xiaomi MiIO device scanner."""
|
||||||
from miio import WifiRepeater, DeviceException
|
|
||||||
|
|
||||||
scanner = None
|
scanner = None
|
||||||
host = config[DOMAIN][CONF_HOST]
|
host = config[DOMAIN][CONF_HOST]
|
||||||
token = config[DOMAIN][CONF_TOKEN]
|
token = config[DOMAIN][CONF_TOKEN]
|
||||||
@ -56,8 +55,6 @@ class XiaomiMiioDeviceScanner(DeviceScanner):
|
|||||||
|
|
||||||
async def async_scan_devices(self):
|
async def async_scan_devices(self):
|
||||||
"""Scan for devices and return a list containing found device IDs."""
|
"""Scan for devices and return a list containing found device IDs."""
|
||||||
from miio import DeviceException
|
|
||||||
|
|
||||||
devices = []
|
devices = []
|
||||||
try:
|
try:
|
||||||
station_info = await self.hass.async_add_executor_job(self.device.status)
|
station_info = await self.hass.async_add_executor_job(self.device.status)
|
||||||
|
@ -5,19 +5,39 @@ from functools import partial
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
from miio import ( # pylint: disable=import-error
|
||||||
|
AirFresh,
|
||||||
|
AirHumidifier,
|
||||||
|
AirPurifier,
|
||||||
|
Device,
|
||||||
|
DeviceException,
|
||||||
|
)
|
||||||
|
|
||||||
|
from miio.airfresh import ( # pylint: disable=import-error; pylint: disable=import-error
|
||||||
|
LedBrightness as AirfreshLedBrightness,
|
||||||
|
OperationMode as AirfreshOperationMode,
|
||||||
|
)
|
||||||
|
from miio.airhumidifier import ( # pylint: disable=import-error; pylint: disable=import-error
|
||||||
|
LedBrightness as AirhumidifierLedBrightness,
|
||||||
|
OperationMode as AirhumidifierOperationMode,
|
||||||
|
)
|
||||||
|
from miio.airpurifier import ( # pylint: disable=import-error; pylint: disable=import-error
|
||||||
|
LedBrightness as AirpurifierLedBrightness,
|
||||||
|
OperationMode as AirpurifierOperationMode,
|
||||||
|
)
|
||||||
|
|
||||||
from homeassistant.components.fan import (
|
from homeassistant.components.fan import (
|
||||||
FanEntity,
|
DOMAIN,
|
||||||
PLATFORM_SCHEMA,
|
PLATFORM_SCHEMA,
|
||||||
SUPPORT_SET_SPEED,
|
SUPPORT_SET_SPEED,
|
||||||
DOMAIN,
|
FanEntity,
|
||||||
)
|
)
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
ATTR_MODE,
|
|
||||||
CONF_NAME,
|
|
||||||
CONF_HOST,
|
|
||||||
CONF_TOKEN,
|
|
||||||
ATTR_ENTITY_ID,
|
ATTR_ENTITY_ID,
|
||||||
|
ATTR_MODE,
|
||||||
|
CONF_HOST,
|
||||||
|
CONF_NAME,
|
||||||
|
CONF_TOKEN,
|
||||||
)
|
)
|
||||||
from homeassistant.exceptions import PlatformNotReady
|
from homeassistant.exceptions import PlatformNotReady
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
@ -429,8 +449,6 @@ SERVICE_TO_METHOD = {
|
|||||||
|
|
||||||
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 the miio fan device from config."""
|
"""Set up the miio fan device from config."""
|
||||||
from miio import Device, DeviceException
|
|
||||||
|
|
||||||
if DATA_KEY not in hass.data:
|
if DATA_KEY not in hass.data:
|
||||||
hass.data[DATA_KEY] = {}
|
hass.data[DATA_KEY] = {}
|
||||||
|
|
||||||
@ -458,18 +476,12 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
|
|||||||
raise PlatformNotReady
|
raise PlatformNotReady
|
||||||
|
|
||||||
if model.startswith("zhimi.airpurifier."):
|
if model.startswith("zhimi.airpurifier."):
|
||||||
from miio import AirPurifier
|
|
||||||
|
|
||||||
air_purifier = AirPurifier(host, token)
|
air_purifier = AirPurifier(host, token)
|
||||||
device = XiaomiAirPurifier(name, air_purifier, model, unique_id)
|
device = XiaomiAirPurifier(name, air_purifier, model, unique_id)
|
||||||
elif model.startswith("zhimi.humidifier."):
|
elif model.startswith("zhimi.humidifier."):
|
||||||
from miio import AirHumidifier
|
|
||||||
|
|
||||||
air_humidifier = AirHumidifier(host, token, model=model)
|
air_humidifier = AirHumidifier(host, token, model=model)
|
||||||
device = XiaomiAirHumidifier(name, air_humidifier, model, unique_id)
|
device = XiaomiAirHumidifier(name, air_humidifier, model, unique_id)
|
||||||
elif model.startswith("zhimi.airfresh."):
|
elif model.startswith("zhimi.airfresh."):
|
||||||
from miio import AirFresh
|
|
||||||
|
|
||||||
air_fresh = AirFresh(host, token)
|
air_fresh = AirFresh(host, token)
|
||||||
device = XiaomiAirFresh(name, air_fresh, model, unique_id)
|
device = XiaomiAirFresh(name, air_fresh, model, unique_id)
|
||||||
else:
|
else:
|
||||||
@ -580,8 +592,6 @@ class XiaomiGenericDevice(FanEntity):
|
|||||||
|
|
||||||
async def _try_command(self, mask_error, func, *args, **kwargs):
|
async def _try_command(self, mask_error, func, *args, **kwargs):
|
||||||
"""Call a miio device command handling error messages."""
|
"""Call a miio device command handling error messages."""
|
||||||
from miio import DeviceException
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
result = await self.hass.async_add_executor_job(
|
result = await self.hass.async_add_executor_job(
|
||||||
partial(func, *args, **kwargs)
|
partial(func, *args, **kwargs)
|
||||||
@ -698,8 +708,6 @@ class XiaomiAirPurifier(XiaomiGenericDevice):
|
|||||||
|
|
||||||
async def async_update(self):
|
async def async_update(self):
|
||||||
"""Fetch state from the device."""
|
"""Fetch state from the device."""
|
||||||
from miio import DeviceException
|
|
||||||
|
|
||||||
# On state change the device doesn't provide the new state immediately.
|
# On state change the device doesn't provide the new state immediately.
|
||||||
if self._skip_update:
|
if self._skip_update:
|
||||||
self._skip_update = False
|
self._skip_update = False
|
||||||
@ -731,9 +739,7 @@ class XiaomiAirPurifier(XiaomiGenericDevice):
|
|||||||
def speed(self):
|
def speed(self):
|
||||||
"""Return the current speed."""
|
"""Return the current speed."""
|
||||||
if self._state:
|
if self._state:
|
||||||
from miio.airpurifier import OperationMode
|
return AirpurifierOperationMode(self._state_attrs[ATTR_MODE]).name
|
||||||
|
|
||||||
return OperationMode(self._state_attrs[ATTR_MODE]).name
|
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -742,14 +748,12 @@ class XiaomiAirPurifier(XiaomiGenericDevice):
|
|||||||
if self.supported_features & SUPPORT_SET_SPEED == 0:
|
if self.supported_features & SUPPORT_SET_SPEED == 0:
|
||||||
return
|
return
|
||||||
|
|
||||||
from miio.airpurifier import OperationMode
|
|
||||||
|
|
||||||
_LOGGER.debug("Setting the operation mode to: %s", speed)
|
_LOGGER.debug("Setting the operation mode to: %s", speed)
|
||||||
|
|
||||||
await self._try_command(
|
await self._try_command(
|
||||||
"Setting operation mode of the miio device failed.",
|
"Setting operation mode of the miio device failed.",
|
||||||
self._device.set_mode,
|
self._device.set_mode,
|
||||||
OperationMode[speed.title()],
|
AirpurifierOperationMode[speed.title()],
|
||||||
)
|
)
|
||||||
|
|
||||||
async def async_set_led_on(self):
|
async def async_set_led_on(self):
|
||||||
@ -777,12 +781,10 @@ class XiaomiAirPurifier(XiaomiGenericDevice):
|
|||||||
if self._device_features & FEATURE_SET_LED_BRIGHTNESS == 0:
|
if self._device_features & FEATURE_SET_LED_BRIGHTNESS == 0:
|
||||||
return
|
return
|
||||||
|
|
||||||
from miio.airpurifier import LedBrightness
|
|
||||||
|
|
||||||
await self._try_command(
|
await self._try_command(
|
||||||
"Setting the led brightness of the miio device failed.",
|
"Setting the led brightness of the miio device failed.",
|
||||||
self._device.set_led_brightness,
|
self._device.set_led_brightness,
|
||||||
LedBrightness(brightness),
|
AirpurifierLedBrightness(brightness),
|
||||||
)
|
)
|
||||||
|
|
||||||
async def async_set_favorite_level(self, level: int = 1):
|
async def async_set_favorite_level(self, level: int = 1):
|
||||||
@ -878,21 +880,23 @@ class XiaomiAirHumidifier(XiaomiGenericDevice):
|
|||||||
|
|
||||||
def __init__(self, name, device, model, unique_id):
|
def __init__(self, name, device, model, unique_id):
|
||||||
"""Initialize the plug switch."""
|
"""Initialize the plug switch."""
|
||||||
from miio.airhumidifier import OperationMode
|
|
||||||
|
|
||||||
super().__init__(name, device, model, unique_id)
|
super().__init__(name, device, model, unique_id)
|
||||||
|
|
||||||
if self._model in [MODEL_AIRHUMIDIFIER_CA1, MODEL_AIRHUMIDIFIER_CB1]:
|
if self._model in [MODEL_AIRHUMIDIFIER_CA1, MODEL_AIRHUMIDIFIER_CB1]:
|
||||||
self._device_features = FEATURE_FLAGS_AIRHUMIDIFIER_CA_AND_CB
|
self._device_features = FEATURE_FLAGS_AIRHUMIDIFIER_CA_AND_CB
|
||||||
self._available_attributes = AVAILABLE_ATTRIBUTES_AIRHUMIDIFIER_CA_AND_CB
|
self._available_attributes = AVAILABLE_ATTRIBUTES_AIRHUMIDIFIER_CA_AND_CB
|
||||||
self._speed_list = [
|
self._speed_list = [
|
||||||
mode.name for mode in OperationMode if mode is not OperationMode.Strong
|
mode.name
|
||||||
|
for mode in AirhumidifierOperationMode
|
||||||
|
if mode is not AirhumidifierOperationMode.Strong
|
||||||
]
|
]
|
||||||
else:
|
else:
|
||||||
self._device_features = FEATURE_FLAGS_AIRHUMIDIFIER
|
self._device_features = FEATURE_FLAGS_AIRHUMIDIFIER
|
||||||
self._available_attributes = AVAILABLE_ATTRIBUTES_AIRHUMIDIFIER
|
self._available_attributes = AVAILABLE_ATTRIBUTES_AIRHUMIDIFIER
|
||||||
self._speed_list = [
|
self._speed_list = [
|
||||||
mode.name for mode in OperationMode if mode is not OperationMode.Auto
|
mode.name
|
||||||
|
for mode in AirhumidifierOperationMode
|
||||||
|
if mode is not AirhumidifierOperationMode.Auto
|
||||||
]
|
]
|
||||||
|
|
||||||
self._state_attrs.update(
|
self._state_attrs.update(
|
||||||
@ -901,8 +905,6 @@ class XiaomiAirHumidifier(XiaomiGenericDevice):
|
|||||||
|
|
||||||
async def async_update(self):
|
async def async_update(self):
|
||||||
"""Fetch state from the device."""
|
"""Fetch state from the device."""
|
||||||
from miio import DeviceException
|
|
||||||
|
|
||||||
# On state change the device doesn't provide the new state immediately.
|
# On state change the device doesn't provide the new state immediately.
|
||||||
if self._skip_update:
|
if self._skip_update:
|
||||||
self._skip_update = False
|
self._skip_update = False
|
||||||
@ -934,9 +936,7 @@ class XiaomiAirHumidifier(XiaomiGenericDevice):
|
|||||||
def speed(self):
|
def speed(self):
|
||||||
"""Return the current speed."""
|
"""Return the current speed."""
|
||||||
if self._state:
|
if self._state:
|
||||||
from miio.airhumidifier import OperationMode
|
return AirhumidifierOperationMode(self._state_attrs[ATTR_MODE]).name
|
||||||
|
|
||||||
return OperationMode(self._state_attrs[ATTR_MODE]).name
|
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -945,14 +945,12 @@ class XiaomiAirHumidifier(XiaomiGenericDevice):
|
|||||||
if self.supported_features & SUPPORT_SET_SPEED == 0:
|
if self.supported_features & SUPPORT_SET_SPEED == 0:
|
||||||
return
|
return
|
||||||
|
|
||||||
from miio.airhumidifier import OperationMode
|
|
||||||
|
|
||||||
_LOGGER.debug("Setting the operation mode to: %s", speed)
|
_LOGGER.debug("Setting the operation mode to: %s", speed)
|
||||||
|
|
||||||
await self._try_command(
|
await self._try_command(
|
||||||
"Setting operation mode of the miio device failed.",
|
"Setting operation mode of the miio device failed.",
|
||||||
self._device.set_mode,
|
self._device.set_mode,
|
||||||
OperationMode[speed.title()],
|
AirhumidifierOperationMode[speed.title()],
|
||||||
)
|
)
|
||||||
|
|
||||||
async def async_set_led_brightness(self, brightness: int = 2):
|
async def async_set_led_brightness(self, brightness: int = 2):
|
||||||
@ -960,12 +958,10 @@ class XiaomiAirHumidifier(XiaomiGenericDevice):
|
|||||||
if self._device_features & FEATURE_SET_LED_BRIGHTNESS == 0:
|
if self._device_features & FEATURE_SET_LED_BRIGHTNESS == 0:
|
||||||
return
|
return
|
||||||
|
|
||||||
from miio.airhumidifier import LedBrightness
|
|
||||||
|
|
||||||
await self._try_command(
|
await self._try_command(
|
||||||
"Setting the led brightness of the miio device failed.",
|
"Setting the led brightness of the miio device failed.",
|
||||||
self._device.set_led_brightness,
|
self._device.set_led_brightness,
|
||||||
LedBrightness(brightness),
|
AirhumidifierLedBrightness(brightness),
|
||||||
)
|
)
|
||||||
|
|
||||||
async def async_set_target_humidity(self, humidity: int = 40):
|
async def async_set_target_humidity(self, humidity: int = 40):
|
||||||
@ -1018,8 +1014,6 @@ class XiaomiAirFresh(XiaomiGenericDevice):
|
|||||||
|
|
||||||
async def async_update(self):
|
async def async_update(self):
|
||||||
"""Fetch state from the device."""
|
"""Fetch state from the device."""
|
||||||
from miio import DeviceException
|
|
||||||
|
|
||||||
# On state change the device doesn't provide the new state immediately.
|
# On state change the device doesn't provide the new state immediately.
|
||||||
if self._skip_update:
|
if self._skip_update:
|
||||||
self._skip_update = False
|
self._skip_update = False
|
||||||
@ -1051,9 +1045,7 @@ class XiaomiAirFresh(XiaomiGenericDevice):
|
|||||||
def speed(self):
|
def speed(self):
|
||||||
"""Return the current speed."""
|
"""Return the current speed."""
|
||||||
if self._state:
|
if self._state:
|
||||||
from miio.airfresh import OperationMode
|
return AirfreshOperationMode(self._state_attrs[ATTR_MODE]).name
|
||||||
|
|
||||||
return OperationMode(self._state_attrs[ATTR_MODE]).name
|
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -1062,14 +1054,12 @@ class XiaomiAirFresh(XiaomiGenericDevice):
|
|||||||
if self.supported_features & SUPPORT_SET_SPEED == 0:
|
if self.supported_features & SUPPORT_SET_SPEED == 0:
|
||||||
return
|
return
|
||||||
|
|
||||||
from miio.airfresh import OperationMode
|
|
||||||
|
|
||||||
_LOGGER.debug("Setting the operation mode to: %s", speed)
|
_LOGGER.debug("Setting the operation mode to: %s", speed)
|
||||||
|
|
||||||
await self._try_command(
|
await self._try_command(
|
||||||
"Setting operation mode of the miio device failed.",
|
"Setting operation mode of the miio device failed.",
|
||||||
self._device.set_mode,
|
self._device.set_mode,
|
||||||
OperationMode[speed.title()],
|
AirfreshOperationMode[speed.title()],
|
||||||
)
|
)
|
||||||
|
|
||||||
async def async_set_led_on(self):
|
async def async_set_led_on(self):
|
||||||
@ -1097,12 +1087,10 @@ class XiaomiAirFresh(XiaomiGenericDevice):
|
|||||||
if self._device_features & FEATURE_SET_LED_BRIGHTNESS == 0:
|
if self._device_features & FEATURE_SET_LED_BRIGHTNESS == 0:
|
||||||
return
|
return
|
||||||
|
|
||||||
from miio.airfresh import LedBrightness
|
|
||||||
|
|
||||||
await self._try_command(
|
await self._try_command(
|
||||||
"Setting the led brightness of the miio device failed.",
|
"Setting the led brightness of the miio device failed.",
|
||||||
self._device.set_led_brightness,
|
self._device.set_led_brightness,
|
||||||
LedBrightness(brightness),
|
AirfreshLedBrightness(brightness),
|
||||||
)
|
)
|
||||||
|
|
||||||
async def async_set_extra_features(self, features: int = 1):
|
async def async_set_extra_features(self, features: int = 1):
|
||||||
|
@ -6,13 +6,21 @@ from functools import partial
|
|||||||
import logging
|
import logging
|
||||||
from math import ceil
|
from math import ceil
|
||||||
|
|
||||||
|
from miio import ( # pylint: disable=import-error
|
||||||
|
Ceil,
|
||||||
|
Device,
|
||||||
|
DeviceException,
|
||||||
|
PhilipsBulb,
|
||||||
|
PhilipsEyecare,
|
||||||
|
PhilipsMoonlight,
|
||||||
|
)
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.light import (
|
from homeassistant.components.light import (
|
||||||
ATTR_BRIGHTNESS,
|
ATTR_BRIGHTNESS,
|
||||||
ATTR_HS_COLOR,
|
|
||||||
ATTR_COLOR_TEMP,
|
ATTR_COLOR_TEMP,
|
||||||
ATTR_ENTITY_ID,
|
ATTR_ENTITY_ID,
|
||||||
|
ATTR_HS_COLOR,
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
PLATFORM_SCHEMA,
|
PLATFORM_SCHEMA,
|
||||||
SUPPORT_BRIGHTNESS,
|
SUPPORT_BRIGHTNESS,
|
||||||
@ -116,8 +124,6 @@ SERVICE_TO_METHOD = {
|
|||||||
|
|
||||||
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 the light from config."""
|
"""Set up the light from config."""
|
||||||
from miio import Device, DeviceException
|
|
||||||
|
|
||||||
if DATA_KEY not in hass.data:
|
if DATA_KEY not in hass.data:
|
||||||
hass.data[DATA_KEY] = {}
|
hass.data[DATA_KEY] = {}
|
||||||
|
|
||||||
@ -147,8 +153,6 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
|
|||||||
raise PlatformNotReady
|
raise PlatformNotReady
|
||||||
|
|
||||||
if model == "philips.light.sread1":
|
if model == "philips.light.sread1":
|
||||||
from miio import PhilipsEyecare
|
|
||||||
|
|
||||||
light = PhilipsEyecare(host, token)
|
light = PhilipsEyecare(host, token)
|
||||||
primary_device = XiaomiPhilipsEyecareLamp(name, light, model, unique_id)
|
primary_device = XiaomiPhilipsEyecareLamp(name, light, model, unique_id)
|
||||||
devices.append(primary_device)
|
devices.append(primary_device)
|
||||||
@ -161,15 +165,11 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
|
|||||||
# The ambient light doesn't expose additional services.
|
# The ambient light doesn't expose additional services.
|
||||||
# A hass.data[DATA_KEY] entry isn't needed.
|
# A hass.data[DATA_KEY] entry isn't needed.
|
||||||
elif model in ["philips.light.ceiling", "philips.light.zyceiling"]:
|
elif model in ["philips.light.ceiling", "philips.light.zyceiling"]:
|
||||||
from miio import Ceil
|
|
||||||
|
|
||||||
light = Ceil(host, token)
|
light = Ceil(host, token)
|
||||||
device = XiaomiPhilipsCeilingLamp(name, light, model, unique_id)
|
device = XiaomiPhilipsCeilingLamp(name, light, model, unique_id)
|
||||||
devices.append(device)
|
devices.append(device)
|
||||||
hass.data[DATA_KEY][host] = device
|
hass.data[DATA_KEY][host] = device
|
||||||
elif model == "philips.light.moonlight":
|
elif model == "philips.light.moonlight":
|
||||||
from miio import PhilipsMoonlight
|
|
||||||
|
|
||||||
light = PhilipsMoonlight(host, token)
|
light = PhilipsMoonlight(host, token)
|
||||||
device = XiaomiPhilipsMoonlightLamp(name, light, model, unique_id)
|
device = XiaomiPhilipsMoonlightLamp(name, light, model, unique_id)
|
||||||
devices.append(device)
|
devices.append(device)
|
||||||
@ -180,15 +180,11 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
|
|||||||
"philips.light.candle2",
|
"philips.light.candle2",
|
||||||
"philips.light.downlight",
|
"philips.light.downlight",
|
||||||
]:
|
]:
|
||||||
from miio import PhilipsBulb
|
|
||||||
|
|
||||||
light = PhilipsBulb(host, token)
|
light = PhilipsBulb(host, token)
|
||||||
device = XiaomiPhilipsBulb(name, light, model, unique_id)
|
device = XiaomiPhilipsBulb(name, light, model, unique_id)
|
||||||
devices.append(device)
|
devices.append(device)
|
||||||
hass.data[DATA_KEY][host] = device
|
hass.data[DATA_KEY][host] = device
|
||||||
elif model == "philips.light.mono1":
|
elif model == "philips.light.mono1":
|
||||||
from miio import PhilipsBulb
|
|
||||||
|
|
||||||
light = PhilipsBulb(host, token)
|
light = PhilipsBulb(host, token)
|
||||||
device = XiaomiPhilipsGenericLight(name, light, model, unique_id)
|
device = XiaomiPhilipsGenericLight(name, light, model, unique_id)
|
||||||
devices.append(device)
|
devices.append(device)
|
||||||
@ -297,8 +293,6 @@ class XiaomiPhilipsAbstractLight(Light):
|
|||||||
|
|
||||||
async def _try_command(self, mask_error, func, *args, **kwargs):
|
async def _try_command(self, mask_error, func, *args, **kwargs):
|
||||||
"""Call a light command handling error messages."""
|
"""Call a light command handling error messages."""
|
||||||
from miio import DeviceException
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
result = await self.hass.async_add_executor_job(
|
result = await self.hass.async_add_executor_job(
|
||||||
partial(func, *args, **kwargs)
|
partial(func, *args, **kwargs)
|
||||||
@ -337,8 +331,6 @@ class XiaomiPhilipsAbstractLight(Light):
|
|||||||
|
|
||||||
async def async_update(self):
|
async def async_update(self):
|
||||||
"""Fetch state from the device."""
|
"""Fetch state from the device."""
|
||||||
from miio import DeviceException
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
state = await self.hass.async_add_executor_job(self._light.status)
|
state = await self.hass.async_add_executor_job(self._light.status)
|
||||||
except DeviceException as ex:
|
except DeviceException as ex:
|
||||||
@ -363,8 +355,6 @@ class XiaomiPhilipsGenericLight(XiaomiPhilipsAbstractLight):
|
|||||||
|
|
||||||
async def async_update(self):
|
async def async_update(self):
|
||||||
"""Fetch state from the device."""
|
"""Fetch state from the device."""
|
||||||
from miio import DeviceException
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
state = await self.hass.async_add_executor_job(self._light.status)
|
state = await self.hass.async_add_executor_job(self._light.status)
|
||||||
except DeviceException as ex:
|
except DeviceException as ex:
|
||||||
@ -521,8 +511,6 @@ class XiaomiPhilipsBulb(XiaomiPhilipsGenericLight):
|
|||||||
|
|
||||||
async def async_update(self):
|
async def async_update(self):
|
||||||
"""Fetch state from the device."""
|
"""Fetch state from the device."""
|
||||||
from miio import DeviceException
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
state = await self.hass.async_add_executor_job(self._light.status)
|
state = await self.hass.async_add_executor_job(self._light.status)
|
||||||
except DeviceException as ex:
|
except DeviceException as ex:
|
||||||
@ -580,8 +568,6 @@ class XiaomiPhilipsCeilingLamp(XiaomiPhilipsBulb):
|
|||||||
|
|
||||||
async def async_update(self):
|
async def async_update(self):
|
||||||
"""Fetch state from the device."""
|
"""Fetch state from the device."""
|
||||||
from miio import DeviceException
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
state = await self.hass.async_add_executor_job(self._light.status)
|
state = await self.hass.async_add_executor_job(self._light.status)
|
||||||
except DeviceException as ex:
|
except DeviceException as ex:
|
||||||
@ -626,8 +612,6 @@ class XiaomiPhilipsEyecareLamp(XiaomiPhilipsGenericLight):
|
|||||||
|
|
||||||
async def async_update(self):
|
async def async_update(self):
|
||||||
"""Fetch state from the device."""
|
"""Fetch state from the device."""
|
||||||
from miio import DeviceException
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
state = await self.hass.async_add_executor_job(self._light.status)
|
state = await self.hass.async_add_executor_job(self._light.status)
|
||||||
except DeviceException as ex:
|
except DeviceException as ex:
|
||||||
@ -769,8 +753,6 @@ class XiaomiPhilipsEyecareLampAmbientLight(XiaomiPhilipsAbstractLight):
|
|||||||
|
|
||||||
async def async_update(self):
|
async def async_update(self):
|
||||||
"""Fetch state from the device."""
|
"""Fetch state from the device."""
|
||||||
from miio import DeviceException
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
state = await self.hass.async_add_executor_job(self._light.status)
|
state = await self.hass.async_add_executor_job(self._light.status)
|
||||||
except DeviceException as ex:
|
except DeviceException as ex:
|
||||||
@ -925,8 +907,6 @@ class XiaomiPhilipsMoonlightLamp(XiaomiPhilipsBulb):
|
|||||||
|
|
||||||
async def async_update(self):
|
async def async_update(self):
|
||||||
"""Fetch state from the device."""
|
"""Fetch state from the device."""
|
||||||
from miio import DeviceException
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
state = await self.hass.async_add_executor_job(self._light.status)
|
state = await self.hass.async_add_executor_job(self._light.status)
|
||||||
except DeviceException as ex:
|
except DeviceException as ex:
|
||||||
|
@ -1,28 +1,28 @@
|
|||||||
"""Support for the Xiaomi IR Remote (Chuangmi IR)."""
|
"""Support for the Xiaomi IR Remote (Chuangmi IR)."""
|
||||||
import asyncio
|
import asyncio
|
||||||
|
from datetime import timedelta
|
||||||
import logging
|
import logging
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from datetime import timedelta
|
from miio import ChuangmiIr, DeviceException # pylint: disable=import-error
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.remote import (
|
from homeassistant.components.remote import (
|
||||||
PLATFORM_SCHEMA,
|
|
||||||
DOMAIN,
|
|
||||||
ATTR_NUM_REPEATS,
|
|
||||||
ATTR_DELAY_SECS,
|
ATTR_DELAY_SECS,
|
||||||
|
ATTR_NUM_REPEATS,
|
||||||
DEFAULT_DELAY_SECS,
|
DEFAULT_DELAY_SECS,
|
||||||
|
DOMAIN,
|
||||||
|
PLATFORM_SCHEMA,
|
||||||
RemoteDevice,
|
RemoteDevice,
|
||||||
)
|
)
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
CONF_NAME,
|
|
||||||
CONF_HOST,
|
|
||||||
CONF_TOKEN,
|
|
||||||
CONF_TIMEOUT,
|
|
||||||
ATTR_ENTITY_ID,
|
ATTR_ENTITY_ID,
|
||||||
ATTR_HIDDEN,
|
ATTR_HIDDEN,
|
||||||
CONF_COMMAND,
|
CONF_COMMAND,
|
||||||
|
CONF_HOST,
|
||||||
|
CONF_NAME,
|
||||||
|
CONF_TIMEOUT,
|
||||||
|
CONF_TOKEN,
|
||||||
)
|
)
|
||||||
from homeassistant.exceptions import PlatformNotReady
|
from homeassistant.exceptions import PlatformNotReady
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
@ -73,8 +73,6 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
|
|||||||
|
|
||||||
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 the Xiaomi IR Remote (Chuangmi IR) platform."""
|
"""Set up the Xiaomi IR Remote (Chuangmi IR) platform."""
|
||||||
from miio import ChuangmiIr, DeviceException
|
|
||||||
|
|
||||||
host = config[CONF_HOST]
|
host = config[CONF_HOST]
|
||||||
token = config[CONF_TOKEN]
|
token = config[CONF_TOKEN]
|
||||||
|
|
||||||
@ -226,8 +224,6 @@ class XiaomiMiioRemote(RemoteDevice):
|
|||||||
@property
|
@property
|
||||||
def is_on(self):
|
def is_on(self):
|
||||||
"""Return False if device is unreachable, else True."""
|
"""Return False if device is unreachable, else True."""
|
||||||
from miio import DeviceException
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.device.info()
|
self.device.info()
|
||||||
return True
|
return True
|
||||||
@ -262,8 +258,6 @@ class XiaomiMiioRemote(RemoteDevice):
|
|||||||
|
|
||||||
def _send_command(self, payload):
|
def _send_command(self, payload):
|
||||||
"""Send a command."""
|
"""Send a command."""
|
||||||
from miio import DeviceException
|
|
||||||
|
|
||||||
_LOGGER.debug("Sending payload: '%s'", payload)
|
_LOGGER.debug("Sending payload: '%s'", payload)
|
||||||
try:
|
try:
|
||||||
self.device.play(payload)
|
self.device.play(payload)
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
"""Support for Xiaomi Mi Air Quality Monitor (PM2.5)."""
|
"""Support for Xiaomi Mi Air Quality Monitor (PM2.5)."""
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
from miio import AirQualityMonitor, DeviceException # pylint: disable=import-error
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.sensor import PLATFORM_SCHEMA
|
from homeassistant.components.sensor import PLATFORM_SCHEMA
|
||||||
@ -37,8 +38,6 @@ SUCCESS = ["ok"]
|
|||||||
|
|
||||||
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 the sensor from config."""
|
"""Set up the sensor from config."""
|
||||||
from miio import AirQualityMonitor, DeviceException
|
|
||||||
|
|
||||||
if DATA_KEY not in hass.data:
|
if DATA_KEY not in hass.data:
|
||||||
hass.data[DATA_KEY] = {}
|
hass.data[DATA_KEY] = {}
|
||||||
|
|
||||||
@ -135,8 +134,6 @@ class XiaomiAirQualityMonitor(Entity):
|
|||||||
|
|
||||||
async def async_update(self):
|
async def async_update(self):
|
||||||
"""Fetch state from the miio device."""
|
"""Fetch state from the miio device."""
|
||||||
from miio import DeviceException
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
state = await self.hass.async_add_executor_job(self._device.status)
|
state = await self.hass.async_add_executor_job(self._device.status)
|
||||||
_LOGGER.debug("Got new state: %s", state)
|
_LOGGER.debug("Got new state: %s", state)
|
||||||
|
@ -3,6 +3,14 @@ import asyncio
|
|||||||
from functools import partial
|
from functools import partial
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
from miio import ( # pylint: disable=import-error
|
||||||
|
AirConditioningCompanionV3,
|
||||||
|
ChuangmiPlug,
|
||||||
|
Device,
|
||||||
|
DeviceException,
|
||||||
|
PowerStrip,
|
||||||
|
)
|
||||||
|
from miio.powerstrip import PowerMode # pylint: disable=import-error
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.switch import DOMAIN, PLATFORM_SCHEMA, SwitchDevice
|
from homeassistant.components.switch import DOMAIN, PLATFORM_SCHEMA, SwitchDevice
|
||||||
@ -102,8 +110,6 @@ SERVICE_TO_METHOD = {
|
|||||||
|
|
||||||
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 the switch from config."""
|
"""Set up the switch from config."""
|
||||||
from miio import Device, DeviceException
|
|
||||||
|
|
||||||
if DATA_KEY not in hass.data:
|
if DATA_KEY not in hass.data:
|
||||||
hass.data[DATA_KEY] = {}
|
hass.data[DATA_KEY] = {}
|
||||||
|
|
||||||
@ -133,8 +139,6 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
|
|||||||
raise PlatformNotReady
|
raise PlatformNotReady
|
||||||
|
|
||||||
if model in ["chuangmi.plug.v1", "chuangmi.plug.v3"]:
|
if model in ["chuangmi.plug.v1", "chuangmi.plug.v3"]:
|
||||||
from miio import ChuangmiPlug
|
|
||||||
|
|
||||||
plug = ChuangmiPlug(host, token, model=model)
|
plug = ChuangmiPlug(host, token, model=model)
|
||||||
|
|
||||||
# The device has two switchable channels (mains and a USB port).
|
# The device has two switchable channels (mains and a USB port).
|
||||||
@ -145,8 +149,6 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
|
|||||||
hass.data[DATA_KEY][host] = device
|
hass.data[DATA_KEY][host] = device
|
||||||
|
|
||||||
elif model in ["qmi.powerstrip.v1", "zimi.powerstrip.v2"]:
|
elif model in ["qmi.powerstrip.v1", "zimi.powerstrip.v2"]:
|
||||||
from miio import PowerStrip
|
|
||||||
|
|
||||||
plug = PowerStrip(host, token, model=model)
|
plug = PowerStrip(host, token, model=model)
|
||||||
device = XiaomiPowerStripSwitch(name, plug, model, unique_id)
|
device = XiaomiPowerStripSwitch(name, plug, model, unique_id)
|
||||||
devices.append(device)
|
devices.append(device)
|
||||||
@ -157,15 +159,11 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
|
|||||||
"chuangmi.plug.v2",
|
"chuangmi.plug.v2",
|
||||||
"chuangmi.plug.hmi205",
|
"chuangmi.plug.hmi205",
|
||||||
]:
|
]:
|
||||||
from miio import ChuangmiPlug
|
|
||||||
|
|
||||||
plug = ChuangmiPlug(host, token, model=model)
|
plug = ChuangmiPlug(host, token, model=model)
|
||||||
device = XiaomiPlugGenericSwitch(name, plug, model, unique_id)
|
device = XiaomiPlugGenericSwitch(name, plug, model, unique_id)
|
||||||
devices.append(device)
|
devices.append(device)
|
||||||
hass.data[DATA_KEY][host] = device
|
hass.data[DATA_KEY][host] = device
|
||||||
elif model in ["lumi.acpartner.v3"]:
|
elif model in ["lumi.acpartner.v3"]:
|
||||||
from miio import AirConditioningCompanionV3
|
|
||||||
|
|
||||||
plug = AirConditioningCompanionV3(host, token)
|
plug = AirConditioningCompanionV3(host, token)
|
||||||
device = XiaomiAirConditioningCompanionSwitch(name, plug, model, unique_id)
|
device = XiaomiAirConditioningCompanionSwitch(name, plug, model, unique_id)
|
||||||
devices.append(device)
|
devices.append(device)
|
||||||
@ -268,8 +266,6 @@ class XiaomiPlugGenericSwitch(SwitchDevice):
|
|||||||
|
|
||||||
async def _try_command(self, mask_error, func, *args, **kwargs):
|
async def _try_command(self, mask_error, func, *args, **kwargs):
|
||||||
"""Call a plug command handling error messages."""
|
"""Call a plug command handling error messages."""
|
||||||
from miio import DeviceException
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
result = await self.hass.async_add_executor_job(
|
result = await self.hass.async_add_executor_job(
|
||||||
partial(func, *args, **kwargs)
|
partial(func, *args, **kwargs)
|
||||||
@ -305,8 +301,6 @@ class XiaomiPlugGenericSwitch(SwitchDevice):
|
|||||||
|
|
||||||
async def async_update(self):
|
async def async_update(self):
|
||||||
"""Fetch state from the device."""
|
"""Fetch state from the device."""
|
||||||
from miio import DeviceException
|
|
||||||
|
|
||||||
# On state change the device doesn't provide the new state immediately.
|
# On state change the device doesn't provide the new state immediately.
|
||||||
if self._skip_update:
|
if self._skip_update:
|
||||||
self._skip_update = False
|
self._skip_update = False
|
||||||
@ -379,8 +373,6 @@ class XiaomiPowerStripSwitch(XiaomiPlugGenericSwitch):
|
|||||||
|
|
||||||
async def async_update(self):
|
async def async_update(self):
|
||||||
"""Fetch state from the device."""
|
"""Fetch state from the device."""
|
||||||
from miio import DeviceException
|
|
||||||
|
|
||||||
# On state change the device doesn't provide the new state immediately.
|
# On state change the device doesn't provide the new state immediately.
|
||||||
if self._skip_update:
|
if self._skip_update:
|
||||||
self._skip_update = False
|
self._skip_update = False
|
||||||
@ -417,8 +409,6 @@ class XiaomiPowerStripSwitch(XiaomiPlugGenericSwitch):
|
|||||||
if self._device_features & FEATURE_SET_POWER_MODE == 0:
|
if self._device_features & FEATURE_SET_POWER_MODE == 0:
|
||||||
return
|
return
|
||||||
|
|
||||||
from miio.powerstrip import PowerMode
|
|
||||||
|
|
||||||
await self._try_command(
|
await self._try_command(
|
||||||
"Setting the power mode of the power strip failed.",
|
"Setting the power mode of the power strip failed.",
|
||||||
self._plug.set_power_mode,
|
self._plug.set_power_mode,
|
||||||
@ -477,8 +467,6 @@ class ChuangMiPlugSwitch(XiaomiPlugGenericSwitch):
|
|||||||
|
|
||||||
async def async_update(self):
|
async def async_update(self):
|
||||||
"""Fetch state from the device."""
|
"""Fetch state from the device."""
|
||||||
from miio import DeviceException
|
|
||||||
|
|
||||||
# On state change the device doesn't provide the new state immediately.
|
# On state change the device doesn't provide the new state immediately.
|
||||||
if self._skip_update:
|
if self._skip_update:
|
||||||
self._skip_update = False
|
self._skip_update = False
|
||||||
@ -538,8 +526,6 @@ class XiaomiAirConditioningCompanionSwitch(XiaomiPlugGenericSwitch):
|
|||||||
|
|
||||||
async def async_update(self):
|
async def async_update(self):
|
||||||
"""Fetch state from the device."""
|
"""Fetch state from the device."""
|
||||||
from miio import DeviceException
|
|
||||||
|
|
||||||
# On state change the device doesn't provide the new state immediately.
|
# On state change the device doesn't provide the new state immediately.
|
||||||
if self._skip_update:
|
if self._skip_update:
|
||||||
self._skip_update = False
|
self._skip_update = False
|
||||||
|
@ -3,12 +3,19 @@ import asyncio
|
|||||||
from functools import partial
|
from functools import partial
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
from miio import DeviceException, Vacuum # pylint: disable=import-error
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.vacuum import (
|
from homeassistant.components.vacuum import (
|
||||||
ATTR_CLEANED_AREA,
|
ATTR_CLEANED_AREA,
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
PLATFORM_SCHEMA,
|
PLATFORM_SCHEMA,
|
||||||
|
STATE_CLEANING,
|
||||||
|
STATE_DOCKED,
|
||||||
|
STATE_ERROR,
|
||||||
|
STATE_IDLE,
|
||||||
|
STATE_PAUSED,
|
||||||
|
STATE_RETURNING,
|
||||||
SUPPORT_BATTERY,
|
SUPPORT_BATTERY,
|
||||||
SUPPORT_CLEAN_SPOT,
|
SUPPORT_CLEAN_SPOT,
|
||||||
SUPPORT_FAN_SPEED,
|
SUPPORT_FAN_SPEED,
|
||||||
@ -16,16 +23,10 @@ from homeassistant.components.vacuum import (
|
|||||||
SUPPORT_PAUSE,
|
SUPPORT_PAUSE,
|
||||||
SUPPORT_RETURN_HOME,
|
SUPPORT_RETURN_HOME,
|
||||||
SUPPORT_SEND_COMMAND,
|
SUPPORT_SEND_COMMAND,
|
||||||
SUPPORT_STOP,
|
|
||||||
SUPPORT_STATE,
|
|
||||||
SUPPORT_START,
|
SUPPORT_START,
|
||||||
|
SUPPORT_STATE,
|
||||||
|
SUPPORT_STOP,
|
||||||
StateVacuumDevice,
|
StateVacuumDevice,
|
||||||
STATE_CLEANING,
|
|
||||||
STATE_DOCKED,
|
|
||||||
STATE_PAUSED,
|
|
||||||
STATE_IDLE,
|
|
||||||
STATE_RETURNING,
|
|
||||||
STATE_ERROR,
|
|
||||||
)
|
)
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
ATTR_ENTITY_ID,
|
ATTR_ENTITY_ID,
|
||||||
@ -177,8 +178,6 @@ STATE_CODE_TO_STATE = {
|
|||||||
|
|
||||||
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 the Xiaomi vacuum cleaner robot platform."""
|
"""Set up the Xiaomi vacuum cleaner robot platform."""
|
||||||
from miio import Vacuum
|
|
||||||
|
|
||||||
if DATA_KEY not in hass.data:
|
if DATA_KEY not in hass.data:
|
||||||
hass.data[DATA_KEY] = {}
|
hass.data[DATA_KEY] = {}
|
||||||
|
|
||||||
@ -348,8 +347,6 @@ class MiroboVacuum(StateVacuumDevice):
|
|||||||
|
|
||||||
async def _try_command(self, mask_error, func, *args, **kwargs):
|
async def _try_command(self, mask_error, func, *args, **kwargs):
|
||||||
"""Call a vacuum command handling error messages."""
|
"""Call a vacuum command handling error messages."""
|
||||||
from miio import DeviceException
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
await self.hass.async_add_executor_job(partial(func, *args, **kwargs))
|
await self.hass.async_add_executor_job(partial(func, *args, **kwargs))
|
||||||
return True
|
return True
|
||||||
@ -450,8 +447,6 @@ class MiroboVacuum(StateVacuumDevice):
|
|||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
"""Fetch state from the device."""
|
"""Fetch state from the device."""
|
||||||
from miio import DeviceException
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
state = self._vacuum.status()
|
state = self._vacuum.status()
|
||||||
self.vacuum_state = state
|
self.vacuum_state = state
|
||||||
@ -469,8 +464,6 @@ class MiroboVacuum(StateVacuumDevice):
|
|||||||
|
|
||||||
async def async_clean_zone(self, zone, repeats=1):
|
async def async_clean_zone(self, zone, repeats=1):
|
||||||
"""Clean selected area for the number of repeats indicated."""
|
"""Clean selected area for the number of repeats indicated."""
|
||||||
from miio import DeviceException
|
|
||||||
|
|
||||||
for _zone in zone:
|
for _zone in zone:
|
||||||
_zone.append(repeats)
|
_zone.append(repeats)
|
||||||
_LOGGER.debug("Zone with repeats: %s", zone)
|
_LOGGER.debug("Zone with repeats: %s", zone)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user