Home Assistant Unofficial Reference 2024.12.1
button.py
Go to the documentation of this file.
1 """GoodWe PV inverter selection settings entities."""
2 
3 from collections.abc import Awaitable, Callable
4 from dataclasses import dataclass
5 from datetime import datetime
6 import logging
7 
8 from goodwe import Inverter, InverterError
9 
10 from homeassistant.components.button import ButtonEntity, ButtonEntityDescription
11 from homeassistant.config_entries import ConfigEntry
12 from homeassistant.const import EntityCategory
13 from homeassistant.core import HomeAssistant
14 from homeassistant.helpers.device_registry import DeviceInfo
15 from homeassistant.helpers.entity_platform import AddEntitiesCallback
16 
17 from .const import DOMAIN, KEY_DEVICE_INFO, KEY_INVERTER
18 
19 _LOGGER = logging.getLogger(__name__)
20 
21 
22 @dataclass(frozen=True, kw_only=True)
24  """Class describing Goodwe button entities."""
25 
26  action: Callable[[Inverter], Awaitable[None]]
27 
28 
29 SYNCHRONIZE_CLOCK = GoodweButtonEntityDescription(
30  key="synchronize_clock",
31  translation_key="synchronize_clock",
32  entity_category=EntityCategory.CONFIG,
33  action=lambda inv: inv.write_setting("time", datetime.now()),
34 )
35 
36 
38  hass: HomeAssistant,
39  config_entry: ConfigEntry,
40  async_add_entities: AddEntitiesCallback,
41 ) -> None:
42  """Set up the inverter button entities from a config entry."""
43  inverter = hass.data[DOMAIN][config_entry.entry_id][KEY_INVERTER]
44  device_info = hass.data[DOMAIN][config_entry.entry_id][KEY_DEVICE_INFO]
45 
46  # read current time from the inverter
47  try:
48  await inverter.read_setting("time")
49  except (InverterError, ValueError):
50  # Inverter model does not support clock synchronization
51  _LOGGER.debug("Could not read inverter current clock time")
52  else:
54  [GoodweButtonEntity(device_info, SYNCHRONIZE_CLOCK, inverter)]
55  )
56 
57 
59  """Entity representing the inverter clock synchronization button."""
60 
61  _attr_should_poll = False
62  _attr_has_entity_name = True
63  entity_description: GoodweButtonEntityDescription
64 
65  def __init__(
66  self,
67  device_info: DeviceInfo,
68  description: GoodweButtonEntityDescription,
69  inverter: Inverter,
70  ) -> None:
71  """Initialize the inverter operation mode setting entity."""
72  self.entity_descriptionentity_description = description
73  self._attr_unique_id_attr_unique_id = f"{description.key}-{inverter.serial_number}"
74  self._attr_device_info_attr_device_info = device_info
75  self._inverter: Inverter = inverter
76 
77  async def async_press(self) -> None:
78  """Triggers the button press service."""
79  await self.entity_descriptionentity_description.action(self._inverter)
None __init__(self, DeviceInfo device_info, GoodweButtonEntityDescription description, Inverter inverter)
Definition: button.py:70
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: button.py:41