Home Assistant Unofficial Reference 2024.12.1
binary_sensor.py
Go to the documentation of this file.
1 """Binary Sensor for MeteoAlarm.eu."""
2 
3 from __future__ import annotations
4 
5 from datetime import timedelta
6 import logging
7 
8 from meteoalertapi import Meteoalert
9 import voluptuous as vol
10 
12  PLATFORM_SCHEMA as BINARY_SENSOR_PLATFORM_SCHEMA,
13  BinarySensorDeviceClass,
14  BinarySensorEntity,
15 )
16 from homeassistant.const import CONF_NAME
17 from homeassistant.core import HomeAssistant
19 from homeassistant.helpers.entity_platform import AddEntitiesCallback
20 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
21 import homeassistant.util.dt as dt_util
22 
23 _LOGGER = logging.getLogger(__name__)
24 
25 ATTRIBUTION = "Information provided by MeteoAlarm"
26 
27 CONF_COUNTRY = "country"
28 CONF_LANGUAGE = "language"
29 CONF_PROVINCE = "province"
30 
31 DEFAULT_NAME = "meteoalarm"
32 
33 SCAN_INTERVAL = timedelta(minutes=5)
34 
35 PLATFORM_SCHEMA = BINARY_SENSOR_PLATFORM_SCHEMA.extend(
36  {
37  vol.Required(CONF_COUNTRY): cv.string,
38  vol.Required(CONF_PROVINCE): cv.string,
39  vol.Optional(CONF_LANGUAGE, default="en"): cv.string,
40  vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
41  }
42 )
43 
44 
46  hass: HomeAssistant,
47  config: ConfigType,
48  add_entities: AddEntitiesCallback,
49  discovery_info: DiscoveryInfoType | None = None,
50 ) -> None:
51  """Set up the MeteoAlarm binary sensor platform."""
52 
53  country = config[CONF_COUNTRY]
54  province = config[CONF_PROVINCE]
55  language = config[CONF_LANGUAGE]
56  name = config[CONF_NAME]
57 
58  try:
59  api = Meteoalert(country, province, language)
60  except KeyError:
61  _LOGGER.error("Wrong country digits or province name")
62  return
63 
64  add_entities([MeteoAlertBinarySensor(api, name)], True)
65 
66 
68  """Representation of a MeteoAlert binary sensor."""
69 
70  _attr_attribution = ATTRIBUTION
71  _attr_device_class = BinarySensorDeviceClass.SAFETY
72 
73  def __init__(self, api, name):
74  """Initialize the MeteoAlert binary sensor."""
75  self._attr_name_attr_name = name
76  self._api_api = api
77 
78  def update(self) -> None:
79  """Update device state."""
80  self._attr_extra_state_attributes_attr_extra_state_attributes = {}
81  self._attr_is_on_attr_is_on = False
82 
83  if alert := self._api_api.get_alert():
84  expiration_date = dt_util.parse_datetime(alert["expires"])
85 
86  if expiration_date is not None and expiration_date > dt_util.utcnow():
87  self._attr_extra_state_attributes_attr_extra_state_attributes = alert
88  self._attr_is_on_attr_is_on = True
None add_entities(AsusWrtRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)