Und noch eine Wettervorhersage (vom DWD)

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Antworten
Benutzeravatar
RooWackler
Beiträge: 2
Registriert: 25.09.2020, 19:57
System: CCU
Wohnort: nahe Köln
Danksagung erhalten: 2 Mal

Und noch eine Wettervorhersage (vom DWD)

Beitrag von RooWackler » 04.11.2021, 14:58

Habe bisher noch nichts dergleichen gefunden...
Der Deutsche Wetterdienst bietet nicht nur eine Wetterwarnung, sondern auch eine Wettervorhersage an.
Nach kurzem einlesen habe ich da mal was programmiert :D
Der Code ist 'well documented' und sollte auch von Laien zu verwenden sein.
Im Text steht auch, wie man an die eigene Wetterstation kommt.
Die Ausführung dauert bei mir ca. 15 Sekunden ... also nicht ungeduldig sein (Raspi4b 4GB)
Verwendete Firmwareversion : 3.59.6.20211009
Das Script wird bei mir nun jeden Tag um 06:00 Uhr ausgeführt.

Version 002 -> Der DWD liefert die Zeitstempel in UTC Zeit. Diese werden jetzt zu MEZ bzw. MESZ umgewandelt...
Version 003 -> Kleine Bugfixes und Formatierungsanpassungen
Version 004 -> Berücksichtigung des Wetterzustandcodes (ww)
Version 005 -> Wird ein Element angefordert, dass nicht mehr in der Liste ist dann wird die evtl. vorhandene SYSTEMVARIABLE gelöscht

Code: Alles auswählen

!- ### Wettervorhersage DWD # Version 005 ################################################
!- ### Done 11.2021 @ ROO ################################################################
!- ####################################################################### Wulf war da ...
!- ### What to hell ...
!- ###  Wettervorhersage über den Deutschen Wetter Dienst
!- ###   Der Deutsche Wetter Dienst stellt seine statistisch optimierten Vorhersagen (MOSMIX)
!- ###   (https://www.dwd.de/DE/leistungen/met_verfahren_mosmix/met_verfahren_mosmix.html)
!- ###   zum freien Download zur Verfügung. Diese Dateien können vom opendata Server des DWD
!- ###   kostenfrei heruntergeladen werden. Die Aktualisierung erfolgt dort alle 6 Stunden.
!- ###   Die Bereitstellungszeiten sind 04:00 , 10:00 , 16:00 und 22:00
!- ###   Der DWD gibt als Dateneinstellzeit einen maximalwert von 25 Minuten an.
!- ###
!- ###  Es werden verschiedene Optionen angeboten. Die Datenschonenste Variante bezieht nur 
!- ###  die Daten einer spezifischen Station. (ca. 20kb)
!- ###  (https://opendata.dwd.de/weather/local_forecasts/mos/MOSMIX_L/single_stations/<STATION>/kml/MOSMIX_L_LATEST_<STATION>.kmz)
!- ###  Die .kmz Datei ist dabei -zip gepackt und muss entpackt werden.(wird dann zu .kml)
!- ###
!- ###  Die Station kann beim DWD herausgesucht werden per
!- ###  https://www.dwd.de/DE/leistungen/met_verfahren_mosmix/mosmix_stationskatalog.cfg?view=nasPublication&nn=495490
!- ###  oder bei https://mosmix.de/online.html#/suche .
!- ###  
!- ###  Am Ende dieser Datei befindet sich die Liste aller möglichen Vorhersagewerte mit Beschreibung.
!- ###  Nicht alle Elemnete sind in der abgeholten Liste auch wirklich vorhanden ! (z.B. Schneehöhe im Sommer :) )
!- ###
!- ###  Version 001 -> Final
!- ###  Version 002 -> Umrechnung TimeSteps von UTC zu MEZ bzw. MESZ  (Programmaufruf nun um 06:00 Uhr)
!- ###  Version 003 -> Kleine Bugfixes und Formatierungsanpassungen
!- ###  Version 004 -> Berücksichtigung des Wetterzustandcodes
!- ###  Version 005 -> Wird ein Element angefordert, dass nicht mehr in der Liste ist dann wird die evtl. vorhandene SYSTEMVARIABLE gelöscht.
!- #######################################################################################
!- ### Programmablauf
!- ###  - Das Programm holt die letzte Datei vom DWD opendata Server und speichert diese unter '/tmp/Forecast.zip' .
!- ###  - Nun wird diese Datei entpackt und der Output an eine Variable (sXMLRaw) übergeben.
!- ###	- Die heruntergeladene Datei wird daraufhin wieder gelöscht.
!- ###	- Der Inhalt der sXMLRaw wird umformatiert (sWerteListe), um ein besser lesbares Format zu erhalten.
!- ###  - Es wird jede Zeile der sWerteListe durchgegangen. Wid ein Wert von Interesse gefunden, beginnt die Datenaufzeichnung.
!- ###  - Bei der Aufzeichnung durchlaufen die Werte den optionalen Filter. (Druck und Temperatur)
!- ###	- Die gesammelten Werte werden in SYSTEMVARIABLEN abgespeichert. Sind diese noch nicht vorhanden werden sie angelegt.
!- ###    (Achtung : Wird ein Wert nicht mehr verwendet, sollte auch die SYSTEMVARIABLE gelöscht werden !! )
!- ###  - Die angelegte Liste enthält in Index 0 den Elementnamen, die Einheit und eine Beschreibung zur weiteren Verwendung.
!- ###
!- #######################################################################################
!- ### Wo ich geklaut habe
!- ### Esche's IT-Blog : https://www.blogging-it.com/code-snippet-homematic-systemvariablen-ueber-ein-script-automatisch-erzeugen/programmierung/homematic-script.html
!- ### Aus dem HomeMatic Forum : Dank an alchy, Baxxy, Black, MichaelN und jmaus  
!- ### und alle die ich vergessen habe %)
!- ###	
!- #######################################################################################
!- ### Programmaufruf
!- ### Bedingung: Wenn...
!- ###    Zeitsteuerung > Täglich um 06:00 Uhr beginnend am 04.11.2021 > zu Zeitpunkt auslösen
!- ### Aktivität: Dann...
!- ###    Script <- Dieses Script dort einfügen -> sofort
!- #######################################################################################
!- ######################### Vorgabewerte ################################################
!- ###
!- ###   Elementbeschreibung : Siehe Anhang am Ende dieses Programms
!- ###   Stationssuche : https://mosmix.de/online.html#/suche

string sStation = "N8349";                                           !- Die zu erfassende Stationsnummer

string lWertVonInterresse = "TTT;T5cm;PPPP;ww;SnCv";                 !- Liste der Werte die erfasst werden sollen -> Trenner ist das ; -> Bedeutung siehe unten (Anhang)

string sEinheitTemperatur = "C";                                     !- Mögliche Werte sind K -> Kelvin und C -> Celsius
string lListeDerTemperaturwerte = "TTT;Td;TX;TN;T5cm;TG;TM;";        !- Zur Umrechnung der Werte von K -> C (Die Fehlerwerte müssen in K bleiben ... Schrittweite K und C sind gleich)

string sEinheitDruck      = "hPa";                                   !- Mögliche Werte sind Pa -> Pascal und hPa -> HektoPascal
string lListeDerDruckwerte = "PPPP;E_PPP;";                          !- Zur Umrechnung der Werte von Pa -> hPa

!- #######################################################################################
!- #######  Von hier an keine Änderungen vornehmen !! ####################################

!- ####### Setze die Strings zusammen zur Datenabholung ##################################

string sUrl  = "https://opendata.dwd.de/weather/local_forecasts/mos/MOSMIX_L/single_stations/"#sStation#"/kml/MOSMIX_L_LATEST_"#sStation#".kmz"; !- DWD Vorhersage lokaler Wetterdaten
string sLoad = "wget --no-check-certificate --timeout=2 '"#sUrl#"' --output-document='/tmp/Forecast.zip'"; !- Lade Datei und speichere in /tmp/Forecaast.zip ab
string sFileExtract = "unzip -op /tmp/Forecast.zip";                                                       !- Entpacke /tmp/Forecaast.zip in stdout (sXMLRaw)
string sFileDelete  = "rm /tmp/Forecast.zip";                                                              !- Lösche /tmp/Forecaast.zip

string sStdOut;
string sXMLRaw;
string sError= "Kein Fehler \n";

