Skip to content

Commit 583b439

Browse files
authored
Add Shelly number translation (home-assistant#156156)
Signed-off-by: David Rapan <[email protected]>
1 parent 05922de commit 583b439

File tree

4 files changed

+52
-16
lines changed

4 files changed

+52
-16
lines changed

homeassistant/components/shelly/number.py

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
from homeassistant.components.number import (
1414
DOMAIN as NUMBER_PLATFORM,
15+
NumberDeviceClass,
1516
NumberEntity,
1617
NumberEntityDescription,
1718
NumberExtraStoredData,
@@ -107,6 +108,9 @@ def __init__(
107108
if description.mode_fn is not None:
108109
self._attr_mode = description.mode_fn(coordinator.device.config[key])
109110

111+
if hasattr(self, "_attr_name") and description.role != ROLE_GENERIC:
112+
delattr(self, "_attr_name")
113+
110114
@property
111115
def native_value(self) -> float | None:
112116
"""Return value of number."""
@@ -181,7 +185,6 @@ async def async_set_native_value(self, value: float) -> None:
181185
("device", "valvePos"): BlockNumberDescription(
182186
key="device|valvepos",
183187
translation_key="valve_position",
184-
name="Valve position",
185188
native_unit_of_measurement=PERCENTAGE,
186189
available=lambda block: cast(int, block.valveError) != 1,
187190
entity_category=EntityCategory.CONFIG,
@@ -200,20 +203,20 @@ async def async_set_native_value(self, value: float) -> None:
200203
key="blutrv",
201204
sub_key="current_C",
202205
translation_key="external_temperature",
203-
name="External temperature",
204206
native_min_value=-50,
205207
native_max_value=50,
206208
native_step=0.1,
207209
mode=NumberMode.BOX,
208210
entity_category=EntityCategory.CONFIG,
211+
device_class=NumberDeviceClass.TEMPERATURE,
209212
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
210213
method="blu_trv_set_external_temperature",
211214
entity_class=RpcBluTrvExtTempNumber,
212215
),
213216
"number_generic": RpcNumberDescription(
214217
key="number",
215218
sub_key="value",
216-
removal_condition=lambda config, _status, key: not is_view_for_platform(
219+
removal_condition=lambda config, _, key: not is_view_for_platform(
217220
config, key, NUMBER_PLATFORM
218221
),
219222
max_fn=lambda config: config["max"],
@@ -229,9 +232,11 @@ async def async_set_native_value(self, value: float) -> None:
229232
"number_current_limit": RpcNumberDescription(
230233
key="number",
231234
sub_key="value",
235+
translation_key="current_limit",
236+
device_class=NumberDeviceClass.CURRENT,
232237
max_fn=lambda config: config["max"],
233238
min_fn=lambda config: config["min"],
234-
mode_fn=lambda config: NumberMode.SLIDER,
239+
mode_fn=lambda _: NumberMode.SLIDER,
235240
step_fn=lambda config: config["meta"]["ui"].get("step"),
236241
unit=get_virtual_component_unit,
237242
method="number_set",
@@ -241,10 +246,11 @@ async def async_set_native_value(self, value: float) -> None:
241246
"number_position": RpcNumberDescription(
242247
key="number",
243248
sub_key="value",
249+
translation_key="valve_position",
244250
entity_registry_enabled_default=False,
245251
max_fn=lambda config: config["max"],
246252
min_fn=lambda config: config["min"],
247-
mode_fn=lambda config: NumberMode.SLIDER,
253+
mode_fn=lambda _: NumberMode.SLIDER,
248254
step_fn=lambda config: config["meta"]["ui"].get("step"),
249255
unit=get_virtual_component_unit,
250256
method="number_set",
@@ -254,10 +260,12 @@ async def async_set_native_value(self, value: float) -> None:
254260
"number_target_humidity": RpcNumberDescription(
255261
key="number",
256262
sub_key="value",
263+
translation_key="target_humidity",
264+
device_class=NumberDeviceClass.HUMIDITY,
257265
entity_registry_enabled_default=False,
258266
max_fn=lambda config: config["max"],
259267
min_fn=lambda config: config["min"],
260-
mode_fn=lambda config: NumberMode.SLIDER,
268+
mode_fn=lambda _: NumberMode.SLIDER,
261269
step_fn=lambda config: config["meta"]["ui"].get("step"),
262270
unit=get_virtual_component_unit,
263271
method="number_set",
@@ -267,10 +275,12 @@ async def async_set_native_value(self, value: float) -> None:
267275
"number_target_temperature": RpcNumberDescription(
268276
key="number",
269277
sub_key="value",
278+
translation_key="target_temperature",
279+
device_class=NumberDeviceClass.TEMPERATURE,
270280
entity_registry_enabled_default=False,
271281
max_fn=lambda config: config["max"],
272282
min_fn=lambda config: config["min"],
273-
mode_fn=lambda config: NumberMode.SLIDER,
283+
mode_fn=lambda _: NumberMode.SLIDER,
274284
step_fn=lambda config: config["meta"]["ui"].get("step"),
275285
unit=get_virtual_component_unit,
276286
method="number_set",
@@ -281,21 +291,20 @@ async def async_set_native_value(self, value: float) -> None:
281291
key="blutrv",
282292
sub_key="pos",
283293
translation_key="valve_position",
284-
name="Valve position",
285294
native_min_value=0,
286295
native_max_value=100,
287296
native_step=1,
288297
mode=NumberMode.SLIDER,
289298
native_unit_of_measurement=PERCENTAGE,
290299
method="blu_trv_set_valve_position",
291-
removal_condition=lambda config, _status, key: config[key].get("enable", True)
300+
removal_condition=lambda config, _, key: config[key].get("enable", True)
292301
is True,
293302
entity_class=RpcBluTrvNumber,
294303
),
295304
"left_slot_intensity": RpcNumberDescription(
296305
key="cury",
297306
sub_key="slots",
298-
name="Left slot intensity",
307+
translation_key="left_slot_intensity",
299308
value=lambda status, _: status["left"]["intensity"],
300309
native_min_value=0,
301310
native_max_value=100,
@@ -311,7 +320,7 @@ async def async_set_native_value(self, value: float) -> None:
311320
"right_slot_intensity": RpcNumberDescription(
312321
key="cury",
313322
sub_key="slots",
314-
name="Right slot intensity",
323+
translation_key="right_slot_intensity",
315324
value=lambda status, _: status["right"]["intensity"],
316325
native_min_value=0,
317326
native_max_value=100,
@@ -402,6 +411,9 @@ def __init__(
402411
self.restored_data: NumberExtraStoredData | None = None
403412
super().__init__(coordinator, block, attribute, description, entry)
404413

414+
if hasattr(self, "_attr_name"):
415+
delattr(self, "_attr_name")
416+
405417
async def async_added_to_hass(self) -> None:
406418
"""Handle entity which will be added."""
407419
await super().async_added_to_hass()

homeassistant/components/shelly/strings.json

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,29 @@
188188
}
189189
}
190190
},
191+
"number": {
192+
"current_limit": {
193+
"name": "Current limit"
194+
},
195+
"external_temperature": {
196+
"name": "External temperature"
197+
},
198+
"left_slot_intensity": {
199+
"name": "Left slot intensity"
200+
},
201+
"right_slot_intensity": {
202+
"name": "Right slot intensity"
203+
},
204+
"target_humidity": {
205+
"name": "Target humidity"
206+
},
207+
"target_temperature": {
208+
"name": "Target temperature"
209+
},
210+
"valve_position": {
211+
"name": "Valve position"
212+
}
213+
},
191214
"select": {
192215
"cury_mode": {
193216
"name": "Mode",

tests/components/shelly/snapshots/test_devices.ambr

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@
181181
'previous_unique_id': None,
182182
'suggested_object_id': None,
183183
'supported_features': 0,
184-
'translation_key': None,
184+
'translation_key': 'left_slot_intensity',
185185
'unique_id': '123456789ABC-cury:0-left_slot_intensity',
186186
'unit_of_measurement': '%',
187187
})
@@ -239,7 +239,7 @@
239239
'previous_unique_id': None,
240240
'suggested_object_id': None,
241241
'supported_features': 0,
242-
'translation_key': None,
242+
'translation_key': 'right_slot_intensity',
243243
'unique_id': '123456789ABC-cury:0-right_slot_intensity',
244244
'unit_of_measurement': '%',
245245
})

tests/components/shelly/snapshots/test_number.ambr

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
'name': None,
2828
'options': dict({
2929
}),
30-
'original_device_class': None,
30+
'original_device_class': <NumberDeviceClass.TEMPERATURE: 'temperature'>,
3131
'original_icon': None,
3232
'original_name': 'External temperature',
3333
'platform': 'shelly',
@@ -42,6 +42,7 @@
4242
# name: test_blu_trv_number_entity[number.trv_name_external_temperature-state]
4343
StateSnapshot({
4444
'attributes': ReadOnlyDict({
45+
'device_class': 'temperature',
4546
'friendly_name': 'TRV-Name External temperature',
4647
'max': 50,
4748
'min': -50,
@@ -150,7 +151,7 @@
150151
'previous_unique_id': None,
151152
'suggested_object_id': None,
152153
'supported_features': 0,
153-
'translation_key': None,
154+
'translation_key': 'left_slot_intensity',
154155
'unique_id': '123456789ABC-cury:0-left_slot_intensity',
155156
'unit_of_measurement': '%',
156157
})
@@ -208,7 +209,7 @@
208209
'previous_unique_id': None,
209210
'suggested_object_id': None,
210211
'supported_features': 0,
211-
'translation_key': None,
212+
'translation_key': 'right_slot_intensity',
212213
'unique_id': '123456789ABC-cury:0-right_slot_intensity',
213214
'unit_of_measurement': '%',
214215
})

0 commit comments

Comments
 (0)