Use entity class vars in WLED (#50975)
This commit is contained in:
parent
5a5a145778
commit
bf13af34b4
5 changed files with 117 additions and 263 deletions
|
@ -17,7 +17,7 @@ from homeassistant.core import HomeAssistant
|
|||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.util.dt import utcnow
|
||||
|
||||
from . import WLEDDataUpdateCoordinator, WLEDDeviceEntity
|
||||
from . import WLEDDataUpdateCoordinator, WLEDEntity
|
||||
from .const import ATTR_LED_COUNT, ATTR_MAX_POWER, CURRENT_MA, DOMAIN
|
||||
|
||||
|
||||
|
@ -30,68 +30,30 @@ async def async_setup_entry(
|
|||
coordinator: WLEDDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
|
||||
|
||||
sensors = [
|
||||
WLEDEstimatedCurrentSensor(entry.entry_id, coordinator),
|
||||
WLEDUptimeSensor(entry.entry_id, coordinator),
|
||||
WLEDFreeHeapSensor(entry.entry_id, coordinator),
|
||||
WLEDWifiBSSIDSensor(entry.entry_id, coordinator),
|
||||
WLEDWifiChannelSensor(entry.entry_id, coordinator),
|
||||
WLEDWifiRSSISensor(entry.entry_id, coordinator),
|
||||
WLEDWifiSignalSensor(entry.entry_id, coordinator),
|
||||
WLEDEstimatedCurrentSensor(coordinator),
|
||||
WLEDUptimeSensor(coordinator),
|
||||
WLEDFreeHeapSensor(coordinator),
|
||||
WLEDWifiBSSIDSensor(coordinator),
|
||||
WLEDWifiChannelSensor(coordinator),
|
||||
WLEDWifiRSSISensor(coordinator),
|
||||
WLEDWifiSignalSensor(coordinator),
|
||||
]
|
||||
|
||||
async_add_entities(sensors, True)
|
||||
|
||||
|
||||
class WLEDSensor(WLEDDeviceEntity, SensorEntity):
|
||||
"""Defines a WLED sensor."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
coordinator: WLEDDataUpdateCoordinator,
|
||||
enabled_default: bool = True,
|
||||
entry_id: str,
|
||||
icon: str,
|
||||
key: str,
|
||||
name: str,
|
||||
unit_of_measurement: str | None = None,
|
||||
) -> None:
|
||||
"""Initialize WLED sensor."""
|
||||
self._unit_of_measurement = unit_of_measurement
|
||||
self._key = key
|
||||
|
||||
super().__init__(
|
||||
entry_id=entry_id,
|
||||
coordinator=coordinator,
|
||||
name=name,
|
||||
icon=icon,
|
||||
enabled_default=enabled_default,
|
||||
)
|
||||
|
||||
@property
|
||||
def unique_id(self) -> str:
|
||||
"""Return the unique ID for this sensor."""
|
||||
return f"{self.coordinator.data.info.mac_address}_{self._key}"
|
||||
|
||||
@property
|
||||
def unit_of_measurement(self) -> str | None:
|
||||
"""Return the unit this state is expressed in."""
|
||||
return self._unit_of_measurement
|
||||
|
||||
|
||||
class WLEDEstimatedCurrentSensor(WLEDSensor):
|
||||
class WLEDEstimatedCurrentSensor(WLEDEntity, SensorEntity):
|
||||
"""Defines a WLED estimated current sensor."""
|
||||
|
||||
def __init__(self, entry_id: str, coordinator: WLEDDataUpdateCoordinator) -> None:
|
||||
_attr_icon = "mdi:power"
|
||||
_attr_unit_of_measurement = CURRENT_MA
|
||||
_attr_device_class = DEVICE_CLASS_CURRENT
|
||||
|
||||
def __init__(self, coordinator: WLEDDataUpdateCoordinator) -> None:
|
||||
"""Initialize WLED estimated current sensor."""
|
||||
super().__init__(
|
||||
coordinator=coordinator,
|
||||
entry_id=entry_id,
|
||||
icon="mdi:power",
|
||||
key="estimated_current",
|
||||
name=f"{coordinator.data.info.name} Estimated Current",
|
||||
unit_of_measurement=CURRENT_MA,
|
||||
)
|
||||
super().__init__(coordinator=coordinator)
|
||||
self._attr_name = f"{coordinator.data.info.name} Estimated Current"
|
||||
self._attr_unique_id = f"{coordinator.data.info.mac_address}_estimated_current"
|
||||
|
||||
@property
|
||||
def extra_state_attributes(self) -> dict[str, Any] | None:
|
||||
|
@ -106,25 +68,18 @@ class WLEDEstimatedCurrentSensor(WLEDSensor):
|
|||
"""Return the state of the sensor."""
|
||||
return self.coordinator.data.info.leds.power
|
||||
|
||||
@property
|
||||
def device_class(self) -> str | None:
|
||||
"""Return the class of this sensor."""
|
||||
return DEVICE_CLASS_CURRENT
|
||||
|
||||
|
||||
class WLEDUptimeSensor(WLEDSensor):
|
||||
class WLEDUptimeSensor(WLEDEntity, SensorEntity):
|
||||
"""Defines a WLED uptime sensor."""
|
||||
|
||||
def __init__(self, entry_id: str, coordinator: WLEDDataUpdateCoordinator) -> None:
|
||||
_attr_device_class = DEVICE_CLASS_TIMESTAMP
|
||||
_attr_entity_registry_enabled_default = False
|
||||
|
||||
def __init__(self, coordinator: WLEDDataUpdateCoordinator) -> None:
|
||||
"""Initialize WLED uptime sensor."""
|
||||
super().__init__(
|
||||
coordinator=coordinator,
|
||||
enabled_default=False,
|
||||
entry_id=entry_id,
|
||||
icon="mdi:clock-outline",
|
||||
key="uptime",
|
||||
name=f"{coordinator.data.info.name} Uptime",
|
||||
)
|
||||
super().__init__(coordinator=coordinator)
|
||||
self._attr_name = f"{coordinator.data.info.name} Uptime"
|
||||
self._attr_unique_id = f"{coordinator.data.info.mac_address}_uptime"
|
||||
|
||||
@property
|
||||
def state(self) -> str:
|
||||
|
@ -132,26 +87,19 @@ class WLEDUptimeSensor(WLEDSensor):
|
|||
uptime = utcnow() - timedelta(seconds=self.coordinator.data.info.uptime)
|
||||
return uptime.replace(microsecond=0).isoformat()
|
||||
|
||||
@property
|
||||
def device_class(self) -> str | None:
|
||||
"""Return the class of this sensor."""
|
||||
return DEVICE_CLASS_TIMESTAMP
|
||||
|
||||
|
||||
class WLEDFreeHeapSensor(WLEDSensor):
|
||||
class WLEDFreeHeapSensor(WLEDEntity, SensorEntity):
|
||||
"""Defines a WLED free heap sensor."""
|
||||
|
||||
def __init__(self, entry_id: str, coordinator: WLEDDataUpdateCoordinator) -> None:
|
||||
_attr_icon = "mdi:memory"
|
||||
_attr_entity_registry_enabled_default = False
|
||||
_attr_unit_of_measurement = DATA_BYTES
|
||||
|
||||
def __init__(self, coordinator: WLEDDataUpdateCoordinator) -> None:
|
||||
"""Initialize WLED free heap sensor."""
|
||||
super().__init__(
|
||||
coordinator=coordinator,
|
||||
enabled_default=False,
|
||||
entry_id=entry_id,
|
||||
icon="mdi:memory",
|
||||
key="free_heap",
|
||||
name=f"{coordinator.data.info.name} Free Memory",
|
||||
unit_of_measurement=DATA_BYTES,
|
||||
)
|
||||
super().__init__(coordinator=coordinator)
|
||||
self._attr_name = f"{coordinator.data.info.name} Free Memory"
|
||||
self._attr_unique_id = f"{coordinator.data.info.mac_address}_free_heap"
|
||||
|
||||
@property
|
||||
def state(self) -> int:
|
||||
|
@ -159,20 +107,18 @@ class WLEDFreeHeapSensor(WLEDSensor):
|
|||
return self.coordinator.data.info.free_heap
|
||||
|
||||
|
||||
class WLEDWifiSignalSensor(WLEDSensor):
|
||||
class WLEDWifiSignalSensor(WLEDEntity, SensorEntity):
|
||||
"""Defines a WLED Wi-Fi signal sensor."""
|
||||
|
||||
def __init__(self, entry_id: str, coordinator: WLEDDataUpdateCoordinator) -> None:
|
||||
_attr_icon = "mdi:wifi"
|
||||
_attr_unit_of_measurement = PERCENTAGE
|
||||
_attr_entity_registry_enabled_default = False
|
||||
|
||||
def __init__(self, coordinator: WLEDDataUpdateCoordinator) -> None:
|
||||
"""Initialize WLED Wi-Fi signal sensor."""
|
||||
super().__init__(
|
||||
coordinator=coordinator,
|
||||
enabled_default=False,
|
||||
entry_id=entry_id,
|
||||
icon="mdi:wifi",
|
||||
key="wifi_signal",
|
||||
name=f"{coordinator.data.info.name} Wi-Fi Signal",
|
||||
unit_of_measurement=PERCENTAGE,
|
||||
)
|
||||
super().__init__(coordinator=coordinator)
|
||||
self._attr_name = f"{coordinator.data.info.name} Wi-Fi Signal"
|
||||
self._attr_unique_id = f"{coordinator.data.info.mac_address}_wifi_signal"
|
||||
|
||||
@property
|
||||
def state(self) -> int:
|
||||
|
@ -180,45 +126,36 @@ class WLEDWifiSignalSensor(WLEDSensor):
|
|||
return self.coordinator.data.info.wifi.signal
|
||||
|
||||
|
||||
class WLEDWifiRSSISensor(WLEDSensor):
|
||||
class WLEDWifiRSSISensor(WLEDEntity, SensorEntity):
|
||||
"""Defines a WLED Wi-Fi RSSI sensor."""
|
||||
|
||||
def __init__(self, entry_id: str, coordinator: WLEDDataUpdateCoordinator) -> None:
|
||||
_attr_device_class = DEVICE_CLASS_SIGNAL_STRENGTH
|
||||
_attr_unit_of_measurement = SIGNAL_STRENGTH_DECIBELS_MILLIWATT
|
||||
_attr_entity_registry_enabled_default = False
|
||||
|
||||
def __init__(self, coordinator: WLEDDataUpdateCoordinator) -> None:
|
||||
"""Initialize WLED Wi-Fi RSSI sensor."""
|
||||
super().__init__(
|
||||
coordinator=coordinator,
|
||||
enabled_default=False,
|
||||
entry_id=entry_id,
|
||||
icon="mdi:wifi",
|
||||
key="wifi_rssi",
|
||||
name=f"{coordinator.data.info.name} Wi-Fi RSSI",
|
||||
unit_of_measurement=SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
|
||||
)
|
||||
super().__init__(coordinator=coordinator)
|
||||
self._attr_name = f"{coordinator.data.info.name} Wi-Fi RSSI"
|
||||
self._attr_unique_id = f"{coordinator.data.info.mac_address}_wifi_rssi"
|
||||
|
||||
@property
|
||||
def state(self) -> int:
|
||||
"""Return the state of the sensor."""
|
||||
return self.coordinator.data.info.wifi.rssi
|
||||
|
||||
@property
|
||||
def device_class(self) -> str | None:
|
||||
"""Return the class of this sensor."""
|
||||
return DEVICE_CLASS_SIGNAL_STRENGTH
|
||||
|
||||
|
||||
class WLEDWifiChannelSensor(WLEDSensor):
|
||||
class WLEDWifiChannelSensor(WLEDEntity, SensorEntity):
|
||||
"""Defines a WLED Wi-Fi Channel sensor."""
|
||||
|
||||
def __init__(self, entry_id: str, coordinator: WLEDDataUpdateCoordinator) -> None:
|
||||
_attr_icon = "mdi:wifi"
|
||||
_attr_entity_registry_enabled_default = False
|
||||
|
||||
def __init__(self, coordinator: WLEDDataUpdateCoordinator) -> None:
|
||||
"""Initialize WLED Wi-Fi Channel sensor."""
|
||||
super().__init__(
|
||||
coordinator=coordinator,
|
||||
enabled_default=False,
|
||||
entry_id=entry_id,
|
||||
icon="mdi:wifi",
|
||||
key="wifi_channel",
|
||||
name=f"{coordinator.data.info.name} Wi-Fi Channel",
|
||||
)
|
||||
super().__init__(coordinator=coordinator)
|
||||
self._attr_name = f"{coordinator.data.info.name} Wi-Fi Channel"
|
||||
self._attr_unique_id = f"{coordinator.data.info.mac_address}_wifi_channel"
|
||||
|
||||
@property
|
||||
def state(self) -> int:
|
||||
|
@ -226,19 +163,17 @@ class WLEDWifiChannelSensor(WLEDSensor):
|
|||
return self.coordinator.data.info.wifi.channel
|
||||
|
||||
|
||||
class WLEDWifiBSSIDSensor(WLEDSensor):
|
||||
class WLEDWifiBSSIDSensor(WLEDEntity, SensorEntity):
|
||||
"""Defines a WLED Wi-Fi BSSID sensor."""
|
||||
|
||||
def __init__(self, entry_id: str, coordinator: WLEDDataUpdateCoordinator) -> None:
|
||||
_attr_icon = "mdi:wifi"
|
||||
_attr_entity_registry_enabled_default = False
|
||||
|
||||
def __init__(self, coordinator: WLEDDataUpdateCoordinator) -> None:
|
||||
"""Initialize WLED Wi-Fi BSSID sensor."""
|
||||
super().__init__(
|
||||
coordinator=coordinator,
|
||||
enabled_default=False,
|
||||
entry_id=entry_id,
|
||||
icon="mdi:wifi",
|
||||
key="wifi_bssid",
|
||||
name=f"{coordinator.data.info.name} Wi-Fi BSSID",
|
||||
)
|
||||
super().__init__(coordinator=coordinator)
|
||||
self._attr_name = f"{coordinator.data.info.name} Wi-Fi BSSID"
|
||||
self._attr_unique_id = f"{coordinator.data.info.mac_address}_wifi_bssid"
|
||||
|
||||
@property
|
||||
def state(self) -> str:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue