1 """Support for WiZ effect speed numbers."""
3 from __future__
import annotations
5 from collections.abc
import Callable, Coroutine
6 from dataclasses
import dataclass
7 from typing
import cast
9 from pywizlight
import wizlight
13 NumberEntityDescription,
20 from .
import WizConfigEntry
21 from .entity
import WizEntity
22 from .models
import WizData
25 @dataclass(frozen=True, kw_only=True)
27 """Class to describe a WiZ number entity."""
30 set_value_fn: Callable[[wizlight, int], Coroutine[
None,
None,
None]]
31 value_fn: Callable[[wizlight], int |
None]
35 await device.set_speed(speed)
39 await device.set_ratio(ratio)
42 NUMBERS: tuple[WizNumberEntityDescription, ...] = (
45 translation_key=
"effect_speed",
49 value_fn=
lambda device: cast(int |
None, device.state.get_speed()),
50 set_value_fn=_async_set_speed,
51 required_feature=
"effect",
52 entity_category=EntityCategory.CONFIG,
55 key=
"dual_head_ratio",
56 translation_key=
"dual_head_ratio",
60 value_fn=
lambda device: cast(int |
None, device.state.get_ratio()),
61 set_value_fn=_async_set_ratio,
62 required_feature=
"dual_head",
63 entity_category=EntityCategory.CONFIG,
70 entry: WizConfigEntry,
71 async_add_entities: AddEntitiesCallback,
73 """Set up the wiz speed number."""
76 for description
in NUMBERS
78 entry.runtime_data.bulb.bulbtype.features, description.required_feature
84 """Defines a WiZ speed number."""
86 entity_description: WizNumberEntityDescription
87 _attr_mode = NumberMode.SLIDER
90 self, wiz_data: WizData, name: str, description: WizNumberEntityDescription
92 """Initialize an WiZ device."""
100 """Return if entity is available."""
108 """Handle updating _attr values."""
113 """Set the speed value."""
None _async_update_attrs(self)
None async_set_native_value(self, float value)
None __init__(self, WizData wiz_data, str name, WizNumberEntityDescription description)
None _async_update_attrs(self)
None async_request_refresh(self)
None async_setup_entry(HomeAssistant hass, WizConfigEntry entry, AddEntitiesCallback async_add_entities)
None _async_set_speed(wizlight device, int speed)
None _async_set_ratio(wizlight device, int ratio)