Howto - zPNP Sturmwarnungen V2.8

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

Moderator: Co-Administratoren

dtp
Beiträge: 10658
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 » 10.02.2020, 16:43

Hi Tino,

ich habe eine neue Version 2.8 hochgeladen, die das auffangen soll. Zudem legt sie die benötigte Systemvariable selbst an. Wenn du die Version 2.8 nutzen möchtest, solltest du daher deine bisherige Systemvariable löschen und dann der Anleitung im Startposting folgen. Du kannst es bei dir aber auch so lassen, wie es jetzt ist. 8)

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.

Tibin
Beiträge: 507
Registriert: 26.10.2016, 16:08
System: CCU
Hat sich bedankt: 19 Mal
Danksagung erhalten: 15 Mal

Re: Howto - kleines Skript zur Sturmmeldung

Beitrag von Tibin » 10.02.2020, 20:28

Supi. Mach ich mal bei Gelegenheit.
Glaube da muss noch die SV anders......

Code: Alles auswählen

if(!svWindSpeedPeak){svWindSpeedPeak = "Haus SV Sturm Tag";}
Schönen Abend noch.. :wink:

dtp
Beiträge: 10658
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.02.2020, 07:35

Sehr gut aufgepasst. ;)

Hab's geändert.

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.

cityofsilence
Beiträge: 269
Registriert: 14.11.2018, 20:43
System: CCU
Wohnort: Bayern
Hat sich bedankt: 14 Mal
Danksagung erhalten: 17 Mal

Re: Howto - kleines Skript zur Sturmmeldung

Beitrag von cityofsilence » 25.10.2020, 16:53

Hallo Thorsten,

besteht die Möglichkeit dieses Script auch nur über SV zu bedienen ?
Ich lese die Daten auf IObroker von Proplanta aus und habe alle Wichtigen Daten somit als SV zur Verfügung.
Habe versucht es über die Einbindung der SV zu machen leider ohne Erfolg.
Hättest du evtl. einen Tipp ??

Merci
Gruß André

cityofsilence
Beiträge: 269
Registriert: 14.11.2018, 20:43
System: CCU
Wohnort: Bayern
Hat sich bedankt: 14 Mal
Danksagung erhalten: 17 Mal

Re: Howto - kleines Skript zur Sturmmeldung

Beitrag von cityofsilence » 12.11.2020, 07:02

Hallo Thorsten,
vielleicht ist meine vorangegangenen Frage bei dir untergegangen ?
Gruß André

dtp
Beiträge: 10658
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.11.2020, 10:11

Hallo André,

sorry, war die letzte Zeit ziemlich mit meinem neuen iPhone 12 Pro beschäftigt. 8)

Zu deiner Frage. Wie sieht denn der Inhalt deiner Systemvariablen aus? Wenn die irgendwie die Windgeschwindigkeit in km/h und die Windrichtung in Grad enthalten, dann ist die Umstellung kein großes Ding. Oder sind diese Daten in einer Systemvariablen zusammengefasst? Keine Sorge, auch dann könnte man sie auslesen.

Zeig mir doch bitte mal die Systemvariable(n) und deren Inhalt(e).

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.

cityofsilence
Beiträge: 269
Registriert: 14.11.2018, 20:43
System: CCU
Wohnort: Bayern
Hat sich bedankt: 14 Mal
Danksagung erhalten: 17 Mal

Re: Howto - kleines Skript zur Sturmmeldung

Beitrag von cityofsilence » 12.11.2020, 10:38

Windgeschwindigkeit ist in km/h
Windrichtung ist einmal in z.B. NNO und einmal in Klartext NordOst beides verfügbar
Gruß André

dtp
Beiträge: 10658
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.11.2020, 11:37

Versuch's mal damit:

Code: Alles auswählen

! Meldung Sturm
! Version 2.8.1a, Autor: dtp
 
