UPGRADE IP 9 verfügbar!
Timberwolf VISU jetzt mit NEUEM Layout Editor
Freie Anordnung, Reihenfolge und Größe der Widgets - viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/06SeuHRJ

NEU! Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Damit kann nun jeder das Upgrade vornehmen und VISU & IFTTT testen. Alle Info hier: viewtopic.php?f=8&t=5074

[DISKUSSION] Regionale Warnmeldungen mittel HTTP API einbinden

Wissen, Planung & Diskussion zur Unterstützung von Rest-API & Webabfragen im Timberwolf Server.
Stellt uns hier Eure Projekte und Ideen vor.
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln
Antworten

Ersteller
Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

Regionale Warnmeldungen mittel HTTP API einbinden

#1

Beitrag von Robosoc »

Gleichmal vorab, für mich ist das Folgende alles Neuland (also HTTP API und die Warnsystem API's)!

Angestoßen durch eine aktuelle Diskussion zur V4 habe ich mich daran erinnert, dass ich schon immer mal eine Funktion implementieren wollte, die meine Lüftungsanlage im Eigenheim und im Ferienhaus abschaltet, wenn eine offizielle Warnung des BBK (Bundesamt für Bevölkerungsschutz und Katastrophenhilfe) dazu rät.

Beispiel:
Jetzt gerade gibt es eine entsprechend Warnung in Warstein (Warstein habe ich zufällig ausgewählt, weil dort gerade eine entsprechende Warnung anliegt):
Bild

Das BKK bietet eine API zu seinen Meldungen an : Die NINA API.
https://nina.api.bund.dev/

Dieser Dienst / Diese Datenbank scheint mir gut geeignet, weil sie mehrere Quellen (Katwarn, MoWaS, D.Wetterdienst,etc) bündelt. Wenn Ihr andere Vorschläge oder Empfehlungen habt, dann gerne her damit.
Ich scheitere aber aktuell noch an der regionalen Zuordnung der Warnungen.

Was meine ich mit regionaler Zuordnung: Der Dienst MoWaS (Modulares Warnsystem des BBK - Link) liefert zu seinen Warnungen beispielsweise eine Polygon-Beschreibung mit GeoKoordinaten, die das betroffene Gebiet umreißen. Wenn ich nur eine solche Information nehme, müsste ich im TWS ja dann prüfen, ob die Koordinaten meines Objektes in der Problemregion liegen...das ist meines Erachtens recht aufwändig und aktuell (V3.0 RC4) nicht direkt im TWS machbar, sondern nur über Zusatzdienste wie z.B. NodeRed.

Bei der NINA API kann man sich jedoch alle Meldungen der verbundenen Dienste für eine sogenannte Amtliche Gebietskennziffer (ähnlich PLZ) abfragen - Meldeübersicht nach AGS. Dabei hat dann das NINA-System nach meinem Verständnis schon die Betroffenheit von Gebiete zu der betroffen Geo-Koordination-Flächenpolygon erledigt. Aber auch das klingt einfacher als es dann in der Realität ist.

Unser Ferienhaus steht in Büsum -> AGS = 010515178013. Der Informationsdiesnt der NINA API "Meldeübersicht nach AGS" lässt aber lediglich die Abfrage nach den ersten 5 Stellen der Gebietskennziffer zu und man muss die detaillierenden Kreiskennzifferen (die letzten 7 Stellen der AGS) mit Nullen auffüllen. Dadurch entstehend teilweise riesige Gebiete, zu denen man Meldungen abfragt. Ich reduziere meinen Request also auf 01051* und erhalte Warnungen und Meldungen für 100!!! Landkreise.

In den Infosätzen der NINA API "Meldeübersicht nach AGS" ist jedoch ein komplexes Datenfeld "area"enthalten, welches dann vielleicht eine genaue Zuordnung zu lässt. Dafür poste ich hier jetzt mal den JSON-Schnippsel zu der oben genannte, aktuellen Meldung aus Warstein:

Warstein hat die Amtliche Gebietskennziffer 059740044044, im Request habe ich also 059740000000 angegeben.
Zunächst erhält man folgende Übersicht, mit aktuell drei Meldeeinträgen:

Code: Alles auswählen

[
  {
    "id": "mow.DE-NW-BN-SE030-20220407-30-001",
    "payload": {
      "version": 2,
      "type": "ALERT",
      "id": "mow.DE-NW-BN-SE030-20220407-30-001",
      "hash": "cdf19b1ec70babb99decfad59501b96322dc3f1b8a43c1a364822be786c71fc5",
      "data": {
        "headline": "Coronavirus: Informationen des Bundesministeriums für Gesundheit",
        "provider": "MOWAS",
        "severity": "Minor",
        "msgType": "Update",
        "transKeys": {
          "event": "BBK-EVC-040"
        },
        "area": {
          "type": "ZGEM",
          "data": "1+11057,100001"
        }
      }
    },
    "i18nTitle": {
      "de": "Coronavirus: Informationen des Bundesministeriums für Gesundheit"
    },
    "sent": "2022-04-07T12:30:19+02:00"
  },
  {
    "id": "mow.DE-NW-D-SE020-20220504-20-000",
    "payload": {
      "version": 2,
      "type": "ALERT",
      "id": "mow.DE-NW-D-SE020-20220504-20-000",
      "hash": "0fb8df40f21a01b19fc5177d282205ae2cf42d78d8329ccc5b511b0b9c33276c",
      "data": {
        "headline": "Coronavirus: Informationen des Landes Nordrhein-Westfalen",
        "provider": "MOWAS",
        "severity": "Minor",
        "msgType": "Update",
        "transKeys": {
          "event": "BBK-EVC-081"
        },
        "area": {
          "type": "ZGEM",
          "data": "3243+395,100001"
        }
      }
    },
    "i18nTitle": {
      "de": "Coronavirus: Informationen des Landes Nordrhein-Westfalen"
    },
    "sent": "2022-05-04T19:19:01+02:00"
  },
  {
    "id": "mow.DE-NW-SO-SE089-20220510-89-000",
    "payload": {
      "version": 2,
      "type": "ALERT",
      "id": "mow.DE-NW-SO-SE089-20220510-89-000",
      "hash": "6d76feced7a2712c93c99b34648d6958f850b7e066489a0b963bea4e7fd136ea",
      "data": {
        "headline": "Rauchgase in Großraum Warstein Sichtigvor",
        "provider": "MOWAS",
        "severity": "Minor",
        "msgType": "Alert",
        "transKeys": {
          "event": "BBK-EVC-077"
        },
        "area": {
          "type": "GRID",
          "data": "217161+5,217774+5,218386+7,218999+7,219613+6,220226+5,220841+1,500001"
        }
      }
    },
    "i18nTitle": {
      "de": "Rauchgase in Großraum Warstein Sichtigvor"
    },
    "sent": "2022-05-10T12:29:11+02:00"
  }
]
Die Corona-Warnmeldungen und -Informationen interessieren mich jetzt erstmal nicht, geht mir also um die dritte enthaltene Meldung:

Code: Alles auswählen

[
  {
    "id": "mow.DE-NW-SO-SE089-20220510-89-000",
    "payload": {
      "version": 2,
      "type": "ALERT",
      "id": "mow.DE-NW-SO-SE089-20220510-89-000",
      "hash": "6d76feced7a2712c93c99b34648d6958f850b7e066489a0b963bea4e7fd136ea",
      "data": {
        "headline": "Rauchgase in Großraum Warstein Sichtigvor",
        "provider": "MOWAS",
        "severity": "Minor",
        "msgType": "Alert",
        "transKeys": {
          "event": "BBK-EVC-077"
        },
        "area": {
          "type": "GRID",
          "data": "217161+5,217774+5,218386+7,218999+7,219613+6,220226+5,220841+1,500001"
        }
      }
    },
    "i18nTitle": {
      "de": "Rauchgase in Großraum Warstein Sichtigvor"
    },
    "sent": "2022-05-10T12:29:11+02:00"
  }
]
Hier ist meines Erachtens die folgende Zeile für mich interessant

Code: Alles auswählen

"area": {
          "type": "GRID",
          "data": "217161+5,217774+5,218386+7,218999+7,219613+6,220226+5,220841+1,500001"
        }
        
Was genau sind das für Angaben? Ich finde dazu keine erklärenden Hinweise. Allerdings habe ich gesehen, dass andere Dienste (also nicht MoWaS) das AREA nicht in GRID-Form beschreiben, sondern ZGEM...aber auch das ist mir nicht klar.
Hat jemand eine Idee, wie ich nun aus den Area-Angaben auf den Landkreis der AGS 059740044044 für Warstein schließen kann?

Der nächste Schritt ist dann natürlich das Filtern ob eine Warnmeldung für mein Gebiet auch zur Folge hat, dass die Fenster geschlossen und Lüftungsanlagen ausgeschaltet werden müssen. Das scheint mir eine Fleißarbeit zu sein...bei MoWaS sind das zum Beispiel (nicht abschließend) der Eventcode 077 und Verhaltenscode 026...aber das ist dann der nächste Schritt :-)
Zuletzt geändert von Robosoc am Mi Mai 11, 2022 7:39 am, insgesamt 3-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Ersteller
Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#2

