mirror of
https://github.com/home-assistant/core.git
synced 2025-04-23 08:47:57 +00:00
Fix nina warning state (#76354)
* Fix warning state * Improve data handling * Remove duplicate code
This commit is contained in:
parent
205ce2bac5
commit
7ae942a62b
@ -1,6 +1,7 @@
|
||||
"""The Nina integration."""
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
from typing import Any
|
||||
|
||||
from async_timeout import timeout
|
||||
@ -12,21 +13,7 @@ from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
|
||||
|
||||
from .const import (
|
||||
_LOGGER,
|
||||
ATTR_DESCRIPTION,
|
||||
ATTR_EXPIRES,
|
||||
ATTR_HEADLINE,
|
||||
ATTR_ID,
|
||||
ATTR_SENDER,
|
||||
ATTR_SENT,
|
||||
ATTR_SEVERITY,
|
||||
ATTR_START,
|
||||
CONF_FILTER_CORONA,
|
||||
CONF_REGIONS,
|
||||
DOMAIN,
|
||||
SCAN_INTERVAL,
|
||||
)
|
||||
from .const import _LOGGER, CONF_FILTER_CORONA, CONF_REGIONS, DOMAIN, SCAN_INTERVAL
|
||||
|
||||
PLATFORMS: list[str] = [Platform.BINARY_SENSOR]
|
||||
|
||||
@ -61,6 +48,21 @@ async def _async_update_listener(hass: HomeAssistant, entry: ConfigEntry) -> Non
|
||||
await hass.config_entries.async_reload(entry.entry_id)
|
||||
|
||||
|
||||
@dataclass
|
||||
class NinaWarningData:
|
||||
"""Class to hold the warning data."""
|
||||
|
||||
id: str
|
||||
headline: str
|
||||
description: str
|
||||
sender: str
|
||||
severity: str
|
||||
sent: str
|
||||
start: str
|
||||
expires: str
|
||||
is_valid: bool
|
||||
|
||||
|
||||
class NINADataUpdateCoordinator(DataUpdateCoordinator):
|
||||
"""Class to manage fetching NINA data API."""
|
||||
|
||||
@ -93,23 +95,24 @@ class NINADataUpdateCoordinator(DataUpdateCoordinator):
|
||||
return_data: dict[str, Any] = {}
|
||||
|
||||
for region_id, raw_warnings in self._nina.warnings.items():
|
||||
warnings_for_regions: list[Any] = []
|
||||
warnings_for_regions: list[NinaWarningData] = []
|
||||
|
||||
for raw_warn in raw_warnings:
|
||||
if "corona" in raw_warn.headline.lower() and self.corona_filter:
|
||||
continue
|
||||
|
||||
warn_obj: dict[str, Any] = {
|
||||
ATTR_ID: raw_warn.id,
|
||||
ATTR_HEADLINE: raw_warn.headline,
|
||||
ATTR_DESCRIPTION: raw_warn.description,
|
||||
ATTR_SENDER: raw_warn.sender,
|
||||
ATTR_SEVERITY: raw_warn.severity,
|
||||
ATTR_SENT: raw_warn.sent or "",
|
||||
ATTR_START: raw_warn.start or "",
|
||||
ATTR_EXPIRES: raw_warn.expires or "",
|
||||
}
|
||||
warnings_for_regions.append(warn_obj)
|
||||
warning_data: NinaWarningData = NinaWarningData(
|
||||
raw_warn.id,
|
||||
raw_warn.headline,
|
||||
raw_warn.description,
|
||||
raw_warn.sender,
|
||||
raw_warn.severity,
|
||||
raw_warn.sent or "",
|
||||
raw_warn.start or "",
|
||||
raw_warn.expires or "",
|
||||
raw_warn.isValid(),
|
||||
)
|
||||
warnings_for_regions.append(warning_data)
|
||||
|
||||
return_data[region_id] = warnings_for_regions
|
||||
|
||||
|
@ -12,7 +12,7 @@ from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.helpers.update_coordinator import CoordinatorEntity
|
||||
|
||||
from . import NINADataUpdateCoordinator
|
||||
from . import NINADataUpdateCoordinator, NinaWarningData
|
||||
from .const import (
|
||||
ATTR_DESCRIPTION,
|
||||
ATTR_EXPIRES,
|
||||
@ -72,25 +72,28 @@ class NINAMessage(CoordinatorEntity[NINADataUpdateCoordinator], BinarySensorEnti
|
||||
@property
|
||||
def is_on(self) -> bool:
|
||||
"""Return the state of the sensor."""
|
||||
return len(self.coordinator.data[self._region]) > self._warning_index
|
||||
if not len(self.coordinator.data[self._region]) > self._warning_index:
|
||||
return False
|
||||
|
||||
data: NinaWarningData = self.coordinator.data[self._region][self._warning_index]
|
||||
|
||||
return data.is_valid
|
||||
|
||||
@property
|
||||
def extra_state_attributes(self) -> dict[str, Any]:
|
||||
"""Return extra attributes of the sensor."""
|
||||
if (
|
||||
not len(self.coordinator.data[self._region]) > self._warning_index
|
||||
) or not self.is_on:
|
||||
if not self.is_on:
|
||||
return {}
|
||||
|
||||
data: dict[str, Any] = self.coordinator.data[self._region][self._warning_index]
|
||||
data: NinaWarningData = self.coordinator.data[self._region][self._warning_index]
|
||||
|
||||
return {
|
||||
ATTR_HEADLINE: data[ATTR_HEADLINE],
|
||||
ATTR_DESCRIPTION: data[ATTR_DESCRIPTION],
|
||||
ATTR_SENDER: data[ATTR_SENDER],
|
||||
ATTR_SEVERITY: data[ATTR_SEVERITY],
|
||||
ATTR_ID: data[ATTR_ID],
|
||||
ATTR_SENT: data[ATTR_SENT],
|
||||
ATTR_START: data[ATTR_START],
|
||||
ATTR_EXPIRES: data[ATTR_EXPIRES],
|
||||
ATTR_HEADLINE: data.headline,
|
||||
ATTR_DESCRIPTION: data.description,
|
||||
ATTR_SENDER: data.sender,
|
||||
ATTR_SEVERITY: data.severity,
|
||||
ATTR_ID: data.id,
|
||||
ATTR_SENT: data.sent,
|
||||
ATTR_START: data.start,
|
||||
ATTR_EXPIRES: data.expires,
|
||||
}
|
||||
|
@ -157,5 +157,52 @@
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"biw.BIWAPP-69634": {
|
||||
"identifier": "biw.BIWAPP-69634",
|
||||
"sender": "CAP@biwapp.de",
|
||||
"sent": "1999-08-07T10:59:00+02:00",
|
||||
"status": "Actual",
|
||||
"msgType": "Alert",
|
||||
"scope": "Public",
|
||||
"code": ["DVN:2", "BIWAPP"],
|
||||
"info": [
|
||||
{
|
||||
"language": "DE",
|
||||
"category": ["Other"],
|
||||
"event": "4",
|
||||
"urgency": "Unknown",
|
||||
"severity": "Minor",
|
||||
"certainty": "Unknown",
|
||||
"expires": "2002-08-07T10:59:00+02:00",
|
||||
"headline": "Geflügelpest im Landkreis Cuxhaven - Teile des Landkreises Osterholz zur Überwachungszone erklärt",
|
||||
"description": "In Beverstedt im Landkreis Cuxhaven ist am 20. Juli 2022 in einer Geflügelhaltung der Ausbruch der Geflügelpest (Vogelgrippe, Aviäre Influenza) amtlich festgestellt worden. Durch die geografische Nähe des Ausbruchsbetriebes zum Gebiet des Landkreises Osterholz musste das Veterinäramt des Landkreises zum Schutz vor einer Ausbreitung der Geflügelpest auch für sein Gebiet ein Restriktionsgebiet festlegen. Rund um den Ausbruchsort wurde eine Überwachungszone ausgewiesen. Eine entsprechende Tierseuchenbehördliche Allgemeinverfügung wurde vom Landkreis Osterholz erlassen und tritt am 23.07.2022 in Kraft.<br> <br>Die Überwachungszone mit einem Radius von mindestens zehn Kilometern um den Ausbruchsbetrieb erstreckt sich im Landkreis Osterholz innerhalb der Samtgemeinde Hambergen auf die Mitgliedsgemeinden Axstedt, Holste und Lübberstedt. Die vorgenannten Gemeinden sind vollständig zur Überwachungszone erklärt worden. Der genaue Grenzverlauf des Gebietes kann auch der interaktiven Karte im Internet entnommen werden.<br> <br>In der Überwachungszone liegen im Landkreis Osterholz rund 70 Geflügelhaltungen mit einem Gesamtbestand von rund 1.800 Tieren. Sie alle unterliegen mit der Allgemeinverfügung der sogenannten amtlichen Beobachtung. Für die Betriebe sind die Biosicherheitsmaßnahmen einzuhalten. Dazu zählen insbesondere Hygienemaßnahmen im laufenden Betrieb und eine ordnungsgemäße Schadnagerbekämpfung.<br> <br>Das Verbringen von Vögeln, Fleisch von Geflügel, Eiern und sonstige Nebenprodukte von Geflügel in und aus Betrieben in der Überwachungszone ist verboten. Auch Geflügeltransporte sind in der Überwachungszone verboten. Jeder Verdacht der Erkrankung auf Geflügelpest ist zudem dem Veterinäramt des Landkreises Osterholz unter der E-Mail-Adresse veterinaeramt@landkreis-osterholz.de sofort zu melden. Alle Hinweise, die innerhalb der Überwachungszone zu beachten sind, sind unter www.landkreis-osterholz.de/gefluegelpest zusammengefasst dargestellt.<br> <br>Die Veterinärbehörde weist zudem darauf hin, dass sämtliche Geflügelhaltungen – Hühner, Enten, Gänse, Fasane, Perlhühner, Rebhühner, Truthühner, Wachteln oder Laufvögel – der zuständigen Behörde angezeigt werden müssen. Wer dies bisher noch nicht gemacht hat und über keine Registriernummer für seinen Geflügelbestand verfügt, sollte die Meldung über das Veterinäramt umgehend nachholen.<br> <br>Das Beobachtungsgebiet kann frühestens 30 Tage nach der Grobreinigung des Ausbruchsbetriebes wieder aufgehoben werden. Hierüber wird der Landkreis Osterholz informieren.<br> <br>Die Allgemeinverfügung, eine Übersicht zur Überwachungszone und weitere Hinweise sind auf der Internetseite unter www.landkreis-osterholz.de/gefluegelpest zu finden.",
|
||||
"parameter": [
|
||||
{
|
||||
"valueName": "sender_langname",
|
||||
"value": "Landkreis Osterholz"
|
||||
},
|
||||
{
|
||||
"valueName": "PHGEM",
|
||||
"value": "740+10,770,792,817,100001"
|
||||
},
|
||||
{
|
||||
"valueName": "GRID",
|
||||
"value": "101346,101954+7,102566+9,103177+13,103774,103790+13,104387+1,104403+13,105000+1,105016+15,105612+2,105630+15,106225+2,106241+18,106838+2,106853+18,107451+1,107464+22,108064+9,108075+23,108677+34,109290+34,109903+35,110516+35,111129+35,111742+35,112355,112357+34,112971+33,113587+30,114200+30,114814,114818+26,115432,115436+22,116050+21,116669+15,117283+5,117290+7,117897+3,117904+6,500001"
|
||||
}
|
||||
],
|
||||
"area": [
|
||||
{
|
||||
"areaDesc": "Axstedt, Gnarrenburg, Grasberg, Hagen im Bremischen, Hambergen, Hepstedt, Holste, Lilienthal, Lübberstedt, Osterholz-Scharmbeck, Ritterhude, Schwanewede, Vollersode, Worpswede",
|
||||
"geocode": [
|
||||
{
|
||||
"valueName": "AreaId",
|
||||
"value": "0"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -40,5 +40,29 @@
|
||||
"onset": "2021-11-01T05:20:00+01:00",
|
||||
"sent": "2021-10-11T05:20:00+01:00",
|
||||
"expires": "3021-11-22T05:19:00+01:00"
|
||||
},
|
||||
{
|
||||
"id": "biw.BIWAPP-69634",
|
||||
"payload": {
|
||||
"version": 2,
|
||||
"type": "ALERT",
|
||||
"id": "biw.BIWAPP-69634",
|
||||
"hash": "fdbafb6b164f549ff60b9adfa5b1c707069cdd178bf55f025066f319451660ad",
|
||||
"data": {
|
||||
"headline": "Geflügelpest im Landkreis Cuxhaven - Teile des Landkreises Osterholz zur Überwachungszone erklärt",
|
||||
"provider": "BIWAPP",
|
||||
"severity": "Minor",
|
||||
"msgType": "Alert",
|
||||
"area": {
|
||||
"type": "GRID",
|
||||
"data": "101346,101954+7,102566+9,103177+13,103774,103790+13,104387+1,104403+13,105000+1,105016+15,105612+2,105630+15,106225+2,106241+18,106838+2,106853+18,107451+1,107464+22,108064+9,108075+23,108677+34,109290+34,109903+35,110516+35,111129+35,111742+35,112355,112357+34,112971+33,113587+30,114200+30,114814,114818+26,115432,115436+22,116050+21,116669+15,117283+5,117290+7,117897+3,117904+6,500001"
|
||||
}
|
||||
}
|
||||
},
|
||||
"i18nTitle": {
|
||||
"de": "Geflügelpest im Landkreis Cuxhaven - Teile des Landkreises Osterholz zur Überwachungszone erklärt"
|
||||
},
|
||||
"sent": "1999-08-07T10:59:00+02:00",
|
||||
"expires": "2002-08-07T10:59:00+02:00"
|
||||
}
|
||||
]
|
||||
|
Loading…
x
Reference in New Issue
Block a user