ich war so frei und habe das Script von Grrzzz etwas erweitert und stelle es jetzt hier zur freien Verfügung.
In der Hoffnung das es irgendwann wieder mit dem Abruf der Warnmeldungen klappt (siehe die vorherigen Einträge hier im Thread.
Eigentlich sind es 3 Scripte.
1. Anlegen oder Löschen der Systemvariablen
2. Auslesen der DWD Warnmeldungen
3. Füllen der eigenen Pushvariable mit der vorhanden Meldung
Zu Script Nummer 1:
Fangen wir ganz vorne...damit es nicht zu Fehlern bei der Erstellung der Systemvariablen kommen kann, habe ich dafür ein Script erstellt.
Dieses Script unter "Script testen" einmalig ausführen. Vor Ausführung im Script bestimmen, ob man die Variablen anlegen oder löschen möchte.
!---------------------------------------------------------------------
! Wenn SV_Loeschen = false, dann werden die Systemvariablen angelegt
! Wenn SV_loeschen = true, dann werden die Systemvariablen geloescht!!
!---------------------------------------------------------------------
boolean SV_Loeschen = false;
Dann einmal ausführen ... es werden die entsprechenden Ausgaben angezeigt (debug steht standardmäßig auf true).
Code: Alles auswählen
! Automatische Anlage/Loeschung der Systemvariablen DWD
! fuer das Script Wetterwarn_DWD
!
! Version : 1.01 - 16.11.2017
! Erweiterung: Start- und Endedatum mit Uhrzeit in Systemvariablen ablegen
! Ausfuehrung : einmalig! unter Script testen auf der CCU2
!
! Anzulegen fuer das Script Wetterwarn_DWD sind die
! folgenden Systemvariablen:
!
! Wetterwarnung_Aktiv Boolean
! Wetterwarnung_Text Zeichenkette (fuer Ausgabe)
! --------------------------------------------------------------
! Wetterwarnung_city Zeichenkette (Nummer zum Suchen)
! Wetterwarnung_regionName Zeichenkette
! Wetterwarnung_start Zeichenkette
! Wetterwarnung_end Zeichenkette
! Wetterwarnung_startDateTime Zeichenkette
! Wetterwarnung_endDateTime Zeichenkette
! Wetterwarnung_level Zahl
! Wetterwarnung_typ Werteliste mit: unbekannt;Gewitter;Wind/Sturm/Orkan;Stark- und Dauerregen;Schneefall/Schneeverwehungen;Nebel;Frost;Glaette/Glatteis;Tauwetter;Hitzewarnungen;UV-Warnungen;Küstenwarnungen;Binnenseewarnungen
! Wetterwarnung_state Zeichenkette
! Wetterwarnung_description Zeichenkette
! Wetterwarnung_event Zeichenkette
! Wetterwarnung_headline Zeichenkette
! Wetterwarnung_instruction Zeichenkette
! Wetterwarnung_stateShort Zeichenkette
! Wetterwarnung_altitudeStart Zeichenkette
! Wetterwarnung_altitudeEnd Zeichenkette
! --------------------------------------------------------------
!---------------------------------------------------------------------
! 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("Wetterwarnung_Aktiv - Zeigt an ob es eine DWD-Meldung gibt.");
svObj.ValueUnit("");
dom.RTUpdate(false);
}
else
{
if(debug) {WriteLine("Variable Wetterwarnung_Aktiv existiert schon.");}
}
if (debug) {WriteLine(svObj.State().ToString());}
if (debug) {WriteLine(svObj.ValueName());}
! ---------------------------------------
! 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("Wetterwarnung_Text - selbst zusammengesetzter Ausgabetext");
svObj.ValueUnit("");
svObj.State("Keine Warnungen");
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
else
{
if(debug) {WriteLine("Variable Wetterwarnung_Text existiert schon.");}
}
if (debug) {WriteLine(svObj.Value().ToString());}
! ---------------------------------------
! 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("Wetterwarnung_city - Nummer der Region als String");
svObj.ValueUnit("");
svObj.State("---");
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
else
{
if(debug) {WriteLine("Variable Wetterwarnung_city existiert schon.");}
}
if (debug) {WriteLine(svObj.Value().ToString());}
! ---------------------------------------
! 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("Wetterwarnung_regionName - Regionname im Klartext");
svObj.ValueUnit("");
svObj.State("---");
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
else
{
if(debug) {WriteLine("Variable Wetterwarnung_regionName existiert schon.");}
}
if (debug) {WriteLine(svObj.Value().ToString());}
! ---------------------------------------
! 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("Wetterwarnung_start - Start der Warnung in Sekunden");
svObj.ValueUnit("");
svObj.State("---");
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
else
{
if(debug) {WriteLine("Variable Wetterwarnung_start existiert schon.");}
}
if (debug) {WriteLine(svObj.Value().ToString());}
! ---------------------------------------
! 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("Wetterwarnung_end - Ende der Warnung in Sekunden");
svObj.ValueUnit("");
svObj.State("---");
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
else
{
if(debug) {WriteLine("Variable Wetterwarnung_end existiert schon.");}
}
if (debug) {WriteLine(svObj.Value().ToString());}
! ---------------------------------------
! STRING - Wetterwarnung_startDateTime
! ---------------------------------------
string svName = "Wetterwarnung_startDateTime";
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("Wetterwarnung_start - Start der Warnung als Datum und Uhrzeit");
svObj.ValueUnit("");
svObj.State("---");
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
else
{
if(debug) {WriteLine("Variable Wetterwarnung_start existiert schon.");}
}
if (debug) {WriteLine(svObj.Value().ToString());}
! ---------------------------------------
! STRING - Wetterwarnung_endDateTime
! ---------------------------------------
string svName = "Wetterwarnung_endDateTime";
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("Wetterwarnung_end - Ende der Warnung als Datum und Uhrzeit");
svObj.ValueUnit("");
svObj.State("---");
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
else
{
if(debug) {WriteLine("Variable Wetterwarnung_end existiert schon.");}
}
if (debug) {WriteLine(svObj.Value().ToString());}
! ---------------------------------------
! 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("Wetterwarnung_level - Level der Warnung");
svObj.ValueUnit("");
svObj.ValueMin(0);
svObj.ValueMax(100);
svObj.State(0);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
else
{
if(debug) {WriteLine("Variable Wetterwarnung_level existiert schon.");}
}
if (debug) {WriteLine(svObj.Value().ToString());}
! ---------------------------------------
! 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("Wetterwarnung_typ - Typ der Warnung");
dom.RTUpdate(false);
}
else
{
if(debug) {WriteLine("Variable Wetterwarnung_typ existiert schon.");}
}
if (debug) {var valList = svObj.ValueList();}
if (debug) {var val = valList .StrValueByIndex(";",svObj.Value());}
if (debug) {WriteLine(val);}
! ---------------------------------------
! 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("Wetterwarnung_state - Bundesland im Langtext.");
svObj.ValueUnit("");
svObj.State("---");
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
else
{
if(debug) {WriteLine("Variable Wetterwarnung_state existiert schon.");}
}
if (debug) {WriteLine(svObj.Value().ToString());}
! ---------------------------------------
! 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("Wetterwarnung_description - genauere Beschreibung der Warnung");
svObj.ValueUnit("");
svObj.State("---");
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
else
{
if(debug) {WriteLine("Variable Wetterwarnung_description existiert schon.");}
}
if (debug) {WriteLine(svObj.Value().ToString());}
! ---------------------------------------
! 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("Wetterwarnung_event");
svObj.ValueUnit("");
svObj.State("---");
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
else
{
if(debug) {WriteLine("Variable Wetterwarnung_event existiert schon.");}
}
if (debug) {WriteLine(svObj.Value().ToString());}
! ---------------------------------------
! 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("Wetterwarnung_headline - Schlagzeile der Warnung");
svObj.ValueUnit("");
svObj.State("---");
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
else
{
if(debug) {WriteLine("Variable Wetterwarnung_headline existiert schon.");}
}
if (debug) {WriteLine(svObj.Value().ToString());}
! ---------------------------------------
! 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("Wetterwarnung_instruction - Was ist im Warnungsfall zu tun?");
svObj.ValueUnit("");
svObj.State("---");
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
else
{
if(debug) {WriteLine("Variable Wetterwarnung_instruction existiert schon.");}
}
if (debug) {WriteLine(svObj.Value().ToString());}
! ---------------------------------------
! 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("Wetterwarnung_stateShort - Bundesland in Kurzform z.B.NRW");
svObj.ValueUnit("");
svObj.State("---");
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
else
{
if(debug) {WriteLine("Variable Wetterwarnung_stateShort existiert schon.");}
}
if (debug) {WriteLine(svObj.Value().ToString());}
! ---------------------------------------
! 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("Wetterwarnung_altitudeStart - Hoehe Start");
svObj.ValueUnit("");
svObj.State("---");
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
else
{
if(debug) {WriteLine("Variable Wetterwarnung_altitudeStart existiert schon.");}
}
if (debug) {WriteLine(svObj.Value().ToString());}
! ---------------------------------------
! 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("Wetterwarnung_altitudeEnd - Hoehe Ende");
svObj.ValueUnit("");
svObj.State("---");
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
else
{
if(debug) {WriteLine("Variable Wetterwarnung_altitudeEnd existiert schon.");}
}
if (debug) {WriteLine(svObj.Value().ToString());}
}
else
{
! ------------------------------------------------
! Lˆschen 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_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_startDateTime");
if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_startDateTime geloescht");}}
object svObj = dom.GetObject("Wetterwarnung_endDateTime");
if(svObj) { dom.DeleteObject(svObj.ID());if(debug) {WriteLine("Wetterwarnung_endDateTime 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");}}
}
Zu Script Nummer 2:
Diese Script ist das eigentliche Auslesescript für die DWD Warnmeldungen.
Dieses wird in das folgenden WebUI Programm eingebunden bzw. aufgerufen.
Den Aufrufintervall habe ich für mich persönlich auf 30 Minuten gesetzt, weil ich denke das dies ausreichend ist.
Und hier das zugehörige WetterwarnDWD Script (Update vom 07.11.2017 - einige Offsets beim Auslesen waren falsch)
Code: Alles auswählen
! ------ DWD Unwetterwarnung 15.12.2017 Vers. 1.02 -----------------------------------------------------------
! Unwetterwarnungsscript von Grrzzz / klana
! Version 1.02 vom 15.12.2017
! Erweitert von klana
! - Alle Felder aus DWD Meldung auslesen
! - umfangreiches Debugging
! - korrektur Startdatum
! - Ausgabe der Meldung jetzt mit Headline anstelle von event
! - und noch eniges mehr...
! - Erstellung Einmalscript für automatische Erstellung bzw. Loeschung der Systemvariablen
! - Fehlerfaelle besser abfagen
! - Erweiterung um Datum und Uhrzeit für Start und End einschl. Systemvariablen
! - Boolean Variable damit auch die Vorabinformation angezeigt werden kann (s.u.)
!
! ToDo - bekannte Fehler:
! - Auswertung der Level und Typen stimmt irgenwie noch nicht...
!
! https://homematic-forum.de/forum/viewtopic.php?f=31&t=38161
!------------------------------------------------------------------------------------------------------------
!------------------------------------------------------------------------------------------------------------
! Konfiguration
!------------------------------------------------------------------------------------------------------------
! Anzulegen fuer das Script Wetterwarn_DWD sind die
! folgenden Systemvariablen, welche besser über das Einmalsscript angelegt werden.
! Das Einmalscript unter Script testen eingefügt und einmalig ausführen.
! --------------------------------------------------------------
! Wetterwarnung_Aktiv Boolean
! Wetterwarnung_Text Zeichenkette (für Ausgabe)
! --------------------------------------------------------------
! Wetterwarnung_city Zeichenkette (Nummer zum Suchen)
! Wetterwarnung_regionName Zeichenkette
! Wetterwarnung_start Zeichenkette
! Wetterwarnung_end Zeichenkette
! Wetterwarnung_startDateTime Zeichenkette
! Wetterwarnung_endDateTime Zeichenkette
! Wetterwarnung_level Zahl
! Wetterwarnung_typ Werteliste mit: unbekannt;Gewitter;Wind/Sturm/Orkan;Stark- und Dauerregen;Schneefall/Schneeverwehungen;Nebel;Frost;Glaette/Glatteis;Tauwetter;Hitzewarnungen;UV-Warnungen;Kuestenwarnungen;Binnenseewarnungen
! Wetterwarnung_state Zeichenkette
! Wetterwarnung_description Zeichenkette
! Wetterwarnung_event Zeichenkette
! Wetterwarnung_headline Zeichenkette
! Wetterwarnung_instruction Zeichenkette
! Wetterwarnung_stateShort Zeichenkette
! Wetterwarnung_altitudeStart Zeichenkette
! Wetterwarnung_altitudeEnd Zeichenkette
!
!------------------------------------------------------------------------------------------------------------
!------------------------------------------------------------------------------------------------------------
! Debugging einschalten = true oder aussschalten = false
! z.B. zum Test unter "Script testen"
!
! ShowVorabInfo = false -> es wird keine Vorabwarnung angezeigt,
! = true -> es wird auch die Vorabwarnung angezeigt
! noch nicht aktiv
!------------------------------------------------------------------------------------------------------------
boolean debug = false;
! boolean ShowVorabInfo = false;
! --------------------------------------------------------------
! Virtuelles CUxD-Exec-Device hier angeben
! --------------------------------------------------------------
string execdevice = "CUxD.CUX2801001:1";
! --------------------------------------------------------------
! Die Region-ID aus der JSON Datei raussuchen, dazu diese Adresse
! im Browser eingeben:
! https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json
! Für Berlin z.B. 111000000
! --------------------------------------------------------------
string city = "105362000"; ! Rhein-Erft Kreis
! string city = "109763000"; ! Testort Rhein-Sieg Kreis
! --------------------------------------------------------------
! Nötige CCU-Systemvariablen zuweisen
! In der CCU anzulegende Systemvariablen stehen nachfolgend in Anführungszeichen
! Am Besten mit dem "Einmalscript" automatisch anlegen lassen!
! _Text und _Aktiv sind Anfangsbuchstabe nach Unterstrich gross und
! alle DWD Felder sind Anfangsbuchstabe nach Unterstrich klein geschrieben
! --------------------------------------------------------------
! Eigene Felder
string wwText = "Wetterwarnung_Text";
string wwAktiv = "Wetterwarnung_Aktiv";
! DWD Felder
string wwCity = "Wetterwarnung_city";
string wwRegionName = "Wetterwarnung_regionName";
string wwStart = "Wetterwarnung_start";
string wwEnd = "Wetterwarnung_end";
string wwStartDateTime = "Wetterwarnung_startDateTime";
string wwEndDateTime = "Wetterwarnung_endDateTime";
string wwLevel = "Wetterwarnung_level";
string wwTyp = "Wetterwarnung_typ";
string wwState = "Wetterwarnung_state";
string wwDescription = "Wetterwarnung_description";
string wwEvent = "Wetterwarnung_event";
string wwHeadline = "Wetterwarnung_headline";
string wwInstruction = "Wetterwarnung_instruction";
string wwStateShort = "Wetterwarnung_stateShort";
string wwAltitudeStart = "Wetterwarnung_altitudeStart"; ! Wird noch nicht genutzt
string wwAltitudeEnd = "Wetterwarnung_altitudeEnd"; ! Wird noch nicht genutzt
!------------------------------------------------------------------------------------------------------------
! Ausgabe in Systemvariable fuer Push (fuer spaetere Erweiterung)
!------------------------------------------------------------------------------------------------------------
string PushVar = "SV_PushMessage";
!------------------------------------------------------------------------------------------------------------
! Das wars an Konfiguration
! DWD-Warntabelle in 25k(+25k)-Abschnitten laden bis die Region gefunden wurde
!------------------------------------------------------------------------------------------------------------
string url = "https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json";
string downloader = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl";
integer rangefrom = 0;
integer rangeto = 25000;
integer loopcounter = 1;
integer find1 = 0;
boolean found = false;
string stdout = "";
string cmd = downloader # " --range " # rangefrom # "-" # rangeto # " " # url;
string cut2 = "],";
var ret ;
string strRest = "";
!------------------------------------------------------------------------------------------------------------
! Los gehts...
!------------------------------------------------------------------------------------------------------------
if(debug){WriteLine("cmd : "#cmd);}
ret= dom.GetObject(execdevice # ".CMD_SETS").State(cmd);
if(debug){WriteLine("ret cmd_sets : "#ret);}
ret = dom.GetObject(execdevice # ".CMD_QUERY_RET").State(1);
if(debug){WriteLine("ret cmd_query_ret: "#ret);}
stdout = dom.GetObject(execdevice # ".CMD_RETS").State();
if(debug) {WriteLine("stdout cmd_rets : " #stdout);}
if (stdout)
{
find1 = stdout.Find(city);
if ((find1 >= 0) && (stdout.Length() >= 25000)) {
rangefrom = rangeto - 99;
rangeto = rangeto + 24900;
cmd = downloader # " --range " # rangefrom # "-" # rangeto # " " # url;
dom.GetObject(execdevice # ".CMD_SETS").State(cmd);
dom.GetObject(execdevice # ".CMD_QUERY_RET").State(1);
stdout = stdout + dom.GetObject(execdevice # ".CMD_RETS").State();
}
while ((find1 < 0) && (stdout.Length() >= 25000) && (loopcounter <= 30)) {
loopcounter = loopcounter + 1;
rangefrom = rangeto - 99;
rangeto = rangeto + 24900;
cmd = downloader # " --range " # rangefrom # "-" # rangeto # " " # url;
dom.GetObject(execdevice # ".CMD_SETS").State(cmd);
dom.GetObject(execdevice # ".CMD_QUERY_RET").State(1);
stdout = dom.GetObject(execdevice # ".CMD_RETS").State();
find1 = stdout.Find(city);
if ((find1 >= 0) && (stdout.Length() >= 25000)) {
rangefrom = rangefrom + 25000;
rangeto = rangeto + 25000;
cmd = downloader # " --range " # rangefrom # "-" # rangeto # " " # url;
dom.GetObject(execdevice # ".CMD_SETS").State(cmd);
dom.GetObject(execdevice # ".CMD_QUERY_RET").State(1);
stdout = stdout + dom.GetObject(execdevice # ".CMD_RETS").State();
}
}
found = false;
if(stdout.Find(city)>=0) {
found = true;
}
}
if(city) {dom.GetObject(wwCity).State(city);}
!------------------------------------------------------------------------------------------------------------
! Relevanter Bereich ausschneiden und zuweisen
!------------------------------------------------------------------------------------------------------------
if(found) {
if(debug) {WriteLine("Suche nach City :"#city);}
! gesuchten Bereich komplett ausschneiden und mit ToLatin() umwandeln
stdout = stdout.Substr(stdout.Find(city));
stdout = stdout.Substr(0, stdout.Find(cut2)+1).ToLatin();
if(debug) {WriteLine("stdout nach Find(City): " #stdout);}
! Hier können jetzt mehr als 1 Meldung vorhanden sein
! Diese sind durch geschweifte Klammen getrennt
! Wie kann man diese Auswerten, da zur Zeit immer nur die erste genommen wird?
! regionName (Klartext der gesuchten Region z.B. Rhein-Erft-Kreis)
stdout = stdout.Substr(stdout.Find("regionName")+13);
var regionName = stdout.Substr(0, stdout.Find(",")-1).Trim();
if(debug) {WriteLine("regionName: "#regionName);}
if(regionName) {dom.GetObject(wwRegionName).State(regionName);}
! start (Uhrzeit ab der die DWD Meldung gültig ist in Sekunden)
stdout = stdout.Substr(stdout.Find("start")+7);
if(stdout.Substr(0,4) == "null")
{
var start = stdout.Substr(0, stdout.Find(",")-0).Trim();
}
else
{
var start = stdout.Substr(0, stdout.Find(",")-3).Trim();
}
if(debug) {WriteLine("Start stdout : " #stdout);}
!Bei Inhalt null keine Anfuehrungszeichen
if(debug) {WriteLine("start : " #start);}
if(start) {dom.GetObject(wwStart).State(start);}
! end (Uhrzeit bis zu der die DWD Meldung gültig ist in Sekunden)
stdout = stdout.Substr(stdout.Find("end")+5);
if(stdout.Substr(0,4) == "null")
{
var end = stdout.Substr(0, stdout.Find(",")-0).Trim();
}
else
{
var end = stdout.Substr(0, stdout.Find(",")-3).Trim();
}
if(debug) {WriteLine("end : " #end);}
if(end) {dom.GetObject(wwEnd).State(end);}
if(debug) {WriteLine("End stdout : " #stdout);}
!Bei Inhalt null keine Anfuehrungszeichen
! Umrechnung in Date und Time neu 16.11.2017
if(debug) {WriteLine("Start DateTime: " #start.ToInteger().ToTime().ToString());}
if(debug) {WriteLine("End DateTime: " #end.ToInteger().ToTime().ToString());}
dom.GetObject(wwStartDateTime).State(start.ToInteger().ToTime().ToString());
dom.GetObject(wwEndDateTime).State(end.ToInteger().ToTime().ToString());
! 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("state :"#state);}
if(state) {dom.GetObject(wwState).State(state);}
!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)
stdout = stdout.Substr(stdout.Find("type")+6);
var mtyp = stdout.Substr(0, stdout.Find(","));
if(debug) {WriteLine("mtyp :"#mtyp);}
if(mtyp) {dom.GetObject(wwTyp).State(mtyp);}
!Level - Vermutung 0 = Vorabwarnung, 1..10 tatsächliche Warnungen
stdout = stdout.Substr(stdout.Find("level")+7);
var level = stdout.Substr(0, stdout.Find(","));
if(debug) {WriteLine("level :"#level);}
if(level) {dom.GetObject(wwLevel).State(level);}
! headline (Überschrift der Meldung z.B. Amtliche WARNUNG vor WINDBÖEN)
stdout = stdout.Substr(stdout.Find("headline")+11);
var headline = stdout.Substr(0, stdout.Find(",")-1);
if(debug) {WriteLine("headline :"#headline);}
if(headline) {dom.GetObject(wwHeadline).State(headline);}
! description (nähere Erklärung der Meldung im Klartext)
stdout = stdout.Substr(stdout.Find("description")+14);
var descript = stdout.Substr(0, stdout.Find(",")-1);
if(debug) {WriteLine("descript :"#descript);}
if(descript) {dom.GetObject(wwDescription).State(descript);}
! altitude Start
stdout = stdout.Substr(stdout.Find("altitudeStart")+15);
var altitudeStart = stdout.Substr(0, stdout.Find(","));
if(debug) {WriteLine("altitudeStart :"#altitudeStart);}
if(altitudeStart) {dom.GetObject(wwAltitudeStart).State(altitudeStart);}
! event (Kurzform der Meldungsart z.B. Winböen)
stdout = stdout.Substr(stdout.Find("event")+8);
var event = stdout.Substr(0, stdout.Find(",")-1);
if(debug) {WriteLine("event :"#event);}
if(event) {dom.GetObject(wwEvent).State(event);}
! instruction (Was sollte man tun im Klartext z.B. bleibt alle Zuhause ;-)
stdout = stdout.Substr(stdout.Find("instruction")+14);
var instruction = stdout.Substr(0, stdout.Find(",")-1);
if(debug) {WriteLine("instruction :"#instruction);}
if(instruction) {dom.GetObject(wwInstruction).State(instruction);}
! altitude End
stdout = stdout.Substr(stdout.Find("altitudeEnd")+13);
var altitudeEnd = stdout.Substr(0, stdout.Find(","));
if(debug) {WriteLine("altitudeEnd :"#altitudeEnd);}
if(altitudeEnd) {dom.GetObject(wwAltitudeEnd).State(altitudeEnd);}
! stateShort (Abkürzung Bundesland z.B: NRW)
stdout = stdout.Substr(stdout.Find("stateShort")+13);
var stateShort = stdout.Substr(0, stdout.Find("}")-1);
if(debug) {WriteLine("stateShort :"#stateShort);}
if(stateShort) {dom.GetObject(wwStateShort).State(stateShort);}
if (debug) {WriteLine("Laenge Rest:"#stdout.Length());}
!Vorabinformationen sind auch zu filtern
! if(event.Find("VORABINFORMATION")>=0) && (ShowVorabInfo == false)) {
if(event.Find("vorabinformation")>=0) {
found = false;
if(debug) {WriteLine("if von VorabInformation found :"#found);}
} else {
if(debug) {WriteLine("else von VORABINFORMATION found :"#found);}
!------------------------------------------------------------------------------------------------------------
! Auswertung
!------------------------------------------------------------------------------------------------------------
integer time = system.Date("%F %X").ToTime().ToInteger();
var diff1 = time - start.ToInteger();
var diff2 = time - end.ToInteger();
if(debug) {WriteLine("diff1 :"#diff2);}
if(debug) {WriteLine("diff2 :"#diff2);}
if(diff1 >= 0 && diff2 <= 0) {
dom.GetObject(wwAktiv).State(true);
if(debug) {WriteLine("Wetterwarnung auf true");}
}
else {
dom.GetObject(wwAktiv).State(false);
if(debug) {WriteLine("Wetterwarnung auf false");}
}
stdout = start.ToInteger().ToTime().ToString() # " - " # end.ToInteger().ToTime().ToString() # ": " # event ;
if(debug) {WriteLine("WetterwarnungText :"#stdout);}
if(debug) {WriteLine("WetterwarnungTyp :"#(mtyp.ToInteger()+1).ToString());}
if(debug) {WriteLine("WetterwarnungDescript :"#descript);}
dom.GetObject(wwText).State(stdout);
dom.GetObject(wwTyp).State(mtyp.ToInteger()+1);
dom.GetObject(wwDescription).State(descript);
}
}
!------------------------------------------------------------------------------------------------------------
! Allgemeiner Fallback
!------------------------------------------------------------------------------------------------------------
if(!found) {
if(debug) {WriteLine("Fallback Keine Warnung gefunden - found :"#found);}
dom.GetObject(wwAktiv).State(false);
dom.GetObject(wwText).State("Keine Warnungen");
dom.GetObject(wwTyp).State(0);
dom.GetObject(wwCity).State("---");
dom.GetObject(wwRegionName).State("---");
dom.GetObject(wwStart).State("---");
dom.GetObject(wwEnd).State("---");
dom.GetObject(wwStartDateTime).State("---");
dom.GetObject(wwEndDateTime).State("---");
dom.GetObject(wwLevel).State(0);
dom.GetObject(wwState).State("---");
dom.GetObject(wwDescription).State("---");
dom.GetObject(wwEvent).State("---");
dom.GetObject(wwHeadline).State("---");
dom.GetObject(wwInstruction).State("---");
dom.GetObject(wwStateShort).State("---");
dom.GetObject(wwAltitudeStart).State("---");
dom.GetObject(wwAltitudeEnd).State("---");
}
Zu Script Nummer 3:
Nun zum 3. Script, welches auf die Aktivierung durch das 2. Script reagiert.
Hier habe ich ein paar der Systemvariablen benutzt, um meine Pushvariable zu füllen.
Diese Füllung oder was man auch sonst noch so mit der Systemvariablen angestellt werden kann ist natürlich jedem selbst überlassen...
Erstmal das WebUI Programm in welches das Script eingebunden werden muss
und hier mein Script dazu
Code: Alles auswählen
! Wetterwarnungen pushen
integer mTyp = 0;
string mText = "unbekannt";
boolean debug = false;
mTyp = dom.GetObject("Wetterwarnung_typ").Value().ToInteger();
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";}
if(mTyp != 0)
{
mText = "DWD Wetterwarnung für ";
if (dom.GetObject("Wetterwarnung_state").Value() != "---")
{
mText = mText # dom.GetObject("Wetterwarnung_state").Value();
}
if (dom.GetObject("Wetterwarnung_Text").Value() != "Keine Warnungen")
{
mText = mText # "%0A" # dom.GetObject("Wetterwarnung_Text").Value();
}
if (dom.GetObject("Wetterwarnung_description").Value() != "---")
{
mText = mText # "%0AHinweis: " # dom.GetObject("Wetterwarnung_description").Value();
}
if (debug) {WriteLine("mText : " #mText);}
dom.GetObject("SV_PushMessage").State(mText);
}
else
{
if(debug) {WriteLine("Keine WarnwetterDWD Pushmeldungen gefunden.");}
}
Die Variable debug in den Scripten sollte nur eingeschaltet (auf true setzen) werden, wenn man die Scripte unter "Script testen" laufen läßt.
Es sei nochmal darauf hingewiesen, dass das Ganze z.Zt. auf der CCU2 NICHT läuft, da es hier wohl eine Änderung auf Seiten DWD gab (siehe vorherige Posts!)
Vielleicht hilft es ja jemandem und außerdem wollte ich auch mal was nützliches posten
Gruß
Klana
Nachtrag: Auf der Rasberymatic funktioniert das Script!