Home Assistant Unofficial Reference 2024.12.1
switch.py
Go to the documentation of this file.
1 """KMtronic Switch integration."""
2 
3 from typing import Any
4 import urllib.parse
5 
6 from homeassistant.components.switch import SwitchEntity
7 from homeassistant.config_entries import ConfigEntry
8 from homeassistant.core import HomeAssistant
9 from homeassistant.helpers.device_registry import DeviceInfo
10 from homeassistant.helpers.entity_platform import AddEntitiesCallback
11 from homeassistant.helpers.update_coordinator import CoordinatorEntity
12 
13 from .const import CONF_REVERSE, DATA_COORDINATOR, DATA_HUB, DOMAIN, MANUFACTURER
14 
15 
17  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
18 ) -> None:
19  """Config entry example."""
20  coordinator = hass.data[DOMAIN][entry.entry_id][DATA_COORDINATOR]
21  hub = hass.data[DOMAIN][entry.entry_id][DATA_HUB]
22  reverse = entry.options.get(CONF_REVERSE, False)
23  await hub.async_get_relays()
24 
26  [
27  KMtronicSwitch(hub, coordinator, relay, reverse, entry.entry_id)
28  for relay in hub.relays
29  ]
30  )
31 
32 
34  """KMtronic Switch Entity."""
35 
36  _attr_translation_key = "relay"
37  _attr_has_entity_name = True
38 
39  def __init__(self, hub, coordinator, relay, reverse, config_entry_id):
40  """Pass coordinator to CoordinatorEntity."""
41  super().__init__(coordinator)
42  self._relay_relay = relay
43  self._reverse_reverse = reverse
44 
45  hostname = urllib.parse.urlsplit(hub.host).hostname
46  self._attr_device_info_attr_device_info = DeviceInfo(
47  identifiers={(DOMAIN, config_entry_id)},
48  name=f"Controller {hostname}",
49  manufacturer=MANUFACTURER,
50  configuration_url=hub.host,
51  )
52 
53  self._attr_translation_placeholders_attr_translation_placeholders = {"relay_id": relay.id}
54  self._attr_unique_id_attr_unique_id = f"{config_entry_id}_relay{relay.id}"
55 
56  @property
57  def is_on(self):
58  """Return entity state."""
59  if self._reverse_reverse:
60  return not self._relay_relay.is_energised
61  return self._relay_relay.is_energised
62 
63  async def async_turn_on(self, **kwargs: Any) -> None:
64  """Turn the switch on."""
65  if self._reverse_reverse:
66  await self._relay_relay.de_energise()
67  else:
68  await self._relay_relay.energise()
69  self.async_write_ha_stateasync_write_ha_state()
70 
71  async def async_turn_off(self, **kwargs: Any) -> None:
72  """Turn the switch off."""
73  if self._reverse_reverse:
74  await self._relay_relay.energise()
75  else:
76  await self._relay_relay.de_energise()
77  self.async_write_ha_stateasync_write_ha_state()
78 
79  async def async_toggle(self, **kwargs: Any) -> None:
80  """Toggle the switch."""
81  await self._relay_relay.toggle()
82  self.async_write_ha_stateasync_write_ha_state()
def __init__(self, hub, coordinator, relay, reverse, config_entry_id)
Definition: switch.py:39
None toggle(self, **Any kwargs)
Definition: entity.py:1714
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: switch.py:18