mirror of
https://github.com/home-assistant/core.git
synced 2025-08-04 05:05:09 +02:00
Improve type hints in xiaomi_miio number entity (#76466)
This commit is contained in:
@@ -4,6 +4,8 @@ from __future__ import annotations
|
|||||||
import dataclasses
|
import dataclasses
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
|
||||||
|
from miio import Device
|
||||||
|
|
||||||
from homeassistant.components.number import NumberEntity, NumberEntityDescription
|
from homeassistant.components.number import NumberEntity, NumberEntityDescription
|
||||||
from homeassistant.components.number.const import DOMAIN as PLATFORM_DOMAIN
|
from homeassistant.components.number.const import DOMAIN as PLATFORM_DOMAIN
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
@@ -12,6 +14,7 @@ from homeassistant.core import HomeAssistant, callback
|
|||||||
from homeassistant.helpers import entity_registry as er
|
from homeassistant.helpers import entity_registry as er
|
||||||
from homeassistant.helpers.entity import EntityCategory
|
from homeassistant.helpers.entity import EntityCategory
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
|
||||||
|
|
||||||
from .const import (
|
from .const import (
|
||||||
CONF_DEVICE,
|
CONF_DEVICE,
|
||||||
@@ -91,11 +94,17 @@ ATTR_VOLUME = "volume"
|
|||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class XiaomiMiioNumberDescription(NumberEntityDescription):
|
class XiaomiMiioNumberMixin:
|
||||||
|
"""A class that describes number entities."""
|
||||||
|
|
||||||
|
method: str
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class XiaomiMiioNumberDescription(NumberEntityDescription, XiaomiMiioNumberMixin):
|
||||||
"""A class that describes number entities."""
|
"""A class that describes number entities."""
|
||||||
|
|
||||||
available_with_device_off: bool = True
|
available_with_device_off: bool = True
|
||||||
method: str | None = None
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
@@ -325,7 +334,16 @@ async def async_setup_entry(
|
|||||||
class XiaomiNumberEntity(XiaomiCoordinatedMiioEntity, NumberEntity):
|
class XiaomiNumberEntity(XiaomiCoordinatedMiioEntity, NumberEntity):
|
||||||
"""Representation of a generic Xiaomi attribute selector."""
|
"""Representation of a generic Xiaomi attribute selector."""
|
||||||
|
|
||||||
def __init__(self, device, entry, unique_id, coordinator, description):
|
entity_description: XiaomiMiioNumberDescription
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
device: Device,
|
||||||
|
entry: ConfigEntry,
|
||||||
|
unique_id: str,
|
||||||
|
coordinator: DataUpdateCoordinator,
|
||||||
|
description: XiaomiMiioNumberDescription,
|
||||||
|
) -> None:
|
||||||
"""Initialize the generic Xiaomi attribute selector."""
|
"""Initialize the generic Xiaomi attribute selector."""
|
||||||
super().__init__(device, entry, unique_id, coordinator)
|
super().__init__(device, entry, unique_id, coordinator)
|
||||||
|
|
||||||
@@ -335,7 +353,7 @@ class XiaomiNumberEntity(XiaomiCoordinatedMiioEntity, NumberEntity):
|
|||||||
self.entity_description = description
|
self.entity_description = description
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def available(self):
|
def available(self) -> bool:
|
||||||
"""Return the number controller availability."""
|
"""Return the number controller availability."""
|
||||||
if (
|
if (
|
||||||
super().available
|
super().available
|
||||||
@@ -345,7 +363,7 @@ class XiaomiNumberEntity(XiaomiCoordinatedMiioEntity, NumberEntity):
|
|||||||
return False
|
return False
|
||||||
return super().available
|
return super().available
|
||||||
|
|
||||||
async def async_set_native_value(self, value):
|
async def async_set_native_value(self, value: float) -> None:
|
||||||
"""Set an option of the miio device."""
|
"""Set an option of the miio device."""
|
||||||
method = getattr(self, self.entity_description.method)
|
method = getattr(self, self.entity_description.method)
|
||||||
if await method(int(value)):
|
if await method(int(value)):
|
||||||
@@ -353,7 +371,7 @@ class XiaomiNumberEntity(XiaomiCoordinatedMiioEntity, NumberEntity):
|
|||||||
self.async_write_ha_state()
|
self.async_write_ha_state()
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def _handle_coordinator_update(self):
|
def _handle_coordinator_update(self) -> None:
|
||||||
"""Fetch state from the device."""
|
"""Fetch state from the device."""
|
||||||
# On state change the device doesn't provide the new state immediately.
|
# On state change the device doesn't provide the new state immediately.
|
||||||
self._attr_native_value = self._extract_value_from_attribute(
|
self._attr_native_value = self._extract_value_from_attribute(
|
||||||
@@ -407,7 +425,7 @@ class XiaomiNumberEntity(XiaomiCoordinatedMiioEntity, NumberEntity):
|
|||||||
delay_off_countdown * 60,
|
delay_off_countdown * 60,
|
||||||
)
|
)
|
||||||
|
|
||||||
async def async_set_led_brightness_level(self, level: int):
|
async def async_set_led_brightness_level(self, level: int) -> bool:
|
||||||
"""Set the led brightness level."""
|
"""Set the led brightness level."""
|
||||||
return await self._try_command(
|
return await self._try_command(
|
||||||
"Setting the led brightness level of the miio device failed.",
|
"Setting the led brightness level of the miio device failed.",
|
||||||
@@ -415,7 +433,7 @@ class XiaomiNumberEntity(XiaomiCoordinatedMiioEntity, NumberEntity):
|
|||||||
level,
|
level,
|
||||||
)
|
)
|
||||||
|
|
||||||
async def async_set_led_brightness(self, level: int):
|
async def async_set_led_brightness(self, level: int) -> bool:
|
||||||
"""Set the led brightness level."""
|
"""Set the led brightness level."""
|
||||||
return await self._try_command(
|
return await self._try_command(
|
||||||
"Setting the led brightness level of the miio device failed.",
|
"Setting the led brightness level of the miio device failed.",
|
||||||
@@ -423,7 +441,7 @@ class XiaomiNumberEntity(XiaomiCoordinatedMiioEntity, NumberEntity):
|
|||||||
level,
|
level,
|
||||||
)
|
)
|
||||||
|
|
||||||
async def async_set_favorite_rpm(self, rpm: int):
|
async def async_set_favorite_rpm(self, rpm: int) -> bool:
|
||||||
"""Set the target motor speed."""
|
"""Set the target motor speed."""
|
||||||
return await self._try_command(
|
return await self._try_command(
|
||||||
"Setting the favorite rpm of the miio device failed.",
|
"Setting the favorite rpm of the miio device failed.",
|
||||||
|
Reference in New Issue
Block a user