Howto - zPNP Sturmwarnungen V2.8

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

Moderator: Co-Administratoren

dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Howto - zPNP Sturmwarnungen V2.8

Beitrag von dtp » 15.01.2017, 14:45

Hallo,

da ich noch nicht so ganz zufrieden war mit meinem Sturmmelde-Programm und -Skript, habe ich es etwas modifiziert. Vielleicht ist es ja eine Anregung für den Einen oder Anderen hier. Die letzten Zeilen des Skripts dienen zum Aufruf des zPNP, können aber natürlich recht einfach durch andere Codezeilen ersetzt werden.

Hier der Skriptcode:

Code: Alles auswählen

! Meldung Sturm
! Version 2.8.1, Autor: dtp
 
! Name von Kanal 1 des Funk-Kombisensors
string channel = "DG Dach Wettersensor Daten";

! Namen der verwendeten Systemvariablen
string svPushText = "CCU SV Push Text"; ! gem. zPNS-xx, obligatorisch
string svPushPrio = "CCU SV Push Prio"; ! gem. zPNS-xx, obligatorisch
string svWindSpeedPeak = "Haus SV Sturm Höchstwert"; ! Höchstgeschwindigkeit des Windes, obligatorisch
string svPushoverSound = "CCU SV Pushover Sound"; ! gem. zPNS-Po, optional
 
! Name des zentralen Push-Nachrichten-Programms
string zPNP = "CCU PRG Push-Nachrichten"; ! obligatorisch
 
! Bargraph der Windstärken
real range = 12.0; ! Maximalwert des darzustellenden Bereichs
real bars = 12.0; ! Anzahl Bars innerhalb range
 
! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################
 
! +++++ Deklaration weiterer Variablen +++++
string wind; string windSpeed; string windSpeedDayMax; string windIndex;
string message; string fontColor1 = ""; string fontColor2 = ""; string bargraph = ""; 
string windForceTable = "1\t6\t12\t20\t29\t39\t50\t62\t75\t89\t103\t118"; 
integer windForce = 0; integer windDir = 0; integer prio = 0;
real barIndex = 0.0;
object svObject; object svObjectList;

! +++++ Systemvariable für die Höchstgeschwindigkeit des Windes auslesen und ggf. anlegen +++++
if(!svWindSpeedPeak){svWindSpeedPeak = "Haus SV Sturm Höchstwert";}
svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svWindSpeedPeak);
if(!svObject){   
  svObjectList = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectList.Add(svObject.ID());
  svObject.Name(svWindSpeedPeak); svObject.DPInfo("Höchstgeschwindigkeit des Windes"); svObject.Internal(false); svObject.Visible(true);
  svObject.ValueType(ivtFloat); svObject.ValueSubType(istGeneric); svObject.ValueUnit("km/h"); svObject.ValueMin(0); svObject.ValueMax(65000); dom.RTUpdate(true);
}
else{windSpeedDayMax = svObject.Value();}

! +++++ Sound für Pushover-Nachricht +++++
if(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)){(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)).State("siren");}

! +++++ Aktuelle Windgeschwindigkeit und -richtung +++++
windSpeed = (dom.GetObject(ID_CHANNELS).Get(channel)).DPByHssDP("WIND_SPEED").Value();
if((dom.GetObject(ID_CHANNELS).Get(channel)).DPByHssDP("WIND_DIR")){
  windDir = (dom.GetObject(ID_CHANNELS).Get(channel)).DPByHssDP("WIND_DIR").Value();
}
elseif((dom.GetObject(ID_CHANNELS).Get(channel)).DPByHssDP("WIND_DIRECTION")){
  windDir = (dom.GetObject(ID_CHANNELS).Get(channel)).DPByHssDP("WIND_DIRECTION").Value();
}

