Home Assistant Unofficial Reference 2024.12.1
number.py
Go to the documentation of this file.
1 """Support for MotionMount numeric control."""
2 
3 import socket
4 
5 import motionmount
6 
7 from homeassistant.components.number import NumberEntity
8 from homeassistant.config_entries import ConfigEntry
9 from homeassistant.const import PERCENTAGE
10 from homeassistant.core import HomeAssistant
11 from homeassistant.exceptions import HomeAssistantError
12 from homeassistant.helpers.entity_platform import AddEntitiesCallback
13 
14 from .const import DOMAIN
15 from .entity import MotionMountEntity
16 
17 
19  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
20 ) -> None:
21  """Set up Vogel's MotionMount from a config entry."""
22  mm: motionmount.MotionMount = hass.data[DOMAIN][entry.entry_id]
23 
25  (
26  MotionMountExtension(mm, entry),
27  MotionMountTurn(mm, entry),
28  )
29  )
30 
31 
33  """The target extension position of a MotionMount."""
34 
35  _attr_native_max_value = 100
36  _attr_native_min_value = 0
37  _attr_native_unit_of_measurement = PERCENTAGE
38  _attr_translation_key = "motionmount_extension"
39 
40  def __init__(self, mm: motionmount.MotionMount, config_entry: ConfigEntry) -> None:
41  """Initialize Extension number."""
42  super().__init__(mm, config_entry)
43  self._attr_unique_id_attr_unique_id = f"{self._base_unique_id}-extension"
44 
45  @property
46  def native_value(self) -> float:
47  """Get native value."""
48  return float(self.mmmm.extension or 0)
49 
50  async def async_set_native_value(self, value: float) -> None:
51  """Set the new value for extension."""
52  try:
53  await self.mmmm.set_extension(int(value))
54  except (TimeoutError, socket.gaierror) as ex:
55  raise HomeAssistantError(
56  translation_domain=DOMAIN,
57  translation_key="failed_communication",
58  ) from ex
59 
60 
62  """The target turn position of a MotionMount."""
63 
64  _attr_native_max_value = 100
65  _attr_native_min_value = -100
66  _attr_native_unit_of_measurement = PERCENTAGE
67  _attr_translation_key = "motionmount_turn"
68 
69  def __init__(self, mm: motionmount.MotionMount, config_entry: ConfigEntry) -> None:
70  """Initialize Turn number."""
71  super().__init__(mm, config_entry)
72  self._attr_unique_id_attr_unique_id = f"{self._base_unique_id}-turn"
73 
74  @property
75  def native_value(self) -> float:
76  """Get native value."""
77  return float(self.mmmm.turn or 0) * -1
78 
79  async def async_set_native_value(self, value: float) -> None:
80  """Set the new value for turn."""
81  try:
82  await self.mmmm.set_turn(int(value * -1))
83  except (TimeoutError, socket.gaierror) as ex:
84  raise HomeAssistantError(
85  translation_domain=DOMAIN,
86  translation_key="failed_communication",
87  ) from ex
None __init__(self, motionmount.MotionMount mm, ConfigEntry config_entry)
Definition: number.py:40
None __init__(self, motionmount.MotionMount mm, ConfigEntry config_entry)
Definition: number.py:69
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: number.py:20