!- #######  Hole die Rohdaten vom DWD ####################################################

system.Exec(sLoad, &sStdOut, &sError);
! WriteLine(sError); !- ### DEBUG
sStdOut = "";
sError= "Kein Fehler \n";

system.Exec(sFileExtract, &sXMLRaw, &sError);
! WriteLine(sError); !- ### DEBUG
!WriteLine(sXMLRaw); !- ### DEBUG
sError= "Kein Fehler \n";

system.Exec(sFileDelete, &sStdOut, &sError);
! WriteLine(sError); !- ### DEBUG
sStdOut = "";
sError= "Kein Fehler \n";


!- #######  Bei Fehler Abbruch ###########################################################

if (sXMLRaw == "")
{
  WriteLine("=== HTTP-Daten FEHLER ! ===");
  quit;
}

!- #######  Bereite die Rohdaten auf #####################################################

string sWerteListe;

if (!sXMLRaw == "")
{
   WriteLine("=== HTTP-Daten OK === ");
   !- Rohdaten müssen zunächst einen Filter durchlaufen
   sWerteListe = sXMLRaw.ToLatin();                                  ! Wegen deutschen Umlauten
   sWerteListe = sWerteListe.Replace('\n','');                       ! Enferne Zeilenumbruch
   sWerteListe = sWerteListe.Replace('\r','');                       ! Entferne Wagenrücklauf
   sWerteListe = sWerteListe.Replace('dwd:','');                     ! Enferne das Tag dwd:
   sWerteListe = sWerteListe.Replace('kml:','');                     ! Enferne das Tag kml:
   !- Trenne die Datenwerte durch ';'
   sWerteListe = sWerteListe.Replace('          ',';');              ! Werte sind Leerzeichengetrennt
   sWerteListe = sWerteListe.Replace('         ',';');               ! -> mögliche Varianten werden hier gewandelt...
   sWerteListe = sWerteListe.Replace('        ',';');                ! (von Anzahl 10 bis Anzahl 2)
   sWerteListe = sWerteListe.Replace('       ',';');
   sWerteListe = sWerteListe.Replace('      ',';');
   sWerteListe = sWerteListe.Replace('     ',';');
   sWerteListe = sWerteListe.Replace('    ',';');
   sWerteListe = sWerteListe.Replace('   ',';');
   sWerteListe = sWerteListe.Replace('  ',';');
   !- Entferne bzw korrigiere noch fehlerhaftes
   sWerteListe = sWerteListe.Replace(';;',';');                      ! Entferne leere Werte
   sWerteListe = sWerteListe.Replace('</value>',';</value>');        ! Setze das Werteende ab vom letzten Datenwert
   sWerteListe = sWerteListe.Replace('<TimeStep>','');               ! Entferne das TimeStep Tag einleitend
   sWerteListe = sWerteListe.Replace('</TimeStep>','');              ! Entferne das TimeStep Tag ausleitend
}
! WriteLine(sWerteListe); !- ### DEBUG

!- ####### Zusatzinformationen einpflegen ###############################################

