Use entity class vars in WLED (#50975)

This commit is contained in:
Franck Nijhof 2021-05-26 14:08:09 +02:00 committed by GitHub
parent 5a5a145778
commit bf13af34b4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 117 additions and 263 deletions

View file

@ -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: