Howto - zentrales Push-Nachrichten-Programm zPNP

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

Moderator: Co-Administratoren

mrg13
Beiträge: 16
Registriert: 22.10.2017, 15:07
Danksagung erhalten: 1 Mal

Re: Howto - zentrales Push-Nachrichten-Programm (zPNP) V3.0

Beitrag von mrg13 » 17.06.2018, 22:09

Hallo dtp,

super, danke!
Jetzt funktioniert es!

Gruß
mrg

EckartS
Beiträge: 243
Registriert: 13.11.2012, 23:11
Wohnort: Nürnberg
Danksagung erhalten: 2 Mal

Re: Howto - zentrales Push-Nachrichten-Programm (zPNP) V3.0

Beitrag von EckartS » 07.07.2018, 01:33

Hallo dtp,

statt einem eigenen und viel weniger elaboriertem Programm habe ich jetzt zPNP ausprobiert und will es einsetzen. Ein wirklich gelungenes Programm mit vielen Optionen.

Eine Frage allerdings, ggf. auch ein Vorschlag. Ich hatte bei mir eine boolesche SV "Msg.JetztSenden" definiert, und ein Push-Sendeprogramm, das gestartet wird, wenn sich der Inhalt dieser SV ändert.

Dadurch ist es nicht nötig, den string zPNP = "CCU PRG Push-Nachrichten" zu definieren und in jedem Programm, das den zentralen Versanddienst aufruft, den exakten Programmnamen von zPNP zu kennen.
"(dom.GetObject(ID_PROGRAMS).Get(zPNP)).ProgramExecute();" entfällt dann ganz. Mir erscheint das weniger fehlerträchtig und leichter wartbar.

Das Programm sieht so aus (die Scriptzeile zum Mail-Versand kann man hier ignorieren):
180706 js.jpg
In Programmen, die eine Nachricht senden, stehen nur folgende Zeilen:

Code: Alles auswählen

dom.GetObject("Msg.Nachricht").State(Nachricht);
dom.GetObject("Msg.JetztSenden").State(1);
Wäre das nicht einfacher?

Grüße, EckartS
711 Kanäle in 113 Geräten und 134 CUxD-Kanäle in 24 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 - zentrales Push-Nachrichten-Programm (zPNP) V3.0

Beitrag von dtp » 10.07.2018, 15:44

Hallo Eckart,

eine Möglichkeit wäre das natürlich schon, aber ich sehe da jetzt keinen so großen Vorteil, zumal sich das "Problem" doch sehr einfach mit Copy&Paste lösen lässt. Außerdem wollte ich die Anzahl der Systemvariablen möglichst gering halten, auch wenn das nicht wirklich notwendig ist. 8)

Es steht dir natürlich frei, die Skripte nach deinen Wünschen anzupassen. Aber ich werde das jetzt eher nicht ändern, zumal ich dann bei mir an gut 50 Stellen schrauben müsste. :roll: Manch anderem User wird es vermutlich nicht anders gehen, ohne dass er einen signifikanten Benefit davon hätte.
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.

Sebastian65432
Beiträge: 116
Registriert: 14.05.2018, 19:50
Danksagung erhalten: 8 Mal

Re: Howto - zentrales Push-Nachrichten-Programm (zPNP) V3.0

Beitrag von Sebastian65432 » 09.09.2018, 22:30

Nabend,

bevor ich geschrieben habe, bin ich eine ganze Weile auf den 77 Seiten hier versackt, aber nichts passendes gefunden.

Kurz gesagt: Ich bekomme keine Push Nachrichten.