string lDWDInfo   = "TTT|K|Temperatur 2m über Grund;Td|K|Taupunkt 2m über Grund;TX|K|Höchsttemperatur - innerhalb der letzten 12 Stunden;TN|K|Mindesttemperatur - innerhalb der letzten 12 Stunden;";
lDWDInfo = lDWDInfo#"DD|0°..360°|Windrichtung;FF|m/s|Windgeschwindigkeit;FX1|m/s|Maximale Windböe innerhalb der letzten Stunde;FX3|m/s|Maximale Windböe innerhalb der letzten 3 Stunden;";
lDWDInfo = lDWDInfo#"FXh|m/s|Maximale Windböe innerhalb der letzten 12 Stunden;RR1c|kg/m2|Gesamtniederschlag während der letzten Stunde im Einklang mit signifikantem Wetter;";
lDWDInfo = lDWDInfo#"RR1|kg/m2|Gesamtniederschlag während der letzten Stunde;RR3c|kg/m2|Gesamtniederschlag während der letzten 3 Stunden im Einklang mit signifikantem Wetter;";
lDWDInfo = lDWDInfo#"RR3|kg/m2|Gesamtniederschlag während der letzten 3 Stunden;RRS1c|kg/m2|Schnee-Regen-Äquivalent in der letzten Stunde;RRS3c|kg/m2|Schnee-Regen-Äquivalent während der letzten 3 Stunden;";
lDWDInfo = lDWDInfo#"ww|-|Wetter;W1W2|-|Vergangenes Wetter der letzten 6 Stunden;N|% (0..100)|Gesamte Wolkendecke;Neff|% (0..100)|Effektive Wolkendecke;";
lDWDInfo = lDWDInfo#"N05|% (0..100)|Wolkendecke unter 150 ft.;Nl|% (0..100)|Niedrige Wolkendecke (unter 2 km);Nm|% (0..100)|Mittlere Wolkendecke (2-7 km);Nh|% (0..100)|Hohe Wolkendecke (>7 km);";
lDWDInfo = lDWDInfo#"PPPP|Pa|Luftdruck;T5cm|K|Temperatur 5cm über Grund;RadS3|kJ/m2|Kurzwellige Strahlungsbilanz der letzten 3 Stunden;Rad1h|kJ/m2|Globale Strahlung;";
lDWDInfo = lDWDInfo#"RadL3|kJ/m2|Langwellige Strahlungsbilanz der letzten 3 Stunden;VV|m|Sichtbarkeit;SunD1|s|Sonnenscheindauer während der letzten Stunde;";
lDWDInfo = lDWDInfo#"FXh25|% (0..100)|Wahrscheinlichkeit von Windböen >= 25kn innerhalb der letzten 12 Stunden;FXh40|% (0..100)|Wahrscheinlichkeit von Windböen >= 40kn innerhalb der letzten 12 Stunden;";
lDWDInfo = lDWDInfo#"FXh55|% (0..100)|Wahrscheinlichkeit von Windböen >= 55kn innerhalb der letzten 12 Stunden;wwM|% (0..100)|Nebelwahrscheinlichkeit innerhalb der letzten Stunde;";
lDWDInfo = lDWDInfo#"wwM6|% (0..100)|Nebelwahrscheinlichkeit innerhalb der letzten 6 Stunden;wwMh|% (0..100)|Nebelwahrscheinlichkeit innerhalb der letzten 12 Stunden;";
lDWDInfo = lDWDInfo#"Rh00|% (0..100)|Niederschlagswahrscheinlichkeit > 0.0mm während der letzten 12 Stunden;R602|% (0..100)|Niederschlagswahrscheinlichkeit > 0,2 mm während der letzten 6 Stunden;";
lDWDInfo = lDWDInfo#"Rh02|% (0..100)|Niederschlagswahrscheinlichkeit > 0,2 mm während der letzten 12 Stunden;Rd02|% (0..100)|Niederschlagswahrscheinlichkeit > 0,2 mm während der letzten 24 Stunden;";
lDWDInfo = lDWDInfo#"Rh10|% (0..100)|Niederschlagswahrscheinlichkeit > 1,0 mm während der letzten 12 Stunden;R650|% (0..100)|Niederschlagswahrscheinlichkeit > 5.0mm während der letzten 6 Stunden;";
lDWDInfo = lDWDInfo#"Rh50|% (0..100)|Niederschlagswahrscheinlichkeit > 5.0mm während der letzten 12 Stunden;Rd50|% (0..100)|Niederschlagswahrscheinlichkeit > 5.0mm während der letzten 24 Stunden;";
lDWDInfo = lDWDInfo#"TG|K|Minimale Oberflächentemperatur bei 5cm innerhalb der letzten 12 Stunden;TM|K|Durchschnittstemperatur der letzten 24 Stunden;DRR1|s|Niederschlagsdauer innerhalb der letzten Stunde;";
lDWDInfo = lDWDInfo#"wwZ|% (0..100)|Wahrscheinlichkeit: Nieselregen innerhalb der letzten Stunde;wwD|% (0..100)|Wahrscheinlichkeit: Auftreten von stratiformem Niederschlag innerhalb der letzten Stunde;";
lDWDInfo = lDWDInfo#"wwC|% (0..100)|Wahrscheinlichkeit: Auftreten von konvektivem Niederschlag innerhalb der letzten Stunde;wwT|% (0..100)|Wahrscheinlichkeit: Auftreten von Gewittern innerhalb der letzten Stunde;";
lDWDInfo = lDWDInfo#"wwL|% (0..100)|Wahrscheinlichkeit: Auftreten von flüssigem Niederschlag innerhalb der letzten Stunde;wwS|% (0..100)|Wahrscheinlichkeit: Auftreten von Festniederschlag innerhalb der letzten Stunde;";
lDWDInfo = lDWDInfo#"wwF|% (0..100)|Wahrscheinlichkeit: Auftreten von Eisregen innerhalb der letzten Stunde;wwP|% (0..100)|Wahrscheinlichkeit: Auftreten von Niederschlag innerhalb der letzten Stunde;";
lDWDInfo = lDWDInfo#"VV10|% (0..100)|Wahrscheinlichkeit: Sichtweite unter 1000m;E_TTT|K|Absolute Fehlertemperatur 2m über Grund;E_FF|m/s|Absoluter Fehler Windgeschwindigkeit 10m über Grund;";
lDWDInfo = lDWDInfo#"E_DD|0°..360°|Absoluter Fehler Windrichtung;E_Td|K|Absoluter Fehler Taupunkt 2m über Grund;RR6|kg / m2|Gesamtniederschlag während der letzten 6 Stunden;";
lDWDInfo = lDWDInfo#"RR6c|kg / m2|Gesamtniederschlag während der letzten 6 Stunden im Einklang mit signifikantem Wetter;R600|% (0..100)|Niederschlagswahrscheinlichkeit > 0.0mm während der letzten 6 Stunden;";
lDWDInfo = lDWDInfo#"R101|% (0..100)|Niederschlagswahrscheinlichkeit > 0,1 mm während der letzten Stunde;R102|% (0..100)|Niederschlagswahrscheinlichkeit > 0,2 mm während der letzten Stunde;";
lDWDInfo = lDWDInfo#"R103|% (0..100)|Niederschlagswahrscheinlichkeit > 0,3 mm während der letzten Stunde;R105|% (0..100)|Niederschlagswahrscheinlichkeit > 0,5 mm während der letzten Stunde;";
lDWDInfo = lDWDInfo#"R107|% (0..100)|Niederschlagswahrscheinlichkeit > 0,7 mm während der letzten Stunde;R110|% (0..100)|Niederschlagswahrscheinlichkeit > 1,0 mm während der letzten Stunde;";
lDWDInfo = lDWDInfo#"R120|% (0..100)|Niederschlagswahrscheinlichkeit > 2,0 mm während der letzten Stunde;SunD|s|Gestern Gesamtsonnenscheindauer;";
lDWDInfo = lDWDInfo#"RSunD|% (0..100)|Relative Sonnenscheindauer innerhalb der letzten 24 Stunden;PSd00|% (0..100)|Wahrscheinlichkeit: relative Sonnenscheindauer > 0 % innerhalb von 24 Stunden;";
lDWDInfo = lDWDInfo#"PSd30|% (0..100)|Wahrscheinlichkeit: relative Sonnenscheindauer > 30 % innerhalb von 24 Stunden;PSd60|% (0..100)|Wahrscheinlichkeit: relative Sonnenscheindauer > 60 % innerhalb von 24 Stunden;";
lDWDInfo = lDWDInfo#"RRad1|% (0..80)|Globalstrahlung innerhalb der letzten Stunde;PEvap|kg / m2|Mögliche Evapotranspiration innerhalb der letzten 24 Stunden;";
lDWDInfo = lDWDInfo#"R130|% (0..100)|Niederschlagswahrscheinlichkeit > 3,0 mm während der letzten Stunde;R150|% (0..100)|Niederschlagswahrscheinlichkeit > 5.0 mm während der letzten Stunde;";
lDWDInfo = lDWDInfo#"RR1o1|% (0..100)|Niederschlagswahrscheinlichkeit > 10 mm während der letzten Stunde;RR1w1|% (0..100)|Niederschlagswahrscheinlichkeit > 15 mm während der letzten Stunde;";
lDWDInfo = lDWDInfo#"RR1u1|% (0..100)|Niederschlagswahrscheinlichkeit > 25 mm während der letzten Stunde;wwD6|% (0..100)|Wahrscheinlichkeit: Auftreten von stratiformem Niederschlag innerhalb der letzten 6 Stunden;";
lDWDInfo = lDWDInfo#"wwC6|% (0..100)|Wahrscheinlichkeit: Auftreten von konvektivem Niederschlag innerhalb der letzten 6 Stunden;wwT6|% (0..100)|Wahrscheinlichkeit: Auftreten von Gewittern innerhalb der letzten 6 Stunden;";
lDWDInfo = lDWDInfo#"wwP6|% (0..100)|Wahrscheinlichkeit: Auftreten von Niederschlag innerhalb der letzten 6 Stunden;wwL6|% (0..100)|Wahrscheinlichkeit: Auftreten von Flüssigkeitsniederschlag innerhalb der letzten 6 Stunden;";
lDWDInfo = lDWDInfo#"wwF6|% (0..100)|Wahrscheinlichkeit: Auftreten von Eisregen innerhalb der letzten 6 Stunden;wwS6|% (0..100)|Wahrscheinlichkeit: Auftreten von Festniederschlag innerhalb der letzten 6 Stunden;";
lDWDInfo = lDWDInfo#"wwZ6|% (0..100)|Wahrscheinlichkeit: Nieselregen innerhalb der letzten 6 Stunden;wwMd|% (0..100)|Wahrscheinlichkeit: Auftreten von Nebel innerhalb der letzten 24 Stunden;";
lDWDInfo = lDWDInfo#"FX625|% (0..100)|Wahrscheinlichkeit: Auftreten von Böen >= 25kn innerhalb der letzten 6 Stunden;FX640|% (0..100)|Wahrscheinlichkeit: Auftreten von Böen >= 40kn innerhalb der letzten 6 Stunden;";
lDWDInfo = lDWDInfo#"FX655|% (0..100)|Wahrscheinlichkeit: Auftreten von Böen >= 55kn innerhalb der letzten 6 Stunden;wwDh|% (0..100)|Wahrscheinlichkeit: Auftreten von stratiformem Niederschlag innerhalb der letzten 12 Stunden;";
lDWDInfo = lDWDInfo#"wwCh|% (0..100)|Wahrscheinlichkeit: Auftreten von konvektivem Niederschlag innerhalb der letzten 12 Stunden;wwTh|% (0..100)|Wahrscheinlichkeit: Auftreten von Gewittern innerhalb der letzten 12 Stunden;";
lDWDInfo = lDWDInfo#"wwPh|% (0..100)|Wahrscheinlichkeit: Auftreten von Niederschlag innerhalb der letzten 12 Stunden;wwLh|% (0..100)|Wahrscheinlichkeit: Auftreten von Flüssigkeitsniederschlag innerhalb der letzten 12 Stunden;";
lDWDInfo = lDWDInfo#"wwFh|% (0..100)|Wahrscheinlichkeit: Auftreten von Eisregen innerhalb der letzten 12 Stunden;wwSh|% (0..100)|Wahrscheinlichkeit: Auftreten von Festniederschlag innerhalb der letzten 12 Stunden;";
lDWDInfo = lDWDInfo#"wwZh|% (0..100)|Wahrscheinlichkeit: Nieselregen innerhalb der letzten 12 Stunden;R610|% (0..100)|Niederschlagswahrscheinlichkeit > 1,0 mm während der letzten 6 Stunden;";
lDWDInfo = lDWDInfo#"RRh|kg / m2|Gesamtniederschlag der letzten 12 Stunden;RRhc|kg / m2|Gesamtniederschlag während der letzten 12 Stunden in Übereinstimmung mit signifikantem Wetter;";
lDWDInfo = lDWDInfo#"ww3|- (0..95)|Bedeutendes Wetter der letzten 3 Stunden;RRL1c|kg / m2|Flüssiger Gesamtniederschlag während der letzten Stunde im Einklang mit signifikantem Wetter;";
lDWDInfo = lDWDInfo#"Rd00|% (0..100)|Niederschlagswahrscheinlichkeit > 0.0 mm während der letzten 24 Stunden;Rd10|% (0..100)|Niederschlagswahrscheinlichkeit > 1,0 mm während der letzten 24 Stunden;";
lDWDInfo = lDWDInfo#"RRd|kg / m2|Gesamtniederschlag der letzten 24 Stunden;RRdc|kg / m2|Gesamtniederschlag während der letzten 24 Stunden im Einklang mit signifikantem Wetter;";
lDWDInfo = lDWDInfo#"Nlm|% (0..100)|Wolkendecke niedrige und mittlere Wolken unter 7000 m;wwPd|% (0..100)|Wahrscheinlichkeit: Auftreten von Niederschlag innerhalb der letzten 24 Stunden;";
lDWDInfo = lDWDInfo#"H_BsC|m|Wolkenbasis konvektiver Wolken;wwTd|% (0..100)|Wahrscheinlichkeit: Auftreten von Gewittern innerhalb der letzten 24 Stunden;E_PPP|Pa|Absoluter Fehler Luftdruck;";
lDWDInfo = lDWDInfo#"SunD3|s|Sonnenscheindauer während der letzten drei Stunden;WPc11|- (0..95)|Optional signifikantes Wetter (höchste Priorität) während der letzten Stunde;";
lDWDInfo = lDWDInfo#"WPc31|- (0..95)|Optional signifikantes Wetter (höchste Priorität) während der letzten 3 Stunden;WPc61|- (0..95)|Optional signifikantes Wetter (höchste Priorität) während der letzten 6 Stunden;";
lDWDInfo = lDWDInfo#"WPch1|- (0..95)|Optional signifikantes Wetter (höchste Priorität) während der letzten 12 Stunden;WPcd1|- (0..95)|Optional signifikantes Wetter (höchste Priorität) während der letzten 24 Stunden;";
lDWDInfo = lDWDInfo#"Sa3|m|Kumulierte Neuschneemenge in 3 Stunden;Sa6|m|Kumulierte Neuschneemenge in 6 Stunden (Anzahl der 3h-Werte);Sah|m|Kumulierte Neuschneemenge in 12 Stunden (Anzahl 6h Werte);";
lDWDInfo = lDWDInfo#"Sad|m|Kumulierte Neuschneemenge in 24 Stunden (Anzahl der 12h-Werte);Sa605|% (0..100)|Wahrscheinlichkeit > 5cm Neuschneemenge in 6 Stunden;Sa610|% (0..100)|Wahrscheinlichkeit > 10cm Neuschneemenge in 6 Stunden;";
lDWDInfo = lDWDInfo#"Sa620|% (0..100)|Wahrscheinlichkeit > 20cm Neuschneemenge in 6 Stunden;Sah05|% (0..100)|Wahrscheinlichkeit > 5cm Neuschneemenge in 12 Stunden;";
lDWDInfo = lDWDInfo#"Sah10|% (0..100)|Wahrscheinlichkeit von > 10cm Neuschneemenge in 12 Stunden;Sah30|% (0..100)|Wahrscheinlichkeit > 30cm Neuschneemenge in 12 Stunden;";
lDWDInfo = lDWDInfo#"Sad10|% (0..100)|Wahrscheinlichkeit > 10cm Neuschneemenge in 24 Stunden;Sad30|% (0..100)|Wahrscheinlichkeit > 30cm Neuschneemenge in 24 Stunden;";
lDWDInfo = lDWDInfo#"Sad50|% (0..100)|Wahrscheinlichkeit > 50cm Neuschneemenge in 24 Stunden;SnCv|m|Schneehöhe;";