Beitrag von Robosoc »

Okay, jetzt bin ich ein kleines Stück weiter...ich habe zwar keine Antwort darauf gefunden, was die area-Angaben im GRID oder ZGEM Format bedeuten, aber in der Nina API gibt es noch eine weitere nützliche Abfrage: "Detailinformationen zu einer Abfrage".

Wenn ich jetzt also mit der ID der aktuellen Warnung in Warstein
mow.DE-NW-SO-SE089-20220510-89-000
diesen "Detailinformationen zu einer Abfrage"-Request mache, erhalte ich folgenden JSON-Response Body:

Code: Alles auswählen

{
  "identifier": "mow.DE-NW-SO-SE089-20220510-89-000",
  "sender": "DE-NW-SO-SE089",
  "sent": "2022-05-10T12:29:11+02:00",
  "status": "Actual",
  "msgType": "Alert",
  "scope": "Public",
  "code": [
    "DVN:2"
  ],
  "info": [
    {
      "language": "DE",
      "category": [
        "Fire"
      ],
      "event": "Gefahreninformation",
      "urgency": "Immediate",
      "severity": "Minor",
      "certainty": "Observed",
      "eventCode": [
        {
          "valueName": "profile:DE-BBK-EVENTCODE",
          "value": "BBK-EVC-077"
        }
      ],
      "headline": "Rauchgase in Großraum Warstein Sichtigvor",
      "description": "Es folgt eine wichtige Information der Feuerwehr Warstein<br/><br/>In der Stadt Warstein im Bereich Sichtigvor kommt es durch einen  Brand zu Geruchsbelästigung und Rauchniederschlag. Gesundheitliche Beeinträchtigungen können nicht ausgeschlossen werden.<br/>Bitte begeben Sie sich im betroffenen Bereich sofort in geschlossene Räume. Schließen Sie vorsorglich Fenster und Türen und schalten Sie Klima- und Lüftungsanlagen ab.<br/>Lassen Sie das Radio eingeschaltet und achten Sie auf Durchsagen.<br/>Informieren Sie bei Bedarf Ihre Nachbarn.<br/><br/>Halten Sie die Notrufnummern von Feuerwehr und Polizei für Notrufe frei.",
      "instruction": "Achten Sie auf Durchsagen von Polizei und Feuerwehr.<br/>Folgen Sie den Anweisungen der Einsatzkräfte.<br/>Meiden Sie das betroffene Gebiet.<br/>Umfahren Sie das betroffene Gebiet weiträumig.<br/>Schließen Sie Fenster und Türen und schalten Sie Lüftungen und Klimaanlagen ab.<br/>Halten Sie sämtliche Zugangswege zur Brandstelle frei.<br/>Informieren Sie sich in den Medien, zum Beispiel im Lokalradio.<br/>Informieren Sie Ihre Nachbarn.<br/>Wählen Sie nur in Notfällen den Notruf 110 (Polizei) und 112 (Feuerwehr).<br/>Wir informieren Sie, wenn die Gefahr vorüber ist.",
      "parameter": [
        {
          "valueName": "warnVerwaltungsbereiche",
          "value": "059740004004,059740044044"
        },
        {
          "valueName": "instructionCode",
          "value": "BBK-ISC-015 BBK-ISC-016 BBK-ISC-001 BBK-ISC-004 BBK-ISC-087 BBK-ISC-083 BBK-ISC-009 BBK-ISC-012 BBK-ISC-017 BBK-ISC-014"
        },
        {
          "valueName": "sender_langname",
          "value": "Integrierte Leitstelle Kreis Soest"
        },
        {
          "valueName": "sender_signature",
          "value": "Leitstelle Soest\nBoleweg 110-112\n59494 Soest"
        },
        {
          "valueName": "PHGEM",
          "value": "3509,100001"
        },
        {
          "valueName": "GRID",
          "value": "217161+5,217774+5,218386+7,218999+7,219613+6,220226+5,220841+1,500001"
        }
      ],
      "area": [
        {
          "areaDesc": "Gemeinde/Stadt: Stadt Warstein, Gemeinde Anröchte",
          "geocode": [
            {
              "valueName": "AreaId",
              "value": "0"
            }
          ]
        }
      ]
    }
  ]
}
Darin sind neben den wichtigen instructionCode, anhand deren man die Reaktion ableiten kann

