Howto - zentrales Push-Nachrichten-Programm zPNP

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

Moderator: Co-Administratoren

al-79
Beiträge: 80
Registriert: 15.11.2016, 15:47
Wohnort: nähe Hannover
Hat sich bedankt: 1 Mal

Howto - zentrales Push-Nachrichten-Programm (zPNP) V1.5

Beitrag von al-79 » 25.01.2017, 22:52

Ohhh per pushsafer habe ich nun doch eine Nachricht erhalten....

Update.....
Scheinbar funktioniert das zPNP momentan komplett - allerdings nur mit Pushsafer, via Pushover oder Telegram kommt nix an.
Habe deswegen nun nochmal alle Key's geprüft.

@Thorsten:
Muss ich beim zPNP via Pushover die Variable mindest Prio auch setzen?
Muss das 01| auch stehen bleiben, wenn nur ein User angegeben wird?

Ich habe beides getestet mit prio -2 und /oder 01| entfernen und stehen lassen.

Gesendet von iPhone mit Tapatalk
Grüße

al-79

--------------------------------------------
361 Kanäle in 84 Geräten und 32 CUxD-Kanäle in 2 CUxD-Geräten
--------------------------------------------

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

Beitrag von dtp » 26.01.2017, 10:59

Ich dachte, ich hätte es hier ausreichend beschrieben.

Wenn Du den Eintrag komplett leer lässt (also auch ohne "01|"), dann erhalten alle User sämtliche Nachrichten. Was Du aber nicht machen solltest, ist "01|" ohne weiteres Argument stehen zu lassen. Evtl. muss ich das noch in einer der nächsten Versionen abfangen.

Also, wenn Du nur einen User hast, der sämtliche Push-Nachrichten erhalten soll, dann setzt Du

Code: Alles auswählen

prio_min_list = "";
Hast Du einen User, der nur Push-Nachrichten ab 0 erhalten soll, dann setzt Du

Code: Alles auswählen

prio_min_list = "01|0";
Hast Du zwei User, von denen User 1 alle und User 2 nur Push-Nachrichten ab Prio -1 erhalten soll, dann setzt Du

Code: Alles auswählen

prio_min_list = "02|-1";
oder

Code: Alles auswählen

prio_min_list = "01|-2 02|-1";
Die Reihenfolge ist dabei egal. Es ginge also z.B. auch

Code: Alles auswählen

prio_min_list = "02|-1 01|-2";
Im Falle von drei Usern, von denen User 1 nur Push-Nachrichten ab Prio -1, User 2 alle und User 3 nur Push-Nachrichten ab Prio 1 erhalten soll, setzt Du

Code: Alles auswählen

prio_min_list = "01|-1 03|1";
oder - wenn Du es gerne unübersichtlich magst ;) -

Code: Alles auswählen

prio_min_list = "02|-2 03|1 02|-1";
Mit den API-Schlüsseln kannst Du ähnlich verfahren. Wichtig sind die vorangestellten Identifier. Die müssen immer eindeutig vergeben sein und mit denjenigen im Master (erster API-Schlüssel) übereinstimmen.

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.

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

Beitrag von dtp » 26.01.2017, 11:13

al-79 hat geschrieben: nun nochmal ausfegührt und als Status kommt dann:

Code: Alles auswählen

CCU SV Push Dienst	Auswahl des Push Dienstes	25.01.2017 22:44:02	          CCU SV Push Dienst: alle
CCU SV Push Prio	Priorität der Push Nachrichten	25.01.2017 22:44:02	  CCU SV Push Prio: 1.00
CCU SV Push Text	Aktuelle Push Nachricht	25.01.2017 22:44:02	          CCU SV Push Text: Dies ist eine gewöhnliche Test-Nachricht.
CCU SV Push Text Ref	alte Push Nachricht	25.01.2017 22:44:02	                  CCU SV Push Text Ref: Dies ist eine gewöhnliche Test-Nachricht
.

Nach wie vor gähnenden Ruhe auf dem Handy.....
Habe nun mittlerweile Telegram, Pushover und Pushsafer im zPNP aktiv
Das heißt schon mal, dass das jeweilige zPNS-xx durchlaufen wird. Anderfalls wäre "CCU SV Push Text Ref" nicht zeitgleich gesetzt worden.
al-79 hat geschrieben: im cuxd-Protokoll steht

Code: Alles auswählen