string lDWDCodes =    "0|keine Bewölkung;1|Bewölkung abnehmend;2|Bewölkung unverändert;3|Bewölkung zunehmend;45|Leichter Nebel;49|Nebel mit Reifansatz;";
lDWDCodes = lDWDCodes#"51|Durchgehend leichter Sprühregen;53|Durchgehend mäßiger Sprühregen;55|Durchgehend starker Sprühregen;56|Leichter gefrierender Sprühregen;57|Mäßiger oder starker gefrierender Sprühregen;";
lDWDCodes = lDWDCodes#"61|Durchgehend leichter Regen;63|Durchgehend mäßiger Regen;65|Durchgehend starker Regen;66|Leichter gefrierender Regen;67|Mäßiger bis starker gefrierender Regen;68|Leichter Schneeregen;";
lDWDCodes = lDWDCodes#"69|Mäßiger oder starker Schneeregen;71|Durchgehend leichter Schneefall;73|Durchgehend mäßiger Schneefall;75|Durchgehend starker Schneefall;80|Leichter Regenschauer;";
lDWDCodes = lDWDCodes#"81|Mäßiger oder starker Regenschauer;82|Äußerst heftiger Regenschauer;83|Leichter Schneeregenschauer;84|Mäßiger oder starker Schneeregenschauer;";
lDWDCodes = lDWDCodes#"85|Leichter Schneeschauer;86|Mäßiger bis starker Schneeschauer;95|Leichtes oder mäßiges Gewitter mit Regen oder Schnee;";

!- ####### DWD liefert UTC Zeitformat -> Deshalb muss dies umgerechnet werden ###########

string sJetzt = system.Date("%Y-%m-%d %H:00:00");                   ! Hole mir die Systemzeit
integer iSommerZeit = sJetzt.ToTime().IsDST();                      ! Ist gerade Sommer- oder Winterzeit
integer iZeitPlus = 3600;                                           ! MEZ ist UTC + 1h (3600s)
! Addiere noch eine Stunde, wenn Sommerzeit ist
if (iSommerZeit == 1)
{
  iZeitPlus = (iZeitPlus) + 3600;                                   ! MESZ ist MEZ + 1h oder UTC + 2h
}

!- ####### Datenstrom zerlegen ##########################################################

string lListeWetterzustand = "ww;ww3;WPc11;WPC31;WPc61;WPcd1;WPch1;";               !- Zur Beschreibung der Wetterzustandcodes
boolean xInCelsius = false; boolean xInhPa = false; boolean xInDWDCode = false;     !- Handelt es sich um einen Wert zum wandeln
string sListenwert = ""; string lWertInListeVorhanden = '';
string sWert = ""; string sWertVonInterresse = ""; string sDWDInfo = "";
string sAufnahmeWert = ""; boolean xGefunden = false; string lElementListe = "";
string sElement = ""; integer iElementAnzahl = 0;

