Home Assistant Unofficial Reference 2024.12.1
entity.py
Go to the documentation of this file.
1 """A base class for Rabbit Air entities."""
2 
3 from __future__ import annotations
4 
5 import logging
6 from typing import Any
7 
8 from rabbitair import Model
9 
10 from homeassistant.config_entries import ConfigEntry
11 from homeassistant.const import CONF_MAC
12 from homeassistant.helpers.device_registry import DeviceInfo
13 from homeassistant.helpers.update_coordinator import CoordinatorEntity
14 
15 from .const import DOMAIN
16 from .coordinator import RabbitAirDataUpdateCoordinator
17 
18 _LOGGER = logging.getLogger(__name__)
19 
20 MODELS = {
21  Model.A3: "A3",
22  Model.BioGS: "BioGS 2.0",
23  Model.MinusA2: "MinusA2",
24  None: None,
25 }
26 
27 
28 class RabbitAirBaseEntity(CoordinatorEntity[RabbitAirDataUpdateCoordinator]):
29  """Base class for Rabbit Air entity."""
30 
31  def __init__(
32  self,
33  coordinator: RabbitAirDataUpdateCoordinator,
34  entry: ConfigEntry,
35  ) -> None:
36  """Initialize the entity."""
37  super().__init__(coordinator)
38  self._attr_name_attr_name = entry.title
39  self._attr_unique_id_attr_unique_id = entry.unique_id
40  self._attr_device_info_attr_device_info = DeviceInfo(
41  identifiers={(DOMAIN, entry.data[CONF_MAC])},
42  manufacturer="Rabbit Air",
43  model=MODELS.get(coordinator.data.model),
44  name=entry.title,
45  sw_version=coordinator.data.wifi_firmware,
46  hw_version=coordinator.data.main_firmware,
47  )
48 
49  def _is_model(self, model: Model | list[Model]) -> bool:
50  """Check the model of the device."""
51  if isinstance(model, list):
52  return self.coordinator.data.model in model
53  return self.coordinator.data.model is model
54 
55  async def _set_state(self, **kwargs: Any) -> None:
56  """Change the state of the device."""
57  _LOGGER.debug("Set state %s", kwargs)
58  await self.coordinator.device.set_state(**kwargs)
59  # Force polling of the device, because changing one parameter often
60  # causes other parameters to change as well. By getting updated status
61  # we provide a better user experience, especially if the default
62  # polling interval is set too long.
63  await self.coordinator.async_request_refresh()
bool _is_model(self, Model|list[Model] model)
Definition: entity.py:49
None __init__(self, RabbitAirDataUpdateCoordinator coordinator, ConfigEntry entry)
Definition: entity.py:35