! +++++ Nachricht senden, wenn Windgeschwindigkeit zugenommen hat +++++
if(windSpeed > windSpeedDayMax){
  ! ----- Setzen der Höchstgeschwindigkeit des Windes -----
  (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svWindSpeedPeak)).State(windSpeed);

  ! ----- Umwandlung der Windgechwindigkeit in Windstärke -----
  foreach(windIndex, windForceTable){if(windSpeed >= windIndex){windForce = windForce+1;}}

  ! ----- Erzeugung der Begriffe in Abhängigkeit von der Windstärke -----
  if(windForce == 12){wind = "Orkan"; prio = 2; fontColor1 = "<font color=red>"; fontColor2 = "</font>";}
  elseif(windForce == 11){wind = "orkanartiger Sturm"; prio = 2; fontColor1 = "<font color=red>"; fontColor2 = "</font>";}
  elseif(windForce == 10){wind = "schwerer Sturm"; prio = 1; fontColor1 = "<font color=red>"; fontColor2 = "</font>";}
  elseif(windForce == 9){wind = "Sturm"; prio = 1; fontColor1 = "<font color=orange>"; fontColor2 = "</font>";}
  elseif(windForce >= 7){wind = "Starkwind"; prio = 1; fontColor1 = "<font color=orange>"; fontColor2 = "</font>";}
  else{wind = "Wind"; prio = 0; fontColor1 = ""; fontColor2 = "";}

  ! ----- Umwandlung der Windrichtung in Himmelsrichtung -----
  if((windDir < 22.5) || (windDir >= 337.5)){windDir = "Nord";}
  elseif(windDir < 67.5){windDir = "Nordost";}
  elseif(windDir < 112.5){windDir = "Ost";}
  elseif(windDir < 157.5){windDir = "Südost";}
  elseif(windDir < 202.5){windDir = "Süd";}
  elseif(windDir < 247.5){windDir = "Südwest";}
  elseif(windDir < 292.5){windDir = "West";}
  elseif(windDir < 337.5){windDir = "Nordwest";}

  ! ----- Berechnung des Bargraphs -----
  while((barIndex < windForce) && (barIndex <= (range - range/bars))){
    bargraph = bargraph#"|";
    barIndex = barIndex + range/bars;
  }

  ! +++++ Setzen der Priorität für die Push-Nachricht +++++
  (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushPrio)).State(prio);

  ! +++++ Erzeugen der Nachricht +++++
  message = fontColor1#"Achtung, "#wind#" aus "#windDir#"!"#fontColor2#"\n"#bargraph#" Windstärke "#windForce#" ("#windSpeed.ToString(2)#" km/h)";
 
  ! +++++ Programm "CCU PRG Push-Nachrichten" ausführen ++++
  (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText)).State(message);
  (dom.GetObject(ID_PROGRAMS).Get(zPNP)).ProgramExecute();
}

In der Zeile

Code: Alles auswählen

string channel = "DG Dach Wettersensor Daten";
einfach den Namen von Kanal 1 eures Wettersensors eintragen. Ich selbst nutze das Skript in Verbindung mit einem HmIP-SWO-PR.

Zudem legt das Skript automatisch mit dem ersten Aufruf eine Systemvariable für die Windhöchstgeschwindigkeit an. Deren Namen könnt ihr einfach in die Codezeile

Code: Alles auswählen

string svWindSpeedPeak = "Haus SV Sturm Höchstwert"; ! Höchstgeschwindigkeit des Windes, obligatorisch
eingeben. Falls ihr hier mit svWindSpeedPeak = "" keinen Namen vergebt, wird die Systemvariable mit dem Namen "Haus SV Sturm Höchstwert" angelegt.

Und hier das zugehörige WebUI-Programm:
Haus SV Sturm.png
Achtung: Vor dem ersten Aufruf des Programms existiert die Systemvariable "Haus SV Sturm Höchstwert" noch nicht. Daher lasst ihr die rot umrandete Zeile im Dann-Zweig erst mal weg. Nachdem das Programm das erste Mal ausgeführt wurde (dazu am besten die Auslöseschwelle größer 0 km/h setzen), müsst ihr diese Zeile dann einfach hinzufügen, damit der Höchstwert regelmäßig auf null gesetzt wird.

