Home Assistant Unofficial Reference 2024.12.1
button.py
Go to the documentation of this file.
1 """Support for AVM FRITZ!SmartHome templates."""
2 
3 from pyfritzhome.devicetypes import FritzhomeTemplate
4 
5 from homeassistant.components.button import ButtonEntity
6 from homeassistant.core import HomeAssistant, callback
7 from homeassistant.helpers.device_registry import DeviceInfo
8 from homeassistant.helpers.entity_platform import AddEntitiesCallback
9 
10 from .const import DOMAIN
11 from .coordinator import FritzboxConfigEntry
12 from .entity import FritzBoxEntity
13 
14 
16  hass: HomeAssistant,
17  entry: FritzboxConfigEntry,
18  async_add_entities: AddEntitiesCallback,
19 ) -> None:
20  """Set up the FRITZ!SmartHome template from ConfigEntry."""
21  coordinator = entry.runtime_data
22 
23  @callback
24  def _add_entities(templates: set[str] | None = None) -> None:
25  """Add templates."""
26  if templates is None:
27  templates = coordinator.new_templates
28  if not templates:
29  return
30  async_add_entities(FritzBoxTemplate(coordinator, ain) for ain in templates)
31 
32  entry.async_on_unload(coordinator.async_add_listener(_add_entities))
33 
34  _add_entities(set(coordinator.data.templates))
35 
36 
38  """Interface between FritzhomeTemplate and hass."""
39 
40  @property
41  def data(self) -> FritzhomeTemplate:
42  """Return the template data entity."""
43  return self.coordinator.data.templates[self.ainain]
44 
45  @property
46  def device_info(self) -> DeviceInfo:
47  """Return device specific attributes."""
48  return DeviceInfo(
49  name=self.datadatadatadatadata.name,
50  identifiers={(DOMAIN, self.ainain)},
51  configuration_url=self.coordinator.configuration_url,
52  manufacturer="AVM",
53  model="SmartHome Template",
54  )
55 
56  async def async_press(self) -> None:
57  """Apply template and refresh."""
58  await self.hasshasshass.async_add_executor_job(self.apply_templateapply_template)
59  await self.coordinator.async_refresh()
60 
61  def apply_template(self) -> None:
62  """Use Fritzhome to apply the template via ain."""
63  self.coordinator.fritz.apply_template(self.ainain)
None async_setup_entry(HomeAssistant hass, FritzboxConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: button.py:19