core/homeassistant/components/firmata/entity.py

62 lines
1.6 KiB
Python

"""Entity for Firmata devices."""
from __future__ import annotations
from homeassistant.config_entries import ConfigEntry
from homeassistant.helpers.entity import DeviceInfo
from .board import FirmataPinType
from .const import DOMAIN, FIRMATA_MANUFACTURER
from .pin import FirmataBoardPin
class FirmataEntity:
"""Representation of a Firmata entity."""
def __init__(self, api):
"""Initialize the entity."""
self._api = api
@property
def device_info(self) -> DeviceInfo:
"""Return device info."""
return DeviceInfo(
connections={},
identifiers={(DOMAIN, self._api.board.name)},
manufacturer=FIRMATA_MANUFACTURER,
name=self._api.board.name,
sw_version=self._api.board.firmware_version,
)
class FirmataPinEntity(FirmataEntity):
"""Representation of a Firmata pin entity."""
def __init__(
self,
api: type[FirmataBoardPin],
config_entry: ConfigEntry,
name: str,
pin: FirmataPinType,
) -> None:
"""Initialize the pin entity."""
super().__init__(api)
self._name = name
location = (config_entry.entry_id, "pin", pin)
self._unique_id = "_".join(str(i) for i in location)
@property
def name(self) -> str:
"""Get the name of the pin."""
return self._name
@property
def should_poll(self) -> bool:
"""No polling needed."""
return False
@property
def unique_id(self) -> str:
"""Return a unique identifier for this device."""
return self._unique_id