Exakt, eine PN wäre in dem Fall auch praktikabler gewesen.
LG
Steffi
Moderator: Co-Administratoren
Soderle, ich denke, ich bin nun einen wichtigen Schritt weitergekommen:
Jetzt habe ich allerdings noch eine Verständnisfrage.Grrzzz hat geschrieben: ↑01.08.2017, 09:48Code: Alles auswählen
!------------------------------------------------------------------------------------------------------------ ! Unwetterwarnungsscript von Grrzzz ! Version vom 11.09.2017 ! https://homematic-forum.de/forum/viewtopic.php?f=31&t=38161 !------------------------------------------------------------------------------------------------------------ !------------------------------------------------------------------------------------------------------------ ! Konfiguration !------------------------------------------------------------------------------------------------------------ !Virtuelles CUxD-Exec-Device hier angeben string execdevice = "CUxD.CUX2801001:1"; !Die Region-ID aus der JSON Datei !http://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json !Für Berlin z.B. 111000000 string city = "111000000"; !Nötige CCU-Systemvariablen !In der CCU anzulegende Systemvariablen stehen nachfolgend in Anführungszeichen var wetterwarnungAktiv = "Wetterwarnung_aktiv"; !Logikwert var wetterwarnungText = "Wetterwarnung_Text"; !Zeichenketten var wetterwarnungTyp = "Wetterwarnung_Typ"; !Werteliste mit: unbekannt;Gewitter;Wind/Sturm/Orkan;Stark- und Dauerregen;Schneefall/Schneeverwehungen;Nebel;Frost;Glätte/Glatteis;Tauwetter;Hitzewarnungen;UV-Warnungen;Küstenwarnungen;Binnenseewarnungen !------------------------------------------------------------------------------------------------------------ ! Das wars an Konfiguration ! DWD-Warntabelle in 25k(+25k)-Abschnitten laden bis die Region gefunden wurde !------------------------------------------------------------------------------------------------------------ string url = "http://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json"; string downloader = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl"; integer rangefrom = 1; integer rangeto = 25000; integer loopcounter = 1; string cmd = downloader # " --range " # rangefrom # "-" # rangeto # " " # url; string cut2 = "],"; dom.GetObject(execdevice # ".CMD_SETS").State(cmd); dom.GetObject(execdevice # ".CMD_QUERY_RET").State(1); string stdout = dom.GetObject(execdevice # ".CMD_RETS").State(); integer find1 = stdout.Find(city); if ((find1 >= 0) && (stdout.Length() >= 25000)) { rangefrom = rangeto - 99; rangeto = rangeto + 24900; cmd = downloader # " --range " # rangefrom # "-" # rangeto # " " # url; dom.GetObject(execdevice # ".CMD_SETS").State(cmd); dom.GetObject(execdevice # ".CMD_QUERY_RET").State(1); stdout = stdout + dom.GetObject(execdevice # ".CMD_RETS").State(); } while ((find1 < 0) && (stdout.Length() >= 25000) && (loopcounter <= 30)) { loopcounter = loopcounter + 1; rangefrom = rangeto - 99; rangeto = rangeto + 24900; cmd = downloader # " --range " # rangefrom # "-" # rangeto # " " # url; dom.GetObject(execdevice # ".CMD_SETS").State(cmd); dom.GetObject(execdevice # ".CMD_QUERY_RET").State(1); stdout = dom.GetObject(execdevice # ".CMD_RETS").State(); find1 = stdout.Find(city); if ((find1 >= 0) && (stdout.Length() >= 25000)) { rangefrom = rangefrom + 25000; rangeto = rangeto + 25000; cmd = downloader # " --range " # rangefrom # "-" # rangeto # " " # url; dom.GetObject(execdevice # ".CMD_SETS").State(cmd); dom.GetObject(execdevice # ".CMD_QUERY_RET").State(1); stdout = stdout + dom.GetObject(execdevice # ".CMD_RETS").State(); } } boolean found = false; if(stdout.Find(city)>=0) { found = true; } !------------------------------------------------------------------------------------------------------------ ! Relevanter Bereich ausschneiden und zuweisen !------------------------------------------------------------------------------------------------------------ if(found) { stdout = stdout.Substr(stdout.Find(city)); stdout = stdout.Substr(0, stdout.Find(cut2)+1); stdout = stdout.Substr(stdout.Find("end")+5); integer end = stdout.Substr(0, stdout.Find(",")-3); stdout = stdout.Substr(stdout.Find("start")+7); integer start = stdout.Substr(0, stdout.Find(",")-3); !In folgender Tabelle sind Warntypen mit ? markiert, die noch nicht in der Praxis getestet werden konnten! !0 = Gewitter !1 = Wind/Sturm/Orkan !2 = Stark- und Dauerregen !3 = Schneefall/Schneeverwehungen !4 = Nebel ? !5 = Frost !6 = Glätte/Glatteis !7 = Tauwetter ? !8 = Hitzewarnungen ? !9 = UV-Warnungen ? !10 = Küstenwarnungen ? !11 = Binnenseewarnungen ? stdout = stdout.Substr(stdout.Find("type")+6); var type = stdout.Substr(0, stdout.Find(",")); !Vermutung 0 = Vorabwarnung, 1..10 tatsächliche Warnungen stdout = stdout.Substr(stdout.Find("level")+7); var level = stdout.Substr(0, stdout.Find(",")); stdout = stdout.Substr(stdout.Find("event")+8); var event = stdout.Substr(0, stdout.Find(",")-1); !Vorabinformationen sind auch zu filtern if(event.Find("VORABINFORMATION")>=0) { found = false; } else { !------------------------------------------------------------------------------------------------------------ ! Auswertung !------------------------------------------------------------------------------------------------------------ integer time = system.Date("%F %X").ToTime().ToInteger(); var diff1 = time - start.ToInteger(); var diff2 = time - end.ToInteger(); if(diff1 >= 0 && diff2 <= 0) { dom.GetObject(wetterwarnungAktiv).State(true); } else { dom.GetObject(wetterwarnungAktiv).State(false); } stdout = start.ToInteger().ToTime().ToString() + " - " + end.ToInteger().ToTime().ToString() + ": " + event; dom.GetObject(wetterwarnungText).State(stdout.ToLatin()); dom.GetObject(wetterwarnungTyp).State(type.ToInteger()+1); } } !------------------------------------------------------------------------------------------------------------ ! Allgemeiner Fallback !------------------------------------------------------------------------------------------------------------ if(!found) { dom.GetObject(wetterwarnungAktiv).State(false); dom.GetObject(wetterwarnungText).State("Keine Warnungen"); dom.GetObject(wetterwarnungTyp).State(0); }
Code: Alles auswählen
stdout = stdout.Substr(stdout.Find("end")+5);
integer end = stdout.Substr(0, stdout.Find(",")-3);
stdout = stdout.Substr(stdout.Find("start")+7);
integer start = stdout.Substr(0, stdout.Find(",")-3);
Code: Alles auswählen
stdout = stdout.Substr(stdout.Find("start")+7);
integer start = stdout.Substr(0, stdout.Find(",")-3);
stdout = stdout.Substr(stdout.Find("end")+5);
integer end = stdout.Substr(0, stdout.Find(",")-3);
Code: Alles auswählen
903455002":[{"regionName":"Kreis Friesland - Küste","start":1593316680000,"end":1593360000000,"state":"Niedersachsen","type":1,"level":2,"description":"Es treten Windböen mit Geschwindigkeiten um 60 km/h (17m/s, 33kn, Bft 7) aus südwestlicher Richtung auf.","event":"WINDBÖEN","headline":"Amtliche WARNUNG vor WINDBÖEN","instruction":"","stateShort":"NS","altitudeStart":null,"altitudeEnd":null}]
Code: Alles auswählen
!------------------------------------------------------------------------------------------------------------
! Allgemeiner Fallback
!------------------------------------------------------------------------------------------------------------
if(!found) {
if (dom.GetObject(wetterwarnungAktiv).State() != false) {
dom.GetObject(wetterwarnungAktiv).State(false);
}
if (dom.GetObject(wetterwarnungText).State() != "Keine Warnungen") {
dom.GetObject(wetterwarnungText).State("Keine Warnungen");
}
if (dom.GetObject(wetterwarnungTyp).State() != 0) {
dom.GetObject(wetterwarnungTyp).State(0);
}
}
Code: Alles auswählen
! ------ DWD Unwetterwarnung 07.08.2018 Vers. 1.122 -----------------------------------------------------------
! Unwetterwarnungsscript von Grrzzz / klana
! Version 1.122 vom 07.08.2018
! Korrekturen & Optimierungen von kafetzke
! - Korrekturen von Level und Typ
! - Umbau Auswertung des JSONs auf "solidere" Abfrage
! - Optimierung und Korrektur Fallback
!
! https://homematic-forum.de/forum/viewtopic.php?f=31&t=38161
!------------------------------------------------------------------------------------------------------------
!------------------------------------------------------------------------------------------------------------
! Konfiguration
!------------------------------------------------------------------------------------------------------------
! Anzulegen fuer das Script Wetterwarn_DWD sind die
! folgenden Systemvariablen, welche besser über das Einmalsscript angelegt werden.
! Das Einmalscript unter Script testen eingefügt und einmalig ausführen.
! --------------------------------------------------------------
! Wetterwarnung_Aktiv Boolean
! Wetterwarnung_Text Zeichenkette (für Ausgabe)
! --------------------------------------------------------------
! Wetterwarnung_city Zeichenkette (Nummer zum Suchen)
! Wetterwarnung_regionName Zeichenkette
! Wetterwarnung_start Zeichenkette
! Wetterwarnung_end Zeichenkette
! Wetterwarnung_startDateTime Zeichenkette
! Wetterwarnung_endDateTime Zeichenkette
! Wetterwarnung_level Zahl
! Wetterwarnung_typ Werteliste mit: unbekannt;Gewitter;Wind/Sturm/Orkan;Stark- und Dauerregen;Schneefall/Schneeverwehungen;Nebel;Frost;Glaette/Glatteis;Tauwetter;Hitzewarnungen;UV-Warnungen;Kuestenwarnungen;Binnenseewarnungen
! Wetterwarnung_state Zeichenkette
! Wetterwarnung_description Zeichenkette
! Wetterwarnung_event Zeichenkette
! Wetterwarnung_headline Zeichenkette
! Wetterwarnung_instruction Zeichenkette
! Wetterwarnung_stateShort Zeichenkette
! Wetterwarnung_altitudeStart Zeichenkette
! Wetterwarnung_altitudeEnd Zeichenkette
!
!------------------------------------------------------------------------------------------------------------
!------------------------------------------------------------------------------------------------------------
! Debugging einschalten = true oder aussschalten = false
! z.B. zum Test unter "Script testen"
!
! ShowVorabInfo = false -> es wird keine Vorabwarnung angezeigt,
! = true -> es wird auch die Vorabwarnung angezeigt
! noch nicht aktiv
!------------------------------------------------------------------------------------------------------------
boolean debug = false;
boolean ShowVorabInfo = true;
! --------------------------------------------------------------
! Virtuelles CUxD-Exec-Device hier angeben
! --------------------------------------------------------------
string execdevice = "CUxD.CUX2801001:1";
! --------------------------------------------------------------
! Die Region-ID aus der JSON Datei raussuchen, dazu diese Adresse
! im Browser eingeben:
! https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json
! Für Berlin z.B. 111000000
! --------------------------------------------------------------
string city = "105970000"; ! Kreis Hildesheim
! string city = "109763000"; ! Testort Rhein-Sieg Kreis
! --------------------------------------------------------------
! Nötige CCU-Systemvariablen zuweisen
! In der CCU anzulegende Systemvariablen stehen nachfolgend in Anführungszeichen
! Am Besten mit dem "Einmalscript" automatisch anlegen lassen!
! _Text und _Aktiv sind Anfangsbuchstabe nach Unterstrich gross und
! alle DWD Felder sind Anfangsbuchstabe nach Unterstrich klein geschrieben
! --------------------------------------------------------------
! Eigene Felder
string wwText = "Wetterwarnung_Text";
string wwAktiv = "Wetterwarnung_Aktiv";
! DWD Felder
string wwCity = "Wetterwarnung_city";
string wwRegionName = "Wetterwarnung_regionName";
string wwStart = "Wetterwarnung_start";
string wwEnd = "Wetterwarnung_end";
string wwStartDateTime = "Wetterwarnung_startDateTime";
string wwEndDateTime = "Wetterwarnung_endDateTime";
string wwLevel = "Wetterwarnung_level";
string wwTyp = "Wetterwarnung_typ";
string wwState = "Wetterwarnung_state";
string wwDescription = "Wetterwarnung_description";
string wwEvent = "Wetterwarnung_event";
string wwHeadline = "Wetterwarnung_headline";
string wwInstruction = "Wetterwarnung_instruction";
string wwStateShort = "Wetterwarnung_stateShort";
string wwAltitudeStart = "Wetterwarnung_altitudeStart"; ! Wird noch nicht genutzt
string wwAltitudeEnd = "Wetterwarnung_altitudeEnd"; ! Wird noch nicht genutzt
!------------------------------------------------------------------------------------------------------------
! Ausgabe in Systemvariable fuer Push (fuer spaetere Erweiterung)
!------------------------------------------------------------------------------------------------------------
string PushVar = "SV_PushMessage";
!------------------------------------------------------------------------------------------------------------
! Das wars an Konfiguration
! DWD-Warntabelle in 25k(+25k)-Abschnitten laden bis die Region gefunden wurde
!------------------------------------------------------------------------------------------------------------
string url = "https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json";
string downloader = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl";
integer rangefrom = 0;
integer rangeto = 25000;
integer loopcounter = 1;
integer find1 = 0;
boolean found = false;
string stdout = "";
string cmd = downloader # " --range " # rangefrom # "-" # rangeto # " " # url;
string cut2 = "],";
var ret ;
string strRest = "";
!------------------------------------------------------------------------------------------------------------
! Los gehts...
!------------------------------------------------------------------------------------------------------------
if(debug){WriteLine("cmd : "#cmd);}
ret= dom.GetObject(execdevice # ".CMD_SETS").State(cmd);
!if(debug){WriteLine("ret cmd_sets : "#ret);}
ret = dom.GetObject(execdevice # ".CMD_QUERY_RET").State(1);
!if(debug){WriteLine("ret cmd_query_ret: "#ret);}
stdout = dom.GetObject(execdevice # ".CMD_RETS").State();
!if(debug) {WriteLine("stdout cmd_rets : " #stdout);}
if (stdout)
{
find1 = stdout.Find(city);
if ((find1 >= 0) && (stdout.Length() >= 25000)) {
rangefrom = rangeto - 99;
rangeto = rangeto + 24900;
cmd = downloader # " --range " # rangefrom # "-" # rangeto # " " # url;
dom.GetObject(execdevice # ".CMD_SETS").State(cmd);
dom.GetObject(execdevice # ".CMD_QUERY_RET").State(1);
stdout = stdout + dom.GetObject(execdevice # ".CMD_RETS").State();
}
while ((find1 < 0) && (stdout.Length() >= 25000) && (loopcounter <= 30)) {
loopcounter = loopcounter + 1;
rangefrom = rangeto - 99;
rangeto = rangeto + 24900;
cmd = downloader # " --range " # rangefrom # "-" # rangeto # " " # url;
dom.GetObject(execdevice # ".CMD_SETS").State(cmd);
dom.GetObject(execdevice # ".CMD_QUERY_RET").State(1);
stdout = dom.GetObject(execdevice # ".CMD_RETS").State();
find1 = stdout.Find(city);
if ((find1 >= 0) && (stdout.Length() >= 25000)) {
rangefrom = rangefrom + 25000;
rangeto = rangeto + 25000;
cmd = downloader # " --range " # rangefrom # "-" # rangeto # " " # url;
dom.GetObject(execdevice # ".CMD_SETS").State(cmd);
dom.GetObject(execdevice # ".CMD_QUERY_RET").State(1);
stdout = stdout + dom.GetObject(execdevice # ".CMD_RETS").State();
}
}
found = false;
if(stdout.Find(city)>=0) {
found = true;
}
}
if(city) {dom.GetObject(wwCity).State(city);}
!------------------------------------------------------------------------------------------------------------
! Relevanter Bereich ausschneiden und zuweisen
!------------------------------------------------------------------------------------------------------------
if(found) {
if(debug) {WriteLine("Suche nach City :"#city);}
! gesuchten Bereich komplett ausschneiden und mit ToLatin() umwandeln
stdout = stdout.Substr(stdout.Find(city));
stdout = stdout.Substr(0, stdout.Find(cut2)+1).ToLatin();
if(debug) {WriteLine("stdout nach Find(City): " #stdout);}
! Hier können jetzt mehr als 1 Meldung vorhanden sein
! Diese sind durch geschweifte Klammen getrennt
! Wie kann man diese Auswerten, da zur Zeit immer nur die erste genommen wird?
! regionName (Klartext der gesuchten Region z.B. Rhein-Erft-Kreis)
stdout = stdout.Substr(stdout.Find("regionName")+13);
var regionName = stdout.Substr(0, stdout.Find(",")-1).Trim();
if(debug) {WriteLine("regionName: "#regionName);}
if(regionName) {dom.GetObject(wwRegionName).State(regionName);}
if(!regionName) {dom.GetObject(wwRegionName).State("---");}
! start (Uhrzeit ab der die DWD Meldung gültig ist in Sekunden)
stdout = stdout.Substr(stdout.Find("start")+7);
if(stdout.Substr(0,4) == "null")
{
var start = stdout.Substr(0, stdout.Find(",")-0).Trim();
}
else
{
var start = stdout.Substr(0, stdout.Find(",")-3).Trim();
}
!--------- Originalwert -----
var stdout_orgn = stdout;
!--------- Originalwert -----
if(debug) {WriteLine("Start stdout : " #stdout);}
!Bei Inhalt null keine Anfuehrungszeichen
if(debug) {WriteLine("start : " #start);}
if(start) {dom.GetObject(wwStart).State(start);}
if(!start) {dom.GetObject(wwStart).State(0);}
! end (Uhrzeit bis zu der die DWD Meldung gültig ist in Sekunden)
stdout = stdout.Substr(stdout.Find("end")+5);
if(stdout.Substr(0,4) == "null")
{
var end = stdout.Substr(0, stdout.Find(",")-0).Trim();
}
else
{
var end = stdout.Substr(0, stdout.Find(",")-3).Trim();
}
if(debug) {WriteLine("end : " #end);}
if(end) {dom.GetObject(wwEnd).State(end);}
if(!end) {dom.GetObject(wwEnd).State(0);}
if(debug) {WriteLine("End stdout : " #stdout);}
!Bei Inhalt null keine Anfuehrungszeichen
! Umrechnung in Date und Time neu 16.11.2017
if(debug) {WriteLine("Start DateTime: " #start.ToInteger().ToTime().ToString());}
if(debug) {WriteLine("End DateTime: " #end.ToInteger().ToTime().ToString());}
dom.GetObject(wwStartDateTime).State(start.ToInteger().ToTime().ToString());
dom.GetObject(wwEndDateTime).State(end.ToInteger().ToTime().ToString());
!In folgender Tabelle sind Warntypen mit ? markiert, die noch nicht in der Praxis getestet werden konnten!
!0 = Gewitter
!1 = Wind/Sturm/Orkan
!2 = Stark- und Dauerregen
!3 = Schneefall/Schneeverwehungen
!4 = Nebel ?
!5 = Frost
!6 = Glätte/Glatteis
!7 = Tauwetter ?
!8 = Hitzewarnungen ?
!9 = UV-Warnungen ?
!10 = Küstenwarnungen ?
!11 = Binnenseewarnungen ?
! type (siehe Liste oben)
var stdout_type = stdout_orgn.Substr(stdout_orgn.Find("type")+6);
var mtyp = stdout_type.Substr(0, stdout_type.Find(","));
if(debug) {WriteLine("mtyp :"#mtyp);}
if(mtyp) {dom.GetObject(wwTyp).State(mtyp);}
if(!mtyp) {dom.GetObject(wwTyp).State();}
! state (Bundesland im Klartext z.B: Nordrhein-Westfalen)
var stdout_state = stdout_orgn.Substr(stdout_orgn.Find("state")+8);
var state = stdout_state.Substr(0, stdout_state.Find(",")-1);
if(debug) {WriteLine("state :"#state);}
if(state) {dom.GetObject(wwState).State(state);}
!Level - Vermutung 0 = Vorabwarnung, 1..10 tatsächliche Warnungen
var stdout_lvl = stdout_orgn.Substr(stdout_orgn.Find("level")+7);
var level = stdout_lvl.Substr(0, stdout_lvl.Find(","));
if(debug) {WriteLine("level :"#level);}
if(level) {dom.GetObject(wwLevel).State(level);}
! headline (Überschrift der Meldung z.B. Amtliche WARNUNG vor WINDBÖEN)
var stdout_head = stdout_orgn.Substr(stdout_orgn.Find("headline")+11);
var headline = stdout_head.Substr(0, stdout_head.Find(",")-1);
if(debug) {WriteLine("headline :"#headline);}
if(headline) {dom.GetObject(wwHeadline).State(headline);}
! description (nähere Erklärung der Meldung im Klartext)
var stdout_desc = stdout_orgn.Substr(stdout_orgn.Find("description")+14);
var descript = stdout_desc.Substr(0, stdout_desc.Find(",")-1);
! Überflüssige Zeilenumbrüche wegoptimieren, sofern vorhanden
descript = descript.UriEncode();
descript = descript.Replace("%5Cn", " ");
descript = descript.UriDecode();
if(debug) {WriteLine("descript :"#descript);}
if(descript) {dom.GetObject(wwDescription).State(descript);}
! altitude Start
var stdout_start = stdout_orgn.Substr(stdout_orgn.Find("altitudeStart")+15);
var altitudeStart = stdout_start.Substr(0, stdout_start.Find(","));
if(debug) {WriteLine("altitudeStart :"#altitudeStart);}
if(altitudeStart) {dom.GetObject(wwAltitudeStart).State(altitudeStart);}
! event (Kurzform der Meldungsart z.B. Winböen)
var stdout_event = stdout_orgn.Substr(stdout_orgn.Find("event")+8);
var event = stdout_event.Substr(0, stdout_event.Find("}")-1);
if(debug) {WriteLine("event :"#event);}
if(event) {dom.GetObject(wwEvent).State(event);}
! instruction
var stdout_instr = stdout_orgn.Substr(stdout_orgn.Find("instruction")+14);
var instruction = stdout_instr.Substr(0, stdout_instr.Find(".\",")+1);
if(debug) {WriteLine("instr :"#instruction);}
if(instruction) { dom.GetObject(wwInstruction).State(instruction)};
! altitude End
var stdout_end = stdout_orgn.Substr(stdout_orgn.Find("altitudeEnd")+13);
var altitudeEnd = stdout_end.Substr(0, stdout_end.Find(","));
if(debug) {WriteLine("altitudeEnd :"#altitudeEnd);}
if(altitudeEnd) {dom.GetObject(wwAltitudeEnd).State(altitudeEnd);}
! stateShort (Abkürzung Bundesland z.B: NRW)
var stdout_stt_short = stdout_orgn.Substr(stdout_orgn.Find("stateShort")+13);
var stateShort = stdout_stt_short.Substr(0, stdout_stt_short.Find(",")-1);
if(debug) {WriteLine("stateShort :"#stateShort);}
if(stateShort) {dom.GetObject(wwStateShort).State(stateShort);}
if (debug) {WriteLine("Laenge Rest:"#stdout.Length());}
!Vorabinformationen sind auch zu filtern
! if(event.Find("VORABINFORMATION")>=0) && (ShowVorabInfo == false)) {
if(event.Find("vorabinformation")>=0) {
found = false;
if(debug) {WriteLine("if von VorabInformation found :"#found);}
} else {
if(debug) {WriteLine("else von VORABINFORMATION found :"#found);}
!------------------------------------------------------------------------------------------------------------
! Auswertung
!------------------------------------------------------------------------------------------------------------
integer time = system.Date("%F %X").ToTime().ToInteger();
var diff1 = time - start.ToInteger();
var diff2 = time - end.ToInteger();
if(debug) {WriteLine("diff1 :"#diff1);}
if(debug) {WriteLine("diff2 :"#diff2);}
if(diff1 >= 0 && diff2 <= 0) {
dom.GetObject(wwAktiv).State(true);
if(debug) {WriteLine("Wetterwarnung auf true");}
}
else {
dom.GetObject(wwAktiv).State(false);
if(debug) {WriteLine("Wetterwarnung auf false");}
}
stdout = start.ToInteger().ToTime().ToString() # " - " # end.ToInteger().ToTime().ToString() # ": " # event ;
if(debug) {WriteLine("WetterwarnungText :"#stdout);}
if(debug) {WriteLine("WetterwarnungTyp :"#(mtyp.ToInteger()+1).ToString());}
if(debug) {WriteLine("WetterwarnungDescript :"#descript);}
dom.GetObject(wwText).State(stdout);
dom.GetObject(wwTyp).State(mtyp.ToInteger()+1);
dom.GetObject(wwDescription).State(descript);
}
!! Interner Fallback, falls Felder leer sind
if(!state) {dom.GetObject(wwState).State("---");}
if(!level) {dom.GetObject(wwLevel).State(0);}
if(!headline) {dom.GetObject(wwHeadline).State("---");}
if(!descript) {dom.GetObject(wwDescription).State("---");}
if(!altitudeStart) {dom.GetObject(wwAltitudeStart).State("---");}
if(!event) {dom.GetObject(wwEvent).State("---");}
if(!instruction) { dom.GetObject(wwInstruction).State("---")};
if(!altitudeEnd) {dom.GetObject(wwAltitudeEnd).State("---");}
if(!stateShort) {dom.GetObject(wwStateShort).State("---");}
}
!------------------------------------------------------------------------------------------------------------
! Allgemeiner Fallback
!------------------------------------------------------------------------------------------------------------
if(!found) {
if(debug) {WriteLine("Fallback Keine Warnung gefunden - found :"#found);}
dom.GetObject(wwAktiv).State(false);
dom.GetObject(wwText).State("Keine Warnungen");
dom.GetObject(wwTyp).State(0);
dom.GetObject(wwCity).State("---");
dom.GetObject(wwRegionName).State("---");
dom.GetObject(wwStart).State("---");
dom.GetObject(wwEnd).State("---");
dom.GetObject(wwStartDateTime).State("---");
dom.GetObject(wwEndDateTime).State("---");
dom.GetObject(wwLevel).State(0);
dom.GetObject(wwState).State("---");
dom.GetObject(wwDescription).State(" ");
dom.GetObject(wwEvent).State("---");
dom.GetObject(wwHeadline).State("---");
dom.GetObject(wwStateShort).State("---");
dom.GetObject(wwAltitudeStart).State("---");
dom.GetObject(wwAltitudeEnd).State("---");
}
Nicht ganz.
GrußÜber den Pfad https://www.dwd.de/DWD/warnungen/warnap ... nings.json wird eine JSONP-Datei zur Verfügung gestellt, in der der Warnstatus für Deutschland dargestellt wird.
Die einzelnen Kreise und Kriterien können über selbst erstellte Scripte ausgelesen und als Text oder Grafik umgesetzt werden.
JSONP wird anstelle von reinem JSON-Code zur Vermeidung von Domainabhängigkeiten verwendet. Im Unterschied gibt es vor dem eigentlich JSON-Code zusätzlich den Präfix "warnWetter.loadWarnings (" und am Ende noch ein " );". Werden die Anfangs- und Endzeichen entfernt (z.B. durch Nutzung einer "Substring"-Funktion) erhält man den reinen JSON-Code, der entsprechend verarbeitet werden kann.