1 """Number entity for myUplink."""
3 from aiohttp
import ClientError
4 from myuplink
import DevicePoint
12 from .
import MyUplinkConfigEntry, MyUplinkDataCoordinator
13 from .const
import F_SERIES
14 from .entity
import MyUplinkEntity
15 from .helpers
import find_matching_platform, skip_entity, transform_model_series
17 DEVICE_POINT_UNIT_DESCRIPTIONS: dict[str, NumberEntityDescription] = {
20 translation_key=
"degree_minutes",
21 native_unit_of_measurement=
"DM",
25 CATEGORY_BASED_DESCRIPTIONS: dict[str, dict[str, NumberEntityDescription]] = {
29 translation_key=
"degree_minutes",
30 native_unit_of_measurement=
"DM",
36 translation_key=
"degree_minutes",
37 native_unit_of_measurement=
"DM",
44 """Get description for a device point.
47 1. Category specific prefix e.g "NIBEF"
48 2. Global parameter_unit e.g. "DM"
51 prefix, _, _ = device_point.category.partition(
" ")
53 description = CATEGORY_BASED_DESCRIPTIONS.get(prefix, {}).
get(
54 device_point.parameter_id
57 if description
is None:
58 description = DEVICE_POINT_UNIT_DESCRIPTIONS.get(device_point.parameter_unit)
65 config_entry: MyUplinkConfigEntry,
66 async_add_entities: AddEntitiesCallback,
68 """Set up myUplink number."""
69 entities: list[NumberEntity] = []
70 coordinator = config_entry.runtime_data
73 for device_id, point_data
in coordinator.data.points.items():
74 for point_id, device_point
in point_data.items():
75 if skip_entity(device_point.category, device_point):
81 coordinator=coordinator,
83 device_point=device_point,
84 entity_description=description,
85 unique_id_suffix=point_id,
93 """Representation of a myUplink number entity."""
97 coordinator: MyUplinkDataCoordinator,
99 device_point: DevicePoint,
100 entity_description: NumberEntityDescription |
None,
101 unique_id_suffix: str,
103 """Initialize the number."""
105 coordinator=coordinator,
107 unique_id_suffix=unique_id_suffix,
114 device_point.raw[
"minValue"]
if device_point.raw[
"minValue"]
else -30000
115 ) *
float(device_point.raw.get(
"scaleValue", 1))
117 device_point.raw[
"maxValue"]
if device_point.raw[
"maxValue"]
else 30000
118 ) *
float(device_point.raw.get(
"scaleValue", 1))
120 if entity_description
is not None:
125 """Number state value."""
126 device_point = self.coordinator.data.points[self.
device_iddevice_id][self.
point_idpoint_id]
127 return float(device_point.value)
130 """Update the current value."""
132 await self.coordinator.api.async_set_device_points(
135 except ClientError
as err:
137 f
"Failed to set new value {value} for {self.point_id}/{self.entity_id}"
None async_set_native_value(self, float value)
None __init__(self, MyUplinkDataCoordinator coordinator, str device_id, DevicePoint device_point, NumberEntityDescription|None entity_description, str unique_id_suffix)
None async_request_refresh(self)
web.Response get(self, web.Request request, str config_key)
str transform_model_series(str prefix)
bool skip_entity(str model, DevicePoint device_point)
Platform find_matching_platform(DevicePoint device_point, SensorEntityDescription|NumberEntityDescription|None description=None)
NumberEntityDescription|None get_description(DevicePoint device_point)
None async_setup_entry(HomeAssistant hass, MyUplinkConfigEntry config_entry, AddEntitiesCallback async_add_entities)