Home Assistant Unofficial Reference 2024.12.1
select.py
Go to the documentation of this file.
1 """Support for ADS select entities."""
2 
3 from __future__ import annotations
4 
5 import pyads
6 import voluptuous as vol
7 
9  PLATFORM_SCHEMA as SELECT_PLATFORM_SCHEMA,
10  SelectEntity,
11 )
12 from homeassistant.const import CONF_NAME
13 from homeassistant.core import HomeAssistant
15 from homeassistant.helpers.entity_platform import AddEntitiesCallback
16 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
17 
18 from .const import CONF_ADS_VAR, DATA_ADS
19 from .entity import AdsEntity
20 from .hub import AdsHub
21 
22 DEFAULT_NAME = "ADS select"
23 
24 CONF_OPTIONS = "options"
25 
26 PLATFORM_SCHEMA = SELECT_PLATFORM_SCHEMA.extend(
27  {
28  vol.Required(CONF_ADS_VAR): cv.string,
29  vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
30  vol.Required(CONF_OPTIONS): vol.All(cv.ensure_list, [cv.string]),
31  }
32 )
33 
34 
36  hass: HomeAssistant,
37  config: ConfigType,
38  add_entities: AddEntitiesCallback,
39  discovery_info: DiscoveryInfoType | None = None,
40 ) -> None:
41  """Set up an ADS select device."""
42  ads_hub = hass.data[DATA_ADS]
43 
44  ads_var: str = config[CONF_ADS_VAR]
45  name: str = config[CONF_NAME]
46  options: list[str] = config[CONF_OPTIONS]
47 
48  entity = AdsSelect(ads_hub, ads_var, name, options)
49 
50  add_entities([entity])
51 
52 
54  """Representation of an ADS select entity."""
55 
56  def __init__(
57  self,
58  ads_hub: AdsHub,
59  ads_var: str,
60  name: str,
61  options: list[str],
62  ) -> None:
63  """Initialize the AdsSelect entity."""
64  super().__init__(ads_hub, name, ads_var)
65  self._attr_options_attr_options = options
66  self._attr_current_option_attr_current_option = None
67 
68  async def async_added_to_hass(self) -> None:
69  """Register device notification."""
70  await self.async_initialize_deviceasync_initialize_device(self._ads_var_ads_var, pyads.PLCTYPE_INT)
71  self._ads_hub_ads_hub.add_device_notification(
72  self._ads_var_ads_var, pyads.PLCTYPE_INT, self._handle_ads_value_handle_ads_value
73  )
74 
75  def select_option(self, option: str) -> None:
76  """Change the selected option."""
77  if option in self._attr_options_attr_options:
78  index = self._attr_options_attr_options.index(option)
79  self._ads_hub_ads_hub.write_by_name(self._ads_var_ads_var, index, pyads.PLCTYPE_INT)
80  self._attr_current_option_attr_current_option = option
81 
82  def _handle_ads_value(self, name: str, value: int) -> None:
83  """Handle the value update from ADS."""
84  if 0 <= value < len(self._attr_options_attr_options):
85  self._attr_current_option_attr_current_option = self._attr_options_attr_options[value]
86  self.schedule_update_ha_stateschedule_update_ha_state()
None async_initialize_device(self, str ads_var, type plctype, str state_key=STATE_KEY_STATE, int|None factor=None)
Definition: entity.py:37
None _handle_ads_value(self, str name, int value)
Definition: select.py:82
None __init__(self, AdsHub ads_hub, str ads_var, str name, list[str] options)
Definition: select.py:62
None select_option(self, str option)
Definition: select.py:75
None schedule_update_ha_state(self, bool force_refresh=False)
Definition: entity.py:1244
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)
Definition: select.py:40
None add_entities(AsusWrtRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)