Home Assistant Unofficial Reference 2024.12.1
switch.py
Go to the documentation of this file.
1 """Support for Yardian integration."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 import voluptuous as vol
8 
9 from homeassistant.components.switch import SwitchEntity
10 from homeassistant.config_entries import ConfigEntry
11 from homeassistant.core import HomeAssistant
12 from homeassistant.helpers import config_validation as cv, entity_platform
13 from homeassistant.helpers.entity_platform import AddEntitiesCallback
14 from homeassistant.helpers.typing import VolDictType
15 from homeassistant.helpers.update_coordinator import CoordinatorEntity
16 
17 from .const import DEFAULT_WATERING_DURATION, DOMAIN
18 from .coordinator import YardianUpdateCoordinator
19 
20 SERVICE_START_IRRIGATION = "start_irrigation"
21 SERVICE_SCHEMA_START_IRRIGATION: VolDictType = {
22  vol.Required("duration"): cv.positive_int,
23 }
24 
25 
27  hass: HomeAssistant,
28  config_entry: ConfigEntry,
29  async_add_entities: AddEntitiesCallback,
30 ) -> None:
31  """Set up entry for a Yardian irrigation switches."""
32  coordinator = hass.data[DOMAIN][config_entry.entry_id]
35  coordinator,
36  i,
37  )
38  for i in range(len(coordinator.data.zones))
39  )
40 
41  platform = entity_platform.async_get_current_platform()
42  platform.async_register_entity_service(
43  SERVICE_START_IRRIGATION,
44  SERVICE_SCHEMA_START_IRRIGATION,
45  "async_turn_on",
46  )
47 
48 
49 class YardianSwitch(CoordinatorEntity[YardianUpdateCoordinator], SwitchEntity):
50  """Representation of a Yardian switch."""
51 
52  _attr_has_entity_name = True
53  _attr_translation_key = "switch"
54 
55  def __init__(self, coordinator: YardianUpdateCoordinator, zone_id) -> None:
56  """Initialize a Yardian Switch Device."""
57  super().__init__(coordinator)
58  self._zone_id_zone_id = zone_id
59  self._attr_unique_id_attr_unique_id = f"{coordinator.yid}-{zone_id}"
60  self._attr_device_info_attr_device_info = coordinator.device_info
61 
62  @property
63  def name(self) -> str:
64  """Return the zone name."""
65  return self.coordinator.data.zones[self._zone_id_zone_id][0]
66 
67  @property
68  def is_on(self) -> bool:
69  """Return true if switch is on."""
70  return self._zone_id_zone_id in self.coordinator.data.active_zones
71 
72  @property
73  def available(self) -> bool:
74  """Return the switch is available or not."""
75  return self.coordinator.data.zones[self._zone_id_zone_id][1] == 1
76 
77  async def async_turn_on(self, **kwargs: Any) -> None:
78  """Turn the switch on."""
79  await self.coordinator.controller.start_irrigation(
80  self._zone_id_zone_id,
81  kwargs.get("duration", DEFAULT_WATERING_DURATION),
82  )
83  await self.coordinator.async_request_refresh()
84 
85  async def async_turn_off(self, **kwargs: Any) -> None:
86  """Turn the switch off."""
87  await self.coordinator.controller.stop_irrigation()
88  await self.coordinator.async_request_refresh()
None __init__(self, YardianUpdateCoordinator coordinator, zone_id)
Definition: switch.py:55
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: switch.py:30