DWD-Unwetterwarnscript v1.31.r00

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

Moderator: Co-Administratoren

Tharanis
Beiträge: 110
Registriert: 15.04.2015, 11:39

DWD-Unwetterwarnscript v1.31.r00

Beitrag von Tharanis » 17.02.2018, 13:51

Dies ist die vierte Variante eines DWD-Unwetterwarnscripts.
:!: Dieses Script funktioniert aufgrund einer älteren OpenSSL-Variante der CCU2 momentan nur mit der Raspberrymatic (CCU3(?)) :!:

Hier gehts zu den anderen Varianten:
-Blackhols Wetterwarnung DWD (Das Script ist schon in Rente geschickt: viewtopic.php?f=31&t=27234)
-Grrzzzs Unwetterwarnung Script: viewtopic.php?f=31&t=38161
-Klanas Unwetterwarnung Script: viewtopic.php?f=31&t=38161

Ideen und Codeteile sind in den verschiedenen Varianten der Scripte schonmal aufgetaucht, ich habe das Rad also nur teilweise neu erfunden. Ich möchte mich an dieser Stelle ausdrücklich bei Blackhole, Grrzzz und Klana für ihre ganze Arbeit bedanken.
Speziell habe ich Klanas Variante weiterentwickelt und mir das "Problem" vorgenommen, dass nur eine Warnung ausgegeben wurde.

Features sind:
-Ausgabe von 2 DWD-Warnungen in detaillierter Form
-Ausgabe von 3 weiteren DWD-Warnungen (Warnung 3-5) in abgespeckter Form um etwas Systemvariablen zu sparen
-Ausgabe von noch einer weiteren DWD-Warnmeldung (Warnung 6) optional einstellbar
-Anzahl der DWD-Warnungen wird angezeigt
-Weiterer Auslöser für Pushnachricht (Neue Nachricht) mit Wetterwarnung-Startvergleich
-Datumsangaben umgestellt auf Datumsformate nach DIN 5008
-Werteliste mit verschiedenen Orten (city-Variable muss dafür leer bleiben), dadurch leichtere Umstellung zum Testen oder Urlaub(?)

Auch diese Variante besteht aus 3 Scripten:
1. Systemvariablen anlegen oder löschen (durch Variable einstellbar)
2. Auslesen der DWD-Unwetterwarnungen (bis zu 6 Stück) und in Systemvariablen schreiben
3. Füllen der eigenen Pushvariable mit den vorhandenen Warnungen


Script 1: Systemvariablen anlegen/löschen v.1.31.r00
Da mind. 2 Warnungen ausgegeben werden, sind leider auch die Systemvariablen von der Anzahl her gestiegen. Aufbauend auf Klanas Script habe ich in das Script alle nötigen Systemvariablen eingebaut für meine Variante des Unwetterwarnscripts. Dieses Script übernimmt das Anlegen oder Löschen der ganzen Systemvariablen.

Änderungen zur vorherigen Version
-Debug-Rueckgaben wurden weiter ausgebaut um einfachere Analyse zu ermoeglichen
-Neue optionale(!) Variable Wetterwarnung_text6 aufgrund von beobachteten 6 Warnmeldungen des DWD

Erklärung
Das Script muss einmal :!: unter "Script testen" ausgeführt werden. Wichtig dabei ist, dass je nach dem ob die Systemvariablen angelegt oder gelöscht werden sollen, die Variable SV_Loeschen angepasst werden muss.
!---------------------------------------------------------------------
! Wenn SV_Loeschen = false, dann werden die Systemvariablen angelegt
! Wenn SV_loeschen = true, dann werden die Systemvariablen geloescht!!
!---------------------------------------------------------------------
boolean SV_Loeschen = false;

Code: Alles auswählen

