Home Assistant Unofficial Reference 2024.12.1
switch.py
Go to the documentation of this file.
1 """Support for switch entities."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 from gardena_bluetooth.const import Valve
8 
9 from homeassistant.components.switch import SwitchEntity
10 from homeassistant.core import HomeAssistant
11 from homeassistant.exceptions import HomeAssistantError
12 from homeassistant.helpers.entity_platform import AddEntitiesCallback
13 
14 from . import GardenaBluetoothConfigEntry
15 from .coordinator import GardenaBluetoothCoordinator
16 from .entity import GardenaBluetoothEntity
17 
18 
20  hass: HomeAssistant,
21  entry: GardenaBluetoothConfigEntry,
22  async_add_entities: AddEntitiesCallback,
23 ) -> None:
24  """Set up switch based on a config entry."""
25  coordinator = entry.runtime_data
26  entities = []
27  if GardenaBluetoothValveSwitch.characteristics.issubset(
28  coordinator.characteristics
29  ):
30  entities.append(GardenaBluetoothValveSwitch(coordinator))
31 
32  async_add_entities(entities)
33 
34 
36  """Representation of a valve switch."""
37 
38  characteristics = {
39  Valve.state.uuid,
40  Valve.manual_watering_time.uuid,
41  Valve.remaining_open_time.uuid,
42  }
43 
44  def __init__(
45  self,
46  coordinator: GardenaBluetoothCoordinator,
47  ) -> None:
48  """Initialize the switch."""
49  super().__init__(
50  coordinator, {Valve.state.uuid, Valve.manual_watering_time.uuid}
51  )
52  self._attr_unique_id_attr_unique_id = f"{coordinator.address}-{Valve.state.uuid}"
53  self._attr_translation_key_attr_translation_key = "state"
54  self._attr_is_on_attr_is_on = None
55  self._attr_entity_registry_enabled_default_attr_entity_registry_enabled_default = False
56 
57  def _handle_coordinator_update(self) -> None:
58  self._attr_is_on_attr_is_on = self.coordinator.get_cached(Valve.state)
60 
61  async def async_turn_on(self, **kwargs: Any) -> None:
62  """Turn the entity on."""
63  if not (data := self.coordinator.data.get(Valve.manual_watering_time.uuid)):
64  raise HomeAssistantError("Unable to get manual activation time.")
65 
66  value = Valve.manual_watering_time.decode(data)
67  await self.coordinator.write(Valve.remaining_open_time, value)
68  self._attr_is_on_attr_is_on = True
69  self.async_write_ha_stateasync_write_ha_state()
70 
71  async def async_turn_off(self, **kwargs: Any) -> None:
72  """Turn the entity off."""
73  await self.coordinator.write(Valve.remaining_open_time, 0)
74  self._attr_is_on_attr_is_on = False
75  self.async_write_ha_stateasync_write_ha_state()
CharacteristicType|None get_cached(self, Characteristic[CharacteristicType] char)
Definition: coordinator.py:80
None write(self, Characteristic[CharacteristicType] char, CharacteristicType value)
Definition: coordinator.py:88
None __init__(self, GardenaBluetoothCoordinator coordinator)
Definition: switch.py:47
None async_setup_entry(HomeAssistant hass, GardenaBluetoothConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: switch.py:23