Fix missing nina start value (#66869)

pull/67132/head
Maximilian 2022-02-23 19:45:10 +01:00 committed by GitHub
parent e22f8496c0
commit 731f9ca7e0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 204 additions and 23 deletions

View File

@ -4,7 +4,7 @@
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/nina",
"requirements": [
"pynina==0.1.5"
"pynina==0.1.7"
],
"dependencies": [],
"codeowners": [

View File

@ -1706,7 +1706,7 @@ pynetgear==0.9.1
pynetio==0.1.9.1
# homeassistant.components.nina
pynina==0.1.5
pynina==0.1.7
# homeassistant.components.nuki
pynuki==1.5.2

View File

@ -1087,7 +1087,7 @@ pymysensors==0.22.1
pynetgear==0.9.1
# homeassistant.components.nina
pynina==0.1.5
pynina==0.1.7
# homeassistant.components.nuki
pynuki==1.5.2

View File

@ -1 +1,25 @@
"""Tests for the Nina integration."""
import json
from typing import Any
from tests.common import load_fixture
def mocked_request_function(url: str) -> dict[str, Any]:
"""Mock of the request function."""
dummy_response: dict[str, Any] = json.loads(
load_fixture("sample_warnings.json", "nina")
)
dummy_response_details: dict[str, Any] = json.loads(
load_fixture("sample_warning_details.json", "nina")
)
if url == "https://warnung.bund.de/api31/dashboard/083350000000.json":
return dummy_response
warning_id = url.replace("https://warnung.bund.de/api31/warnings/", "").replace(
".json", ""
)
return dummy_response_details[warning_id]

View File

@ -0,0 +1,167 @@
{
"mow.DE-BW-S-SE018-20211102-18-001": {
"identifier": "mow.DE-BW-S-SE018-20211102-18-001",
"sender": "DE-NW-BN-SE030",
"sent": "2021-11-02T20:07:16+01:00",
"status": "Actual",
"msgType": "Update",
"scope": "Public",
"code": [
"DVN:1",
"medien_ueberregional",
"nina",
"Materna:noPush",
"Materna:noMirror"
],
"references": "DE-NW-BN-SE030-20200506-30-001 DE-NW-BN-SE030-20200422-30-000 DE-NW-BN-SE030-20200420-30-001 DE-NW-BN-SE030-20200416-30-001 DE-NW-BN-SE030-20200403-30-000 DE-NW-BN-W003,mow.DE-NW-BN-SE030-20200506-30-001 mow.DE-NW-BN-SE030-20200422-30-000 mow.DE-NW-BN-SE030-20200420-30-001 mow.DE-NW-BN-SE030-20200416-30-001 mow.DE-NW-BN-SE030-20200403-30-000 mow.DE-NW-BN-W003-20200403-000,2020-04-03T00:00:00+00:00",
"info": [
{
"language": "DE",
"category": [
"Health"
],
"event": "Gefahreninformation",
"urgency": "Immediate",
"severity": "Minor",
"certainty": "Observed",
"eventCode": [
{
"valueName": "profile:DE-BBK-EVENTCODE",
"value": "BBK-EVC-040"
}
],
"headline": "Corona-Verordnung des Landes: Warnstufe durch Landesgesundheitsamt ausgerufen",
"description": "Die Zahl der mit dem Corona-Virus infizierten Menschen steigt gegenwärtig stark an. Es wächst daher die Gefahr einer weiteren Verbreitung der Infektion und - je nach Einzelfall - auch von schweren Erkrankungen.",
"instruction": "Waschen Sie sich regelmäßig und gründlich die Hände.<br/>- Beachten Sie die AHA + A + L - Regeln:<br/>Abstand halten - 1,5 m Mindestabstand beachten, Körperkontakt vermeiden!<br/>Hygiene - regelmäßiges Händewaschen, Husten- und Nieshygiene beachten!<br/>Alltagsmaske (Mund-Nase-Bedeckung) tragen!<br/>App - installieren und nutzen Sie die Corona-Warn-App!<br/>Lüften: Sorgen Sie für eine regelmäßige und gründliche Lüftung von Räumen - auch und gerade in der kommenden kalten Jahreszeit!<br/>- Bitte folgen Sie den behördlichen Anordnungen.<br/>- Husten und niesen Sie in ein Taschentuch oder in die Armbeuge.<br/>- Bleiben Sie bei Erkältungssymptomen nach Möglichkeit zu Hause. Kontaktieren Sie Ihre Hausarztpraxis per Telefon oder wenden sich an die Telefonnummer 116117 des Ärztlichen Bereitschaftsdienstes und besprechen Sie das weitere Vorgehen. Gehen Sie nicht unaufgefordert in eine Arztpraxis oder ins Krankenhaus.<br/>- Seien Sie kritisch: Informieren Sie sich nur aus gesicherten Quellen.",
"contact": "Weitere Informationen und Empfehlungen finden Sie im Corona-Informations-Bereich der Warn-App NINA. Beachten Sie auch die Internetseiten der örtlichen Gesundheitsbehörde (Stadt- bzw. Kreisverwaltung) Ihres Aufenthaltsortes",
"parameter": [
{
"valueName": "instructionText",
"value": "- Beachten Sie die AHA + A + L - Regeln:\nAbstand halten - 1,5 m Mindestabstand beachten, Körperkontakt vermeiden! \nHygiene - regelmäßiges Händewaschen, Husten- und Nieshygiene beachten! \nAlltagsmaske (Mund-Nase-Bedeckung) tragen! \nApp - installieren und nutzen Sie die Corona-Warn-App! \nLüften: Sorgen Sie für eine regelmäßige und gründliche Lüftung von Räumen - auch und gerade in der kommenden kalten Jahreszeit! \n- Bitte folgen Sie den behördlichen Anordnungen. \n- Husten und niesen Sie in ein Taschentuch oder in die Armbeuge. \n- Bleiben Sie bei Erkältungssymptomen nach Möglichkeit zu Hause. Kontaktieren Sie Ihre Hausarztpraxis per Telefon oder wenden sich an die Telefonnummer 116117 des Ärztlichen Bereitschaftsdienstes und besprechen Sie das weitere Vorgehen. Gehen Sie nicht unaufgefordert in eine Arztpraxis oder ins Krankenhaus. \n- Seien Sie kritisch: Informieren Sie sich nur aus gesicherten Quellen."
},
{
"valueName": "warnVerwaltungsbereiche",
"value": "130000000000,140000000000,160000000000,110000000000,020000000000,070000000000,030000000000,050000000000,080000000000,120000000000,010000000000,150000000000,040000000000,060000000000,090000000000,100000000000"
},
{
"valueName": "instructionCode",
"value": "BBK-ISC-132"
},
{
"valueName": "sender_langname",
"value": "BBK, Nationale Warnzentrale Bonn"
},
{
"valueName": "sender_signature",
"value": "Bundesamt für Bevölkerungsschutz und Katastrophenhilfe\nNationale Warnzentrale Bonn\nhttps://warnung.bund.de"
},
{
"valueName": "PHGEM",
"value": "1+11057,100001"
},
{
"valueName": "ZGEM",
"value": "1+11057,100001"
}
],
"area": [
{
"areaDesc": "Bundesland: Freie Hansestadt Bremen, Land Berlin, Land Hessen, Land Nordrhein-Westfalen, Land Brandenburg, Freistaat Bayern, Land Mecklenburg-Vorpommern, Land Rheinland-Pfalz, Freistaat Sachsen, Land Schleswig-Holstein, Freie und Hansestadt Hamburg, Freistaat Thüringen, Land Niedersachsen, Land Saarland, Land Sachsen-Anhalt, Land Baden-Württemberg",
"geocode": [
{
"valueName": "AreaId",
"value": "0"
}
]
}
]
}
]
},
"mow.DE-NW-BN-SE030-20201014-30-000" : {
"identifier": "mow.DE-NW-BN-SE030-20201014-30-000",
"sender": "opendata@dwd.de",
"sent": "2021-10-11T05:20:00+01:00",
"status": "Actual",
"msgType": "Alert",
"source": "PVW",
"scope": "Public",
"code": [
"DVN:2",
"id:2.49.0.0.276.0.DWD.PVW.1645004040000.5a168da8-ac20-4b6d-86be-d616526a7914"
],
"info": [
{
"language": "de-DE",
"category": [
"Met"
],
"event": "STURMBÖEN",
"responseType": [
"Prepare"
],
"urgency": "Immediate",
"severity": "Moderate",
"certainty": "Likely",
"eventCode": [
{
"valueName": "PROFILE_VERSION",
"value": "2.1.11"
},
{
"valueName": "LICENSE",
"value": "© GeoBasis-DE / BKG 2019 (Daten modifiziert)"
},
{
"valueName": "II",
"value": "52"
},
{
"valueName": "GROUP",
"value": "WIND"
},
{
"valueName": "AREA_COLOR",
"value": "251 140 0"
}
],
"effective": "2021-11-01T03:20:00+01:00",
"onset": "2021-11-01T05:20:00+01:00",
"expires": "3021-11-22T05:19:00+01:00",
"senderName": "Deutscher Wetterdienst",
"headline": "Ausfall Notruf 112",
"description": "Es treten Sturmböen mit Geschwindigkeiten zwischen 70 km/h (20m/s, 38kn, Bft 8) und 85 km/h (24m/s, 47kn, Bft 9) aus westlicher Richtung auf. In Schauernähe sowie in exponierten Lagen muss mit schweren Sturmböen bis 90 km/h (25m/s, 48kn, Bft 10) gerechnet werden.",
"instruction": "ACHTUNG! Hinweis auf mögliche Gefahren: Es können zum Beispiel einzelne Äste herabstürzen. Achten Sie besonders auf herabfallende Gegenstände.",
"web": "https://www.wettergefahren.de",
"contact": "Deutscher Wetterdienst",
"parameter": [
{
"valueName": "gusts",
"value": "70-85 [km/h]"
},
{
"valueName": "exposed gusts",
"value": "<90 [km/h]"
},
{
"valueName": "wind direction",
"value": "west"
},
{
"valueName": "PHGEM",
"value": "3243+168,3413+1,3424+52,3478+1,3495+2,3499,3639+2527,6168+1,6175+22,6199+36,6238,6241+7,6256,9956+184,10142,10154,10164+7,10173,10176+6,10186+1,10195+2,10199,10201+6,10214+4,10220,10249+117,10368,10373+2,10425+9,10436+1,10440+8,10450+1,10453+7,10462+1,10467+5,10474+2,10484+5,10773+68,10843+2,10847+9,10858,10867+8,10878+1,10882+68,10952+7,10961+2,11046,11056+1"
},
{
"valueName": "ZGEM",
"value": "3243+168,3413+1,3424+52,3478+1,3495+2,3499,3639+2527,6168+1,6175+22,6199+36,6238,6241+7,6256,9956+184,10142,10154,10164+7,10173,10176+6,10186+1,10195+2,10199,10201+6,10214+4,10220,10249+117,10368,10373+2,10425+9,10436+1,10440+8,10450+1,10453+7,10462+1,10467+5,10474+2,10484+5,10773+68,10843+2,10847+9,10858,10867+8,10878+1,10882+68,10952+7,10961+2,11046,11056+1"
}
],
"area": [
{
"areaDesc": "Gemeinde Oberreichenbach, Gemeinde Neuweiler, Stadt Nagold, Stadt Neubulach, Gemeinde Schömberg, Gemeinde Simmersfeld, Gemeinde Simmozheim, Gemeinde Rohrdorf, Gemeinde Ostelsheim, Gemeinde Ebhausen, Gemeinde Egenhausen, Gemeinde Dobel, Stadt Bad Liebenzell, Stadt Solingen, Stadt Haiterbach, Stadt Bad Herrenalb, Gemeinde Höfen an der Enz, Gemeinde Gechingen, Gemeinde Enzklösterle, Gemeinde Gutach (Schwarzwaldbahn) und 3392 weitere."
}
]
}
]
}
}

View File

@ -37,7 +37,7 @@
}
},
"i18nTitle": {"de": "Ausfall Notruf 112"},
"start": "2021-11-01T05:20:00+01:00",
"onset": "2021-11-01T05:20:00+01:00",
"sent": "2021-10-11T05:20:00+01:00",
"expires": "3021-11-22T05:19:00+01:00"
}