Jan 25 22:43:34 homematic-ccu2 local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 97 0x61 [1] 0 0x00 [2] 99 0x63 [3] 0 0x00 [4] 100 0x64  [../Platform/DOM/iseESPexec.cpp (11622)]
Die Fehlermeldung dürfte nichts mit dem Problem zu tun haben. Der 11622-Fehler tritt häufiger auf, ohne dass er einen gravierenden Einfluss hätte.
al-79 hat geschrieben: Scheinbar funktioniert das zPNP momentan komplett - allerdings nur mit Pushsafer, via Pushover oder Telegram kommt nix an.
Das spricht dann eher für einen Fehler in Deinem zPNS-Po bzw. zPNS-Tg. Ich habe alle getestet und bei mir laufen sie. Vielleicht ist es am besten, wenn Du mir die vollständigen Skripte mal per Email oder PN zukommen lässt. Du kannst auch gerne aus den API-Schlüsseln den vollständigen Code bis auf das erste und das letzte Zeichen entfernen.

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.

al-79
Beiträge: 80
Registriert: 15.11.2016, 15:47
Wohnort: nähe Hannover
Hat sich bedankt: 1 Mal

Re: Howto - zentrales Push-Nachrichten-Programm (zPNP) V1.5

Beitrag von al-79 » 26.01.2017, 14:50

Soooooo,

mit Hilfe von Thorsten (dtp) ist das Problem behoben.

Ich hatte den Fehler gemacht, dass ich bei den API-Keys (info, Warnung, Alarm) den Präfix " 01| " vergessen habe.
Ich habe praktisch nur die Keys eingetragen und getestet.

FALSCH:

Code: Alles auswählen

string key_list = "01|+++++++ user-Key ++++++++ "; ! API-Basisschlüssel
string HMinfo_list = "+++++++ info-Key +++++++"; ! API-Schlüssel (Bot-Token) für Info-Meldungen
string HMwarnung_list = "+++++++ warnung-Key ++++++++"; ! optionale API-Schlüssel (Bot-Token) für Warnmeldungen
string HMalarm_list = "+++++++ alarm-Key ++++++++"; ! optionale API-Schlüssel (Bot-Token) für Alarmmeldungen
RICHTIG:

Code: Alles auswählen

string key_list = "01|+++++++ user-Key ++++++++ "; ! API-Basisschlüssel
string HMinfo_list = "01|+++++++ info-Key +++++++"; ! API-Schlüssel (Bot-Token) für Info-Meldungen
string HMwarnung_list = "01|+++++++ warnung-Key ++++++++"; ! optionale API-Schlüssel (Bot-Token) für Warnmeldungen
string HMalarm_list = "01|+++++++ alarm-Key ++++++++"; ! optionale API-Schlüssel (Bot-Token) für Alarmmeldungen
Im nachhinein - ist es klar, das dies Script natürlich wissen muss welche Keys zu welchen User gehört.
Also nicht nur Copy&Paste sondern auch Kopf anstrengen 8)

Nun nochmal Danke Thorsten !
Grüße

al-79

--------------------------------------------
361 Kanäle in 84 Geräten und 32 CUxD-Kanäle in 2 CUxD-Geräten
--------------------------------------------

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

Beitrag von dtp » 26.01.2017, 16:07

Freut mich, dass es letztlich doch so einfach zu lösen war.

Danke für das kurze Feedback.

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.

quito96
Beiträge: 31
Registriert: 19.07.2013, 17:43

Re: Howto - zentrales Push-Nachrichten-Programm (zPNP) V1.5

Beitrag von quito96 » 28.01.2017, 14:45

dtp hat geschrieben:Hallo Guido,

poste mal bitte das gesamte Skript.

Oder ist es die unveränderte, aktuelle Version? Dann genügt mir das als Angabe.

Gruß,

Thorsten

Hallo Thorsten,

anbei das gesamte Script:

Code: Alles auswählen

! Mit HTML-Tags für farbige Texte unter Pushover
! Servicemeldungen auslesen und senden über zPNP
! Version 1.2.3 (erstellt von Alchy, angepasst an das zPNP von dtp)
! Zum Benutzen: Neues Programm in der CCU wie folgt erstellen:
! WENN Systemzustand: Servicemeldungen im Wertebereich größer als 0 bei Aktualisierung auslösen
! DANN mit einer Sekunde Verzögerung Skript (und dann dieses Script komplett einfügen und mit o.k. bestätigen)
!
! obligatorisches WebUI-Programm: "CCU PRG Push-Nachrichten"
! obligatorische Systemvariablen: "CCU SV Push Text", "CCU SV Push Prio"
! optionale Systemvariablen: "Haus SV Anwesenheit", "CCU SV Pushover Sound", "CCU SV Pushsafer Sound"
!
! Unterschiede zu Alchys originalem Allinclusive-Skript:
! nur Push-Dienste über das zPNP, zum Teil geänderte Variablen, Push-Nachricht bei autoack = 1,
! kein BLOCK, kein USE_SYSVAR, kein WITHTIME, kein GO

! Löschen bestätigbarer Kommunikationsstörungen (1 = an, 0 = aus)
integer autoack = 1;
 
! ##### ab hier sind keine weiteren Einstellungen mehr notwendig #####