Code: Alles auswählen

          "valueName": "instructionCode",
          "value": "BBK-ISC-015 BBK-ISC-016 BBK-ISC-001 BBK-ISC-004 BBK-ISC-087 BBK-ISC-083 BBK-ISC-009 BBK-ISC-012 BBK-ISC-017 BBK-ISC-014"
auch die vollständigen AGS der betroffenen Gebiete enthalten:

Code: Alles auswählen

          "valueName": "warnVerwaltungsbereiche",
          "value": "059740004004,059740044044"
Aber gleichzeitig ist mir nun auch klar, dass ich garnicht weitermachen brauche. Mit den aktuellen Möglichkeiten (V3.0 RC4) in dem TWS kann ich die iterativen, notwendigen Schritte wohl noch nicht lösen, weil mir z.B. String-Funktionen im Logik-Manager fehlen. Vielleicht versuche ich mein Glück noch mit NodeRed....aber ich stimme jetzt auch noch einmal für das entsprechende Feature in der V4.0 Abfrage.
Zuletzt geändert von Robosoc am Mi Mai 11, 2022 8:10 am, insgesamt 1-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Ersteller
Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#3

Beitrag von Robosoc »

Für die interessierten Mitleser (zum. alexbeer,Sun1453): Habe doch weiter gemacht, weil ich meine Aufgabe gerne umsetzen möchte, jetzt wo ich mich schon mal eingearbeitet habe.