View File

@ -1,5 +1,4 @@
"""Test the Nina binary sensor."""
import json
from typing import Any
from unittest.mock import patch
@ -17,7 +16,9 @@ from homeassistant.const import STATE_OFF, STATE_ON
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from tests.common import MockConfigEntry, load_fixture
from . import mocked_request_function
from tests.common import MockConfigEntry
ENTRY_DATA: dict[str, Any] = {
"slots": 5,
@ -35,13 +36,9 @@ ENTRY_DATA_NO_CORONA: dict[str, Any] = {
async def test_sensors(hass: HomeAssistant) -> None:
"""Test the creation and values of the NINA sensors."""
dummy_response: dict[str, Any] = json.loads(
load_fixture("sample_warnings.json", "nina")
)
with patch(
"pynina.baseApi.BaseAPI._makeRequest",
return_value=dummy_response,
wraps=mocked_request_function,
):
conf_entry: MockConfigEntry = MockConfigEntry(
@ -125,13 +122,9 @@ async def test_sensors(hass: HomeAssistant) -> None:
async def test_sensors_without_corona_filter(hass: HomeAssistant) -> None:
"""Test the creation and values of the NINA sensors without the corona filter."""
dummy_response: dict[str, Any] = json.loads(
load_fixture("nina/sample_warnings.json")
)
with patch(
"pynina.baseApi.BaseAPI._makeRequest",
return_value=dummy_response,
wraps=mocked_request_function,
):
conf_entry: MockConfigEntry = MockConfigEntry(

View File

@ -1,5 +1,4 @@
"""Test the Nina init file."""
import json
from typing import Any
from unittest.mock import patch
@ -10,7 +9,9 @@ from homeassistant.config_entries import ConfigEntryState
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component
from tests.common import MockConfigEntry, load_fixture
from . import mocked_request_function
from tests.common import MockConfigEntry
ENTRY_DATA: dict[str, Any] = {
"slots": 5,
@ -22,13 +23,9 @@ ENTRY_DATA: dict[str, Any] = {
async def init_integration(hass) -> MockConfigEntry:
"""Set up the NINA integration in Home Assistant."""
dummy_response: dict[str, Any] = json.loads(
load_fixture("sample_warnings.json", "nina")
)
with patch(
"pynina.baseApi.BaseAPI._makeRequest",
return_value=dummy_response,
wraps=mocked_request_function,
):
entry: MockConfigEntry = MockConfigEntry(