! DWD-Variablenscript - legt/loescht die benoetigten Variablen fuer das DWD-Unwetterwarnscript an
! Version : 1.31.r00 vom 16.02.2019 von Tharanis,  aufbauend auf dem Variablenscript von Klana
!
! Ausfuehrung : einmalig! unter Script testen auf der Raspberrymatic
!
! neue Features in v1.31.r00 (15.02.2019):
! Debug-Rueckgaben wurden weiter ausgebaut um einfachere Analyse zu ermoeglichen
! Neue optionale Variable Wetterwarnung_text6 aufgrund von beobachteten 6 Warnmeldungen des DWD
!
! Folgende Variablen werden angelegt oder geloescht je nach dem Wert der Variable SV_Loeschen weiter unten:
! ------------------------------------------------------------------------------------------------------------------------------------------
! Wetterwarnung_aktiv           Boolean
! Wetterwarnung_text            Zeichenkette (fuer Ausgabe)				
! Wetterwarnung_text2			Zeichenkette (fuer Ausgabe)
! Wetterwarnung_text3			Zeichenkette (fuer Ausgabe)				
! Wetterwarnung_text4			Zeichenkette (fuer Ausgabe)
! Wetterwarnung_text5			Zeichenkette (fuer Ausgabe)
! Wetterwarnung_text6			Zeichenkette (fuer Ausgabe)	(optional per Variable "warn6" weiter unten zuschaltbar)		
! Wetterwarnung_anzahl			Zahl
! Wetterwarnung_new				Boolean (neue Meldung /alte Meldung)	
! Wetterwarnung_kreis			Werteliste mit verschiedenen Kreisnummern und Kreisbezeichnungen
! Wetterwarnung_start_backup	Vergleich fuer Start der ersten Warnung
! ------------------------------------------------------------------------------------------------------------------------------------------
! Wetterwarnung_city            Zeichenkette (Nummer zum Suchen)		
! Wetterwarnung_regionName      Zeichenkette
! Wetterwarnung_start           Zeichenkette							
! Wetterwarnung_end             Zeichenkette
! 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_headline        Zeichenkette
! Wetterwarnung_state           Zeichenkette							
! Wetterwarnung_stateShort      Zeichenkette
! Wetterwarnung_level           Zahl									
! Wetterwarnung_event           Zeichenkette
! Wetterwarnung_description     Zeichenkette							
! Wetterwarnung_instruction     Zeichenkette
! Wetterwarnung_altitudeStart   Zeichenkette							
! Wetterwarnung_altitudeEnd     Zeichenkette
! ------------------------------------------------------------------------------------------------------------------------------------------
! Wetterwarnung_start2          Zeichenkette							
! Wetterwarnung_end2            Zeichenkette
! Wetterwarnung_typ2            Werteliste mit: unbekannt;Gewitter;Wind/Sturm/Orkan;Stark- und Dauerregen;Schneefall/Schneeverwehungen;Nebel;Frost;Glaette/Glatteis;Tauwetter;Hitzewarnungen;UV-Warnungen;Kuestenwarnungen;Binnenseewarnungen
! Wetterwarnung_headline2       Zeichenkette
! Wetterwarnung_level2          Zahl									
! Wetterwarnung_event2          Zeichenkette
! Wetterwarnung_description2    Zeichenkette							
! Wetterwarnung_instruction2    Zeichenkette
! Wetterwarnung_altitudeStart2  Zeichenkette							
! Wetterwarnung_altitudeEnd2    Zeichenkette
! ------------------------------------------------------------------------------------------------------------------------------------------
! Wetterwarnung_event3          Zeichenkette
!-------------------------------------------------------------------------------------------------------------------------------------------
! Wetterwarnung_pushref			Zeichenkette
!-------------------------------------------------------------------------------------------------------------------------------------------
! 6. Warnmeldung (Variable Wetterwarnung_text6) mit anlegen = true oder ignorieren = false
! ------------------------------------------------------------------------------------------------------------------------------------------
boolean warn6 = false;
!-------------------------------------------------------------------------------------------------------------------------------------------
! Wenn SV_Loeschen = false, dann werden die Systemvariablen angelegt
! Wenn SV_loeschen = true, dann werden die Systemvariablen geloescht!!
!-------------------------------------------------------------------------------------------------------------------------------------------
boolean SV_Loeschen = false;
!-------------------------------------------------------------------------------------------------------------------------------------------
! wenn debug = true, dann werden Meldungen per WriteLine ausgegeben
! dies ist Standardmaessig auf true
!-------------------------------------------------------------------------------------------------------------------------------------------
boolean debug = true;
!-------------------------------------------------------------------------------------------------------------------------------------------
if(debug)
	{
      if(SV_Loeschen) {WriteLine("Varibalen werden gelöscht!");}
      else {WriteLine("Variablen werden angelegt...:");}
    }

    if(!SV_Loeschen)
    {
        ! ---------------------------------------
        ! Boolean - Wetterwarnung_aktiv
        ! ---------------------------------------
        string  svName = "Wetterwarnung_aktiv";
        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(ivtBinary);
            svObj.ValueSubType(istBool);
            svObj.ValueName0("Nein");
            svObj.ValueName1("Ja");   
            svObj.State(false);
            svObj.DPInfo("Zeigt an ob es eine aktive DWD-Meldung gibt.");
            svObj.ValueUnit("");
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_aktiv wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Variable steht auf: "#svObj.State().ToString());}
			if(debug) {WriteLine("-Variable-Status Name: "#svObj.ValueName());}
        }
        else
			{if(debug) {WriteLine("Variable Wetterwarnung_aktiv existiert schon.");}}

	    ! ---------------------------------------
        ! Boolean - Wetterwarnung_new
        ! ---------------------------------------
        string  svName = "Wetterwarnung_new";
        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(ivtBinary);
            svObj.ValueSubType(istBool);
            svObj.ValueName0("Alte Meldung");
            svObj.ValueName1("Neue Meldung");   
            svObj.State(false);
            svObj.DPInfo("Zeigt an ob es eine neue DWD-Meldung gibt.");
            svObj.ValueUnit("");
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_new wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Variable steht auf: "#svObj.State().ToString());}
			if(debug) {WriteLine("-Variable-Status Name: "#svObj.ValueName());}
        }
        else
			{if(debug) {WriteLine("Variable Wetterwarnung_new existiert schon.");}}

        ! ---------------------------------------
        ! STRING - Wetterwarnung_text
        ! ---------------------------------------
        string  svName = "Wetterwarnung_text";
        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("selbst zusammengesetzter Ausgabetext");
            svObj.ValueUnit("");
            svObj.State("Keine Warnungen");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_text wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
			{if(debug) {WriteLine("Variable Wetterwarnung_text existiert schon.");}}

        ! ---------------------------------------
        ! STRING - Wetterwarnung_city
        ! (Nummer der Region von DWD)
        ! ---------------------------------------
        string  svName = "Wetterwarnung_city";
        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("Nummer der Region als String");
            svObj.ValueUnit("");
            svObj.State("---");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_city wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
			{if(debug) {WriteLine("Variable Wetterwarnung_city existiert schon.");}}
     
        ! ---------------------------------------
        ! Werteliste - Wetterwarnung_kreis
        ! ---------------------------------------
        string  svName = "Wetterwarnung_kreis";
        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(ivtInteger);
            svObj.ValueSubType(istEnum);
            svObj.ValueList("903452002 Aurich;111000000 Berlin;915085002 Harz;109180000 Garmisch");
            svObj.State(1);
            svObj.DPInfo("Auswahlmoeglichkeit Kreis der Wetterwarnung");
         
            dom.RTUpdate(false);
		    if(debug) {WriteLine("Variable Wetterwarnung_kreis wurde angelegt: Name: "#svObj);}
			if(debug) {var valList = svObj.ValueList();}
			if(debug) {var val = valList .StrValueByIndex(";",svObj.Value());}
			if(debug) {WriteLine("-Eintrag: "#val);}
        }
        else
			{if(debug) {WriteLine("Variable Wetterwarnung_typ existiert schon.");}}

        ! ---------------------------------------
        ! STRING - Wetterwarnung_regionName
        ! ---------------------------------------
        string  svName = "Wetterwarnung_regionName";
        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("Regionname im Klartext");
            svObj.ValueUnit("");
            svObj.State("---");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_regionName wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
			{if(debug) {WriteLine("Variable Wetterwarnung_regionName existiert schon.");}}

        ! ---------------------------------------
        ! STRING - Wetterwarnung_start
        ! ---------------------------------------
        string  svName = "Wetterwarnung_start";
        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("Start der Warnung");
            svObj.ValueUnit("");
            svObj.State("---");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_start wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
			{if(debug) {WriteLine("Variable Wetterwarnung_start existiert schon.");}}
		
		! ---------------------------------------
        ! STRING - Wetterwarnung_start_backup
        ! ---------------------------------------
        string  svName = "Wetterwarnung_start_backup";
        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("Backup fuer Startvergleich");
            svObj.ValueUnit("");
            svObj.State("---");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_start_backup wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
			{if(debug) {WriteLine("Variable Wetterwarnung_start_backup existiert schon.");}}

        ! ---------------------------------------
        ! STRING - Wetterwarnung_end
        ! ---------------------------------------
        string  svName = "Wetterwarnung_end";
        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("Ende der Warnung");
            svObj.ValueUnit("");
            svObj.State("---");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_end wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
			{if(debug) {WriteLine("Variable Wetterwarnung_end existiert schon.");}}

        ! ---------------------------------------
        ! Zahl - Wetterwarnung_level
        ! ---------------------------------------
        string  svName = "Wetterwarnung_level";
        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(ivtFloat);
            svObj.ValueSubType(istGeneric);
            svObj.DPInfo("Level der Warnung");
            svObj.ValueUnit("");
            svObj.ValueMin(0);
            svObj.ValueMax(100);
            svObj.State(0);
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_level wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
			{if(debug) {WriteLine("Variable Wetterwarnung_level existiert schon.");}}
       
        ! ---------------------------------------
        ! Werteliste - Wetterwarnung_typ
        ! ---------------------------------------
        string  svName = "Wetterwarnung_typ";
        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(ivtInteger);
            svObj.ValueSubType(istEnum);
            svObj.ValueList("unbekannt;Gewitter;Wind/Sturm/Orkan;Stark- und Dauerregen;Schneefall/Schneeverwehungen;Nebel;Frost;Glaette/Glatteis;Tauwetter;Hitzewarnungen;UV-Warnungen;Kuestenwarnungen;Binnenseewarnungen");
            svObj.State(1);
            svObj.DPInfo("Typ der Warnung");
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_typ wurde angelegt: Name: "#svObj);}
			if(debug) {var valList = svObj.ValueList();}
			if(debug) {var val = valList .StrValueByIndex(";",svObj.Value());}
			if(debug) {WriteLine("-Eintrag: "#val);}
        }
        else
			{if(debug) {WriteLine("Variable Wetterwarnung_typ existiert schon.");}}

        ! ---------------------------------------
        ! STRING - Wetterwarnung_state
        ! ---------------------------------------
        string  svName = "Wetterwarnung_state";
        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("Bundesland im Langtext.");
            svObj.ValueUnit("");
            svObj.State("---");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_state wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
			{if(debug) {WriteLine("Variable Wetterwarnung_state existiert schon.");}}

        ! ---------------------------------------
        ! STRING - Wetterwarnung_description
        ! ---------------------------------------
        string  svName = "Wetterwarnung_description";
        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("genauere Beschreibung der Warnung");
            svObj.ValueUnit("");
            svObj.State("---");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_description wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
			{if(debug) {WriteLine("Variable Wetterwarnung_description existiert schon.");}}
       
        ! ---------------------------------------
        ! STRING - Wetterwarnung_event
        ! ---------------------------------------
        string  svName = "Wetterwarnung_event";
        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("Event der Wetterwarnung");
            svObj.ValueUnit("");
            svObj.State("---");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_event wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
			{if(debug) {WriteLine("Variable Wetterwarnung_event existiert schon.");}}

        ! ---------------------------------------
        ! STRING - Wetterwarnung_headline
        ! ---------------------------------------
        string  svName = "Wetterwarnung_headline";
        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("Schlagzeile der Warnung");
            svObj.ValueUnit("");
            svObj.State("---");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_headline wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
			{if(debug) {WriteLine("Variable Wetterwarnung_headline existiert schon.");}}

        ! ---------------------------------------
        ! STRING - Wetterwarnung_instruction
        ! ---------------------------------------
        string  svName = "Wetterwarnung_instruction";
        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("Was ist im Warnungsfall zu tun?");
            svObj.ValueUnit("");
            svObj.State("---");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_instruction wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
			{if(debug) {WriteLine("Variable Wetterwarnung_instruction existiert schon.");}}

        ! ---------------------------------------
        ! STRING - Wetterwarnung_stateShort
        ! ---------------------------------------
        string  svName = "Wetterwarnung_stateShort";
        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("Bundesland in Kurzform z.B.NRW");
            svObj.ValueUnit("");
            svObj.State("---");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_stateShort wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
			{if(debug) {WriteLine("Variable Wetterwarnung_stateShort existiert schon.");}}
       
        ! ---------------------------------------
        ! STRING - Wetterwarnung_altitudeStart
        ! ---------------------------------------
        string  svName = "Wetterwarnung_altitudeStart";
        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("Hoehe Start");
            svObj.ValueUnit("");
            svObj.State("---");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_altitudeStart wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
			{if(debug) {WriteLine("Variable Wetterwarnung_altitudeStart existiert schon.");}}

        ! ---------------------------------------
        ! STRING - Wetterwarnung_altitudeEnd
        ! ---------------------------------------
        string  svName = "Wetterwarnung_altitudeEnd";
        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("Hoehe Ende");
            svObj.ValueUnit("");
            svObj.State("---");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_altitudeEnd wurde angelegt: Name: "#svObj);}
	        if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
			{if(debug) {WriteLine("Variable Wetterwarnung_altitudeEnd existiert schon.");}}

		! ---------------------------------------
        ! STRING - Wetterwarnung_text2
        ! ---------------------------------------
        string  svName = "Wetterwarnung_text2";
        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("selbst zusammengesetzter Ausgabetext2");
            svObj.ValueUnit("");
            svObj.State("Keine Warnungen");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_text2 wurde angelegt: Name: "#svObj);}
	        if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
			{if(debug) {WriteLine("Variable Wetterwarnung_text2 existiert schon.");}}

		! ---------------------------------------
        ! STRING - Wetterwarnung_text3
        ! ---------------------------------------
        string  svName = "Wetterwarnung_text3";
        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("selbst zusammengesetzter Ausgabetext3");
            svObj.ValueUnit("");
            svObj.State("Keine Warnungen");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_text3 wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
			{if(debug) {WriteLine("Variable Wetterwarnung_text3 existiert schon.");}}

	   	! ---------------------------------------
        ! STRING - Wetterwarnung_text4
        ! ---------------------------------------
        string  svName = "Wetterwarnung_text4";
        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("selbst zusammengesetzter Ausgabetext4");
            svObj.ValueUnit("");
            svObj.State("Keine Warnungen");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_text4 wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
			{if(debug) {WriteLine("Variable Wetterwarnung_text4 existiert schon.");}}

		! ---------------------------------------
        ! STRING - Wetterwarnung_text5
        ! ---------------------------------------
        string  svName = "Wetterwarnung_text5";
        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("selbst zusammengesetzter Ausgabetext5");
            svObj.ValueUnit("");
            svObj.State("Keine Warnungen");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_text5 wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
			{if(debug) {WriteLine("Variable Wetterwarnung_text5 existiert schon.");}}

		if(warn6){
		! ---------------------------------------
        ! STRING - Wetterwarnung_text6
        ! ---------------------------------------
        string  svName = "Wetterwarnung_text6";
        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("selbst zusammengesetzter Ausgabetext6");
            svObj.ValueUnit("");
            svObj.State("Keine Warnungen");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_text6 wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
			{if(debug) {WriteLine("Variable Wetterwarnung_text6 existiert schon.");}}}
		
		! ---------------------------------------
        ! STRING - Wetterwarnung_pushref
        ! ---------------------------------------
        string  svName = "Wetterwarnung_pushref";
        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("Text der alten Push-Unwetterwarnung zPNP");
            svObj.ValueUnit("");
            svObj.State("---");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_pushref wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
        {
          if(debug) {WriteLine("Variable Wetterwarnung_pushref existiert schon.");}
        }

        ! ---------------------------------------
        ! Zahl - Wetterwarnung_anzahl
        ! ---------------------------------------
        string  svName = "Wetterwarnung_anzahl";
        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(ivtFloat);
            svObj.ValueSubType(istGeneric);
            svObj.DPInfo("Anzahl der Warnungen");
            svObj.ValueUnit("");
            svObj.ValueMin(0);
            svObj.ValueMax(100);
            svObj.State(0);
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_anzahl wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
        {
          if(debug) {WriteLine("Variable Wetterwarnung_anzahl existiert schon.");}
        }

		! ---------------------------------------
        ! STRING - Wetterwarnung_start2
        ! ---------------------------------------
        string  svName = "Wetterwarnung_start2";
        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("Start der 2.Warnung in Sekunden");
            svObj.ValueUnit("");
            svObj.State("---");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_start2 wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
        {
          if(debug) {WriteLine("Variable Wetterwarnung_start2 existiert schon.");}
        }
      
        ! ---------------------------------------
        ! STRING - Wetterwarnung_end2
        ! ---------------------------------------
        string  svName = "Wetterwarnung_end2";
        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("Ende der 2.Warnung in Sekunden");
            svObj.ValueUnit("");
            svObj.State("---");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_end2 wurde angelegt: Name: "#svObj);}
			if (debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
        {
          if(debug) {WriteLine("Variable Wetterwarnung_end2 existiert schon.");}
        }
  
        ! ---------------------------------------
        ! Zahl - Wetterwarnung_level2
        ! ---------------------------------------
        string  svName = "Wetterwarnung_level2";
        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(ivtFloat);
            svObj.ValueSubType(istGeneric);
            svObj.DPInfo("Level der 2.Warnung");
            svObj.ValueUnit("");
            svObj.ValueMin(0);
            svObj.ValueMax(100);
            svObj.State(0);
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_level2 wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
        {
          if(debug) {WriteLine("Variable Wetterwarnung_level2 existiert schon.");}
        }
       
        ! ---------------------------------------
        ! Werteliste - Wetterwarnung_typ2
        ! ---------------------------------------
        string  svName = "Wetterwarnung_typ2";
        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(ivtInteger);
            svObj.ValueSubType(istEnum);
            svObj.ValueList("unbekannt;Gewitter;Wind/Sturm/Orkan;Stark- und Dauerregen;Schneefall/Schneeverwehungen;Nebel;Frost;Glaette/Glatteis;Tauwetter;Hitzewarnungen;UV-Warnungen;Kuestenwarnungen;Binnenseewarnungen");
            svObj.State(1);
            svObj.DPInfo("Typ der 2.Warnung");
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_typ2 wurde angelegt: Name: "#svObj);}
			if(debug) {var valList = svObj.ValueList();}
			if(debug) {var val = valList .StrValueByIndex(";",svObj.Value());}
			if(debug) {WriteLine("-Eintrag: "#val);}
        }
        else
        {
          if(debug) {WriteLine("Variable Wetterwarnung_typ2 existiert schon.");}
        }

        ! ---------------------------------------
        ! STRING - Wetterwarnung_description2
        ! ---------------------------------------
        string  svName = "Wetterwarnung_description2";
        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("genauere Beschreibung der 2.Warnung");
            svObj.ValueUnit("");
            svObj.State("---");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_description2 wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
        {
          if(debug) {WriteLine("Variable Wetterwarnung_description2 existiert schon.");}
        }

        ! ---------------------------------------
        ! STRING - Wetterwarnung_event2
        ! ---------------------------------------
        string  svName = "Wetterwarnung_event2";
        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("Event der 2.Wetterwarnung");
            svObj.ValueUnit("");
            svObj.State("---");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_event2 wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
        {
          if(debug) {WriteLine("Variable Wetterwarnung_event2 existiert schon.");}
        }
		
        ! ---------------------------------------
        ! STRING - Wetterwarnung_headline2
        ! ---------------------------------------
        string  svName = "Wetterwarnung_headline2";
        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("Schlagzeile der 2.Warnung");
            svObj.ValueUnit("");
            svObj.State("---");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_headline2 wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
        {
          if(debug) {WriteLine("Variable Wetterwarnung_headline2 existiert schon.");}
        }

        ! ---------------------------------------
        ! STRING - Wetterwarnung_instruction2
        ! ---------------------------------------
        string  svName = "Wetterwarnung_instruction2";
        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("Was ist im 2.Warnungsfall zu tun?");
            svObj.ValueUnit("");
            svObj.State("---");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_instruction2 wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
        {
          if(debug) {WriteLine("Variable Wetterwarnung_instruction2 existiert schon.");}
        }
		
        ! ---------------------------------------
        ! STRING - Wetterwarnung_altitudeStart2
        ! ---------------------------------------
        string  svName = "Wetterwarnung_altitudeStart2";
        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("Hoehe 2.Start");
            svObj.ValueUnit("");
            svObj.State("---");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_altitudeStart2 wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
        {
          if(debug) {WriteLine("Variable Wetterwarnung_altitudeStart2 existiert schon.");}
        }

        ! ---------------------------------------
        ! STRING - Wetterwarnung_altitudeEnd2
        ! ---------------------------------------
        string  svName = "Wetterwarnung_altitudeEnd2";
        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("Hoehe 2.Ende");
            svObj.ValueUnit("");
            svObj.State("---");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_altitudeEnd2 wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
        {
          if(debug) {WriteLine("Variable Wetterwarnung_altitudeEnd2 existiert schon.");}
        }

        ! ---------------------------------------
        ! STRING - Wetterwarnung_event3
        ! ---------------------------------------
        string  svName = "Wetterwarnung_event3";
        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("Event der 3.Wetterwarnung");
            svObj.ValueUnit("");
            svObj.State("---");
            svObj.Internal(false);
            svObj.Visible(true);
         
            dom.RTUpdate(false);
			if(debug) {WriteLine("Variable Wetterwarnung_event3 wurde angelegt: Name: "#svObj);}
			if(debug) {WriteLine("-Eintrag: "#svObj.Value().ToString());}
        }
        else
        {
          if(debug) {WriteLine("Variable Wetterwarnung_event3 existiert schon.");}
        }
		
    }
    else
    {
        ! ------------------------------------------------
        ! Loeschen Systemvariablen wenn SV_Loeschen == true
        ! ------------------------------------------------
        object  svObj  = dom.GetObject("Wetterwarnung_aktiv");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_aktiv geloescht");}}
		
		object  svObj  = dom.GetObject("Wetterwarnung_new");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_new geloescht");}}
		
        object  svObj  = dom.GetObject("Wetterwarnung_text");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_text geloescht");}}
       
        object  svObj  = dom.GetObject("Wetterwarnung_city");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_city geloescht");}}
       
        object  svObj  = dom.GetObject("Wetterwarnung_regionName");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_regionName geloescht");}}
       
        object  svObj  = dom.GetObject("Wetterwarnung_start");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_start geloescht");}}
       
        object  svObj  = dom.GetObject("Wetterwarnung_end");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_end geloescht");}}

        object  svObj  = dom.GetObject("Wetterwarnung_level");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_level geloescht");}}
       
        object  svObj  = dom.GetObject("Wetterwarnung_typ");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_typ geloescht");}}
       
        object  svObj  = dom.GetObject("Wetterwarnung_state");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_state geloescht");}}
       
        object  svObj  = dom.GetObject("Wetterwarnung_description");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_description geloescht");}}
       
        object  svObj  = dom.GetObject("Wetterwarnung_event");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_event geloescht");}}
       
        object  svObj  = dom.GetObject("Wetterwarnung_headline");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_headline geloescht");}}
       
        object  svObj  = dom.GetObject("Wetterwarnung_instruction");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_instruction geloescht");}}
       
        object  svObj  = dom.GetObject("Wetterwarnung_stateShort");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_stateShort geloescht");}}
       
        object  svObj  = dom.GetObject("Wetterwarnung_altitudeStart");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_altitudeStart geloescht");}}
       
        object  svObj  = dom.GetObject("Wetterwarnung_altitudeEnd");
        if(svObj) { dom.DeleteObject(svObj.ID()); if(debug) {WriteLine("Wetterwarnung_altitudeEnd geloescht");}}
		
		object  svObj  = dom.GetObject("Wetterwarnung_text2");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_text2 geloescht");}}
		
		object  svObj  = dom.GetObject("Wetterwarnung_text3");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_text3 geloescht");}}
		
		object  svObj  = dom.GetObject("Wetterwarnung_text4");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_text4 geloescht");}}
		
		object  svObj  = dom.GetObject("Wetterwarnung_text5");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_text5 geloescht");}}
		
		if(warn6){
		object  svObj  = dom.GetObject("Wetterwarnung_text6");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_text6 geloescht");}}}
		
		object  svObj  = dom.GetObject("Wetterwarnung_pushref");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_pushref geloescht");}}
		
		object  svObj  = dom.GetObject("Wetterwarnung_anzahl");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_anzahl geloescht");}}
       
        object  svObj  = dom.GetObject("Wetterwarnung_start2");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_start2 geloescht");}}
       
        object  svObj  = dom.GetObject("Wetterwarnung_end2");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_end2 geloescht");}}
       
        object  svObj  = dom.GetObject("Wetterwarnung_level2");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_level2 geloescht");}}
       
        object  svObj  = dom.GetObject("Wetterwarnung_typ2");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_typ2 geloescht");}}
       
        object  svObj  = dom.GetObject("Wetterwarnung_description2");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_description2 geloescht");}}
       
        object  svObj  = dom.GetObject("Wetterwarnung_event2");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_event2 geloescht");}}
       
        object  svObj  = dom.GetObject("Wetterwarnung_headline2");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_headline2 geloescht");}}
       
        object  svObj  = dom.GetObject("Wetterwarnung_instruction2");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_instruction2 geloescht");}}
       
        object  svObj  = dom.GetObject("Wetterwarnung_altitudeStart2");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_altitudeStart2 geloescht");}}
       
        object  svObj  = dom.GetObject("Wetterwarnung_altitudeEnd2");
        if(svObj) { dom.DeleteObject(svObj.ID()); if(debug) {WriteLine("Wetterwarnung_altitudeEnd2 geloescht");}}
		
        object  svObj  = dom.GetObject("Wetterwarnung_event3");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_event3 geloescht");}}
		
		object  svObj  = dom.GetObject("Wetterwarnung_kreis");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_kreis geloescht");}}
		
		object  svObj  = dom.GetObject("Wetterwarnung_start_backup");
        if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_start_backup geloescht");}}
    }
Änderungen seit Version 1.10.r00
-DPinfo-Information gekürzt (kein Update nötig für Nutzer der Version 1.10.r00

Änderungen seit Version 1.20.r00
-Wetterwarnung_pushref als Zeichenkette hinzugefügt (zPNP-Pushnachricht wird nochmal verglichen, zur letzten Nachricht)

Änderungen seit Version 1.30.r00
-Debug-Rueckgaben wurden weiter ausgebaut um einfachere Analyse zu ermoeglichen
-Neue optionale Variable Wetterwarnung_text6 aufgrund von beobachteten 6 Warnmeldungen des DWD


Script 2: Das eigentliche DWD-Unwetterwarnscript v.1.31.r00
Eine Möglichkeit das Script aufzurufen ist ein Zeitintervall. Hier ein Beispielscreenshot des Programms:
S2P1_Programm.PNG
Screenshot Programm DWD-Unwetterwarnscript v1.10.r00
Hier die Einstellungen beim Zeitmodul. Eine andere Variante wäre ein CUxD-Timer.
S2P2_Zeit.PNG
Screenshot Zeitmodul DWD-Unwetterwarnscript v1.10.r00
S2P2_Zeit.PNG (22.46 KiB) 2990 mal betrachtet
Hier nun das DWD-Unwetterwarnscript:

Code: Alles auswählen

! --- DWD-Unwetterwarnscript v1.31.r00 vom 16.02.2019 ---------------------------------------------------------------------------------------
! Unwetterwarnscript von Tharanis, aufbauend auf dem DWD-Script von Grrzzz und Klana
! Vielen Dank an blackhole, Grrzzz, klana, kafetzke und viele ungezaehlte Helfer im Forum fuer die in anderen Unwetterscripten geleistete Arbeit
! -Fuer Funktion und/oder Richtigkeit der ausgelesenen Warnmeldungen des DWD kann keine Garantie uebernommen werden-
!
! neue Features in v1.31.r00 (16.02.2019):
! Debug-Rueckgaben wurden weiter ausgebaut um einfachere Analyse zu ermoeglichen
! Neue optionale Variable Wetterwarnung_text6 aufgrund von beobachteten 6 Warnmeldungen des DWD
!-------------------------------------------------------------------------------------------------------------------------------------------
!-------------------------------------------------------------------------------------------------------------------------------------------
! Konfiguration
!-------------------------------------------------------------------------------------------------------------------------------------------
! Anzulegen fuer das Script DWD-Unwetterwarnscript sind die folgenden Systemvariablen, welche am Besten über das Einmalsscript angelegt
! werden sollten. Das Einmalscript unter Script testen einfuegen und einmalig ausführen.
! ------------------------------------------------------------------------------------------------------------------------------------------
! Wetterwarnung_aktiv           Boolean
! Wetterwarnung_text            Zeichenkette (fuer Ausgabe)				
! Wetterwarnung_text2			Zeichenkette (fuer Ausgabe)
! Wetterwarnung_text3			Zeichenkette (fuer Ausgabe)				
! Wetterwarnung_text4			Zeichenkette (fuer Ausgabe)
! Wetterwarnung_text5			Zeichenkette (fuer Ausgabe)
! Wetterwarnung_text6			Zeichenkette (fuer Ausgabe)	(optional per Variable "warn6" weiter unten zuschaltbar)		
! Wetterwarnung_anzahl			Zahl
! Wetterwarnung_new				Boolean (neue Meldung /alte Meldung)	
! Wetterwarnung_kreis			Werteliste mit verschiedenen Kreisnummern und Kreisbezeichnungen
! Wetterwarnung_start_backup	Vergleich fuer Start der ersten Warnung
! ------------------------------------------------------------------------------------------------------------------------------------------
! Wetterwarnung_city            Zeichenkette (Nummer zum Suchen)		
! Wetterwarnung_regionName      Zeichenkette
! Wetterwarnung_start           Zeichenkette							
! Wetterwarnung_end             Zeichenkette
! 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_headline        Zeichenkette
! Wetterwarnung_state           Zeichenkette							
! Wetterwarnung_stateShort      Zeichenkette
! Wetterwarnung_level           Zahl									
! Wetterwarnung_event           Zeichenkette
! Wetterwarnung_description     Zeichenkette							
! Wetterwarnung_instruction     Zeichenkette
! Wetterwarnung_altitudeStart   Zeichenkette							
! Wetterwarnung_altitudeEnd     Zeichenkette
! ------------------------------------------------------------------------------------------------------------------------------------------
! Wetterwarnung_start2          Zeichenkette							
! Wetterwarnung_end2            Zeichenkette
! Wetterwarnung_typ2            Werteliste mit: unbekannt;Gewitter;Wind/Sturm/Orkan;Stark- und Dauerregen;Schneefall/Schneeverwehungen;Nebel;Frost;Glaette/Glatteis;Tauwetter;Hitzewarnungen;UV-Warnungen;Kuestenwarnungen;Binnenseewarnungen
! Wetterwarnung_headline2       Zeichenkette
! Wetterwarnung_level2          Zahl									
! Wetterwarnung_event2          Zeichenkette
! Wetterwarnung_description2    Zeichenkette							
! Wetterwarnung_instruction2    Zeichenkette
! Wetterwarnung_altitudeStart2  Zeichenkette							
! Wetterwarnung_altitudeEnd2    Zeichenkette
! ------------------------------------------------------------------------------------------------------------------------------------------
! Wetterwarnung_event3          Zeichenkette
!-------------------------------------------------------------------------------------------------------------------------------------------
!-------------------------------------------------------------------------------------------------------------------------------------------
! Debugging einschalten = true oder aussschalten = false
! z.B. zum Test unter "Script testen"
!-------------------------------------------------------------------------------------------------------------------------------------------
boolean debug = false;
! ------------------------------------------------------------------------------------------------------------------------------------------
! Virtuelles CUxD-Exec-Device hier angeben. CUXD und ein CUXD.exec (28) Gerät muss installiert sein. 
! ------------------------------------------------------------------------------------------------------------------------------------------
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, 903452002 Aurich-Kueste - 915085002 Oberharz
! ------------------------------------------------------------------------------------------------------------------------------------------
string city = "";   ! Wenn die Werteliste "Wetterwarnung_Kreis" gefuellt wird, so wird diese nur vom Script verwendet, wenn city leer bleibt
! ------------------------------------------------------------------------------------------------------------------------------------------
! 6. Warnmeldung aktivieren = true oder deaktivieren = false
! Achtung: wenn true muss Variable "Wetterwarnung_text6" auf der CCU vorhanden sein
! ------------------------------------------------------------------------------------------------------------------------------------------
boolean warn6 = false;
! ------------------------------------------------------------------------------------------------------------------------------------------
! Noetige CCU-Systemvariablen zuweisen
! In der CCU anzulegende Systemvariablen stehen nachfolgend in Anfuehrungszeichen, 
! Am Besten mit dem "Einmalscript" automatisch anlegen lassen!
! -------------------------------------------------------------------------------------------------------------------------------------------
! DWD Felder
! -------------------------------------------------------------------------------------------------------------------------------------------
string wwCity = "Wetterwarnung_city";       
string wwRegionName = "Wetterwarnung_regionName";
string wwState = "Wetterwarnung_state"; 
string wwStateShort = "Wetterwarnung_stateShort";	
string wwStart = "Wetterwarnung_start";           
string wwEnd = "Wetterwarnung_end";             
string wwLevel = "Wetterwarnung_level";         
string wwTyp = "Wetterwarnung_typ";                
string wwDescription = "Wetterwarnung_description";     
string wwEvent = "Wetterwarnung_event";           
string wwHeadline = "Wetterwarnung_headline";       
string wwInstruction = "Wetterwarnung_instruction";     
string wwAltitudeStart = "Wetterwarnung_altitudeStart";
string wwAltitudeEnd = "Wetterwarnung_altitudeEnd";
! ------------------------------------------------------------------------------------------------------------------------------------------
! Eigene Felder
! ------------------------------------------------------------------------------------------------------------------------------------------
string wwText = "Wetterwarnung_text";
string wwText2 = "Wetterwarnung_text2";
string wwText3 = "Wetterwarnung_text3";
string wwText4 = "Wetterwarnung_text4";
string wwText5 = "Wetterwarnung_text5";
if(warn6){string wwText6 = "Wetterwarnung_text6";}
string wwAktiv = "Wetterwarnung_aktiv";
string wwAnzahl = "Wetterwarnung_anzahl";
string wwKreis = "Wetterwarnung_kreis";
string wwNew = "Wetterwarnung_new";
string wwStartbkp = "Wetterwarnung_start_backup";
string wwStart2 = "Wetterwarnung_start2";           
string wwEnd2 = "Wetterwarnung_end2";             
string wwLevel2 = "Wetterwarnung_level2";         
string wwTyp2 = "Wetterwarnung_typ2";                
string wwDescription2 = "Wetterwarnung_description2";     
string wwEvent2 = "Wetterwarnung_event2";           
string wwHeadline2 = "Wetterwarnung_headline2";       
string wwInstruction2 = "Wetterwarnung_instruction2";     
string wwAltitudeStart2 = "Wetterwarnung_altitudeStart2";
string wwAltitudeEnd2 = "Wetterwarnung_altitudeEnd2";
string wwEvent3 = "Wetterwarnung_event3";
!---------------------------------------------------------------------------------------------------------------------------------------------
! Wenn die Variable city weiter oben leer ist, wird der eingestellte Kreis von Wetterwarnung_Kreis als City definiert
!---------------------------------------------------------------------------------------------------------------------------------------------
if(!city)
	{var kreis = dom.GetObject(wwKreis);var kreisV = kreis.Value();var kreisS = "";if (kreisV == ""){kreisS = web.webGetValueFromList(kreis.ValueList(), 0);}else {kreisS = web.webGetValueFromList(kreis.ValueList(), kreisV);}city = kreisS.Substr(0, 9);if(debug) {WriteLine("Kreis-Variable steht auf: "#kreisS);}if(debug) {WriteLine("City = Kreis-Variable gekuerzt: "#city);}}
else{if(debug) {WriteLine("City-Variable: "#city);}}
!---------------------------------------------------------------------------------------------------------------------------------------------
! 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 stdout2 = "";
	
string cmd = downloader # " --range " # rangefrom # "-" # rangeto # " " # url;
string cut2 = "]";
var ret ;
string strRest = "";
!----------------------------------------------------------------------------------------------------------------------------------------------
! Los gehts...
!----------------------------------------------------------------------------------------------------------------------------------------------
if(debug){WriteLine("Befehlszeile - Inhalt von Variable cmd : "#cmd);}
if(debug){WriteLine("Erscheint unterhalb dieser Zeile keine Debug-Info mehr, so bitte CuXD-Einstellungen pruefen");}

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 (debug){	var stdoutlength = stdout.Length();
			WriteLine("Laenge von stdout: " # stdoutlength);}

if (stdout)
    {
    find1 = stdout.Find(city);
if (debug){WriteLine("find1: " # find1);}
    if ((find1 >= 0) && (stdout.Length() >= 25000)) 
		{
        rangefrom = rangeto +1;
        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();
		}
    while ((find1 < 0) && (stdout.Length() >= 25000) && (loopcounter <= 30)) 
		{
        loopcounter = loopcounter + 1;
        rangefrom = rangeto +1;
		rangeto = rangeto + 25000;
		if (debug){	WriteLine("Range-Suchbeginn: " # rangefrom);
					WriteLine("Range-Suchende: " # rangeto);
					WriteLine("find1: " # find1);}
        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;
			if (debug){	WriteLine("Range-Suchbeginn: " # rangefrom);
						WriteLine("Range-Suchende: " # rangeto);}
            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();
			}
        }
	if (debug){	WriteLine("Anzahl Downloads: " # loopcounter);
				WriteLine("find1: " # find1);
				WriteLine("stdout cmd_rets: " #stdout);
				stdoutlength = stdout.Length();
				WriteLine("Laenge von cmd_rets: " #stdoutlength);}
    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);}

	if (debug){ stdoutlength = stdout.Length();
				WriteLine("Laenge von stdout: " # stdoutlength);}

	var text = stdout;
		
	! 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("Name der Region: "#regionName);}
    if(regionName) {if(dom.GetObject(wwRegionName).Value() != regionName){dom.GetObject(wwRegionName).State(regionName);}}
	
	! state (Bundesland im Klartext z.B: Nordrhein-Westfalen)
	stdout = stdout.Substr(stdout.Find("state")+8);
	var state = stdout.Substr(0, stdout.Find(",")-1);
	if(debug) {WriteLine("Bundesland: "#state);}
	if(state) {if(dom.GetObject(wwState).Value() != state){dom.GetObject(wwState).State(state);}}
	
	! stateShort (Abkuerzung Bundesland z.B: NRW)
	stdout = stdout.Substr(stdout.Find("stateShort")+13);
	var stateShort = stdout.Substr(0, stdout.Find(",")-1);
	if(debug) {WriteLine("Abkuerzung Bundesland: "#stateShort);}
	if(stateShort) {if(dom.GetObject(wwStateShort).Value() != stateShort){dom.GetObject(wwStateShort).State(stateShort);}}
	}
!------------------------------------------------------------------------------------------------------------------------------------------------		
! Warnungsanzahl auslesen	
!------------------------------------------------------------------------------------------------------------------------------------------------	
if(found) 
	{string cut1;
	string find1;
	integer anzahl = 0;
	cut1 = "},{";
	find1 = 1;

	while (find1 > 0) 
		{
		find1 = stdout.Find(cut1);
		stdout = stdout.Substr(find1 + 6, 5000);	
		if(find1 > 0){anzahl = anzahl + 1;}
		}
	anzahl = anzahl + 1;}
else {anzahl = 0;}
if (anzahl != dom.GetObject(wwAnzahl).Value()){dom.GetObject(wwAnzahl).State(anzahl);}
!-------------------------------------------------------------------------------------------------------------------------------------------------		
! Meldungen splitten und in Listen packen	
!-------------------------------------------------------------------------------------------------------------------------------------------------   
string startL; string endL; string levelL; string typL; string descriptL; string headlineL; string eventL; string instructionL; string altitudeStartL; string altitudeEndL; string text8;
if(found) 
	{		   
	foreach(text8, text.Split("},{"))
		{
		
		! start (Uhrzeit ab der die DWD Meldung gültig ist in Sekunden)
		var start = text8.Substr(text8.Find("start")+7);
		if(start.Substr(0,4) == "null")
			{start = start.Substr(0, start.Find(",")-0).Trim();}
		else
			{start = start.Substr(0, start.Find(",")-3).Trim();}
		start = start # ";";
		startL = startL # start;
		if(debug) {WriteLine("Liste Start-Zeit: " #startL);}
		
		! end (Uhrzeit bis zu der die DWD Meldung gültig ist in Sekunden)
		var end = text8.Substr(text8.Find("end")+5);
		if(end.Substr(0,4) == "null")
			{end = end.Substr(0, end.Find(",")-0).Trim();}
		else
			{end = end.Substr(0, end.Find(",")-3).Trim();}
		end = end # ";";
		endL = endL # end;
		if(debug) {WriteLine("Liste Ende-Zeit: " #endL);}

		!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 typ = text8.Substr(text8.Find("type")+6);
		typ = typ.Substr(0, typ.Find(","));
		typ = typ # ";";
		typL = typL # typ;
		if(debug) {WriteLine("Typ-Liste: "#typL);}	
		  
		!Level - Vermutung 0 = Vorabwarnung, 1..10(?) tatsaechliche Warnungen, bislang beobachtet:
		!2=Amtliche WARNUNG(gelb)
		!3=Amtliche WARNUNG vor STARKEN irgendwas(Orange)
		!4=Amtliche UNWETTERWARNUNG (rot)
		!10=Amtliche WARNUNG vor HITZE
		
		var level = text8.Substr(text8.Find("level")+7);
		level = level.Substr(0, 1);
		level = level # ";";
		levelL = levelL # level;
		if(debug) {WriteLine("Level-Liste: "#levelL);}
		
		! description (nähere Beschreibung der Meldung im Klartext)
		var descript = text8.Substr(text8.Find("description")+14);
		descript = descript.Substr(0, descript.Find("\""));
		descript = descript.UriEncode();
	    descript = descript.Replace("%5Cn", " ");
	    descript = descript.UriDecode();
		descript = descript # ";";
		descriptL = descriptL # descript;
		if(debug) {WriteLine("Beschreibungs-Liste: "#descriptL);}
		
		! instruction (Was sollte man tun im Klartext z.B. bleibt alle Zuhause ;-)
		var instruction = text8.Substr(text8.Find("instruction")+14);
		instruction = instruction.Substr(0, instruction.Find("\""));
		instruction = instruction # ";";
		instructionL = instructionL # instruction;
		if(debug) {WriteLine("Instruction-Liste: "#instructionL);}
		if(instruction) {dom.GetObject(wwInstruction).State(instruction);}
		
		! event (Kurzform der Meldungsart z.B. Winböen)
		var event = text8.Substr(text8.Find("event")+8);
		event = event.Substr(0, event.Find("\""));
		event = event # ";";
		eventL = eventL # event;
		if(debug) {WriteLine("Event-Liste: "#eventL);}
		
		! headline (Ueberschrift der Meldung z.B. Amtliche WARNUNG vor WINDBÖEN)
		var headline = text8.Substr(text8.Find("headline")+11);
		headline = headline.Substr(0, headline.Find("\""));
		headline = headline # ";";
		headlineL = headlineL # headline;
		if(debug) {WriteLine("Ueberschrift-Liste: "#headlineL);}
		
		! altitude Start
		var altitudeStart = text8.Substr(text8.Find("altitudeStart")+15);
		altitudeStart = altitudeStart.Substr(0, altitudeStart.Find(","));
		altitudeStart = altitudeStart # ";";
		altitudeStartL = altitudeStartL # altitudeStart;
		if(debug) {WriteLine("Hoehenstart-Liste: "#altitudeStartL);}
		if(altitudeStart) {dom.GetObject(wwAltitudeStart).State(altitudeStart);}
		
		! altitude End
		var altitudeEnd = text8.Substr(text8.Find("altitudeEnd")+13);
		altitudeEnd = altitudeEnd.Substr(0, altitudeEnd.Find(","));
		altitudeEnd = altitudeEnd # ";";
		altitudeEndL = altitudeEndL # altitudeEnd;
		if(debug) {WriteLine("Hoehenende-Liste: "#altitudeEndL);}
		if(altitudeEnd) {dom.GetObject(wwAltitudeEnd).State(altitudeEnd);}
		}
	}
!-------------------------------------------------------------------------------------------------------------------------------------------------		
! Listenteile in Variable schreiben
!------------------------------------------------------------------------------------------------------------------------------------------------- 		
if(found) 
	{
	var start1 = startL.StrValueByIndex(";", 0);
	start = start1.ToInteger().ToTime().ToString("%d.%m.%Y %H:%MUhr");
	if(dom.GetObject(wwStart).Value() != start){dom.GetObject(wwStart).State(start);}
	var end1 = endL.StrValueByIndex(";", 0);
	end = end1.ToInteger().ToTime().ToString("%d.%m.%Y %H:%MUhr");
	if(dom.GetObject(wwEnd).Value() != end){dom.GetObject(wwEnd).State(end);}
	level = levelL.StrValueByIndex(";", 0);
	if(dom.GetObject(wwLevel).Value() != level){dom.GetObject(wwLevel).State(level);}
	typ = (typL.StrValueByIndex(";", 0)).ToInteger()+1;
	if(dom.GetObject(wwTyp).Value() != typ){dom.GetObject(wwTyp).State(typ);}
	descript = descriptL.StrValueByIndex(";", 0);
	descript = descript.Trim("\ n");
	if(dom.GetObject(wwDescription).Value() != descript){dom.GetObject(wwDescription).State(descript);}
	headline = headlineL.StrValueByIndex(";", 0);
	if(dom.GetObject(wwHeadline).Value() != headline){dom.GetObject(wwHeadline).State(headline);}
	event = eventL.StrValueByIndex(";", 0);
	if(dom.GetObject(wwEvent).Value() != event){dom.GetObject(wwEvent).State(event);}
	instruction = instructionL.StrValueByIndex(";", 0);
	instruction = instruction.Trim("\ n");
	if(dom.GetObject(wwInstruction).Value() != instruction){dom.GetObject(wwInstruction).State(instruction);}
	altitudeStart = altitudeStartL.StrValueByIndex(";", 0);
	if(dom.GetObject(wwAltitudeStart).Value() != altitudeStart){dom.GetObject(wwAltitudeStart).State(altitudeStart);}
	altitudeEnd = altitudeEndL.StrValueByIndex(";", 0);
	if(dom.GetObject(wwAltitudeEnd).Value() != altitudeEnd){dom.GetObject(wwAltitudeEnd).State(altitudeEnd);}
	stdout = start # " bis " # end;
	if(dom.GetObject(wwText).Value() != stdout){dom.GetObject(wwText).State(stdout);}
	
	if (anzahl >= 2 )
		{
		start = startL.StrValueByIndex(";", 1);
		start = start.ToInteger().ToTime().ToString("%d.%m.%Y %H:%MUhr");
		if(dom.GetObject(wwStart2).Value() != start){dom.GetObject(wwStart2).State(start);}
		end = endL.StrValueByIndex(";", 1);
		end = end.ToInteger().ToTime().ToString("%d.%m.%Y %H:%MUhr");
		if(dom.GetObject(wwEnd2).Value() != end){dom.GetObject(wwEnd2).State(end);}
		level = levelL.StrValueByIndex(";", 1);
		if(dom.GetObject(wwLevel2).Value() != level){dom.GetObject(wwLevel2).State(level);}	
		typ = (typL.StrValueByIndex(";", 1)).ToInteger()+1;
		if(dom.GetObject(wwTyp2).Value() != typ){dom.GetObject(wwTyp2).State(typ);}
		descript = descriptL.StrValueByIndex(";", 1);
		if(dom.GetObject(wwDescription2).Value() != descript){dom.GetObject(wwDescription2).State(descript);}		
		headline = headlineL.StrValueByIndex(";", 1);
		if(dom.GetObject(wwHeadline2).Value() != headline){dom.GetObject(wwHeadline2).State(headline);}
		event = eventL.StrValueByIndex(";", 1);
		if(dom.GetObject(wwEvent2).Value() != event){dom.GetObject(wwEvent2).State(event);}		
		instruction = instructionL.StrValueByIndex(";", 1);
		if(dom.GetObject(wwInstruction2).Value() != instruction){dom.GetObject(wwInstruction2).State(instruction);}
		altitudeStart = altitudeStartL.StrValueByIndex(";", 1);
		if(dom.GetObject(wwAltitudeStart2).Value() != altitudeStart){dom.GetObject(wwAltitudeStart2).State(altitudeStart);}
		altitudeEnd = altitudeEndL.StrValueByIndex(";", 1);
		if(dom.GetObject(wwAltitudeEnd2).Value() != altitudeEnd){dom.GetObject(wwAltitudeEnd2).State(altitudeEnd);}
		stdout = start # " bis " # end;
		if(dom.GetObject(wwText2).Value() != stdout){dom.GetObject(wwText2).State(stdout);}
		}
	
	if (anzahl >= 3 )
		{	
		start = startL.StrValueByIndex(";", 2);
		start = start.ToInteger().ToTime().ToString("%d.%m.%Y %H:%MUhr");
		end = endL.StrValueByIndex(";", 2);
		end = end.ToInteger().ToTime().ToString("%d.%m.%Y %H:%MUhr");
		descript = descriptL.StrValueByIndex(";", 2);
		headline = headlineL.StrValueByIndex(";", 2);		
		event = eventL.StrValueByIndex(";", 2);
		if(dom.GetObject(wwEvent3).Value() != event){dom.GetObject(wwEvent3).State(event);}
		stdout = headline # " - " # descript # " - " # start # " bis " # end;
		if(dom.GetObject(wwText3).Value() != stdout){dom.GetObject(wwText3).State(stdout);}
		}
	
	if (anzahl >= 4 )
		{
		start = startL.StrValueByIndex(";", 3);
		start = start.ToInteger().ToTime().ToString("%d.%m.%Y %H:%MUhr");
		end = endL.StrValueByIndex(";", 3);
		end = end.ToInteger().ToTime().ToString("%d.%m.%Y %H:%MUhr");
		descript = descriptL.StrValueByIndex(";", 3);
		headline = headlineL.StrValueByIndex(";", 3);
		stdout = headline # " - " # descript # " - " # start # " bis " # end;
		if(dom.GetObject(wwText4).Value() != stdout){dom.GetObject(wwText4).State(stdout);}
		}

	if (anzahl >= 5 )
		{
		start = startL.StrValueByIndex(";", 4);
		start = start.ToInteger().ToTime().ToString("%d.%m.%Y %H:%MUhr");
		end = endL.StrValueByIndex(";", 4);
		end = end.ToInteger().ToTime().ToString("%d.%m.%Y %H:%MUhr");
		descript = descriptL.StrValueByIndex(";", 4);
		headline = headlineL.StrValueByIndex(";", 4);
		stdout = headline # " - " # descript # " - " # start # " bis " # end;
		if(dom.GetObject(wwText5).Value() != stdout){dom.GetObject(wwText5).State(stdout);}
		}
	if(warn6){if (anzahl >= 6 )
		{
		start = startL.StrValueByIndex(";", 5);
		start = start.ToInteger().ToTime().ToString("%d.%m.%Y %H:%MUhr");
		end = endL.StrValueByIndex(";", 5);
		end = end.ToInteger().ToTime().ToString("%d.%m.%Y %H:%MUhr");
		descript = descriptL.StrValueByIndex(";", 5);
		headline = headlineL.StrValueByIndex(";", 5);
		stdout = headline # " - " # descript # " - " # start # " bis " # end;
		if(dom.GetObject(wwText6).Value() != stdout){dom.GetObject(wwText6).State(stdout);}
		}}
	}
!-------------------------------------------------------------------------------------------------------------------------------------------------
! Ausloeser (erste Warnmeldung dient als Ausloeser)
!-------------------------------------------------------------------------------------------------------------------------------------------------
if(found) 
	{
	integer time = system.Date("%F %X").ToTime().ToInteger();
	var diff1 = time - start1.ToInteger();
	var diff2 = time - end1.ToInteger();
               
	if(debug) {WriteLine("diff1 :"#diff1);}
	if(debug) {WriteLine("diff2 :"#diff2);}
       
	if(diff1 >= 0 && diff2 <= 0) 
		{
		if(debug) {WriteLine("Wetterwarnung auf true");}
		if (dom.GetObject(wwAktiv).Value() == false)
			{dom.GetObject(wwAktiv).State(true);}
		}
	else 
		{
		if(diff1 <= 0 && diff2 <= 0) 
			{
			if(debug) {WriteLine("baldige Wetterwarnung auf true");}
			if (dom.GetObject(wwNew).Value() == false)
				{dom.GetObject(wwNew).State(true);}
			}
		else
			{
			if(debug) {WriteLine("Wetterwarnung auf false");}
			if (dom.GetObject(wwAktiv).Value() == true)
				{dom.GetObject(wwAktiv).State(false);}
			}
		}
	}
!-------------------------------------------------------------------------------------------------------------------------------------------------
! Ausloeser Wetterwarnung_Start-Vergleich
!-------------------------------------------------------------------------------------------------------------------------------------------------	
if (dom.GetObject(wwStart).Value() > dom.GetObject(wwStartbkp).Value())
	{
	if (dom.GetObject(wwNew).Value() == false)
		{dom.GetObject(wwNew).State(true);}
	else
		{dom.GetObject(wwNew).State(false);
		dom.GetObject(wwNew).State(true);}
	dom.GetObject(wwStartbkp).State(dom.GetObject(wwStart).Value());
	}
else
	{
	if (dom.GetObject(wwNew).Value() == true)
		{
		if(diff1 <= 0 && diff2 <= 0) 
			{if(debug) {WriteLine("Wetterwarnung_New steht bereits auf True, ist aber Vorwarnung");}}
		else
			{dom.GetObject(wwNew).State(false);}
		}
	}
!-------------------------------------------------------------------------------------------------------------------------------------------------
! Allgemeiner Fallback
!-------------------------------------------------------------------------------------------------------------------------------------------------
    if((dom.GetObject(wwInstruction).State()) == ""){dom.GetObject(wwInstruction).State("---");}
	if((dom.GetObject(wwInstruction2).State()) == ""){dom.GetObject(wwInstruction2).State("---");}
	
	if(!found) 
		{
        if(debug) {WriteLine("Fallback: Keine Warnung gefunden - found :"#found);}
        if (dom.GetObject(wwAktiv).State() == true){dom.GetObject(wwAktiv).State(false);}
		if (dom.GetObject(wwNew).State() == true){dom.GetObject(wwNew).State(false);}
        if(dom.GetObject(wwText).Value() == "Keine Warnungen"){if(debug) {WriteLine("wwText enthaelt Warnungen");}}else{dom.GetObject(wwText).State("Keine Warnungen");}
        if(dom.GetObject(wwTyp).State() != dom.GetObject(wwTyp).State("0")){dom.GetObject(wwTyp).State(0);}
        if(dom.GetObject(wwCity).Value() == "---"){if(debug) {WriteLine("wwCity gefuellt");}}else{dom.GetObject(wwCity).State("---");}
        if(dom.GetObject(wwRegionName).Value() == "---"){if(debug) {WriteLine("wwRegionname gefuellt");}}else{dom.GetObject(wwRegionName).State("---");}
        if(dom.GetObject(wwStart).Value() == "---"){}else{dom.GetObject(wwStart).State("---");}
		if(dom.GetObject(wwStartbkp).Value() == "---"){}else{dom.GetObject(wwStartbkp).State("---");}
        if(dom.GetObject(wwEnd).Value() == "---"){}else{dom.GetObject(wwEnd).State("---");}
        if(dom.GetObject(wwLevel).State() != dom.GetObject(wwLevel).State("0")){dom.GetObject(wwLevel).State(0);}
        if(dom.GetObject(wwState).Value() == "---"){}else{dom.GetObject(wwState).State("---");}
        if(dom.GetObject(wwDescription).Value() == "---"){}else{dom.GetObject(wwDescription).State("---");}
        if(dom.GetObject(wwEvent).Value() == "---"){}else{dom.GetObject(wwEvent).State("---");}
        if(dom.GetObject(wwHeadline).Value() == "---"){}else{dom.GetObject(wwHeadline).State("---");}
        if(dom.GetObject(wwInstruction).Value() == "---"){}else{dom.GetObject(wwInstruction).State("---");}
        if(dom.GetObject(wwStateShort).Value() == "---"){}else{dom.GetObject(wwStateShort).State("---");}
        if(dom.GetObject(wwAltitudeStart).Value() == "---"){}else{dom.GetObject(wwAltitudeStart).State("---");}
        if(dom.GetObject(wwAltitudeEnd).Value() == "---"){}else{dom.GetObject(wwAltitudeEnd).State("---");}
		}
	
	if (anzahl <= 1 )
		{
		if(debug) {WriteLine("Fallback: Keine 2.Warnung gefunden - found :"#found);}
		if(dom.GetObject(wwText2).Value() == "Keine Warnungen"){}else{dom.GetObject(wwText2).State("Keine Warnungen");}
		if(dom.GetObject(wwTyp2).State() != dom.GetObject(wwTyp2).State("0")){dom.GetObject(wwTyp2).State(0);}
		if(dom.GetObject(wwStart2).Value() == "---"){}else{dom.GetObject(wwStart2).State("---");}
		if(dom.GetObject(wwEnd2).Value() == "---"){}else{dom.GetObject(wwEnd2).State("---");}
		if(dom.GetObject(wwLevel2).State() != dom.GetObject(wwLevel2).State("0")){dom.GetObject(wwLevel2).State(0);}
		if(dom.GetObject(wwDescription2).Value() == "---"){}else{dom.GetObject(wwDescription2).State("---");}
		if(dom.GetObject(wwEvent2).Value() == "---"){}else{dom.GetObject(wwEvent2).State("---");}
		if(dom.GetObject(wwHeadline2).Value() == "---"){}else{dom.GetObject(wwHeadline2).State("---");}
		if(dom.GetObject(wwInstruction2).Value() == "---"){}else{dom.GetObject(wwInstruction2).State("---");}
		if(dom.GetObject(wwAltitudeStart2).Value() == "---"){}else{dom.GetObject(wwAltitudeStart2).State("---");}
		if(dom.GetObject(wwAltitudeEnd2).Value() == "---"){}else{dom.GetObject(wwAltitudeEnd2).State("---");}
		}

	if (anzahl <= 2 )
		{
		if(debug) {WriteLine("Fallback: Keine 3.Warnung oder höher gefunden - found :"#found);}
		if(dom.GetObject(wwText3).Value() == "Keine Warnungen"){}else{dom.GetObject(wwText3).State("Keine Warnungen");}
		if(dom.GetObject(wwEvent3).Value() == "---"){}else{dom.GetObject(wwEvent3).State("---");}
		}
	
	if (anzahl <= 3 )
		{if(debug) {WriteLine("Fallback: Keine 4.Warnung oder höher gefunden - found :"#found);}
		if(dom.GetObject(wwText4).Value() == "Keine Warnungen"){}else{dom.GetObject(wwText4).State("Keine Warnungen");}}
		
	if (anzahl <= 4 )
		{if(debug) {WriteLine("Fallback: Keine 5.Warnung oder höher gefunden - found :"#found);}
		if(dom.GetObject(wwText5).Value() == "Keine Warnungen"){}else{dom.GetObject(wwText5).State("Keine Warnungen");}}
		
	if(warn6){if (anzahl <= 5 )
		{if(debug) {WriteLine("Fallback: Keine 6.Warnung oder höher gefunden - found :"#found);}
		if(dom.GetObject(wwText6).Value() == "Keine Warnungen"){}else{dom.GetObject(wwText6).State("Keine Warnungen");}}}

Zu beachten ist, dass im Script Auslöser eingebaut sind, die für einen Push-Dienst genommen werden können:
-Wetterwarnung_aktiv: Zeigt an, ob es gerade eine aktive Warnung gibt
-Wetterwarnung_anzahl: Anzahl der Warnungen
-Wetterwarnung_new: zeigt an, ob es eine neue Meldung gibt: dafür wird abgefragt, ob das erste Startdatum größer ist als das erste Startdatum_backup

Änderungen seit Version 1.10.r00
-Kleine Aenderung am Vorwarnungsverhalten (Variable New wird nun nochmal gecheckt)
-3 interne Variablen geloescht (Bugfixing)
-verschiedene Veraenderungen damit Variablen nicht bei jedem Programmaufruf, sondern nur nach Aenderung gefuellt werden
-Unix-Zeitangaben werden nun vor dem Schreiben in Start und Endzeiten in lesbares Format umgewandelt (deshalb ist das Pushscript falls verwendet auch zu ändern)
-noch mehr interne Variablen entfernt durch Weiternutzung von vorherigen Variabeln (v.1.20.r01)

Änderungen seit Version 1.20.r00+r01
-Geänderter Suchteil: Meldungen werden nun auch bei laengeren JSON-Dateien gefunden (getestet bis ueber 450000 Zeichen, 473kb-Datei)
-Ausschneideverhalten der einzelnen Warnmeldeteile geaendert wegen Aenderung des DWDs an der JSON-Datei
-Optimierung durch Herausnahme von Stateshort und State aus Schleife
-Warnerklaerungen ergaenzt
-UriEncode und UriDecode dank kafetzke bei Description (Backslah-N vermieden)

Änderungen seit Version 1.30.r00
-Debug-Rueckgaben wurden weiter ausgebaut um einfachere Analyse zu ermoeglichen
-Neue optionale(!) Variable Wetterwarnung_text6 aufgrund von beobachteten 6 Warnmeldungen des DWD

Script 3: Pushscript v1.30.r00
Dieses habe ich bei mir mit folgendem Programm versehen, welches die eben erwähnten drei Auslöser nutzt:
S2P2_Programm.PNG
Screenshot Programm DWD-Unwetterpushscript v1.10.r00
Ich habe das Script so aufgebaut, dass es mit zPNP-Pushnachrichten, speziell Pushover läuft.

Hier nun das Pushscript:

Code: Alles auswählen

! ---  DWD-Unwetterpushscript v1.30.r00 vom 09.01.2019 ------------------------------------------------------
! -----------------------------------------------------------------------------------------------------------
! neues Features in v1.20 (25.02.2018):
! -Moeglichkeit der Wahl, ob bei Aufhebung von Warnungen benachrichtigt werden soll
! -Durch Aenderung des Formats der Start- und Endzeiten im Warnscript mussten im Pushscript auch Aenderungen
! erfolgen
! -Keine Meldung ist nun immer Prio=0 (v1.20.r01)
! neues Feature in v1.21 (26.04.2018):
! -Bei mehr als 3 Meldungen werden nun keine Instructionen mehr gepushed (wegen pot. zu langer Nachrichten)
! neues Feature in v1.30 (09.01.2019):
! -Instruktionen lassen sich nun hier im Script ausschalten (nochmal wegen pot. zu langer Nachrichten)
! -Wetterwarnung_pushref eingefuegt 
! -Pushover-Geraete lassen sich nun angeben
! -----------------------------------------------------------------------------------------------------------
! Soll bei Aufhebung von Warnungen gewarnt werden? (false oder true)
! -----------------------------------------------------------------------------------------------------------
boolean aufhebung = true;
! -----------------------------------------------------------------------------------------------------------
! Soll genauere Instruktionen des DWD mitgeschickt werden? (false oder true)
! -----------------------------------------------------------------------------------------------------------
boolean instruction = true;
! -----------------------------------------------------------------------------------------------------------
! Debugging true oder false
! -----------------------------------------------------------------------------------------------------------
boolean debug = false;
! -----------------------------------------------------------------------------------------------------------
string wwAnzahl = "Wetterwarnung_anzahl";
string wwStart = "Wetterwarnung_start";
string wwEnd = "Wetterwarnung_end";
string wwLevel = "Wetterwarnung_level"; 
string wwTyp = "Wetterwarnung_typ";
string wwDescription = "Wetterwarnung_description"; 
string wwEvent = "Wetterwarnung_event";
string wwHeadline = "Wetterwarnung_headline";
string wwInstruction = "Wetterwarnung_instruction";
string wwStartbkp = "Wetterwarnung_start_backup";
string wwStart2 = "Wetterwarnung_start2";           
string wwEnd2 = "Wetterwarnung_end2";                                    
string wwDescription2 = "Wetterwarnung_description2";     
string wwEvent2 = "Wetterwarnung_event2";           
string wwHeadline2 = "Wetterwarnung_headline2";       
string wwInstruction2 = "Wetterwarnung_instruction2"; 
string wwEvent3 = "Wetterwarnung_event3";
string wwText3 = "Wetterwarnung_text3";
! -----------------------------------------------------------------------------------------------------------
! zPNP - Pushvariablen für Pushover
! -----------------------------------------------------------------------------------------------------------
string wwPushref = "Wetterwarnung_pushref";    ! Text der alten Push-Unwetterwarnung zPNP
! -----------------------------------------------------------------------------------------------------------
string wwPushtitle = "CCU.SV_Pushover.Title";   ! Titel der Pushover-Nachricht
string wwPushtxt = "CCU.SV_Push.Text";          ! Text der Pushover-Nachricht
string wwPushprio = "CCU.SV_Push.Prio";         ! Prioritaet der Pushover-Nachricht
string wwPushprg = "CCU.Push-Nachrichten";  ! Name des Push-Nachrichtenprogramms
string wwPushgeraetevar = "CCU.SV_Pushover.Geraet";  ! Name der Variable fuer Pushover-Geraete
string wwPushgeraete = "";	! Name der Geraete die angepushed werden sollen
! -----------------------------------------------------------------------------------------------------------
! -----------------------------------------------------------------------------------------------------------
integer mTyp = 0;
string mText = "unbekannt";
string mTitle = "unbekannt";
mTyp = dom.GetObject(wwTyp).Value().ToInteger();
! -----------------------------------------------------------------------------------------------------------
! Typisierung
! -----------------------------------------------------------------------------------------------------------
if (debug) {WriteLine("Wetterwarnung_typ : " #mTyp);}

if (mTyp == 0) {  mText = "unbekannt";}
if (mTyp == 1) {  mText = "Gewitter";}
if (mTyp == 2) {  mText = "Wind/Sturm/Orkan";}
if (mTyp == 3) {  mText = "Stark- und Dauerregen";}
if (mTyp == 4) {  mText = "Schneefall/Schneeverwehungen";}
if (mTyp == 5) {  mText = "Nebel";}
if (mTyp == 6) {  mText = "Frost";}
if (mTyp == 7) {  mText = "Glaette/Glatteis";}
if (mTyp == 8) {  mText = "Tauwetter";}
if (mTyp == 9) {  mText = "Hitzewarnungen";}
if (mTyp == 10) {  mText = "UV-Warnungen";}
if (mTyp == 11) {  mText = "Kuestenwarnungen";}
if (mTyp == 12) {  mText = "Binnenseewarnungen";}

! ------------------------------------------------------------------------------------------------------------
! Warnung bei Aufhebung der Warnungen
! ------------------------------------------------------------------------------------------------------------
if(mTyp == 0)
	{
	if (aufhebung)
		{dom.GetObject(wwPushprio).State("0");
		mTitle = "Keine Wetterwarnungen";
		mText = "Momentan gibt es keine Wetterwarnungen";}
	}
! ------------------------------------------------------------------------------------------------------------
! Erste Warnung
! ------------------------------------------------------------------------------------------------------------
if(mTyp != 0)
	{
	if (dom.GetObject(wwStart).Value() > system.Date("%F %X").ToTime().ToString("%d.%m.%Y %H:%MUhr"))
		{mText = "DWD Wetter-Vorwarnung: ";}
	else
		{mText = "DWD-Warnung: ";}
		
	mText = mText # " Anzahl: " # dom.GetObject(wwAnzahl).Value().ToString(0) # " - ";	

 	if (dom.GetObject(wwEvent).Value() != "---")
		{mTitle = dom.GetObject(wwEvent).Value();}	
 
	if (dom.GetObject(wwHeadline).Value() != "---")
		{mText = mText # " " # dom.GetObject(wwHeadline).Value();}
     
    if (dom.GetObject(wwDescription).Value() != "---")
		{mText = mText # " - Details: " # dom.GetObject(wwDescription).Value();}
	
	if(instruction)
		{
		if ((dom.GetObject(wwAnzahl).State()) <= 2 )
			{
			if (dom.GetObject(wwInstruction).Value() != "---")
				{mText = mText # " - " # dom.GetObject(wwInstruction).Value();}
			}
		}
		
	if (dom.GetObject(wwStart).Value() != "---")
		{mText = mText # " - von " # dom.GetObject(wwStart).Value();}

	if (dom.GetObject(wwEnd).Value() != "---")
		{mText = mText # " bis " # dom.GetObject(wwEnd).Value();}

!---------------------------------------------------------------------------------------------------------------
! Zweite Warnung
!---------------------------------------------------------------------------------------------------------------	
	if ((dom.GetObject(wwAnzahl).State()) >= 2 )
		{
		if (dom.GetObject(wwEvent2).Value() != "---")
			{mTitle = mTitle # " - 2. " # dom.GetObject(wwEvent2).Value();}	

		if (dom.GetObject(wwStart2).Value() > system.Date("%F %X").ToTime().ToString("%d.%m.%Y %H:%MUhr"))
			{mText = mText # " -- " # "Wetter-Vorwarnung: ";}
		else
			{mText = mText # " -- " # "Warnung: ";}
		
		if (dom.GetObject(wwHeadline2).Value() != "---")
			{mText = mText # " " # dom.GetObject(wwHeadline2).Value();}

			if (dom.GetObject(wwDescription2).Value() != "---")
				{mText = mText # " - Details: " # dom.GetObject(wwDescription2).Value();}
		
		if(instruction)
			{
			if ((dom.GetObject(wwAnzahl).State()) <= 2 )
				{	  
				if (dom.GetObject(wwInstruction2).Value() != "---")
					{mText = mText # " - " # dom.GetObject(wwInstruction2).Value();}
				}
			}

		if (dom.GetObject(wwStart2).Value() != "---")
			{mText = mText # " - von " # dom.GetObject(wwStart2).Value();}

		if (dom.GetObject(wwEnd2).Value() != "---")
			{mText = mText # " bis " # dom.GetObject(wwEnd2).Value();}
		}
		
!----------------------------------------------------------------------------------------------------------------
! Dritte Warnung
!----------------------------------------------------------------------------------------------------------------	
	if ((dom.GetObject(wwAnzahl).State()) >= 3 )
		{
		if (dom.GetObject(wwEvent3).Value() != "---")
			{mTitle = mTitle # " - 3. " # dom.GetObject(wwEvent3).Value();}	
			
		if (dom.GetObject(wwText3).Value() != "---")
			{mText = mText # " -- " # dom.GetObject(wwText3).Value();}
		}
	
!-----------------------------------------------------------------------------------------------------------------
! Push Level (eventuell muessen noch andere Level beruecksichtigt werden)
!-----------------------------------------------------------------------------------------------------------------
	if (dom.GetObject(wwLevel).Value() <= 2)
		{dom.GetObject(wwPushprio).State("0");}
	else
		{
		if (dom.GetObject(wwLevel).Value() == 3)
			{dom.GetObject(wwPushprio).State("1");}
		else
			{
			if (dom.GetObject(wwLevel).Value() == 4)
				{dom.GetObject(wwPushprio).State("2");}
			else
				{dom.GetObject(wwPushprio).State("-1");}
			}
		}
	if(mTyp == 0)
		{dom.GetObject(wwPushprio).State("0");}
!-----------------------------------------------------------------------------------------------------------------
! Push-Nachricht versenden
!-----------------------------------------------------------------------------------------------------------------	  
! +++++ Setzen der Geraete für die Push-Nachricht +++++
if(wwPushgeraete){dom.GetObject(wwPushgeraetevar).State(wwPushgeraete);}

if (mText != dom.GetObject(wwPushref).State())
		{
		if (debug) {WriteLine("mText : " #mText);}	  
	  
		dom.GetObject(wwPushref).State(mText);
		dom.GetObject(wwPushtitle).State(mTitle);
		dom.GetObject(wwPushtxt).State(mText);
		dom.GetObject(wwPushprg).ProgramExecute();   
		}
	}
else
	{
	if(debug) {WriteLine("Keine WarnwetterDWD Pushmeldungen gefunden.");}
	
		if (mText != dom.GetObject(wwPushref).State())
			{
			if (aufhebung)
				{
				if (debug) {WriteLine("mText : " #mText);}	  
	  
				dom.GetObject(wwPushref).State(mText);
				dom.GetObject(wwPushtitle).State(mTitle);
				dom.GetObject(wwPushtxt).State(mText);
				dom.GetObject(wwPushprg).ProgramExecute();   
				}
			}
	}
Änderungen seit Version 1.10.r00
-Moeglichkeit der Wahl, ob bei Aufhebung von Warnungen benachrichtigt werden soll
-Durch Änderung des Formats der Start- und Endzeiten im Warnscript mussten im Pushscript auch Änderungen erfolgen

Änderungen seit Version 1.20.r00
-Instruktionen lassen sich nun hier im Script ausschalten (nochmal wegen pot. zu langer Nachrichten)
-Wetterwarnung_pushref eingefuegt
-Pushover-Geraete lassen sich nun angeben



So sehen die Pushnachrichten bei mir aus (zwei verschiedene Orte gewählt um das Aussehen zeigen zu können):
Pushnachrichten.PNG
Pushnachrichten DWD-Unwetterpushscript v1.10.r00

Fragen-/Antworten-Block:
Q1: Warum wurde das Script mit der Ausgabe von 2 detaillierten Warnungen aufgebaut und nicht für mehr detaillierte Warnungen?
A1: Nun: leider hat der DWD viele Felder die jeweils gefüllt und in Systemvariablen geschrieben werden müssen, wenn diese detailliert ausgegeben werden sollen. Ich hatte zuerst drei detaillierte Warnausgaben gebaut und hatte 10 mehr Systemvariablen als in der nun veröffentlichten Version. Es gab also insgesamt sogar 45 Systemvariablen, was mir doch zu viel erschien. Sollte es jemanden in den Finger jucken, so kann das Script leicht zu noch mehr detaillierten Warnausgaben erweitert werden.

Q2: Was hat es mit der OpenSSL-Problematik auf sich, dass dieses Script momentan nicht auf der CCU2 selber läuft, sondern nur auf Raspberrymatic/Charly/CCU3?
A2: Die DWD-Seite verlangt TLSv1.2, welches von der OpenSSL 1.0.0-Version der CCU2 noch nicht unterstützt wird. Siehe auch: viewtopic.php?f=31&t=38161&start=60#p389819 . Eventuell läuft das Script aber auch auf Yahm oder piVCCU(?) und sehr wahrscheinlich auf der CCU3

Q3: Warum wurden die Systemvariablen umbenannt?
A3: Im Vergleich mit Klanas Script habe ich die Systemvariablen alle auf die Namensgebung Warnmeldung_kleinbuchstaben umgestellt. Ich fand eine einheitliche Schreibweise übersichtlicher. Im Vergleich zu Klanas Script sind aber "nur" zwei Variablen umzubenennen: Wetterwarnung_Text und Wetterwarnung_Aktiv . Entweder müssen die beiden Variablen in meinem Script jeweils mit einem Großbuchstaben versehen werden oder unter "Einstellungen->Systemvariablen" angepasst werden.

Q4: Warum gibt es drei verschiedene Auslöser für das Pushscript?
A4: Nun, trotz wochenlangem Testen mit verschiedenen Orten ist die Auslösung des Pushscripts bei mir der neuralgische Punkt geblieben. Ich war alleine mit der Auslösung über einen Auslöser unzufrieden und es gab immer wieder Fälle wo sich die Warnmeldungen geändert haben und ich keine Pushbenachrichtigung bekam. Nun sind verschiedene IF-Bedingungen eingebaut und die jetzige Variante sieht zumindest bei mir recht logisch aus^^. Mal schauen, ob es dabei bleibt...


Ideen für die Weiterentwicklung
-Einschränkung der (gepushten) Warnungen je nach Stichwort, schön wäre es bei bestimmten Regionen z.B. die Warnung in hohen Höhen auszublenden/-schalten
-Bugfixing
-...


Edit-Historie:
-17.02.2018: Scriptveröffentlichungen v1.10.r00
-25.02.2018: Scriptveröffentlichungen v1.20.r00
-27.02.2018: Scriptveröffentlichungen v1.20.r01
-09.01.2019: Scriptveröffentlichungen v1.30.r00
-16.02.2019: Scriptveröffentlichungen v1.31.r00 (Pushscript ist bei 1.30.r00 geblieben)
Zuletzt geändert von Tharanis am 16.02.2019, 17:43, insgesamt 4-mal geändert.
DWD-Unwetterwarnscript v1.30 (RaspberryMatic) - Lüftungswarnung auf Temperatur-Basis

RaspberryMatic (3.47.10.20190713) - Längste Laufzeit bislang: 45 Tage (RaspberryMatic), 72 Tage (CCU2), >100 Tage (CCU1)

onkel_peter
Beiträge: 83
Registriert: 08.12.2014, 22:16
Wohnort: Erfurt

Re: DWD-Unwetterwarnscript v1.10.r00

Beitrag von onkel_peter » 22.02.2018, 16:56

Hallo Tharanis,
vielen Dank für die Weiter-/Neuentwicklung des DWD-Scriptes.
-eingerichtet
-gestartet
-funktioniert

Perfekt !!!
Jetzt mache ich noch die Visualisiereung in NEO und dann passt es.

Eine Bitte hätte ich allerdings noch:
Klana hatte es auch schon in seinem Script auf meine Bitte ergänzt.
In einigen Variablen wird die Zeit in Sekunden mit einem "Ellenlangen" Zahlenwert angezeigt.
Könnte man das auch wieder in "Klartext/Zeit" umwandeln ?
z.b
Wetterwarnung_start
Wetterwarnung_end etc.
Das wird zwar in der Variablen Wetterwarnung_text aufgelößt, wäre aber für die Visualisierung schön, wenn die Zeit im Klartext drin stehen würde.
(Oder in zusätzlichen Variablen)

Ansonsten nochmal DANKE !!!

Peter

Tharanis
Beiträge: 110
Registriert: 15.04.2015, 11:39

Re: DWD-Unwetterwarnscript v1.10.r00

Beitrag von Tharanis » 22.02.2018, 17:22

Danke Dir.

Ich weiß, es klingt etwas merkwürdig eine Weiterentwicklung anzuschieben, irre viele Systemvariablen durch zwei richtig ausgegebene Warnungen und drei kleinere Warnungen zu verursachen und dann knausrig werden bei Zusatz-Variablen :lol:

In der Tat versuche ich die Variablen nicht noch weiter ausufern zu lassen. Aber:

Dein Wunsch geht in eine Richtung, in die ich noch forschen will^^. Ins blaue gesagt und ohne Tests würde ich mir vorstellen, dass man die Startzeit und Endzeit vielleicht ganz von der Unix-Time löst, was das Schreiben in die Systemvariable angeht, so könnten eventuell in den Start und Endvariablen nur gut lesbare Zeitangaben stehen... aber ich möchte mich da (noch) nicht zu weit aus dem Fenster lehnen. :wink:
DWD-Unwetterwarnscript v1.30 (RaspberryMatic) - Lüftungswarnung auf Temperatur-Basis

RaspberryMatic (3.47.10.20190713) - Längste Laufzeit bislang: 45 Tage (RaspberryMatic), 72 Tage (CCU2), >100 Tage (CCU1)

urpils
Beiträge: 416
Registriert: 27.08.2014, 10:51

Re: DWD-Unwetterwarnscript v1.10.r00

Beitrag von urpils » 23.02.2018, 11:10

Rein interessehalber, wo liegt der Vorteil des beschriebenen Skriptes gegenüber einer App wie zB. für iOS Warnwetter vom DWD?
Das Problem mit dem Spruch "Der Klügere gibt nach" ist, dass dann die Dummen die Welt regieren

Xel66
Beiträge: 5640
Registriert: 08.05.2013, 23:33
Wohnort: Nordwürttemberg
Hat sich bedankt: 5 Mal
Danksagung erhalten: 24 Mal

Re: DWD-Unwetterwarnscript v1.10.r00

Beitrag von Xel66 » 23.02.2018, 12:12

urpils hat geschrieben:... wo liegt der Vorteil des beschriebenen Skriptes gegenüber einer App ...
Man könnte rein theoretisch mit der Hausautomation auf Warnungen reagieren. Praktisch habe ich aber noch nichts derartiges gesehen. Also ist es bei den meisten Anwendern mehr oder minder eine Datenermittlung zur Anzeige in einer GUI. Das könnte rein theoretisch auch die jeweilige Serversoftware oder Visualisierung machen oder eben sie APP auf dem jeweiligen Zugriffsgerät (Smartphone, Tablet etc.). So muss das ein Rechner (CCU), der eigentlich nicht dazu geeignet ist und nur über begrenzte Ressourcen verfügt, so nebenbei mitmachen. Warum? Weil es geht, nicht weil es sinnvoll ist. Aber das ist mit einigen Scripten hier im Forum so.

Gruß Xel66
---------------------------------------------------------------------------------
358 Kanäle in 103 Geräten und 114 CUxD-Kanäle in 24 CUxD-Geräten:
253 Programme, 218 Systemvariablen und 144 Direktverknüpfungen,
RaspberryMatic Version 3.45.7.20190622
---------------------------------------------------------------------------------

Tharanis
Beiträge: 110
Registriert: 15.04.2015, 11:39

Re: DWD-Unwetterwarnscript v1.10.r00

Beitrag von Tharanis » 23.02.2018, 12:16

Die Hauptunterschiede sind:
:arrow: Die Möglichkeit der Visualisierung in Kontext des Smarthomes
:arrow: In der Homematic-Programmierung kann man auf Ereignisse hin Programme ablaufen lassen

Wenn es jemanden nur um die Benachrichtigung per Push alleine geht, gibt es als Unterschied nur den Komfort selber besser zu bestimmen, welche Benachrichtungen man haben will, wie ausführlich und welche nicht.
DWD-Unwetterwarnscript v1.30 (RaspberryMatic) - Lüftungswarnung auf Temperatur-Basis

RaspberryMatic (3.47.10.20190713) - Längste Laufzeit bislang: 45 Tage (RaspberryMatic), 72 Tage (CCU2), >100 Tage (CCU1)

onkel_peter
Beiträge: 83
Registriert: 08.12.2014, 22:16
Wohnort: Erfurt

Re: DWD-Unwetterwarnscript v1.10.r00

Beitrag von onkel_peter » 23.02.2018, 12:54

Hallo Tharanis,

keine Eile, das ist ja an sich schon eine prima Sache.
Vorschlag: man könnte ja evtl. die SV mit der Unix-Zeit entfallen lassen !?
Anstelle neuer SV mit der "richtigen" Zeit.

Vielen Dank nochmal, dass Du uns teilhaben lässt.

Gruß Peter

Tharanis
Beiträge: 110
Registriert: 15.04.2015, 11:39

Re: DWD-Unwetterwarnscript v1.10.r00

Beitrag von Tharanis » 24.02.2018, 15:01

Entfallen lassen nicht, aber ich teste gerade eine Version mit befüllen der Start- und Endvariablen mit leserlichen Zeitstempeln. Bislang ist in der Betaversion enthalten:

Code: Alles auswählen

! -Kleine Aenderung am Vorwarnungsverhalten (Variable New wird nun nochmal gecheckt)
! -3 interne Variablen geloescht (Bugfixing)
! -verschiedene Veraenderungen damit Variablen nicht bei jedem Programmaufruf, sondern nur nach Aenderung gefuellt werden
! -Unix-Zeitangaben werden nun vor dem Schreiben in Start und Endzeiten in lesbares Format umgewandelt
Noch ist der Wurm drin, ich teste weiter...
DWD-Unwetterwarnscript v1.30 (RaspberryMatic) - Lüftungswarnung auf Temperatur-Basis

RaspberryMatic (3.47.10.20190713) - Längste Laufzeit bislang: 45 Tage (RaspberryMatic), 72 Tage (CCU2), >100 Tage (CCU1)

Tharanis
Beiträge: 110
Registriert: 15.04.2015, 11:39

Re: DWD-Unwetterwarnscript v1.20.r00

Beitrag von Tharanis » 25.02.2018, 14:19

Eben habe ich die neuen Scriptversionen 1.20.r00 veröffentlicht (siehe ersten Post).

Änderungen im Warnvariablenscript seit Version 1.10.r00
-DPinfo-Information gekürzt (kein Update nötig für Nutzer der Version 1.10.r00

Änderungen im Warnscript seit Version 1.10.r00
-Kleine Aenderung am Vorwarnungsverhalten (Variable New wird nun nochmal gecheckt)
-3 interne Variablen geloescht (Bugfixing)
-verschiedene Veraenderungen damit Variablen nicht bei jedem Programmaufruf, sondern nur nach Aenderung gefuellt werden
-Unix-Zeitangaben werden nun vor dem Schreiben in Start und Endzeiten in lesbares Format umgewandelt (deshalb ist das Pushscript falls verwendet auch zu ändern)

Änderungen im Pushscript seit Version 1.10.r00
-Moeglichkeit der Wahl, ob bei Aufhebung von Warnungen benachrichtigt werden soll
-Durch Änderung des Formats der Start- und Endzeiten im Warnscript mussten im Pushscript auch Änderungen erfolgen

Trotz meiner Tests der letzten Tage sind Bugs natürlich nicht ausgeschlossen. Ich bitte deshalb um Rückmeldung bei gefundenen Bugs (ansonsten natürlich auch^^).
DWD-Unwetterwarnscript v1.30 (RaspberryMatic) - Lüftungswarnung auf Temperatur-Basis

RaspberryMatic (3.47.10.20190713) - Längste Laufzeit bislang: 45 Tage (RaspberryMatic), 72 Tage (CCU2), >100 Tage (CCU1)

Tharanis
Beiträge: 110
Registriert: 15.04.2015, 11:39

Re: DWD-Unwetterwarnscript v1.20.r01

Beitrag von Tharanis » 27.02.2018, 18:26

Eben habe ich die neue Scriptversion des Warnscripts v1.20.r01 veröffentlicht (siehe ersten Post).

Änderungen im Warnscript seit Version 1.20.r00
-noch mehr interne Variablen entfernt durch Weiternutzung von vorherigen Variabeln (v.1.20.r01)

Diesmal also nur eine Optimierung...
DWD-Unwetterwarnscript v1.30 (RaspberryMatic) - Lüftungswarnung auf Temperatur-Basis

RaspberryMatic (3.47.10.20190713) - Längste Laufzeit bislang: 45 Tage (RaspberryMatic), 72 Tage (CCU2), >100 Tage (CCU1)

Antworten

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