Bin auch recht weit gekommen, aber nun muss ich feststellen, das ich in einer Sackgasse bin.
Die Detailmeldungen beherbergen zwar wie oben beschrieben die instructionCode und warnVerwaltungsgebiete, aber wie ich beim Testen feststellen musste, sind diese nicht immer in der gleichen Array-Position des Arrays "Parameter". Die Position scheint mir vom sendenden Server abhängig zu sein. Unterschiede gab es alleine schon zwischen MoWaS Bonn und MoWaS Bayern. Somit wäre der Selektor für das Objekt dynamisch und müsste über eine Schleife und Auswertung der Selektoren ‚valueName‘ erkannt werden.

Dazu kommt noch, dass z.B. die Meldungen vom DWD diese Informationen nicht genauso beinhalten....aber dieser Daten wären für meine Lüftungssteuerung vermutlich eh nicht so relevant.

Bisher hatte ich die http API Abfragen im TWS realisiert und die relevanten Informationen mittels MQTT an NodeRed übergeben.
Aber ich habe keine Möglichkeit gefunden JSON-Blöcke aus dem HTTP API Subsystem an das MQTT Subsystem zu überführen. Und durch die Variabilität der Informationsposition muss ich leider mindestens den gesamten Parameter Block als JSON ins NodeRed bekommen.

Ich werde die Sache daher jetzt komplett in NodeRed (inkl. der HTTP API Requests) machen und dann nur das Ergebnis mittels MQTT oder KNX an den TWS übergeben.
Zuletzt geändert von Robosoc am Do Mai 12, 2022 11:01 am, insgesamt 3-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK
Antworten

Zurück zu „HTTP-API, REST & Web-Abfragen“