Fix nina warning state (#76354)

* Fix warning state

* Improve data handling

* Remove duplicate code
This commit is contained in:
Maximilian 2022-10-02 06:22:18 +02:00 committed by GitHub
parent 205ce2bac5
commit 7ae942a62b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 118 additions and 41 deletions

View File

@ -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

View File

@ -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,
}

View File

@ -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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<br>Das Beobachtungsgebiet kann frühestens 30 Tage nach der Grobreinigung des Ausbruchsbetriebes wieder aufgehoben werden. Hierüber wird der Landkreis Osterholz informieren.<br>&nbsp;<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"
}
]
}
]
}
]
}
}

View File

@ -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"
}
]