! Namen der verwendeten Systemvariablen
string svWindSpeed = "Windgeschwindigkeit";
string svWindDir = "Windrichtung";
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_SYSTEM_VARIABLES).Get(svWindSpeed)).Value();
windDir = (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svWindDir)).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 = "";}

  ! ----- 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();
}
Ist aber ungetestet (auch, was Syntaxfehler angeht), da ich gerade im Büro sitze.
Zuletzt geändert von dtp am 18.11.2020, 14:55, insgesamt 2-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.

cityofsilence
Beiträge: 269
Registriert: 14.11.2018, 20:43
System: CCU
Wohnort: Bayern
Hat sich bedankt: 14 Mal
Danksagung erhalten: 17 Mal

Re: Howto - kleines Skript zur Sturmmeldung

Beitrag von cityofsilence » 16.11.2020, 08:32

Hallo Thorsten,

leider bekomme ich beim testen keine Werte angezeigt. Irgendwo in diesem Teil scheint noch ein Fehler zu sein

Code: Alles auswählen

! +++++ 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("Haus SV Sturm Höchstwert"); 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();}
wenn ich folgenden Teil auskommentiere bekomme ich teilweise Werte.

Code: Alles auswählen

! +++++ Systemvariable für die Höchstgeschwindigkeit des Windes auslesen und ggf. anlegen +++++
if(!svObject){   
  svObjectList = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectList.Add(svObject.ID());
  svObject.Name(svWindSpeedPeak); svObject.DPInfo("Haus SV Sturm Höchstwert"); 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();}
Die SV "Haus SV Sturm Höchstwert" ist von mir angelegt als Typ Zahl. Also vorhanden. Wenn ich das auskommentierte teste bekomme ich folgende Werte.

Code: Alles auswählen

"fontColor2": "",
  "windDir": "WSW",
  "windForceTable": "1	6	12	20	29	39	50	62	75	89	103	118",
  "sessionId": "",
  "prio": "0",
  "windSpeed": "0.000000",
  "STDOUT": "",
  "barIndex": "0.000000",
  "svWindSpeedPeak": "Haus SV Sturm Höchstwert",
  "bargraph": "",
  "windSpeedDayMax": "",
  "svObject": "null",
  "zPNP": "CCU PRG Push-Nachrichten",
  "bars": "12.000000",
  "windForce": "0",
  "windIndex": "",
  "wind": "",
  "svWindDir": "SV_WETTER_Windrichtung_txt",
  "svPushPrio": "CCU SV Push Prio",
  "svWindSpeed": "SV_WETTER_Windgeschwindigkeit",
  "message": "",
  "range": "12.000000",
  "httpUserAgent": "",
  "svPushText": "CCU SV Push Text",
  "svPushoverSound": "CCU SV Pushover Sound",
  "fontColor1": ""
lasse ich es wie du es gepostet hast bekomme ich folgenden Fehler im CUxD log

Code: Alles auswählen

Nov 16 08:25:57 ccu3-webui local0.err ReGaHss: ERROR: SyntaxError: Error 1 at row 33 col 13 near ^){      svObjectList = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.Create^M  [SyntaxError():iseESP.cpp:1137]
Nov 16 08:25:57 ccu3-webui local0.err ReGaHss: ERROR: SyntaxError: ){      svObjectList = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectList.Add(svObject.ID());   svObject.Name(svWindSpeedPeak); svObject.DPInfo("Haus SV Sturm Höchstwert"); 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{windSpeedDay
ax = 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_SYSTEM_VARIABLES).Get(svWindSpeed)).Value(); windDir = (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svWindDir)).Value();  ! +++++ Nachricht senden, wenn Windgeschwindigkeit zugenommen hat +++++ if(windSpeed > windSpeedDayMa
){   ! ----- Setze
Vielleich hast du nochmals Zeit dir das anzusehen :mrgreen:

Merci
Gruß André

dtp
Beiträge: 10658
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 » 18.11.2020, 14:54

Uff. Fehler meinerseits. Da fehlte die Variablendeklaration für svObject und svObjectList. Hab's oben geändert.

Der Fehler bestand auch im Original-Skript des Ausgangspostings. Hab's auch dort geändert.

Danke dir für's Finden. ;)
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!“