foreach(sWert, sWerteListe.Split(";"))
{
  ! Werte in Liste Aufnehmen wenn Wertaufnahme aktiv und Wert kein XML-Tag enthält (z.B. <value>)
  if (xGefunden && !sWert.Contains('<'))
  {
    sElement = sWert;
    ! Filter Zeitstempel
    if (sAufnahmeWert == 'TimeSteps')
    {
      sElement = sElement.Replace('T',' ');                          ! Ersetze das T durch Leerzeichen
      sElement = sElement.Replace('.000Z','');                       ! Entferne Zeichen nach Sekunde
      sElement = ((sElement.ToTime())+(iZeitPlus)).ToString();       ! Berechne MEZ bzw MESZ
    }
    ! Filter Temperatur Umrechnung K -> C aktic
    if (xInCelsius)
    {
      sElement = ((sElement.ToFloat())-273.15);                      ! Umrechnung K->C
      sElement = sElement.ToString(2);                               ! String mit 2 Nachkommastellen
    }
    ! Filter Druck Umrechnung Pa -> hPa aktiv
    if (xInhPa)
    {
      sElement = ((sElement.ToFloat())/100);                         ! Umrechnung Pa->hPa
      sElement = sElement.ToString(2);                               ! String mit 2 Nachkommastellen
    }
    ! Filter Wetterzustandscode -> Klartext
    if (xInDWDCode)
    {
      foreach(sListenwert, lDWDCodes.Split(";"))
      {
        if (sListenwert.StrValueByIndex('|',0) == sElement.ToInteger())
        {
          sElement = sListenwert.StrValueByIndex('|',1);             ! Schreibe den Klartext in die Liste
        }
      }
    }
    lElementListe  = lElementListe#';'#sElement;                     ! Füge den Wert der Elementliste hinzu
    iElementAnzahl = iElementAnzahl+1;                               ! Zähle den Eintrag
  }

  ! Starte Wertaufnahme der Vorhersagezeitstempel
  if ((sWert == '<ForecastTimeSteps>'))
  {
    xGefunden = true;
    sAufnahmeWert = 'TimeSteps';
    lElementListe = 'ForecastTimeSteps|YYYY-MM-DD hh:mm:ss|Vorhersagezeitpunkt';
  }

  ! Starte Wertaufnahme der Werte von Interresse wenn Wertaufnahme inaktiv
  if (!xGefunden)
  {         
    ! Schaue nach ob der Wert von Interresse ist
    foreach(sWertVonInterresse, lWertVonInterresse.Split(";"))
    {
      ! Wurde ein Wert von Interesse gefunden, starte die Werteaufnahme
      if ((sWert == '<Forecast elementName="'#sWertVonInterresse#'">'))
      {
        xGefunden = true;
        sAufnahmeWert = sWertVonInterresse;
        lWertInListeVorhanden = sAufnahmeWert#';'#lWertInListeVorhanden;
        !- WriteLine(sAufnahmeWert);
      }
    }

    ! Wenn die Werteaufnahme aktiv ist und die Ausgabe in Celsius erfolgen soll
    if (xGefunden && sEinheitTemperatur == "C")
    {
      ! Schaue nach, ob der Wert ein Temperaturwert ist
      foreach(sListenwert, lListeDerTemperaturwerte.Split(";"))
      {
        if (sListenwert == sAufnahmeWert)
        {
          xInCelsius = true;
        }
      }
    }
    ! Wenn die Werteaufnahme aktiv ist und die Ausgabe in HektoPascal erfolgen soll
    if (xGefunden && sEinheitDruck == "hPa")
    {
      ! Schaue nach, ob der Wert ein Temperaturwert ist
      foreach(sListenwert, lListeDerDruckwerte.Split(";"))
      {
        if (sListenwert == sAufnahmeWert)
        {
          xInhPa = true;
        }
      }
    }
    ! Wenn die Werteaufnahme aktiv ist
    if (xGefunden)
    {
      ! Schaue nach, ob der Wert einem Wetterzustandscode entspricht
      foreach(sListenwert, lListeWetterzustand.Split(";"))
      {
        if (sListenwert == sAufnahmeWert)
        {
          xInDWDCode = true;
        }
      }
    }

    ! Wenn die Werteaufnahme aktiv ist hole Zusatzinfos für den ersten Eintrag in der Liste (.StrValueByIndex(';',0))
    if (xGefunden)
    {
      foreach(sDWDInfo, lDWDInfo.Split(";"))
      {
        if (sAufnahmeWert == sDWDInfo.StrValueByIndex('|',0))
        {
          if (xInCelsius)
          {
            sDWDInfo = sDWDInfo.Replace('|K|','|C|');
          }
          if (xInhPa)
          {
            sDWDInfo = sDWDInfo.Replace('|Pa|','|hPa|');
          }
          lElementListe = sDWDInfo;
          ! WriteLine(sDWDInfo); ! ### DEBUG
        }
      }
    }
  }

  ! Stoppe die Werteaufnahme wenn diese aktiv und das Ende-XML-Tag erreicht wird
  if (xGefunden && sWert.Contains('</'))
  {
!    lElementListe = iElementAnzahl#lElementListe;  ! ### DEBUG
    lElementListe = lElementListe#';';
    
    ! Erzeuge SYSTEMVARIABLE vom Typ string, falls diese nicht vorhanden
    string  svName = "DWD_"#sAufnahmeWert;
    object  svObj  = dom.GetObject(svName);
    if (!svObj)
    {
        object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
        svObj = dom.CreateObject(OT_VARDP);
        svObjects.Add(svObj.ID());
        svObj.Name(svName);   
        svObj.ValueType(ivtString);
        svObj.ValueSubType(istChar8859);
        svObj.DPInfo("DWD Vorhersageliste "#sAufnahmeWert);
        svObj.ValueUnit("");
        svObj.State("");
        svObj.Internal(false);
        svObj.Visible(true);
        dom.RTUpdate(false);
    }
    ! Schreibe Daten in die SYSTEMVARIABLE
    dom.GetObject(ID_SYSTEM_VARIABLES).Get(svName).State(lElementListe);

    ! Aufräumen
    xGefunden = false;
    xInCelsius = false;
    xInhPa = false;
    xInDWDCode = false;
    iElementAnzahl = 0;
    lElementListe = "";
    sAufnahmeWert = '';
  }
}

!- ####### SYSTEMVARIABLEN löschen falls keine Werte vorhanden ##########################

string sWerteabgleich = ''; string sWertvorhanden = ''; boolean xWertVorhanden = false;

! Gehe die Liste der Werte von Interresse durch
foreach (sWerteabgleich, lWertVonInterresse.Split(";"))
{
  xWertVorhanden = false;
  ! Gehe die Liste der vorhandenen Werte durch
  foreach (sWertvorhanden, lWertInListeVorhanden.Split(";"))
  {
    ! Ist der Eintrag vorhanden, dann wurde eine Variable angelegt oder befüllt
    if (sWerteabgleich == sWertvorhanden)
    {
      xWertVorhanden = true;
    }
  }
  ! Wurde keine Übereinstimmung gefunden, dann kann die SYSTEMVARIABLE falls vorhanden gelöscht werden
  if (!xWertVorhanden)
  {
    WriteLine(sWerteabgleich#' -> Element nicht in DWD Vorhersage gefunden !');
    string  svName = "DWD_"#sWerteabgleich;
    object  svObj  = dom.GetObject(svName);
    if (svObj)
    {
      dom.DeleteObject(svObj.ID());
      WriteLine(svObj#' -> '#svName#' gelöscht');
    }
 }
}

          
!- #######################################################################################
!- ### Anhang
!- #######################################################################################
!- ### Liste aller möglichen Vorhersagewerte
!- ###
!- ### Elementname  : TTT
!- ### Einheit      : K
!- ### Beschreibung : Temperatur 2m über Grund
!- ###
!- ### Elementname  : Td
!- ### Einheit      : K
!- ### Beschreibung : Taupunkt 2m über Grund
!- ###
!- ### Elementname  : TX
!- ### Einheit      : K
!- ### Beschreibung : Höchsttemperatur - innerhalb der letzten 12 Stunden
!- ###
!- ### Elementname  : TN
!- ### Einheit      : K
!- ### Beschreibung : Mindesttemperatur - innerhalb der letzten 12 Stunden
!- ###
!- ### Elementname  : DD
!- ### Einheit      : 0°..360°
!- ### Beschreibung : Windrichtung
!- ###
!- ### Elementname  : FF
!- ### Einheit      : m/s
!- ### Beschreibung : Windgeschwindigkeit
!- ###
!- ### Elementname  : FX1
!- ### Einheit      : m/s
!- ### Beschreibung : Maximale Windböe innerhalb der letzten Stunde
!- ###
!- ### Elementname  : FX3
!- ### Einheit      : m/s
!- ### Beschreibung : Maximale Windböe innerhalb der letzten 3 Stunden
!- ###
!- ### Elementname  : FXh
!- ### Einheit      : m/s
!- ### Beschreibung : Maximale Windböe innerhalb der letzten 12 Stunden
!- ###
!- ### Elementname  : RR1c
!- ### Einheit      : kg/m2
!- ### Beschreibung : Gesamtniederschlag während der letzten Stunde im Einklang mit signifikantem Wetter
!- ###
!- ### Elementname  : RR1
!- ### Einheit      : kg/m2
!- ### Beschreibung : Gesamtniederschlag während der letzten Stunde
!- ###
!- ### Elementname  : RR3c
!- ### Einheit      : kg/m2
!- ### Beschreibung : Gesamtniederschlag während der letzten 3 Stunden im Einklang mit signifikantem Wetter
!- ###
!- ### Elementname  : RR3
!- ### Einheit      : kg/m2
!- ### Beschreibung : Gesamtniederschlag während der letzten 3 Stunden
!- ###
!- ### Elementname  : RRS1c
!- ### Einheit      : kg/m2
!- ### Beschreibung : Schnee-Regen-Äquivalent in der letzten Stunde
!- ###
!- ### Elementname  : RRS3c
!- ### Einheit      : kg/m2
!- ### Beschreibung : Schnee-Regen-Äquivalent während der letzten 3 Stunden
!- ###
!- ### Elementname  : ww
!- ### Einheit      : -
!- ### Beschreibung : Bedeutendes Wetter
!- ###
!- ### Elementname  : W1W2
!- ### Einheit      : -
!- ### Beschreibung : Vergangenes Wetter der letzten 6 Stunden
!- ###
!- ### Elementname  : N
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Gesamte Wolkendecke
!- ###
!- ### Elementname  : Neff
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Effektive Wolkendecke
!- ###
!- ### Elementname  : N05
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wolkendecke unter 150 ft.
!- ###
!- ### Elementname  : Nl
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niedrige Wolkendecke (unter 2 km)
!- ###
!- ### Elementname  : Nm
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Mittlere Wolkendecke (2-7 km)
!- ###
!- ### Elementname  : Nh
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Hohe Wolkendecke (>7 km)
!- ###
!- ### Elementname  : PPPP
!- ### Einheit      : Pa
!- ### Beschreibung : Luftdruck, reduziert
!- ###
!- ### Elementname  : T5cm
!- ### Einheit      : K
!- ### Beschreibung : Temperatur 5cm über Grund
!- ###
!- ### Elementname  : RadS3
!- ### Einheit      : kJ/m2
!- ### Beschreibung : Kurzwellige Strahlungsbilanz der letzten 3 Stunden
!- ###
!- ### Elementname  : Rad1h
!- ### Einheit      : kJ/m2
!- ### Beschreibung : Globale Strahlung
!- ###
!- ### Elementname  : RadL3
!- ### Einheit      : kJ/m2
!- ### Beschreibung : Langwellige Strahlungsbilanz der letzten 3 Stunden
!- ###
!- ### Elementname  : VV
!- ### Einheit      : m
!- ### Beschreibung : Sichtbarkeit
!- ###
!- ### Elementname  : SunD1
!- ### Einheit      : s
!- ### Beschreibung : Sonnenscheindauer während der letzten Stunde
!- ###
!- ### Elementname  : FXh25
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit von Windböen >= 25kn innerhalb der letzten 12 Stunden
!- ###
!- ### Elementname  : FXh40
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit von Windböen >= 40kn innerhalb der letzten 12 Stunden
!- ###
!- ### Elementname  : FXh55
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit von Windböen >= 55kn innerhalb der letzten 12 Stunden
!- ###
!- ### Elementname  : wwM
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Nebelwahrscheinlichkeit innerhalb der letzten Stunde
!- ###
!- ### Elementname  : wwM6
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Nebelwahrscheinlichkeit innerhalb der letzten 6 Stunden
!- ###
!- ### Elementname  : wwMh
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Nebelwahrscheinlichkeit innerhalb der letzten 12 Stunden
!- ###
!- ### Elementname  : Rh00
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niederschlagswahrscheinlichkeit > 0.0mm während der letzten 12 Stunden
!- ###
!- ### Elementname  : R602
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niederschlagswahrscheinlichkeit > 0,2 mm während der letzten 6 Stunden
!- ###
!- ### Elementname  : Rh02
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niederschlagswahrscheinlichkeit > 0,2 mm während der letzten 12 Stunden
!- ###
!- ### Elementname  : Rd02
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niederschlagswahrscheinlichkeit > 0,2 mm während der letzten 24 Stunden
!- ###
!- ### Elementname  : Rh10
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niederschlagswahrscheinlichkeit > 1,0 mm während der letzten 12 Stunden
!- ###
!- ### Elementname  : R650
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niederschlagswahrscheinlichkeit > 5.0mm während der letzten 6 Stunden
!- ###
!- ### Elementname  : Rh50
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niederschlagswahrscheinlichkeit > 5.0mm während der letzten 12 Stunden
!- ###
!- ### Elementname  : Rd50
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niederschlagswahrscheinlichkeit > 5.0mm während der letzten 24 Stunden
!- ###
!- ### Elementname  : TG
!- ### Einheit      : K
!- ### Beschreibung : Minimale Oberflächentemperatur bei 5cm innerhalb der letzten 12 Stunden
!- ###
!- ### Elementname  : TM
!- ### Einheit      : K
!- ### Beschreibung : Durchschnittstemperatur der letzten 24 Stunden
!- ###
!- ### Elementname  : DRR1
!- ### Einheit      : s
!- ### Beschreibung : Niederschlagsdauer innerhalb der letzten Stunde
!- ###
!- ### Elementname  : wwZ
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Nieselregen innerhalb der letzten Stunde
!- ###
!- ### Elementname  : wwD
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von stratiformem Niederschlag innerhalb der letzten Stunde
!- ###
!- ### Elementname  : wwC
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von konvektivem Niederschlag innerhalb der letzten Stunde
!- ###
!- ### Elementname  : wwT
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von Gewittern innerhalb der letzten Stunde
!- ###
!- ### Elementname  : wwL
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von flüssigem Niederschlag innerhalb der letzten Stunde
!- ###
!- ### Elementname  : wwS
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von Festniederschlag innerhalb der letzten Stunde
!- ###
!- ### Elementname  : wwF
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von Eisregen innerhalb der letzten Stunde
!- ###
!- ### Elementname  : wwP
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von Niederschlag innerhalb der letzten Stunde
!- ###
!- ### Elementname  : VV10
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Sichtweite unter 1000m
!- ###
!- ### Elementname  : E_TTT
!- ### Einheit      : K
!- ### Beschreibung : Absolute Fehlertemperatur 2m über Grund
!- ###
!- ### Elementname  : E_FF
!- ### Einheit      : m/s
!- ### Beschreibung : Absoluter Fehler Windgeschwindigkeit 10m über Grund
!- ###
!- ### Elementname  : E_DD
!- ### Einheit      : 0°..360°
!- ### Beschreibung : Absoluter Fehler Windrichtung
!- ###
!- ### Elementname  : E_Td
!- ### Einheit      : K
!- ### Beschreibung : Absoluter Fehler Taupunkt 2m über Grund
!- ###
!- ### Elementname  : RR6
!- ### Einheit      : kg / m2
!- ### Beschreibung : Gesamtniederschlag während der letzten 6 Stunden
!- ###
!- ### Elementname  : RR6c
!- ### Einheit      : kg / m2
!- ### Beschreibung : Gesamtniederschlag während der letzten 6 Stunden im Einklang mit signifikantem Wetter
!- ###
!- ### Elementname  : R600
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niederschlagswahrscheinlichkeit > 0.0mm während der letzten 6 Stunden
!- ###
!- ### Elementname  : R101
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niederschlagswahrscheinlichkeit > 0,1 mm während der letzten Stunde
!- ###
!- ### Elementname  : R102
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niederschlagswahrscheinlichkeit > 0,2 mm während der letzten Stunde
!- ###
!- ### Elementname  : R103
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niederschlagswahrscheinlichkeit > 0,3 mm während der letzten Stunde
!- ###
!- ### Elementname  : R105
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niederschlagswahrscheinlichkeit > 0,5 mm während der letzten Stunde
!- ###
!- ### Elementname  : R107
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niederschlagswahrscheinlichkeit > 0,7 mm während der letzten Stunde
!- ###
!- ### Elementname  : R110
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niederschlagswahrscheinlichkeit > 1,0 mm während der letzten Stunde
!- ###
!- ### Elementname  : R120
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niederschlagswahrscheinlichkeit > 2,0 mm während der letzten Stunde
!- ###
!- ### Elementname  : SunD
!- ### Einheit      : s
!- ### Beschreibung : Gestern Gesamtsonnenscheindauer
!- ###
!- ### Elementname  : RSunD
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Relative Sonnenscheindauer innerhalb der letzten 24 Stunden
!- ###
!- ### Elementname  : PSd00
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: relative Sonnenscheindauer > 0 % innerhalb von 24 Stunden
!- ###
!- ### Elementname  : PSd30
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: relative Sonnenscheindauer > 30 % innerhalb von 24 Stunden
!- ###
!- ### Elementname  : PSd60
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: relative Sonnenscheindauer > 60 % innerhalb von 24 Stunden
!- ###
!- ### Elementname  : RRad1
!- ### Einheit      : % (0..80)
!- ### Beschreibung : Globalstrahlung innerhalb der letzten Stunde
!- ###
!- ### Elementname  : PEvap
!- ### Einheit      : kg / m2
!- ### Beschreibung : Mögliche Evapotranspiration innerhalb der letzten 24 Stunden
!- ###
!- ### Elementname  : R130
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niederschlagswahrscheinlichkeit > 3,0 mm während der letzten Stunde
!- ###
!- ### Elementname  : R150
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niederschlagswahrscheinlichkeit > 5.0 mm während der letzten Stunde
!- ###
!- ### Elementname  : RR1o1
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niederschlagswahrscheinlichkeit > 10 mm während der letzten Stunde
!- ###
!- ### Elementname  : RR1w1
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niederschlagswahrscheinlichkeit > 15 mm während der letzten Stunde
!- ###
!- ### Elementname  : RR1u1
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niederschlagswahrscheinlichkeit > 25 mm während der letzten Stunde
!- ###
!- ### Elementname  : wwD6
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von stratiformem Niederschlag innerhalb der letzten 6 Stunden
!- ###
!- ### Elementname  : wwC6
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von konvektivem Niederschlag innerhalb der letzten 6 Stunden
!- ###
!- ### Elementname  : wwT6
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von Gewittern innerhalb der letzten 6 Stunden
!- ###
!- ### Elementname  : wwP6
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von Niederschlag innerhalb der letzten 6 Stunden
!- ###
!- ### Elementname  : wwL6
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von Flüssigkeitsniederschlag innerhalb der letzten 6 Stunden
!- ###
!- ### Elementname  : wwF6
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von Eisregen innerhalb der letzten 6 Stunden
!- ###
!- ### Elementname  : wwS6
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von Festniederschlag innerhalb der letzten 6 Stunden
!- ###
!- ### Elementname  : wwZ6
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Nieselregen innerhalb der letzten 6 Stunden
!- ###
!- ### Elementname  : wwMd
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von Nebel innerhalb der letzten 24 Stunden
!- ###
!- ### Elementname  : FX625
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von Böen >= 25kn innerhalb der letzten 6 Stunden
!- ###
!- ### Elementname  : FX640
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von Böen >= 40kn innerhalb der letzten 6 Stunden
!- ###
!- ### Elementname  : FX655
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von Böen >= 55kn innerhalb der letzten 6 Stunden
!- ###
!- ### Elementname  : wwDh
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von stratiformem Niederschlag innerhalb der letzten 12 Stunden
!- ###
!- ### Elementname  : wwCh
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von konvektivem Niederschlag innerhalb der letzten 12 Stunden
!- ###
!- ### Elementname  : wwTh
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von Gewittern innerhalb der letzten 12 Stunden
!- ###
!- ### Elementname  : wwPh
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von Niederschlag innerhalb der letzten 12 Stunden
!- ###
!- ### Elementname  : wwLh
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von Flüssigkeitsniederschlag innerhalb der letzten 12 Stunden
!- ###
!- ### Elementname  : wwFh
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von Eisregen innerhalb der letzten 12 Stunden
!- ###
!- ### Elementname  : wwSh
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von Festniederschlag innerhalb der letzten 12 Stunden
!- ###
!- ### Elementname  : wwZh
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Nieselregen innerhalb der letzten 12 Stunden
!- ###
!- ### Elementname  : R610
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niederschlagswahrscheinlichkeit > 1,0 mm während der letzten 6 Stunden
!- ###
!- ### Elementname  : RRh
!- ### Einheit      : kg / m2
!- ### Beschreibung : Gesamtniederschlag der letzten 12 Stunden
!- ###
!- ### Elementname  : RRhc
!- ### Einheit      : kg / m2
!- ### Beschreibung : Gesamtniederschlag während der letzten 12 Stunden in Übereinstimmung mit signifikantem Wetter
!- ###
!- ### Elementname  : ww3
!- ### Einheit      : - (0..95)
!- ### Beschreibung : Bedeutendes Wetter der letzten 3 Stunden
!- ###
!- ###!- ### Elementname  : RRL1c
!- ### Einheit      : kg / m2
!- ### Beschreibung : Flüssiger Gesamtniederschlag während der letzten Stunde im Einklang mit signifikantem Wetter
!- ###
!- ### Elementname  : Rd00
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niederschlagswahrscheinlichkeit > 0.0 mm während der letzten 24 Stunden
!- ###
!- ### Elementname  : Rd10
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Niederschlagswahrscheinlichkeit > 1,0 mm während der letzten 24 Stunden
!- ###
!- ### Elementname  : RRd
!- ### Einheit      : kg / m2
!- ### Beschreibung : Gesamtniederschlag der letzten 24 Stunden
!- ###
!- ### Elementname  : RRdc
!- ### Einheit      : kg / m2
!- ### Beschreibung : Gesamtniederschlag während der letzten 24 Stunden im Einklang mit signifikantem Wetter
!- ###
!- ### Elementname  : Nlm
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wolkendecke niedrige und mittlere Wolken unter 7000 m
!- ###
!- ### Elementname  : wwPd
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von Niederschlag innerhalb der letzten 24 Stunden
!- ###
!- ### Elementname  : H_BsC
!- ### Einheit      : m
!- ### Beschreibung : Wolkenbasis konvektiver Wolken
!- ###
!- ### Elementname  : wwTd
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit: Auftreten von Gewittern innerhalb der letzten 24 Stunden
!- ###
!- ### Elementname  : E_PPP
!- ### Einheit      : Pa
!- ### Beschreibung : Absoluter Fehler Luftdruck
!- ###
!- ### Elementname  : SunD3
!- ### Einheit      : s
!- ### Beschreibung : Sonnenscheindauer während der letzten drei Stunden
!- ###
!- ### Elementname  : WPc11
!- ### Einheit      : - (0..95)
!- ### Beschreibung : Optional signifikantes Wetter (höchste Priorität) während der letzten Stunde
!- ###
!- ### Elementname  : WPc31
!- ### Einheit      : - (0..95)
!- ### Beschreibung : Optional signifikantes Wetter (höchste Priorität) während der letzten 3 Stunden
!- ###
!- ### Elementname  : WPc61
!- ### Einheit      : - (0..95)
!- ### Beschreibung : Optional signifikantes Wetter (höchste Priorität) während der letzten 6 Stunden
!- ###
!- ### Elementname  : WPch1
!- ### Einheit      : - (0..95)
!- ### Beschreibung : Optional signifikantes Wetter (höchste Priorität) während der letzten 12 Stunden
!- ###
!- ### Elementname  : WPcd1
!- ### Einheit      : - (0..95)
!- ### Beschreibung : Optional signifikantes Wetter (höchste Priorität) während der letzten 24 Stunden
!- ###
!- ### Elementname  : Sa3
!- ### Einheit      : m
!- ### Beschreibung : Kumulierte Neuschneemenge in 3 Stunden
!- ###
!- ### Elementname  : Sa6
!- ### Einheit      : m
!- ### Beschreibung : Kumulierte Neuschneemenge in 6 Stunden (Anzahl der 3h-Werte)
!- ###
!- ### Elementname  : Sah
!- ### Einheit      : m
!- ### Beschreibung : Kumulierte Neuschneemenge in 12 Stunden (Anzahl 6h Werte)
!- ###
!- ### Elementname  : Sad
!- ### Einheit      : m
!- ### Beschreibung : Kumulierte Neuschneemenge in 24 Stunden (Anzahl der 12h-Werte)
!- ###
!- ### Elementname  : Sa605
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit > 5cm Neuschneemenge in 6 Stunden
!- ###
!- ### Elementname  : Sa610
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit > 10cm Neuschneemenge in 6 Stunden
!- ###
!- ### Elementname  : Sa620
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit > 20cm Neuschneemenge in 6 Stunden
!- ###
!- ### Elementname  : Sah05
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit > 5cm Neuschneemenge in 12 Stunden
!- ###
!- ### Elementname  : Sah10
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit von > 10cm Neuschneemenge in 12 Stunden
!- ###
!- ### Elementname  : Sah30
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit > 30cm Neuschneemenge in 12 Stunden
!- ###
!- ### Elementname  : Sad10
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit > 10cm Neuschneemenge in 24 Stunden
!- ###
!- ### Elementname  : Sad30
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit > 30cm Neuschneemenge in 24 Stunden
!- ###
!- ### Elementname  : Sad50
!- ### Einheit      : % (0..100)
!- ### Beschreibung : Wahrscheinlichkeit > 50cm Neuschneemenge in 24 Stunden
!- ###
!- ### Elementname  : SnCv
!- ### Einheit      : m
!- ### Beschreibung : Schneehöhe
!- ###
Zur Benutzung habe ich dann auch ein Script zur Anzeige der aktuellen Daten gebastelt.
Lasse mir die angelegte SYSTEMVARIABLE unter Favoriten > Wetter mit anzeigen.
Dies ist nur ein Beispiel... Die Möglichkeiten sind da fast unendlich.
Dieses Script lasse ich zu jeder vollen Stunde ausführen...

Code: Alles auswählen

!- ### Wettervorhersage DWD abfragen # Version 004 #######################################
!- ### Done 11.2021 @ ROO ################################################################
!- ####################################################################### Wulf war da ...
!- ### What to hell ...
!- ###  Wettervorhersage über den Deutschen Wetter Dienst
!- ###  Vorraussetzung ist, das der DWD-Parser schon einmal gelaufen ist,
!- ###  und das die SYSTEMVARIABLEN der Werte, die hier abgeholt werden sollen
!- ###  vorhanden sind...
!- ### 
!- ###  Version 001 -> Final
!- ###  Version 002 -> Ergänzt um Durchnittswert Vorhersage
!- ###  Version 003 -> Noch einen Berechnungsfehler des Index und Mittelwertes behoben
!- ###  Version 004 -> Wetterzustandscode berücksichtigt
!- ###  Version 005 -> Prüfe vor Ausgabe, ob SYSTEMVARIABLE vorhanden
!- #######################################################################################
!- ### Programmablauf
!- ###	Hole die Systemzeit und schaue in der Liste der TimeSteps nach, welcher Step
!- ###  gerade passt. Merke mir den Step und hole alle Werte von Interesse aus den jeweiligen
!- ###  Listen, sofern diese vom Parser angelegt wurden. 
!- ###  Setze eine Variable zusammen und gib diese in der SYSTEMVARIABLEN 
!- ###  DWD_Momentwerte aus. ( Ist diese nicht vorhanden wird sie angelegt )
!- ###
!- #######################################################################################
!- ### Programmaufruf
!- ### Bedingung: Wenn...
!- ###    Zeitsteuerung > Periodisch Ganztägig beginnend am 04.11.2021 > zu Zeitpunkt auslösen
!- ### Aktivität: Dann...
!- ###    Script <- Dieses Script dort einfügen -> sofort
!- ###
!- #######################################################################################
!- ######################### Vorgabewerte ################################################
!- ###

string lWertVonInterresse = "SnCv;TTT;T5cm;PPPP;ww";                 ! Liste der Werte die ausgegeben werden sollen -> Trenner ist das ;
integer iVorhersageStunden = 3;                                      ! Der Durchschnittswert der folgenden x Stunden zur Anzeige

!- #######################################################################################
!- #######  Von hier an keine Änderungen vornehmen !! ####################################

string sAusgabe = ''; string sEinheit = ''; string sBeschreibung = ''; string sIndexNull = ''; string sVorhersage = '';
string sTimeStep = ""; string sWVI = ''; string svName = ''; integer iIndex = 0; integer iVS = 1; string sWert = '0';
string sJetzt = system.Date("%Y-%m-%d %H:00:00");                    ! Hole Systemuhrzeit im Format der TimeSteps

! Durchforste die TimeSteps zur Bestimmung des Indexes
foreach(sTimeStep, dom.GetObject(ID_SYSTEM_VARIABLES).Get('DWD_TimeSteps').Value().Split(";"))
{
   ! Ermittle, ob der TimeStep der Jetzt-Uhrzeit entspricht
   if (sTimeStep == sJetzt)
   {
     sAusgabe = 'Index='#iIndex.ToString(0)#'\n\n';                     ! Halte den Index zur Ausgabe fest
     ! Gehe alle Werte von Interresse durch
     foreach(sWVI, lWertVonInterresse.Split(";"))                    
     {
       ! Es können nur Werte verarbeitet werden, die auch eine SYSTEMVARIABLE als Werteliste angelegt bekommen haben
       svName = "DWD_"#sWVI;
       object  svObj  = dom.GetObject(svName);
       if (!svObj){WriteLine(sWVI#' keine Liste gefunden !\n\n');}
       if (svObj)
      {

        ! Index 0 enthält die Beschreibung und Einheit
        sIndexNull = dom.GetObject(ID_SYSTEM_VARIABLES).Get("DWD_"#sWVI).Value().StrValueByIndex(';',0); 
        sEinheit      = sIndexNull.StrValueByIndex('|',1);            ! Hole die Einheit
        sBeschreibung = sIndexNull.StrValueByIndex('|',2);            ! Hole die Beschreibung
        if (sEinheit == 'C'){sEinheit = '°'#sEinheit;}                ! Handelt es sich um eine Temperatur, setze ein ° vor das C 
        if (sEinheit == '-'){sEinheit = '';}                          ! Handelt es sich um einen Wetterzustand, hat dieser keine Einheit 
        ! Wert zur Berechnung
        if (sEinheit != '')
        {
            ! Vorhersageberechnung
            iVS = 0;
            sWert = '0';
            sWert = sWert.ToFloat();
            ! Addiere die Werte der nächsten x Stunden
            while(iVS != iVorhersageStunden)
            {
                iVS = (iVS) + 1;
                ! Verwende die Datenwerte +1 ... x 
                sWert = ((dom.GetObject(ID_SYSTEM_VARIABLES).Get("DWD_"#sWVI).Value().StrValueByIndex(';',iIndex + iVS)).ToFloat()) + (sWert);
            }
            ! Teile die Additionswerte durch die Anzahl der Stunden (Durchschnittswertberechnung)
            sWert = (sWert) / (iVorhersageStunden.ToFloat());
            sWert = sWert.ToString(2);
            sVorhersage = ' | Nächste '#iVorhersageStunden#'h: '#sWert#sEinheit#'\n\n';
        }
       ! Wetterzustandscode
       if (sEinheit == '')
       {
        sWert = (dom.GetObject(ID_SYSTEM_VARIABLES).Get("DWD_"#sWVI).Value().StrValueByIndex(';',iIndex + 1));
        sVorhersage = '\nNächste h: '#sWert#'\n\n';
       }
       ! Füge die Bausteine zu einem Ausgabestring zusammen
       sAusgabe = sAusgabe#sBeschreibung#'\n';
       sAusgabe = sAusgabe#'Aktuell: '#dom.GetObject(ID_SYSTEM_VARIABLES).Get("DWD_"#sWVI).Value().StrValueByIndex(';',iIndex)#sEinheit;
       sAusgabe = sAusgabe#sVorhersage;
      }
     }
   }
   iIndex = iIndex+1;
}
sAusgabe = system.Date("%Y-%m-%d %H:00:00")#' -> '#sAusgabe;
! Überprüfe, ob SYSTEMVARIABLE vorhanden ist
string  svName = "DWD_Momentwerte";
object  svObj  = dom.GetObject(svName);
if (!svObj)
{   
  object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
  svObj = dom.CreateObject(OT_VARDP);
  svObjects.Add(svObj.ID());
  svObj.Name(svName);   
  svObj.ValueType(ivtString);
  svObj.ValueSubType(istChar8859);
  svObj.DPInfo("DWD Vorhersage dieser Stunde");
  svObj.ValueUnit("");
  svObj.State("");
  svObj.Internal(false);
  svObj.Visible(true);
  dom.RTUpdate(false);
}
! Schreibe den Ausgabestring in die SYSTEMVARIABLE
dom.GetObject(ID_SYSTEM_VARIABLES).Get(svName).State(sAusgabe);

WriteLine(sAusgabe);
Vieleicht kann das ja jemand gebrauchen :wink:

Grüße
Wulf
Wo das Wissen endet beginnt der Glaube...

Tinko
Beiträge: 190
Registriert: 23.10.2016, 10:15
Hat sich bedankt: 53 Mal
Danksagung erhalten: 1 Mal

Re: Und noch eine Wettervorhersage (vom DWD)

Beitrag von Tinko » 03.01.2022, 12:50

Weißt du ob die in der API nicht nur die Vorhersage sondern auch die tatsächlich gemessene Niederschlagsmenge anbieten. Ich suche das nämlich noch und bisher kenne ich keinen Service der das kann.

MichaelN
Beiträge: 9562
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: Und noch eine Wettervorhersage (vom DWD)

Beitrag von MichaelN » 03.01.2022, 13:00

Tinko hat geschrieben:
03.01.2022, 12:50
sondern auch die tatsächlich gemessene Niederschlagsmenge anbieten. Ich suche das nämlich noch und bisher kenne ich keinen Service der das kann.
AccuWeather anscheinen mit der Historical Current Conditions API:

https://developer.accuweather.com/accuw ... torical/24
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“