! +++++ Deklaration weiterer Variablen +++++
string message; string list = ""; string channel; string device; string bat_device; string bat_type; string service_tmp;
string cr2016; string cr2032; string lr14x2; string lr44x2; string lr6x2; string lr6x3; string lr6x4; string lr3x1; string lr3x2; string lr3x3; string lr3x3a; string block9; string fixed;
var trigger; var trigger_value;
integer present = 1; integer prio = 0; integer priomax = -2;
 
! +++++ Auslesen der Systemvariablen "Haus SV Anwesenheit" +++++
if(dom.GetObject("Haus SV Anwesenheit")){present = dom.GetObject("Haus SV Anwesenheit").Variable();}
 
! +++++ Sound für Pushover- bzw. Pushsafer-Nachrichten
if(dom.GetObject("CCU SV Pushover Sound")){dom.GetObject("CCU SV Pushover Sound").State("siren");}
if(dom.GetObject("CCU SV Pushsafer Sound")){dom.GetObject("CCU SV Pushsafer Sound").State("25");}
 
! +++++ Batteriezuweisungen inklusive Anzahl +++++
! noch nicht integrierte Geräte werden mit unbekannt ausgegeben
cr2016 = "HM-RC-4\tHM-RC-4-B\tHM-RC-Sec3\tHM-RC-Sec3-B\tHM-RC-P1\tHM-RC-Key3\tHM-RC-Key3-B\tZEL_STG_RM_HS_4";
cr2032 = "HM-SCI-3-FM\tHM-PBI-4-FM\tHM-PB-2-WM\tHM-SwI-3-FM\tHM-PBI-4-FM\tHM-Sec-TiS";
lr14x2 = "HM-Sec-Sir-WM\tHM-OU-CFM-TW";
lr44x2 = "HM-Sec-SC\tHM-Sec-SC2\tHM-Sec-SC-2\tHM-Sec-RHS";
lr6x2 = "HM-CC-VD\tHM-CC-RT-DN\tHM-Sec-WDS\tHM-Sec-WDS-2\tHM-CC-TC\tHM-Dis-TD-T\tHB-UW-Sen-THPL-I\tHM-TC-IT-WM-W-EU\tHM-WDS40-TH-I\tHM-WDS40-TH-I-2\tHM-WDS10-TH-O\tHM-WDS30-OT2-SM-2\tHmIP-SMI\tHMIP-eTRV\tHmIP-SMO\tHmIP-STHD";
lr6x3 = "HM-Sec-MDIR\tHM-Sec-MDIR-2\tHM-Sec-SD\tHM-Sec-Key\tHM-Sec-Key-S\tHM-Sec-Key-O\tHM-Sen-Wa-Od\tHM-Sen-MDIR\tHM-Sen-MDIR-O\tHM-Sen-MDIR-O-2\tHM-WDS100-C6-O\tHM-WDS100-C6-O-2\tHmIP-ASIR";
lr6x4 = "HM-ES-TX-WM\tHM-CCU-1";
lr3x1 = "HM-Sec-SCo\tHM-RC-4-2\tHM-RC-Key4-2\tHM-RC-Sec4-2\tHM-Sec-RHS-2\tHmIP-KRCA\tHMIP-SWDO\tHmIP-KRC4\tHmIP-RC8\tHmIP-SRH";
lr3x2 = "HM-Dis-EP-WM55\tHM-PB-6-WM55\tHM-Sen-MDIR-WM55\tHM-PBI-2-FM\tHM-RC-8\tHM-Sen-DB-PCB\tHB-UW-Sen-THPL-O\tHM-Sen-EP\tHM-WDS30-T-O\tHM-WDS30-OT2-SM\tHM-TC-IT-WM-W-EU\tHM-Dis-WM55\tHM-PB-2-WM55\tHM-PB-2-WM55-2\tHM-Sen-MDIR-SM\tHMIP-WTH\tHMIP-WRC2\tHmIP-WRC6\tHmIP-WTH-2\tHmIP-STH";
lr3x3 = "HM-PB-4Dis-WM\tHM-Sen-LI-O\tHM-RC-Dis-H-x-EU";
lr3x3a = "HM-RC-19\tHM-RC-19-B\tHM-RC-12\tHM-RC-12-B\tHM-RC-12-W";
block9 = "HM-LC-Sw1-Ba-PCB\tHM-LC-Sw4-PCB\tHM-MOD-EM-8\tHM-MOD-Re-8\tHM-Sen-RD-O\tHM-OU-CM-PCB\tHM-LC-Sw4-WM";
fixed = "HmIP-SWSD";