Für den Regelbetrieb empfiehlt sich, die Auslöseschwelle auf 50 km/h entsprechend Windstärke 6 zu setzen. Ihr könnt aber natürlich auch jeden beliebigen anderen Wert einsetzen.

So sehen die Push-Nachrichten aus, die das Programm dank Strumtief Sabine unter Pushover erzeugt.
Pushover_Sturm.png
Es erfolgt eine Meldung mit der Art des Windes in Abhängigkeit von der Windstärke und mit der Windrichtung. Die Windgeschwindigkeit wird in die entsprechende Windstärke umgerechnet und zusäztlich als Bargraph angezeigt. Der Bargraph zeigt pro Windstärke ein Segment an, kann aber durch Änderung der Werte "range" und "bars" entsprechend angepasst werden, was aber im vorliegenden Fall nicht sehr viel Sinn machen dürfte.

Zur Vermeidung von zu häufigen Meldungen, habe ich das Skript so programmiert, dass eine Push-Nachricht nur dann abgesendet wird, wenn sich die Windgeschwindigkeit gegenüber dem bisherigen Tageshöchstwert weiter erhöht hat. Jeweils um 0:00 Uhr wird der Tageshöchstwert dann wieder auf null gesetzt. Wenn ihr diesen Reset häufiger haben möchtet (z.B. jede halbe Stunde), dann müsst ihr einfach nur das Zeitmodul entsprechend anpassen.

Viel Spaß beim Anwenden.

Gruß,

Thorsten
Zuletzt geändert von dtp am 27.07.2021, 07:53, insgesamt 33-mal geändert.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Benutzeravatar
DiJe
Beiträge: 566
Registriert: 04.03.2015, 05:51
Hat sich bedankt: 2 Mal
Danksagung erhalten: 5 Mal

Re: Howto - kleines Skript zur Sturmmeldung

Beitrag von DiJe » 23.09.2018, 09:00

Hallo Thorsten,
bin zufällig auf dein Script gestossen.
Ich nutze ja schon dein Stromscript.
Auch dieses hier läuft, wie gewohnt bei dir , super.
Danke für dein teilen mit uns.
Gruß Dieter
Gruß Dieter
----------------------------------------------------------------------------------------
RaspiMatic auf Raspi4 - 4Gb -nach Kernel Upgrade Temp.~50° - m.Addons: ioBroker, RedMatic, CCU-Historian, CUxD, Email, XMl Api
Geräte 120, davon DIY Geräte 35 -Variablen 213 - Programme 160 / Visualisierung mit Mediola auf 24" Acer DA241HL / läuft alles stabil

duralis
Beiträge: 29
Registriert: 31.12.2015, 15:29
Danksagung erhalten: 4 Mal

Re: Howto - kleines Skript zur Sturmmeldung

Beitrag von duralis » 23.09.2018, 20:38

Ich hatte bisher auch nur ein Programm ohne Script, habe aber nun mal dein Script eingebaut.

dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: Howto - kleines Skript zur Sturmmeldung

Beitrag von dtp » 26.09.2018, 16:50

Ich habe da noch was überarbeitet, da wir am letzten Samstag mit Sturmmeldungen überschüttet wurden.

Das Skript fängt zwar ab, dass man jedes Mal bei Überschreiten der Schwelle eine Meldung erhält, indem es den aktuellen mit dem vorherigen Wert vergleicht, aber das hilft nur bedingt. Der Kombisensor schickt ja ca. alle drei Minuten einen Messwert raus. Somit kann es im Worst Case passieren, dass man alle sechs Minuten eine Push-Nachricht mit einer Sturmwarnung erhält, wenn es stark böig ist.