Was habe ich gemacht:
1. Den Schritt zur Erstellung der CUxD.CUX2801001:1.CMD_EXEC bin ich übersprungen. Habe ich schon mal für ein anderes Skript eingerichtet, als ich auch die System.Exec aus CUxD benötigte. Liegt da mein Fehler? Wie kann ich das sonst händeln, da es das Gerät HM-RC-12 CUX2801001:1 ja schon gibt?
2. Erst für den Dienst Pushsafer, als das nicht lief, für Pushover auf dem Handy die App installiert und einen Account erstellt.
3. Programm erstellt und Programm Name "CCU PRG Push-Nachrichten" kopiert.
4. Im Programm das Skript aus der Datei zPNS-Po30.txt hineinkopiert.
5. In Zeile 9 den User Key eingetragen. Die Zeile heißt jetzt: string keyList = "01|uta27476ozav62...cqa6byk";
6. Gespeichert und zwei Mal das Programm gestartet. Die fehlenden Variablen wurden erstellt.
7. Das erste Test Skript laufen lassen: viewtopic.php?f=31&t=26282#p229445. Aber nichts passiert. Keine Nachricht kommt an.
8. Im Account geschaut, aber auch dort keine Nachricht registriert.

Kann mir jemand helfen, wo ich weiter schauen kann?
RaspberryMatic auf Version 2.35.16.20180715

Grüße, Sebastian

Sebastian65432
Beiträge: 116
Registriert: 14.05.2018, 19:50
Danksagung erhalten: 8 Mal

Re: Howto - zentrales Push-Nachrichten-Programm (zPNP) V3.0

Beitrag von Sebastian65432 » 10.09.2018, 07:30

Guten Morgen,

hat sich erledigt. Heute Morgen ging es dann auf einmal...
Grüße, Sebastian

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 - zentrales Push-Nachrichten-Programm (zPNP) V3.0

Beitrag von dtp » 10.09.2018, 12:34

Freut mich, wobei ich allerdings gestern keinerlei Probleme mit Pushover hatte.

Noch was zu deiner Frage unter Punkt 1. Ich habe auch nur ein einziges Exec-Gerät über CUxD angelegt. Die CCU kann ja Befehle eh nur sequentiell abarbeiten. Daher genügt in der Regel auch ein einziges Exec-Gerät. Man kann aber ansonsten mit CUxD auch einfach noch mal eines erstellen. Dann hat man zwei oder mehr. Aber wie gesagt, das ist aus meiner Sicht nicht nötig.

Zum Testen würde ich übrigens die Prio auf 2 setzen. Die Push-Nachrichten müssen dann immer ankommen. Danach dann die Prio schrittweise bis auf -2 reduzieren. Evtl. ist der Parameter in "prioMinList" ungünstig gesetzt.

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.

Belei
Beiträge: 59
Registriert: 20.07.2016, 21:57

Re: Howto - zentrales Programm für Push-Nachrichten

Beitrag von Belei » 20.09.2018, 19:23

Moin,
ich versuche gerade mir meine offene Fenster/Türen schicken zu lassen wenn die Alarmanschlage auf blockiert gesetzt wird.
Das passiert wenn mindestens noch ein Fenster geöffnet ist.

Momentan bekomme ich einfach eine Nachricht das mindestens noch ein Fenster geöffnet ist. Das würd ich gern ersetzen.


Habe also folgenden Script einfach ersetzt mit dem unternen(zitierten), leider passiert gar nix? Muss ich noch was konfigurieren?

Code: Alles auswählen

    ! Erzeugen der Nachricht
        string message = "Alarmanlage NICHT aktiviert da noch mindestens 1 Fenster offen.";

    ! Auswahl des Push-Dienstes (nur, wenn "CCU SV Push-Dienst" vorhanden)
     dom.GetObject("CCU SV Push Dienst").State("1");

    ! Setzen der Priorität für die Push-Nachricht (nur, wenn "CCU SV Push Prio" vorhanden)
     dom.GetObject("CCU SV Push Prio").State("1");

    ! Sound für Pushover-Nachricht (nur, wenn "CCU SV Push Pushover-Sound" vorhanden)
     dom.GetObject("CCU SV Pushover Sound").State("falling");

    dom.GetObject("CCU SV Push Text").State(message);

    ! Programm "CCU PRG Push-Nachrichten" ausführen
    dom.GetObject("CCU PRG Push-Nachrichten").ProgramExecute();
    WriteLine("Nachricht gesendet");

dtp hat geschrieben:
26.01.2016, 20:49
Hier zwei Programme, die ich zum Erkennen der Fenster- und Türenzustände verwende.

Das erste Programm dient zum Erkennen von offenen oder gekippten Fenstern beim Abschließen der Haustür.


Und das zugehörige Skript:

Code: Alles auswählen

! Meldung Fenster/Türen schließen
! Version 2.2, Autor: dtp

! Listen geöffneter und gekippter Fenster und Türen, die nicht berücksichtigt werden sollen
string exListTilt = "UG Keller Fenster"; ! gekippte Fenster und Türen (trennen mit "\t")
string exListOpen = ""; ! geöffnete Fenster und Türen (trennen mit "\t")

! 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 svPushoverSound = "CCU SV Pushover Sound"; ! gem. zPNS-Po, optional

! Name des zentralen Push-Nachrichten-Programms
string zPNP = "CCU PRG Push-Nachrichten"; ! obligatorisch

! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################

! +++++ Deklaration weiterer Variablen +++++
var device;
string index; string list = ""; string stateList = ""; string message;
integer valueIndex;

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

! +++++ Auslesen der Fenster- und Türenzustände und Erzeugen einer Liste +++++
foreach(index, dom.GetObject("Verschluss").EnumUsedIDs()){
  if(dom.GetObject(index).IsTypeOf(OT_CHANNEL)){
    device = dom.GetObject(dom.GetObject(index).Device());
    if(((exListTilt.Find(device.Name())).ToInteger() == -1)){
      if((device.HssType() == "HM-Sec-RHS") || (device.HssType() == "HmIP-SRH")){
        if(dom.GetObject(index).DPByHssDP("STATE").Value() == 1){
          list = list#"\n"#device.Name()#"<font color=orange> gekippt</font>.";
          stateList = stateList#dom.GetObject(index).DPByHssDP("STATE").Value();
        }
      }
    }
    if(((exListOpen.Find(device.Name())).ToInteger() == -1)){
      if((device.HssType() == "HM-Sec-RHS") || (device.HssType() == "HmIP-SRH")){
        if(dom.GetObject(index).DPByHssDP("STATE").Value() == 2){
          list = list#"\n"#device.Name()#"<font color=red> offen</font>.";
          stateList = stateList#dom.GetObject(index).DPByHssDP("STATE").Value();
        }
      }
      if((device.HssType() == "HM-Sec-SC") || (device.HssType() == "HM-Sec-SC-2") || (device.HssType() == "HM-Sec-SCo") || (device.HssType() == "HMIP-SWDO")){
        if(dom.GetObject(index).DPByHssDP("STATE").Value() == 1){
          list = list#"\n"#device.Name()#"<font color=red> offen</font>.";
          stateList = stateList#"2";
        }
      }
    }
  }
}

! +++++ Setzen der Priorität in Abhängigkeit vom Zustand der Fenster und Türen +++++
valueIndex = stateList.Find("2");
if(valueIndex <> -1){(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushPrio)).State("1");}
else{(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushPrio)).State("0");}

! +++++ Erzeugen der Nachricht +++++
message = "<font color=orange>Achtung, Fenster/Türen schließen!</font>";

if(list != ""){
  message = message#list;
  
  ! +++++ zPNP ausführen +++++
  (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText)).State(message);
  (dom.GetObject(ID_PROGRAMS).Get(zPNP)).ProgramExecute();
}
Mit den Skriptvarialben "exListTilt" und "exListOpen" kann man die Erkennung bestimmter gekippter und geöffneter Fenster oder Türen ausschließen. Das ist z.B. sinnvoll, wenn man über ein geöffnetes Garagentor oder ein gekipptes Kellerfenster nicht informiert werden möchte.

.........................................

Bis dann,

Thorsten

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 - zentrales Push-Nachrichten-Programm (zPNP) V3.0

Beitrag von dtp » 21.09.2018, 08:38

Versuch es mal bitte mit folgendem Skript:

Code: Alles auswählen

! Meldung Fenster/Türen schließen
! Version 2.4, Autor: dtp

! Gewerkname für die Türen- und Fenster-Sensoren
string trade = "Verschluss";

! Listen geöffneter und gekippter Fenster und Türen, die nicht berücksichtigt werden sollen
string exListTilt = "UG Keller Fenster"; ! gekippte Fenster und Türen (trennen mit "\t")
string exListOpen = ""; ! geöffnete Fenster und Türen (trennen mit "\t")

