1 """Support for getting statistical data from a DWD Weather Warnings.
3 Data is fetched from DWD:
4 https://rcccm.dwd.de/DE/wetter/warnungen_aktuell/objekt_einbindung/objekteinbindung.html
6 Warnungen vor extremem Unwetter (Stufe 4) # codespell:ignore vor
7 Unwetterwarnungen (Stufe 3)
8 Warnungen vor markantem Wetter (Stufe 2) # codespell:ignore vor
9 Wetterwarnungen (Stufe 1)
12 from __future__
import annotations
14 from typing
import Any
23 ADVANCE_WARNING_SENSOR,
24 API_ATTR_WARNING_COLOR,
25 API_ATTR_WARNING_DESCRIPTION,
27 API_ATTR_WARNING_HEADLINE,
28 API_ATTR_WARNING_INSTRUCTION,
29 API_ATTR_WARNING_LEVEL,
30 API_ATTR_WARNING_NAME,
31 API_ATTR_WARNING_PARAMETERS,
32 API_ATTR_WARNING_START,
33 API_ATTR_WARNING_TYPE,
38 CURRENT_WARNING_SENSOR,
41 from .coordinator
import DwdWeatherWarningsConfigEntry, DwdWeatherWarningsCoordinator
43 SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
45 key=CURRENT_WARNING_SENSOR,
46 translation_key=CURRENT_WARNING_SENSOR,
49 key=ADVANCE_WARNING_SENSOR,
50 translation_key=ADVANCE_WARNING_SENSOR,
57 entry: DwdWeatherWarningsConfigEntry,
58 async_add_entities: AddEntitiesCallback,
60 """Set up entities from config entry."""
61 coordinator = entry.runtime_data
63 unique_id = entry.unique_id
68 for description
in SENSOR_TYPES
73 CoordinatorEntity[DwdWeatherWarningsCoordinator], SensorEntity
75 """Representation of a DWD-Weather-Warnings sensor."""
77 _attr_attribution =
"Data provided by DWD"
78 _attr_has_entity_name =
True
82 coordinator: DwdWeatherWarningsCoordinator,
83 description: SensorEntityDescription,
86 """Initialize a DWD-Weather-Warnings sensor."""
93 identifiers={(DOMAIN, unique_id)},
94 name=coordinator.api.warncell_name,
95 entry_type=DeviceEntryType.SERVICE,
100 """Return the state of the sensor."""
102 return self.coordinator.api.current_warning_level
104 return self.coordinator.api.expected_warning_level
108 """Return the state attributes of the sensor."""
110 ATTR_REGION_NAME: self.coordinator.api.warncell_name,
111 ATTR_REGION_ID: self.coordinator.api.warncell_id,
112 ATTR_LAST_UPDATE: self.coordinator.api.last_update,
116 searched_warnings = self.coordinator.api.current_warnings
118 searched_warnings = self.coordinator.api.expected_warnings
120 data[ATTR_WARNING_COUNT] = len(searched_warnings)
122 for i, warning
in enumerate(searched_warnings, 1):
123 data[f
"warning_{i}_name"] = warning[API_ATTR_WARNING_NAME]
124 data[f
"warning_{i}_type"] = warning[API_ATTR_WARNING_TYPE]
125 data[f
"warning_{i}_level"] = warning[API_ATTR_WARNING_LEVEL]
126 data[f
"warning_{i}_headline"] = warning[API_ATTR_WARNING_HEADLINE]
127 data[f
"warning_{i}_description"] = warning[API_ATTR_WARNING_DESCRIPTION]
128 data[f
"warning_{i}_instruction"] = warning[API_ATTR_WARNING_INSTRUCTION]
129 data[f
"warning_{i}_start"] = warning[API_ATTR_WARNING_START]
130 data[f
"warning_{i}_end"] = warning[API_ATTR_WARNING_END]
131 data[f
"warning_{i}_parameters"] = warning[API_ATTR_WARNING_PARAMETERS]
132 data[f
"warning_{i}_color"] = warning[API_ATTR_WARNING_COLOR]
135 warning_copy = warning.copy()
136 warning_copy[API_ATTR_WARNING_START] = data[f
"warning_{i}_start"]
137 warning_copy[API_ATTR_WARNING_END] = data[f
"warning_{i}_end"]
138 data[f
"warning_{i}"] = warning_copy
144 """Could the device be accessed during the last update call."""
145 return self.coordinator.api.data_valid
None __init__(self, DwdWeatherWarningsCoordinator coordinator, SensorEntityDescription description, str unique_id)
dict[str, Any] extra_state_attributes(self)
int|None native_value(self)
None async_setup_entry(HomeAssistant hass, DwdWeatherWarningsConfigEntry entry, AddEntitiesCallback async_add_entities)