Use value_fn in WLED number (#79865)

This commit is contained in:
Marc Mueller 2022-10-08 12:34:41 +02:00 committed by GitHub
parent e7b550685e
commit c6df823b35
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,8 +1,12 @@
"""Support for LED numbers."""
from __future__ import annotations
from collections.abc import Callable
from dataclasses import dataclass
from functools import partial
from wled import Segment
from homeassistant.components.number import NumberEntity, NumberEntityDescription
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, callback
@ -35,8 +39,20 @@ async def async_setup_entry(
update_segments()
@dataclass
class WLEDNumberDescriptionMixin:
"""Mixin for WLED number."""
value_fn: Callable[[Segment], float | None]
@dataclass
class WLEDNumberEntityDescription(NumberEntityDescription, WLEDNumberDescriptionMixin):
"""Class describing WLED number entities."""
NUMBERS = [
NumberEntityDescription(
WLEDNumberEntityDescription(
key=ATTR_SPEED,
name="Speed",
icon="mdi:speedometer",
@ -44,14 +60,16 @@ NUMBERS = [
native_step=1,
native_min_value=0,
native_max_value=255,
value_fn=lambda segment: segment.speed,
),
NumberEntityDescription(
WLEDNumberEntityDescription(
key=ATTR_INTENSITY,
name="Intensity",
entity_category=EntityCategory.CONFIG,
native_step=1,
native_min_value=0,
native_max_value=255,
value_fn=lambda segment: segment.intensity,
),
]
@ -59,11 +77,13 @@ NUMBERS = [
class WLEDNumber(WLEDEntity, NumberEntity):
"""Defines a WLED speed number."""
entity_description: WLEDNumberEntityDescription
def __init__(
self,
coordinator: WLEDDataUpdateCoordinator,
segment: int,
description: NumberEntityDescription,
description: WLEDNumberEntityDescription,
) -> None:
"""Initialize WLED ."""
super().__init__(coordinator=coordinator)
@ -92,9 +112,8 @@ class WLEDNumber(WLEDEntity, NumberEntity):
@property
def native_value(self) -> float | None:
"""Return the current WLED segment number value."""
return getattr( # type: ignore[no-any-return]
self.coordinator.data.state.segments[self._segment],
self.entity_description.key,
return self.entity_description.value_fn(
self.coordinator.data.state.segments[self._segment]
)
@wled_exception_handler