Die Änderung sieht nun eine Art Peak-Hold-Funktion vor. Dazu wird bei Überschreiten des Schwellwerts eine Systemvariable mit dem bisherigen Tageshöchstwert beschrieben und nur noch dann eine Push-Nachricht gesendet, wenn der aktuelle Messwert über diesem Tageshöchstwert liegt. Um 00:00 Uhr wird die Systemvariable dann wieder genullt.

Skript und Programm folgen.

Bis dann,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Micha121
Beiträge: 203
Registriert: 21.12.2016, 23:53
Wohnort: Rheinland-Pfalz

Re: Howto - kleines Skript zur Sturmmeldung

Beitrag von Micha121 » 11.03.2019, 03:58

Hi dtp,

ich wollte Dich mal fragen, ob Du bei dem Projekt weitergearbeitet hast? Weil Du geschrieben hast:
dtp hat geschrieben:
26.09.2018, 16:50
Skript und Programm folgen.

Bis dann,

Thorsten
Nachtrag: Funktioniert dies auch mit dem HM-IP-SWO-PL, also der Wetterstation von HM IP? Falls nicht - könntest Du das zugehörige Skript ggf. auch zur Verfügung stellen?


Viele Grüße

dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: Howto - kleines Skript zur Sturmmeldung

Beitrag von dtp » 11.03.2019, 07:21

Das ist schon im Ausgangsposting mit Version 2.5 des Skripts enthalten gewesen. Hatte das zwischenzeitlich aktualisiert. Gab jetzt noch ein paar kleinere kosmetische Änderungen in der Version 2.5.2.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Benutzeravatar
Andronid
Beiträge: 265
Registriert: 06.03.2012, 17:52
Wohnort: Beelitz

Re: Howto - kleines Skript zur Sturmmeldung

Beitrag von Andronid » 11.03.2019, 14:03

Hallo Thorsten,
bei mir kommt im Test des Programms (Fehlerprüfung) folgende Meldung:
" Error 1 at row 68 col 59 near ^)).ProgramExecute();
}
Error 1 at row 68 col 59 near ^)).ProgramExecute();
}
Parse following code failed: "
Allerdings nutze ich die Wetterdaten von Netatmo, habe aber ansonsten alles so angegeben, wie in deinem Howto. Vielleicht kannst du helfen?

Gruß Reinhard
Beste Grüße
Andronid


--------------------------------------------------------------------------------------------------------
RaspiMatic, Fw: 3.51.6, 132 Kanäle in 66 Geräten und 48 CUxD-Kanäle in 3 CUxD-Geräten:

---------------------------------------------------------------------------------------------------------

dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: Howto - kleines Skript zur Sturmmeldung

Beitrag von dtp » 11.03.2019, 14:21

Hallo Reinhard,

da war ein Umbruch nicht in Ordnung. Hab's gefixt. Nun sollte es gehen.

Gruß,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Benutzeravatar
Andronid
Beiträge: 265
Registriert: 06.03.2012, 17:52
Wohnort: Beelitz

Re: Howto - kleines Skript zur Sturmmeldung

Beitrag von Andronid » 12.03.2019, 14:02

Hallo Thorsten,
vielen Dank. Hat funktioniert. Nun wird kein Fehler angezeigt. Jetzt will ich hoffen, dass ich auch die richtigen Variablen aus der Netatmo abgreife. Gerade ist es mal wieder etwas windstill.

Gruß Reinhard
Beste Grüße
Andronid


--------------------------------------------------------------------------------------------------------
RaspiMatic, Fw: 3.51.6, 132 Kanäle in 66 Geräten und 48 CUxD-Kanäle in 3 CUxD-Geräten:

---------------------------------------------------------------------------------------------------------

dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: Howto - kleines Skript zur Sturmmeldung

Beitrag von dtp » 12.03.2019, 14:16

Nun ja, wenn's um die Einbindung der Netatmo geht, kann ich dich nur hier drauf verweisen.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Antworten

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