if(dom.GetObject(ID_SERVICES)){
  if(dom.GetObject(41).Value() > dom.GetObject(41).LastValue()){
    foreach(service_tmp, dom.GetObject(ID_SERVICES).EnumIDs()){
      if(dom.GetObject(service_tmp).IsTypeOf(OT_ALARMDP) && (dom.GetObject(service_tmp).AlState() == asOncoming)){
        trigger = dom.GetObject(dom.GetObject(service_tmp).AlTriggerDP());
        trigger_value = trigger.Value();
        channel = dom.GetObject(trigger.Channel());
        device = dom.GetObject(channel.Device());
        message = trigger.AlDestMapDP().Name().StrValueByIndex(".", 2);
       
        ! Meldungen über bestätigbare Kommunikationsstörungen automatisch löschen +++++
        if((message == "STICKY_UNREACH") && (autoack == 1)){
          dom.GetObject(service_tmp).AlReceipt();
          message = "<font color='green'>Meldung über bestätigbare Kommunikationsstörung gelöscht.</font>"; prio = -2; if(prio >= priomax){priomax = prio;}
        }   
 
        ! Übersetzen der Fehlermeldungen               
        if(message == "CONFIG_PENDING"){message = "Konfigurationsdaten stehen zur Übertragung an."; prio = -1; if(prio >= priomax){priomax = prio;}}
        if(message == "LOWBAT"){message = "<font color='orange'>Spannung Batterien/Akkus gering. </font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
        if(message == "STICKY_UNREACH"){message = "Kommunikation war gestört."; prio = -2; if(prio >= priomax){priomax = prio;}}
        if(message == "UNREACH"){message = "<font color='orange'>Kommunikation gestört.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
        if(message == "DEVICE_IN_BOOTLOADER"){message = "Gerät startet neu."; prio = -2; if(prio >= priomax){priomax = prio;}}
        if(message == "UPDATE_PENDING"){message = "Update verfügbar."; prio = -2; if(prio >= priomax){priomax = prio;}}
        if(message == "U_SOURCE_FAIL"){message = "Netzteil ausgefallen."; prio = -1; if(prio >= priomax){priomax = prio;}}
        if(message == "USBH_POWERFAIL"){message = "USB-Host deaktiviert."; prio = -1; if(prio >= priomax){priomax = prio;}}
        if(message == "STICKY_SABOTAGE"){message = "<font color='orange'>Sabotage war ausgelöst.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
        if(message == "ERROR_REDUCED"){message = "Temperatur kritisch (Lastabsenkung)."; prio = -1; if(prio >= priomax){priomax = prio;}}
 
        ! Sonderfehler
        if((message == "ERROR_SABOTAGE") || (message == "SABOTAGE")){
          if(present == 0){message = "<font color='red'>SABOTAGE.</font>"; prio = 1; if(prio >= priomax){priomax = prio;}}
          if(present == 1){message = "<font color='orange'>Sabotage.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
        }

        if(message == "ERROR"){
          if((device.HssType()=="HM-Sec-RHS") || (device.HssType()=="HM-Sec-SC") || (device.HssType()=="HM-Sec-SC-2") || (device.HssType()=="HM-Sec-SCo") || (device.HssType()=="HM-Sec-MD") || (device.HssType()=="HM-Sec-MDIR") || (device.HssType()=="HM-Sec-MDIR-2") || (device.HssType()=="HM-Sec-Sir-WM")){
            if(trigger_value == 7){
              if(present == 0){message = "<font color='red'>SABOTAGE.</font>"; prio = 1; if(prio >= priomax){priomax = prio;}}
              if(present == 1){message = "<font color='orange'>Sabotage.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
            }
          }   
          if((device.HssType()=="HM-Sec-Key") || (device.HssType()=="HM-Sec-Key-S") || (device.HssType()=="HM-Sec-Key-O")){
            if(trigger_value == 1){message = "<font color='orange'>Einkuppeln fehlgeschlagen.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
            if(trigger_value == 2){message = "<font color='orange'>Motorlauf abgebrochen.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
          }
          if(device.HssType()=="HM-CC-VD"){
            if(trigger_value == 1){message = "<font color='orange'>Stellantrieb blockiert.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
            if(trigger_value == 2){message = "<font color='orange'>Ventil nicht montiert.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
            if(trigger_value == 3){message = "<font color='orange'>Stellbereich zu klein.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
            if(trigger_value == 4){message = "<font color='orange'>Spannung Batterien/Akkus gering. </font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
          }
        }
 
        if(message == "FAULT_REPORTING"){
          if(device.HssType()=="HM-CC-RT-DN"){
            if(trigger_value == 1){message = "<font color='orange'>Ventil blockiert.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
            if(trigger_value == 2){message = "<font color='orange'>Einstellbereich Ventil zu groß.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
            if(trigger_value == 3){message = "<font color='orange'>Einstellbereich Ventil zu klein.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
            if(trigger_value == 4){message = "<font color='orange'>Kommunikationsfehler.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
            if(trigger_value == 6){message = "<font color='orange'>Spannung Batterien/Akkus gering. </font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
            if(trigger_value == 7){message = "<font color='orange'>Fehlstellung Ventil.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
          }
        }
 
        if(message == "<font color='orange'>Spannung Batterien/Akkus gering. </font>"){
          bat_type = "unbekannt";
          foreach(bat_device, cr2016){if(bat_device == device.HssType()){bat_type = "<font color='orange'>1x CR2016 wechseln!</font>";}}
          foreach(bat_device, cr2032){if(bat_device == device.HssType()){bat_type = "<font color='orange'>1x CR2032 wechseln!</font>";}}
          foreach(bat_device, lr14x2){if(bat_device == device.HssType()){bat_type = "<font color='orange'>2x LR14 wechseln!</font>";}}
          foreach(bat_device, lr44x2){if(bat_device == device.HssType()){bat_type = "<font color='orange'>2x LR44 (AG13) wechseln!</font>";}}
          foreach(bat_device, lr6x2){if(bat_device == device.HssType()){bat_type = "<font color='orange'>2x Mignon AA (LR6) wechseln!</font>";}}
          foreach(bat_device, lr6x3){if(bat_device == device.HssType()){bat_type = "<font color='orange'>3x Mignon AA (LR6) wechseln!</font>";}}
          foreach(bat_device, lr6x4){if(bat_device == device.HssType()){bat_type = "<font color='orange'>4x Mignon AA (LR6) wechseln1</font>";}}
          foreach(bat_device, lr3x1){if(bat_device == device.HssType()){bat_type = "<font color='orange'>1x Micro AAA (LR3) wechseln!</font>";}}
          foreach(bat_device, lr3x2){if(bat_device == device.HssType()){bat_type = "<font color='orange'>2x Micro AAA (LR3) wechseln!</font>";}}
          foreach(bat_device, lr3x3){if(bat_device == device.HssType()){bat_type = "<font color='orange'>3x Micro AAA (LR3) wechseln!</font>";}}
          foreach(bat_device, lr3x3a){if(bat_device == device.HssType()){bat_type = "<font color='orange'>3x Akkus Micro AAA (LR3) aufladen!</font>";}}
          foreach(bat_device, block9){if(bat_device == device.HssType()){bat_type = "<font color='orange'>1x 9V-Block wechseln!</font>";}}
          foreach(bat_device, fixed){if(bat_device == device.HssType()){bat_type = "<font color='red'>Gerät austauschen!</font>";}}
          list = list#"\n"#device.Name()#" - "#message#bat_type;
        }
        else{
          list = list#"\n"#device.Name()#" - "#message;
        }
      }
    }
 
    ! +++++ Setzen der Systemvariablen "CCU SV Push Prio" für die Push-Nachricht +++++
    dom.GetObject("CCU SV Push Prio").State(priomax);
 
    ! +++++ Erzeugen der Nachricht +++++
    message = "Servicemeldung!";
    message = message#list;
 
    ! +++++ Programm "CCU PRG Push-Nachrichten" ausführen +++++
    dom.GetObject("CCU SV Push Text").State(message);
    dom.GetObject("CCU PRG Push-Nachrichten").ProgramExecute();
  }
}
VG Guido
Tinkerboard S + S.USV + Raspberrymatic + KS550 + 46 Sender und Aktoren

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

Beitrag von dtp » 31.01.2017, 09:08

Hi Guido,

das Skript ist soweit korrekt. Allerdings gibt es bereits eine neuere Version 1.2.4. Trotzdem, wenn die Lowbat-Meldung nicht angekommen ist, hat das einen anderen Grund. Testen kannst Du das eigentlich nur mit schwachen Batterien oder Akkus. Sobald der Aktor damit in Betrieb geht, sollte eine Batteriemeldung erzeugt werden.

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.

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

Beitrag von dtp » 01.02.2017, 07:56

Hi Guido,

habe heute Früh auch keine LowBat-Meldung von einem meiner HM-TC-IT-WM-W-EU erhalten. Da ist wohl doch noch etwas im Argen. Werde mich am WE mal dran setzen.

EDIT: FEHLALARM. FUNKTIONIERT DOCH.

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.

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

Alchys modifizierstes "Allinclusive-Skript"

Beitrag von Belei » 18.02.2017, 20:10

Nabend dtp,
ich habe vor paar Wochen dein modifizierten Script installiert und habe auch ein paar Meldungen bekommen.

Jetzt ist mir aufgefallen das meine ccu2 blinkt, durch eine Kommunikationsstörung.
Diese wurde mir weder gemeldet noch wurde sie automatisch bestätigt.

zPNP: immernoch 1.4.2
Gerät: MP3_Funkgong:0
Servicemeldung: Gerätekommunikation war gestört



Script

Code: Alles auswählen

    ! Servicemeldungen auslesen und senden über zPNP
    ! Version 1.2.4 (erstellt von Alchy, angepasst an das zPNP von dtp)
    ! Zum Benutzen: Neues Programm in der CCU wie folgt erstellen:
    ! WENN Systemzustand: Servicemeldungen im Wertebereich größer als 0 bei Aktualisierung auslösen
    ! DANN mit einer Sekunde Verzögerung Skript (und dann dieses Script komplett einfügen und mit o.k. bestätigen)
    !
    ! obligatorisches WebUI-Programm: "CCU PRG Push-Nachrichten"
    ! obligatorische Systemvariablen: "CCU SV Push Text", "CCU SV Push Prio"
    ! optionale Systemvariablen: "Haus SV Anwesenheit", "CCU SV Pushover Sound", "CCU SV Pushsafer Sound"
    !
    ! Unterschiede zu Alchys originalem Allinclusive-Skript:
    ! nur Push-Dienste über das zPNP, zum Teil geänderte Variablen, Push-Nachricht bei autoack = 1,
    ! kein BLOCK, kein USE_SYSVAR, kein WITHTIME, kein GO

    ! Löschen bestätigbarer Kommunikationsstörungen (1 = an, 0 = aus)
    integer autoack = 1;
     
    ! ##### ab hier sind keine weiteren Einstellungen mehr notwendig #####

    ! +++++ Deklaration weiterer Variablen +++++
    string message; string list = ""; string channel; string device; string bat_device; string bat_type; string service_tmp;
    string cr2016; string cr2032; string lr14x2; string lr44x2; string lr6x2; string lr6x3; string lr6x4; string lr3x1; string lr3x2; string lr3x3; string lr3x3a; string block9; string fixed;
    var trigger; var trigger_value;
    integer present = 1; integer prio = 0; integer priomax = -2;
     
    ! +++++ Auslesen der Systemvariablen "Haus SV Anwesenheit" +++++
    if(dom.GetObject("Haus SV Anwesenheit")){present = dom.GetObject("Haus SV Anwesenheit").Variable();}
     
    ! +++++ Sound für Pushover- bzw. Pushsafer-Nachrichten
    if(dom.GetObject("CCU SV Pushover Sound")){dom.GetObject("CCU SV Pushover Sound").State("siren");}
    if(dom.GetObject("CCU SV Pushsafer Sound")){dom.GetObject("CCU SV Pushsafer Sound").State("25");}
     
    ! +++++ Batteriezuweisungen inklusive Anzahl +++++
    ! noch nicht integrierte Geräte werden mit unbekannt ausgegeben
    cr2016 = "HM-RC-4\tHM-RC-4-B\tHM-RC-Sec3\tHM-RC-Sec3-B\tHM-RC-P1\tHM-RC-Key3\tHM-RC-Key3-B\tZEL_STG_RM_HS_4";
    cr2032 = "HM-SCI-3-FM\tHM-PBI-4-FM\tHM-PB-2-WM\tHM-SwI-3-FM\tHM-PBI-4-FM\tHM-Sec-TiS";
    lr14x2 = "HM-Sec-Sir-WM\tHM-OU-CFM-TW";
    lr44x2 = "HM-Sec-SC\tHM-Sec-SC2\tHM-Sec-SC-2\tHM-Sec-RHS";
    lr6x2 = "HM-CC-VD\tHM-CC-RT-DN\tHM-Sec-WDS\tHM-Sec-WDS-2\tHM-CC-TC\tHM-Dis-TD-T\tHB-UW-Sen-THPL-I\tHM-WDS40-TH-I\tHM-WDS40-TH-I-2\tHM-WDS10-TH-O\tHM-WDS30-OT2-SM-2\tHmIP-SMI\tHMIP-eTRV\tHmIP-SMO\tHmIP-STHD";
    lr6x3 = "HM-Sec-MDIR\tHM-Sec-MDIR-2\tHM-Sec-SD\tHM-Sec-Key\tHM-Sec-Key-S\tHM-Sec-Key-O\tHM-Sen-Wa-Od\tHM-Sen-MDIR\tHM-Sen-MDIR-O\tHM-Sen-MDIR-O-2\tHM-WDS100-C6-O\tHM-WDS100-C6-O-2\tHmIP-ASIR";
    lr6x4 = "HM-ES-TX-WM\tHM-CCU-1";
    lr3x1 = "HM-Sec-SCo\tHM-RC-4-2\tHM-RC-Key4-2\tHM-RC-Sec4-2\tHM-Sec-RHS-2\tHmIP-KRCA\tHMIP-SWDO\tHmIP-KRC4\tHmIP-RC8\tHmIP-SRH";
    lr3x2 = "HM-Dis-EP-WM55\tHM-PB-6-WM55\tHM-Sen-MDIR-WM55\tHM-PBI-2-FM\tHM-RC-8\tHM-Sen-DB-PCB\tHB-UW-Sen-THPL-O\tHM-Sen-EP\tHM-WDS30-T-O\tHM-WDS30-OT2-SM\tHM-TC-IT-WM-W-EU\tHM-Dis-WM55\tHM-PB-2-WM55\tHM-PB-2-WM55-2\tHM-Sen-MDIR-SM\tHMIP-WTH\tHMIP-WRC2\tHmIP-WRC6\tHmIP-WTH-2\tHmIP-STH";
    lr3x3 = "HM-PB-4Dis-WM\tHM-Sen-LI-O\tHM-RC-Dis-H-x-EU";
    lr3x3a = "HM-RC-19\tHM-RC-19-B\tHM-RC-12\tHM-RC-12-B\tHM-RC-12-W";
    block9 = "HM-LC-Sw1-Ba-PCB\tHM-LC-Sw4-PCB\tHM-MOD-EM-8\tHM-MOD-Re-8\tHM-Sen-RD-O\tHM-OU-CM-PCB\tHM-LC-Sw4-WM";
    fixed = "HmIP-SWSD";

    if(dom.GetObject(ID_SERVICES)){
      if(dom.GetObject(41).Value() > dom.GetObject(41).LastValue()){
        foreach(service_tmp, dom.GetObject(ID_SERVICES).EnumIDs()){
          if(dom.GetObject(service_tmp).IsTypeOf(OT_ALARMDP) && (dom.GetObject(service_tmp).AlState() == asOncoming)){
            trigger = dom.GetObject(dom.GetObject(service_tmp).AlTriggerDP());
            trigger_value = trigger.Value();
            channel = dom.GetObject(trigger.Channel());
            device = dom.GetObject(channel.Device());
            message = trigger.AlDestMapDP().Name().StrValueByIndex(".", 2);
           
            ! Meldungen über bestätigbare Kommunikationsstörungen automatisch löschen +++++
            if((message == "STICKY_UNREACH") && (autoack == 1)){
              dom.GetObject(service_tmp).AlReceipt();
              message = "<font color='green'>Meldung über bestätigbare Kommunikationsstörung gelöscht.</font>"; prio = -2; if(prio >= priomax){priomax = prio;}
            }   
     
            ! Übersetzen der Fehlermeldungen               
            if(message == "CONFIG_PENDING"){message = "Konfigurationsdaten stehen zur Übertragung an."; prio = -1; if(prio >= priomax){priomax = prio;}}
            if(message == "LOWBAT"){message = "<font color='orange'>Spannung Batterien/Akkus gering. </font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
            if(message == "STICKY_UNREACH"){message = "Kommunikation war gestört."; prio = -2; if(prio >= priomax){priomax = prio;}}
            if(message == "UNREACH"){message = "<font color='orange'>Kommunikation gestört.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
            if(message == "DEVICE_IN_BOOTLOADER"){message = "Gerät startet neu."; prio = -2; if(prio >= priomax){priomax = prio;}}
            if(message == "UPDATE_PENDING"){message = "Update verfügbar."; prio = -2; if(prio >= priomax){priomax = prio;}}
            if(message == "U_SOURCE_FAIL"){message = "Netzteil ausgefallen."; prio = -1; if(prio >= priomax){priomax = prio;}}
            if(message == "USBH_POWERFAIL"){message = "USB-Host deaktiviert."; prio = -1; if(prio >= priomax){priomax = prio;}}
            if(message == "STICKY_SABOTAGE"){message = "<font color='orange'>Sabotage war ausgelöst.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
            if(message == "ERROR_REDUCED"){message = "Temperatur kritisch (Lastabsenkung)."; prio = -1; if(prio >= priomax){priomax = prio;}}
     
            ! Sonderfehler
            if((message == "ERROR_SABOTAGE") || (message == "SABOTAGE")){
              if(present == 0){message = "<font color='red'>SABOTAGE.</font>"; prio = 1; if(prio >= priomax){priomax = prio;}}
              if(present == 1){message = "<font color='orange'>Sabotage.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
            }

            if(message == "ERROR"){
              if((device.HssType()=="HM-Sec-RHS") || (device.HssType()=="HM-Sec-SC") || (device.HssType()=="HM-Sec-SC-2") || (device.HssType()=="HM-Sec-SCo") || (device.HssType()=="HM-Sec-MD") || (device.HssType()=="HM-Sec-MDIR") || (device.HssType()=="HM-Sec-MDIR-2") || (device.HssType()=="HM-Sec-Sir-WM")){
                if(trigger_value == 7){
                  if(present == 0){message = "<font color='red'>SABOTAGE.</font>"; prio = 1; if(prio >= priomax){priomax = prio;}}
                  if(present == 1){message = "<font color='orange'>Sabotage.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
                }
              }   
              if((device.HssType()=="HM-Sec-Key") || (device.HssType()=="HM-Sec-Key-S") || (device.HssType()=="HM-Sec-Key-O")){
                if(trigger_value == 1){message = "<font color='orange'>Einkuppeln fehlgeschlagen.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
                if(trigger_value == 2){message = "<font color='orange'>Motorlauf abgebrochen.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
              }
              if(device.HssType()=="HM-CC-VD"){
                if(trigger_value == 1){message = "<font color='orange'>Stellantrieb blockiert.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
                if(trigger_value == 2){message = "<font color='orange'>Ventil nicht montiert.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
                if(trigger_value == 3){message = "<font color='orange'>Stellbereich zu klein.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
                if(trigger_value == 4){message = "<font color='orange'>Spannung Batterien/Akkus gering. </font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
              }
            }
     
            if(message == "FAULT_REPORTING"){
              if(device.HssType()=="HM-CC-RT-DN"){
                if(trigger_value == 1){message = "<font color='orange'>Ventil blockiert.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
                if(trigger_value == 2){message = "<font color='orange'>Einstellbereich Ventil zu groß.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
                if(trigger_value == 3){message = "<font color='orange'>Einstellbereich Ventil zu klein.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
                if(trigger_value == 4){message = "<font color='orange'>Kommunikationsfehler.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
                if(trigger_value == 6){message = "<font color='orange'>Spannung Batterien/Akkus gering. </font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
                if(trigger_value == 7){message = "<font color='orange'>Fehlstellung Ventil.</font>"; prio = -1; if(prio >= priomax){priomax = prio;}}
              }
            }
     
            if(message == "<font color='orange'>Spannung Batterien/Akkus gering. </font>"){
              bat_type = "unbekannt";
              foreach(bat_device, cr2016){if(bat_device == device.HssType()){bat_type = "<font color='orange'>1x CR2016 wechseln!</font>";}}
              foreach(bat_device, cr2032){if(bat_device == device.HssType()){bat_type = "<font color='orange'>1x CR2032 wechseln!</font>";}}
              foreach(bat_device, lr14x2){if(bat_device == device.HssType()){bat_type = "<font color='orange'>2x LR14 wechseln!</font>";}}
              foreach(bat_device, lr44x2){if(bat_device == device.HssType()){bat_type = "<font color='orange'>2x LR44 (AG13) wechseln!</font>";}}
              foreach(bat_device, lr6x2){if(bat_device == device.HssType()){bat_type = "<font color='orange'>2x Mignon AA (LR6) wechseln!</font>";}}
              foreach(bat_device, lr6x3){if(bat_device == device.HssType()){bat_type = "<font color='orange'>3x Mignon AA (LR6) wechseln!</font>";}}
              foreach(bat_device, lr6x4){if(bat_device == device.HssType()){bat_type = "<font color='orange'>4x Mignon AA (LR6) wechseln1</font>";}}
              foreach(bat_device, lr3x1){if(bat_device == device.HssType()){bat_type = "<font color='orange'>1x Micro AAA (LR3) wechseln!</font>";}}
              foreach(bat_device, lr3x2){if(bat_device == device.HssType()){bat_type = "<font color='orange'>2x Micro AAA (LR3) wechseln!</font>";}}
              foreach(bat_device, lr3x3){if(bat_device == device.HssType()){bat_type = "<font color='orange'>3x Micro AAA (LR3) wechseln!</font>";}}
              foreach(bat_device, lr3x3a){if(bat_device == device.HssType()){bat_type = "<font color='orange'>3x Akkus Micro AAA (LR3) aufladen!</font>";}}
              foreach(bat_device, block9){if(bat_device == device.HssType()){bat_type = "<font color='orange'>1x 9V-Block wechseln!</font>";}}
              foreach(bat_device, fixed){if(bat_device == device.HssType()){bat_type = "<font color='red'>Gerät austauschen!</font>";}}
              list = list#"\n"#device.Name()#" - "#message#bat_type;
            }
            else{
              list = list#"\n"#device.Name()#" - "#message;
            }
          }
        }
     
        ! +++++ Setzen der Systemvariablen "CCU SV Push Prio" für die Push-Nachricht +++++
        dom.GetObject("CCU SV Push Prio").State(priomax);
     
        ! +++++ Erzeugen der Nachricht +++++
        message = "Servicemeldung!";
        message = message#list;
     
        ! +++++ Programm "CCU PRG Push-Nachrichten" ausführen +++++
        dom.GetObject("CCU SV Push Text").State(message);
        dom.GetObject("CCU PRG Push-Nachrichten").ProgramExecute();
      }
    }
ccu.jpg

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

Beitrag von dtp » 20.02.2017, 08:03

Vielleicht liegt's ja an der eingestellten Prio von -2.

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.

Antworten

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