! 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 svPushoverSound = "CCU SV Pushover Sound"; ! gem. zPNS-Po, optional

! Name des zentralen Push-Nachrichten-Programms
string zPNP = "CCU PRG Push-Nachrichten"; ! obligatorisch

! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################

! +++++ Deklaration weiterer Variablen +++++
var device;
string index; string list = ""; string stateList = ""; string message;
integer valueIndex;

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

! +++++ Auslesen der Fenster- und Türenzustände und Erzeugen einer Liste +++++
foreach(index, dom.GetObject(ID_FUNCTIONS).Get(trade).EnumUsedIDs()){
  if(dom.GetObject(index).IsTypeOf(OT_CHANNEL)){
    device = dom.GetObject(dom.GetObject(index).Device());
    if(((exListTilt.Find(device.Name())).ToInteger() == -1)){
      if((device.HssType() == "HM-Sec-RHS") || (device.HssType() == "HmIP-SRH")){
        if(dom.GetObject(index).DPByHssDP("STATE").Value() == 1){
          list = list#"\n- "#device.Name()#"<font color=orange> gekippt</font>.";
          stateList = stateList#dom.GetObject(index).DPByHssDP("STATE").Value();
        }
      }
    }
    if(((exListOpen.Find(device.Name())).ToInteger() == -1)){
      if((device.HssType() == "HM-Sec-RHS") || (device.HssType() == "HmIP-SRH")){
        if(dom.GetObject(index).DPByHssDP("STATE").Value() == 2){
          list = list#"\n- "#device.Name()#"<font color=red> offen</font>.";
          stateList = stateList#dom.GetObject(index).DPByHssDP("STATE").Value();
        }
      }
      if((device.HssType() == "HM-Sec-SC") || (device.HssType() == "HM-Sec-SC-2") || (device.HssType() == "HM-Sec-SCo") || (device.HssType() == "HMIP-SWDO")){
        if(dom.GetObject(index).DPByHssDP("STATE").Value() == 1){
          list = list#"\n- "#device.Name()#"<font color=red> offen</font>.";
          stateList = stateList#"2";
        }
      }
    }
  }
}

! +++++ Setzen der Priorität in Abhängigkeit vom Zustand der Fenster und Türen +++++
valueIndex = stateList.Find("2");
if(valueIndex <> -1){(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushPrio)).State("1");}
else{(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushPrio)).State("0");}

! +++++ Erzeugen der Nachricht +++++
message = "<font color=orange>Achtung, Fenster/Türen schließen!</font>";

if(list != ""){
  message = message#list;
  
  ! +++++ zPNP ausführen +++++
  (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText)).State(message);
  (dom.GetObject(ID_PROGRAMS).Get(zPNP)).ProgramExecute();
}
Unter "Gewerkname" musst du natürlich das von dir verwendete Gewerk eintragen. Und wenn du keine Sensoren ausnehmen willst, dann ersetze bitte auch die Zeile

Code: Alles auswählen

string exListTilt = "UG Keller Fenster"; ! gekippte Fenster und Türen (trennen mit "\t")
durch

Code: Alles auswählen

string exListTilt = ""; ! gekippte Fenster und Türen (trennen mit "\t")
Gruß,

Thorsten
Zuletzt geändert von dtp am 21.09.2018, 17:45, insgesamt 1-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.

Belei
Beiträge: 59
Registriert: 20.07.2016, 21:57

Re: Howto - zentrales Push-Nachrichten-Programm (zPNP) V3.0

Beitrag von Belei » 21.09.2018, 09:57

Guten Morgenn dtp,

zPNP hab ich auf 3.0 upgedatet und den neuen Fenster Scripts 2.3 hab ich eingefügt und auszuschliessende Gewerke gelöscht. Das Gewerk heist bei mir ebenfalls "Verschluss"

Leider immer noch keine Reaktion, die Push Variabeln werden auch nicht gefüllt.

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 - zentrales Push-Nachrichten-Programm (zPNP) V3.0

Beitrag von dtp » 21.09.2018, 14:11

Dann poste doch mal bitte einen Screenshot des Programms, mit dem du das Skript triggerst.
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!“