Home Assistant Unofficial Reference 2024.12.1
notify.py
Go to the documentation of this file.
1 """Support for LaMetric notifications."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 from demetriek import (
8  LaMetricDevice,
9  LaMetricError,
10  Model,
11  Notification,
12  NotificationIconType,
13  NotificationPriority,
14  Simple,
15  Sound,
16 )
17 
18 from homeassistant.components.notify import ATTR_DATA, BaseNotificationService
19 from homeassistant.const import CONF_ICON
20 from homeassistant.core import HomeAssistant
21 from homeassistant.exceptions import HomeAssistantError
22 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
23 
24 from .const import CONF_CYCLES, CONF_ICON_TYPE, CONF_PRIORITY, CONF_SOUND, DOMAIN
25 from .coordinator import LaMetricDataUpdateCoordinator
26 
27 
29  hass: HomeAssistant,
30  config: ConfigType,
31  discovery_info: DiscoveryInfoType | None = None,
32 ) -> LaMetricNotificationService | None:
33  """Get the LaMetric notification service."""
34  if discovery_info is None:
35  return None
36  coordinator: LaMetricDataUpdateCoordinator = hass.data[DOMAIN][
37  discovery_info["entry_id"]
38  ]
39  return LaMetricNotificationService(coordinator.lametric)
40 
41 
42 class LaMetricNotificationService(BaseNotificationService):
43  """Implement the notification service for LaMetric."""
44 
45  def __init__(self, lametric: LaMetricDevice) -> None:
46  """Initialize the service."""
47  self.lametriclametric = lametric
48 
49  async def async_send_message(self, message: str = "", **kwargs: Any) -> None:
50  """Send a message to a LaMetric device."""
51  if not (data := kwargs.get(ATTR_DATA)):
52  data = {}
53 
54  sound = None
55  if CONF_SOUND in data:
56  sound = Sound(sound=data[CONF_SOUND], category=None)
57 
58  notification = Notification(
59  icon_type=NotificationIconType(data.get(CONF_ICON_TYPE, "none")),
60  priority=NotificationPriority(data.get(CONF_PRIORITY, "info")),
61  model=Model(
62  frames=[
63  Simple(
64  icon=data.get(CONF_ICON, "a7956"),
65  text=message,
66  )
67  ],
68  cycles=int(data.get(CONF_CYCLES, 1)),
69  sound=sound,
70  ),
71  )
72 
73  try:
74  await self.lametriclametric.notify(notification=notification)
75  except LaMetricError as ex:
76  raise HomeAssistantError("Could not send LaMetric notification") from ex
None async_send_message(self, str message="", **Any kwargs)
Definition: notify.py:49
LaMetricNotificationService|None async_get_service(HomeAssistant hass, ConfigType config, DiscoveryInfoType|None discovery_info=None)
Definition: notify.py:32