mirror of
https://github.com/home-assistant/core.git
synced 2025-11-09 10:59:40 +00:00
62 lines
1.7 KiB
Python
62 lines
1.7 KiB
Python
"""Base class for iNELS components."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from inelsmqtt.devices import Device
|
|
|
|
from homeassistant.helpers.device_registry import DeviceInfo
|
|
from homeassistant.helpers.entity import Entity
|
|
|
|
from .const import DOMAIN
|
|
|
|
|
|
class InelsBaseEntity(Entity):
|
|
"""Base iNELS entity."""
|
|
|
|
_attr_should_poll = False
|
|
_attr_has_entity_name = True
|
|
|
|
def __init__(
|
|
self,
|
|
device: Device,
|
|
key: str,
|
|
index: int,
|
|
) -> None:
|
|
"""Init base entity."""
|
|
self._device = device
|
|
self._device_id = device.unique_id
|
|
self._attr_unique_id = self._device_id
|
|
|
|
# The referenced variable to read from
|
|
self._key = key
|
|
# The index of the variable list to read from. '-1' for no index
|
|
self._index = index
|
|
|
|
info = device.info()
|
|
self._attr_device_info = DeviceInfo(
|
|
identifiers={(DOMAIN, device.unique_id)},
|
|
manufacturer=info.manufacturer,
|
|
model=info.model_number,
|
|
name=device.title,
|
|
sw_version=info.sw_version,
|
|
)
|
|
|
|
async def async_added_to_hass(self) -> None:
|
|
"""Add subscription of the data listener."""
|
|
# Register the HA callback
|
|
self._device.add_ha_callback(self._key, self._index, self._callback)
|
|
# Subscribe to MQTT updates
|
|
self._device.mqtt.subscribe_listener(
|
|
self._device.state_topic, self._device.unique_id, self._device.callback
|
|
)
|
|
|
|
def _callback(self) -> None:
|
|
"""Get data from broker into the HA."""
|
|
if hasattr(self, "hass"):
|
|
self.schedule_update_ha_state()
|
|
|
|
@property
|
|
def available(self) -> bool:
|
|
"""Return if entity is available."""
|
|
return self._device.is_available
|