Howto - zentrales Push-Nachrichten-Programm zPNP

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

Re: Howto - zentrales Push-Nachrichten-Programm (zPNP) V4.4

Beitrag von dtp » 02.07.2021, 08:14

Servicemeldungen V3.2.3 hochgeladen.

Batterieanzeige für HmIP-SLO von 2 x AAA auf 2 x AA 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.

SabineT
Beiträge: 56
Registriert: 22.03.2018, 10:00
System: Alternative CCU (auf Basis OCCU)
Wohnort: Pápoc
Hat sich bedankt: 33 Mal
Danksagung erhalten: 7 Mal

Re: Howto - zentrales Push-Nachrichten-Programm (zPNP) V4.4

Beitrag von SabineT » 25.07.2021, 18:50

Gibt es eine Möglichkeit, LowBat-Meldungen von virtuellen Devices (Gruppen, also die INT... Devices) auszulassen? Die LowBat-Meldung kommt da ja ohnehin beim betroffenen physischen Gerät, also z.B. Thermostat oder Fensterkontakt.

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) V4.4

Beitrag von dtp » 26.07.2021, 08:10

Dafür gibt es die lokalen Variablen "exDevicesList" und "exDeviceTypesList".

In der unter "svServicesListPrev" angelegte Systemvariablen ist eine Liste aller Servicemeldungen enthalten, die zuletzt erzeugt wurden. Diese Nomenklatur einfach übernehmen für "exDevicesList" bzw. "exDeviceTypesList", um die nicht gewünschten Servicemeldungen auszufiltern.
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.

SabineT
Beiträge: 56
Registriert: 22.03.2018, 10:00
System: Alternative CCU (auf Basis OCCU)
Wohnort: Pápoc
Hat sich bedankt: 33 Mal
Danksagung erhalten: 7 Mal

Re: Howto - zentrales Push-Nachrichten-Programm (zPNP) V4.4

Beitrag von SabineT » 26.07.2021, 08:45

Ah, danke für den Hinweis!
So genau hatte ich das Script bisher nicht angeschaut. Hab jetzt mal in "exDeviceTypesList" als Wert "HmIP-HEATING" eingetragen.
Muss mir das im Hinterkopf behalten, falls ich mal eine weitere Type ausschließen will oder einzelne Devices (dann natürlich in "exDevicesList" eingetragen).

Mechaniker
Beiträge: 10
Registriert: 05.08.2021, 09:42
System: CCU
Hat sich bedankt: 4 Mal
Danksagung erhalten: 1 Mal

Re: Howto - zentrales Push-Nachrichten-Programm zPNP

Beitrag von Mechaniker » 06.02.2022, 08:50

Guten Morgen,
das zPNP ist wirklich toll und macht manches einfacher. Danke für die Arbeit und die Weiterentwicklung. Seit dem Umstieg auf die CCU3 habe ich folgende Fehlermeldung beim versenden von Push-Nachrichten über Pushover.

Code: Alles auswählen

Feb  6 08:01:10 ccu3-webui local0.err ReGaHss: ERROR: ScriptRuntimeError: ! Push-Nachrichten per Pushover senden ! weitere Informationen unter http://homematic-forum.de/forum/viewtopic.php?f=31&t=26282 ! Version 4.4.7, Autor: dtp ! HINWEIS: nicht vorhandene Systemvariablen werden automatisch mit erstmaligem Aufruf dieses Skripts angelegt !          und nicht mehr verwendete werden mit setzen von '= "";' automatisch gelöscht ! ACHTUNG: darauf achten, dass svPushText, svPushTestRef, svPushUserList und svPushImage hier und im Referenzskript !          SetPushTextRef.hsc identisch gesetzt sind. Zudem muss dir dortige lokale Variabel delay > delay sein.  ! +++++ User-Daten +++++ ! In den nachfolgenden Listen die User-Daten durch "xx|" einleiten und durch EINEN Leerschritt voneinander trennen.  string keyList = "Michael|xxxxKey1xxxx"; ! API-Basisschlüssel. Beispiel: "Empfänger01|xxxxKey1xxxx Empfänger02|xxKey2xx" string HMinfoList = "Michael|xxxxKey1xxxx"; ! API-Schlüssel für Info-Meldungen. 
Ich habe es mit neu anlegen des zPNP und der Variablen bereits probiert, hat keine Änderung gebracht. Die Fehlermeldung wird immer beim versenden einer Push-Nachricht erzeugt, die Nachrichten über Pushover kommen aber alle wir bisher an. Kann mir jemand einen Tipp geben wo ich suchen kann? Danke!
VG
Mechaniker
Zuletzt geändert von alchy am 06.02.2022, 20:37, insgesamt 1-mal geändert.
Grund: Code in Codetags posten
CCU3 mit CUxD / CUL 433 mhz und Intertechno

Mechaniker
Beiträge: 10
Registriert: 05.08.2021, 09:42
System: CCU
Hat sich bedankt: 4 Mal
Danksagung erhalten: 1 Mal

Re: Howto - zentrales Push-Nachrichten-Programm zPNP

Beitrag von Mechaniker » 10.02.2022, 23:00

Guten Abend, als Ergänzung zur Fehlermeldung noch das Programm und die Skripte:
Programm das den Fehler/Error auslöst:
Screenshot 2022-02-10 225114.png
Die Skripte dazu:

Code: Alles auswählen

! Push-Nachrichten per Pushover senden
! weitere Informationen unter http://homematic-forum.de/forum/viewtopic.php?f=31&t=26282
! Version 4.4.7, Autor: dtp
! HINWEIS: nicht vorhandene Systemvariablen werden automatisch mit erstmaligem Aufruf dieses Skripts angelegt
!          und nicht mehr verwendete werden mit setzen von '= "";' automatisch gelöscht
! ACHTUNG: darauf achten, dass svPushText, svPushTestRef, svPushUserList und svPushImage hier und im Referenzskript
!          SetPushTextRef.hsc identisch gesetzt sind. Zudem muss dir dortige lokale Variabel delay > delay sein.

! +++++ User-Daten +++++
! In den nachfolgenden Listen die User-Daten durch "xx|" einleiten und durch EINEN Leerschritt voneinander trennen. 
string keyList = "Michael|XXXXXXXXXXXXXKey"; ! API-Basisschlüssel. Beispiel: "Empfänger01|xxxxKey1xxxx Empfänger02|xxKey2xx"
string HMinfoList = "Michael|XXXXXXXXXXXXXKey"; ! API-Schlüssel für Info-Meldungen. Beispiel: "Empfänger01|xxxxKey1xxxx Empfänger02|xxKey2xx"
string HMwarnungList = "Michael|XXXXXXXXXXXXXKey"; ! optionale API-Schlüssel für Warnmeldungen
string HMalarmList = "Michael|XXXXXXXXXXXXXKey"; ! optionale API-Schlüssel für Alarmmeldungen
string prioMinList = "Michael|-2"; ! Prioritäten, ab der die User Nachrichten erhalten sollen. Beispiel: "Empfänger01|-2 Empfänger02|0"
 
! +++++ Dauer in Sekunden, innerhalb der keine identischen Push-Nachrichten gesendet werden sollen +++++
integer stopRepeat = 0;

! +++++ Verzögerung zum Versenden von Bildern in Sekunden +++++
integer delay = 3; ! muss kleiner sein, als der in SetPushTextRef gesetzte Verzögerungswert

! +++++ Nachrichten auf mehrere Teilnachrichten aufteilen +++++
integer msgLength = 950; ! Länge der Teilnachrichten in Zeichen, default: 950
integer msgInterval = 2; ! Dauer zwischen zwei aufainenderfolgenden Nachrichten in Sekunden, default: 2
integer maxNumMsgs = 10; ! Maximale Anzahl aufeinander folgender Nachrichten, default: 10
boolean msgListInvert = true; ! Teilnachrichten invertieren (ja: true, nein: false)

! +++++ Namen der zwingend benötigten Systemvariablen +++++
string svPushText = "CCU SV Push Text"; ! Text der aktuell zu übertragenden Push-Nachricht, Voreinstellung: "CCU SV Push Text"
string svPushTextRef = "CCU SV Push Text Ref"; ! Text der vorherigen Push-Nachricht als Referenz, Voreinstellung: "CCU SV Push Text Ref"

! +++++ Namen der optionalen Systemvariablen (auf "" setzen, wenn nicht benötigt) +++++
string svPushPrio = "CCU SV Push Prio"; ! Prioritäten der Push-Nachrichten, Voreinstellung: "CCU SV Push Prio"
string svPushService = "CCU SV Push Dienst"; ! Push-Dienste, Voreinstellung: "CCU SV Push Dienst"
string svPushImage = "CCU SV Push Bild"; ! Link auf ein anzufügendes Bild (z.B. "CCU SV Push Bild"), Voreinstellung: "CCU SV Push Bild"
string svPushUserList = ""; ! Empfängerlist für die Push-Nachrichten (z.B. "CCU SV Push Empfängerliste"), Voreinstellung: ""
string svPushoverSound = "CCU SV Pushover Sound"; ! Sound der Nachricht (z.B. "CCU SV Pushover Sound"), Voreinstellung: "CCU SV Pushover Sound"
string svPushoverTitle = ""; ! Titel der Nachricht (z.B. "CCU SV Pushover Titel"), Voreinstellung: ""
string svPushoverDevice = ""; ! Pushover-Gerät (z.B. "CCU SV Pushover Gerät"), Voreinstellung: ""

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

! +++++ Deklaration weiterer Variablen +++++
string message; string key; string HMinfo; string HMwarnung; string HMalarm; string prioMin;
string messagesList = ""; string messageTrc; string gttnHtmlPosList = ""; string lwtnHtmlPosList = "";
string pushService = "alle"; string pushUserList = ""; string userStr; string seperator = "|"; 
string title = ""; string image = ""; string sound = "pushover"; string device = ""; string svName;
integer prio = 0; integer startIndex; integer diff; integer sendFlag = 1; integer cnt; integer charCnt; integer delayIt;
integer spaceChrPos = 0; integer lineFeedPos = 0; integer trcPos = -1; integer noGttnHtmlPos; integer noLwtnHtmlPos;
object svObject; object svObjectList;

! +++++ Systemvariablen erzeugen bzw. falls vorhanden, auslesen +++++
if(!svPushText){svPushText = "CCU SV Push Text";}
svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText);
if(!svObject){
  svObjectList = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectList.Add(svObject.ID());
  svObject.Name(svPushText); svObject.DPInfo("Aktuelle Push-Nachricht"); svObject.Internal(false); svObject.Visible(true);
  svObject.ValueType(ivtString); svObject.ValueSubType(istChar8859); svObject.ValueUnit(""); dom.RTUpdate(true);
}
else{message = svObject.Value();}

if(!svPushTextRef){svPushTextRef = "CCU SV Push Text Ref";}
svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushTextRef);
if(!svObject){
  svObjectList = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectList.Add(svObject.ID());
  svObject.Name(svPushTextRef); svObject.DPInfo("Vorherige Push-Nachricht"); svObject.Internal(false); svObject.Visible(true);
  svObject.ValueType(ivtString); svObject.ValueSubType(istChar8859); svObject.ValueUnit(""); dom.RTUpdate(true);
}

if(svPushPrio){
  svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushPrio);
  if(!svObject){
    svObjectList = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectList.Add(svObject.ID());
    svObject.Name(svPushPrio); svObject.DPInfo("Priorität der Push-Nachricht"); svObject.Internal(false); svObject.Visible(true);
    svObject.ValueType(ivtFloat); svObject.ValueSubType(istGeneric); svObject.ValueUnit(""); svObject.ValueMin(-2); svObject.ValueMax(2); dom.RTUpdate(true);
  }
  else{prio = svObject.Value().ToInteger(); if(prio == 2){stopRepeat = 0;}}
}

if(svPushService){
  svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushService);
  if(!svObject){
    svObjectList = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectList.Add(svObject.ID());
    svObject.Name(svPushService); svObject.DPInfo("Auswahl des Push-Dienstes"); svObject.Internal(false); svObject.Visible(true);
    svObject.ValueType(ivtInteger); svObject.ValueSubType(istEnum); svObject.ValueList("aus;alle;Pushover"); svObject.ValueUnit(""); dom.RTUpdate(true);
  }
  else{
    if(svObject.ValueList().Find("Pushover") == -1){svObject.ValueList(svObject.ValueList() + ";Pushover");}
    pushService = svObject.ValueList().StrValueByIndex(";", svObject.Value());
  }
}

if(svPushUserList){
  svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushUserList);
  if(!svObject){
    svObjectList = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectList.Add(svObject.ID());
    svObject.Name(svPushUserList); svObject.DPInfo("Empfängerliste für die Push-Nachrichten"); svObject.Internal(false); svObject.Visible(true);
    svObject.ValueType(ivtString); svObject.ValueSubType(istChar8859); svObject.ValueUnit(""); dom.RTUpdate(true);
  }
  else{pushUserList = svObject.Value();}
}
else{
  foreach(svName, dom.GetObject(ID_SYSTEM_VARIABLES).EnumUsedNames()){
    svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svName);
    if(svObject.DPInfo() == "Empfängerliste für die Push-Nachrichten"){dom.DeleteObject(svObject);}
  }
}

if(svPushImage){
  svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushImage);
  if(!svObject){
    svObjectList = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectList.Add(svObject.ID());
    svObject.Name(svPushImage); svObject.DPInfo("Link für ein zu sendendes Bild"); svObject.Internal(false); svObject.Visible(true);
    svObject.ValueType(ivtString); svObject.ValueSubType(istChar8859); svObject.ValueUnit(""); dom.RTUpdate(true);
  }
  else{image = svObject.Value();}
}
else{
  foreach(svName, dom.GetObject(ID_SYSTEM_VARIABLES).EnumUsedNames()){
    svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svName);
    if(svObject.DPInfo() == "Link für ein zu sendendes Bild"){dom.DeleteObject(svObject);}
  }
}

if(svPushoverSound){
  svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound);
  if(!svObject){
    svObjectList = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectList.Add(svObject.ID());
    svObject.Name(svPushoverSound); svObject.DPInfo("Sound der Pushover-Nachricht"); svObject.Internal(false); svObject.Visible(true);
    svObject.ValueType(ivtString); svObject.ValueSubType(istChar8859); svObject.ValueUnit(""); dom.RTUpdate(true);
  }
  else{sound = svObject.Value();}
}
else{
  foreach(svName, dom.GetObject(ID_SYSTEM_VARIABLES).EnumUsedNames()){
    svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svName);
    if(svObject.DPInfo() == "Sound der Pushover-Nachricht"){dom.DeleteObject(svObject);}
  }
}

if(svPushoverTitle){
  svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverTitle);
  if(!svObject){
    svObjectList = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectList.Add(svObject.ID());
    svObject.Name(svPushoverTitle); svObject.DPInfo("Titel der Pushover-Nachricht"); svObject.Internal(false); svObject.Visible(true);
    svObject.ValueType(ivtString); svObject.ValueSubType(istChar8859); svObject.ValueUnit(""); dom.RTUpdate(true);
  }
  else{title = svObject.Value();}
}
else{
  foreach(svName, dom.GetObject(ID_SYSTEM_VARIABLES).EnumUsedNames()){
    svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svName);
    if(svObject.DPInfo() == "Titel der Pushover-Nachricht"){dom.DeleteObject(svObject);}
  }
}

if(svPushoverDevice){
  svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverDevice);
  if(!svObject){
    svObjectList = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectList.Add(svObject.ID());
    svObject.Name(svPushoverDevice); svObject.DPInfo("Gerät für Pushover-Nachricht"); svObject.Internal(false); svObject.Visible(true);
    svObject.ValueType(ivtString); svObject.ValueSubType(istChar8859); svObject.ValueUnit(""); dom.RTUpdate(true);
  }
  else{device = svObject.Value();}
}
else{
  foreach(svName, dom.GetObject(ID_SYSTEM_VARIABLES).EnumUsedNames()){
    svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svName);
    if(svObject.DPInfo() == "Gerät für Pushover-Nachricht"){dom.DeleteObject(svObject);}
  }
}

! +++++ Push-Nachrichten erzeugen und versenden ++++
if((pushService == "alle") || (pushService.Contains("Pushover")) || (prio == 2)){
  ! ----- Vermeidung identischer Push-Nachrichten innerhalb stopRepeat Sekunden -----
  diff = (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText)).Timestamp().ToInteger() - (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushTextRef)).Timestamp().ToInteger();
  if(diff < stopRepeat){
    if(message == (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushTextRef)).Value()){sendFlag = 0;}
  }

  if(sendFlag == 1){
    ! ----- Umwandlung Farbstrings in Farbcodes -----
    message = message.Replace("orange", "#ffa500");
    message = message.Replace("royalblue", "#4169e1");
    message = message.Replace("yellowgreen", "#9acd32");

    ! ----- Aufteilen einer msgLength überschreitenden Push-Nachricht in mehrere Teilnachrichten -----
    cnt = 1;
    if(msgLength < 50){msgLength = 50;}
    if(message.Length() > msgLength){
      while((message.Length() >= msgLength) && (cnt <= maxNumMsgs)){
        messageTrc = message.Substr(0, msgLength).Trim(" ");
    
        charCnt = messageTrc.Length() - 1;
        while(charCnt >= 0){
          if((messageTrc.Substr(charCnt, 1)).Contains(">")){gttnHtmlPosList = gttnHtmlPosList#charCnt#";";}
          if((messageTrc.Substr(charCnt, 2)).Contains(" >")){if(gttnHtmlPosList.Contains(charCnt + 1)){gttnHtmlPosList = gttnHtmlPosList.Replace(charCnt#";", "");}}
          if((messageTrc.Substr(charCnt, 1)).Contains("<")){lwtnHtmlPosList = lwtnHtmlPosList#charCnt#";";}
          if((messageTrc.Substr(charCnt, 2)).Contains("< ")){if(lwtnHtmlPosList.Contains(charCnt)){lwtnHtmlPosList = lwtnHtmlPosList.Replace(charCnt#";", "");}}
          if((messageTrc.Substr(charCnt, 2)).Contains("\n")){if(charCnt >= lineFeedPos){lineFeedPos = charCnt;}}
          if((messageTrc.Substr(charCnt, 1)).Contains(" ")){if(charCnt >= spaceChrPos){spaceChrPos = charCnt;}}
          charCnt = charCnt - 1;
        }
        gttnHtmlPosList = gttnHtmlPosList.RTrim(";"); noGttnHtmlPos = web.webGetValueListCount(gttnHtmlPosList);
        lwtnHtmlPosList = lwtnHtmlPosList.RTrim(";"); noLwtnHtmlPos = web.webGetValueListCount(lwtnHtmlPosList);
        if((noGttnHtmlPos == noLwtnHtmlPos) && (noGttnHtmlPos.Mod(2) != 0)){
          trcPos = lwtnHtmlPosList.StrValueByIndex(";", 0).ToInteger();
          if(trcPos == 0){trcPos = gttnHtmlPosList.StrValueByIndex(";", 0).ToInteger() + 1;}
        }
        elseif((noGttnHtmlPos < noLwtnHtmlPos) && (noLwtnHtmlPos.Mod(2) == 0)){
          trcPos = lwtnHtmlPosList.StrValueByIndex(";", 1).ToInteger();
        }
        elseif(gttnHtmlPosList.StrValueByIndex(";", 0).ToInteger() == (messageTrc.Length() - 1)){trcPos = msgLength - 1;}
        elseif(noGttnHtmlPos < noLwtnHtmlPos){
          trcPos = lwtnHtmlPosList.StrValueByIndex(";", 0).ToInteger();
          if(trcPos == 0){trcPos = msgLength - 1;}
        }
        else{trcPos = -1;}
    
        if((trcPos == -1) && (lineFeedPos > 0)){trcPos = lineFeedPos + 1;}
        elseif((trcPos == -1) && (spaceChrPos > 0)){trcPos = spaceChrPos + 1;}
        elseif(trcPos == -1){trcPos = msgLength - 1;}
        
        message = message.Substr(trcPos, message.Length() - trcPos).Trim();
        messageTrc = messageTrc.Substr(0, trcPos);
        if(!((messageTrc.Find("<") == 0) && (messageTrc.Find(">") == trcPos) && (noGttnHtmlPos == 1) && (noLwtnHtmlPos == 1))){
          if(msgListInvert){messagesList = "Teilnachricht "#cnt#" von cnt.\n"#messageTrc#"\t"#messagesList;}
          else{messagesList = messagesList#"\tTeilnachricht "#cnt#" von cnt.\n"#messageTrc;}
          cnt = cnt + 1;
        }
        
        gttnHtmlPosList = ""; lwtnHtmlPosList = ""; lineFeedPos = 0; spaceChrPos = 0; trcPos = -1;
      }
      if(message.Length() >= 1){
        if(message.Length() > msgLength){message = message.Substr(0, msgLength - 8).Trim()#" ABBRUCH";} else{message = message.Trim();} 
        if(msgListInvert){messagesList = "Teilnachricht "#cnt#" von cnt.\n"#message#"\t"#messagesList;}
        else{messagesList = messagesList#"\tTeilnachricht "#cnt#" von cnt.\n"#message;}
      }
    }
    else{messagesList = message;}
    messagesList = messagesList.Replace("cnt", cnt);

    ! ----- UTF-8-Codierung -----
    messagesList = messagesList.ToUTF8();

    ! ----- Parameter für Bildübertragung -----
    if(image){image = "@"#image;}
    else{delay = 0;}
    delayIt = delay;

    ! ----- Absenden der Push-Nachrichten -----
    foreach(key, keyList.Split(" ")){
      userStr = key.Substr(0, key.Find(seperator)+1).Trim();

      if((pushUserList.Contains(userStr.Substr(0, userStr.Length()-1))) || (pushUserList == "") || (prio == 2)){
        key = key.Replace(userStr, "").Trim();
        startIndex = HMinfoList.Find(userStr).ToInteger();
        if(startIndex != -1){
          HMinfo = HMinfoList.Substr(startIndex+userStr.Length(), HMinfoList.Length()-1);
          HMinfo = HMinfo.Substr(0, HMinfo.Find(" "));
        } else{HMinfo = "";}
        startIndex = HMwarnungList.Find(userStr).ToInteger();
        if(startIndex != -1){
          HMwarnung = HMwarnungList.Substr(startIndex+userStr.Length(), HMwarnungList.Length()-1);
          HMwarnung = HMwarnung.Substr(0, HMwarnung.Find(" "));
        } else{HMwarnung = HMinfo;}
        startIndex = HMalarmList.Find(userStr).ToInteger();
        if(startIndex != -1){
          HMalarm = HMalarmList.Substr(startIndex+userStr.Length(), HMalarmList.Length()-1);
          HMalarm = HMalarm.Substr(0, HMalarm.Find(" "));
        } else{HMalarm = HMinfo;}
        startIndex = prioMinList.Find(userStr).ToInteger();
        if(startIndex != -1){
          prioMin = prioMinList.Substr(startIndex+userStr.Length(), prioMinList.Length()-1);
          prioMin = prioMin.Substr(0, prioMin.Find(" "));
        } else{prioMin = -2;}

        cnt = 0;
        foreach(message, messagesList){
          if(cnt > 0){image = ""; delayIt = delayIt + msgInterval;}
          if(prio >= prioMin){
            if((prio == -2) || (prio == -1) || (prio == 0)){! ----- Informationsmeldungen -----
              (dom.GetObject(ID_DATAPOINTS).Get("CUxD.CUX2801001:1.CMD_EXEC")).State("/usr/bin/curl -s -k -F token='"#HMinfo#"' -F user='"#key#"' -F device='"#device#"' -F title=' "#title#"' -F message=' "#message#"' -F attachment='"#image#"' -F priority='"#prio#"' -F sound='"#sound#"' -F html=1 https://api.pushover.net/1/messages.json", delayIt * 1000, false);
            }
            elseif(prio == 1){! ----- Warnmeldungen -----
              (dom.GetObject(ID_DATAPOINTS).Get("CUxD.CUX2801001:1.CMD_EXEC")).State("/usr/bin/curl -s -k -F token='"#HMwarnung#"' -F user='"#key#"' -F device='"#device#"' -F title=' "#title#"' -F message=' "#message#"' -F attachment='"#image#"' -F priority='"#prio#"' -F sound='"#sound#"' -F html=1 https://api.pushover.net/1/messages.json", delayIt * 1000, false);
            } 
            elseif(prio == 2){! ----- Alarmmeldungen -----
              (dom.GetObject(ID_DATAPOINTS).Get("CUxD.CUX2801001:1.CMD_EXEC")).State("/usr/bin/curl -s -k -F token='"#HMalarm#"' -F user='"#key#"' -F device='"#device#"' -F title=' "#title#"' -F message=' "#message#"' -F attachment='"#image#"' -F priority='"#prio#"' -F sound='"#sound#"' -F html=1 -F retry=30 -F expire=120 https://api.pushover.net/1/messages.json", delayIt * 1000, false);
            }
          }
          cnt = cnt + 1;
        }
      }
      delayIt = delay;
    }

    ! ----- Zurücksetzen eines vergebenenen Titels -----
    if(title){(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverTitle)).State("");}
  }
}
2. Skript:

Code: Alles auswählen

! Zurücksetzen einiger für das zPNP verwendeter Systemvariablen und ggf. Löschen eines übertragenen Bilds
! WICHTITG: Dieses Skript ist OBLIGATORISCH und NACH ALLEN zPNS-xx im zPNP verwendet werden!
! weitere Informationen unter http://homematic-forum.de/forum/viewtopic.php?f=31&t=26282
! Version 4.1.2, Autor: dtp
! Achtung: darauf achten, dass svPushText, svPushTestRef, svPushUserList und svPushImage im zPNS-xx 
!          identisch gesetzt sind.

! ++++++ Löschen eines zu übertragenden Bildes (nur wirksam, wenn svPushImage gesetzt) +++++
boolean deleteImage = true; ! true: Bild löschen, false: Bild nicht löschen
integer delay = 5; ! Verzögerungszeit in Sekunden (muss größer sein, als der in den zPNS-xx gesetze Verzögerungswert)

! +++++ Namen der zwingend benötigten Systemvariablen +++++
string svPushText = "CCU SV Push Text"; ! Text der aktuell zu übertragenden Push-Nachricht gem. zPNS-xx
string svPushTextRef = "CCU SV Push Text Ref"; ! Text der vorherigen Push-Nachricht als Referenz gem. zPNS-xx
string svPushUserList = "CCU SV Push Empfängerliste"; ! Empfängerlist für die Push-Nachrichten gem. zPNS-xx 

! +++++ Namen der optionalen Systemvariablen (auf "" setzen, wenn nicht benötigt) +++++
string svPushImage = "CCU SV Push Bild"; ! Link auf ein anzufügendes Bild (z.B. "CCU SV Push Bild"), default: "" 

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

! +++++ Deklaration weiterer Variablen +++++
string image = "";

! +++++ Löschzeit in Millisekunden umwandeln +++++
delay = delay * 1000;

! +++++ Zurücksetzen der Systemvariablen und Löschen eines vorhandenen Bilds +++++
if((dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushImage))){
  ! ----- Push-Nachrichten-Referenz setzen -----
  (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushTextRef)).State((dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText)).Value(), delay, false);
  
  ! ----- Bild löschen -----
  if(deleteImage){
    image = (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushImage)).Value();
    if(image){dom.GetObject(ID_DATAPOINTS).Get("CUxD.CUX2801001:1.CMD_EXEC").State("rm '"#image#"'", delay, false);}
  }

  ! ----- URL des übertragenen Bilds löschen -----
  (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushImage)).State("", delay, false);

  ! ----- Empfängerliste zurücksetzen -----
  if((dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushUserList))){
    (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushUserList)).State("", delay, false);
  }
}
else{
  ! ----- Push-Nachrichten-Referenz setzen -----
  (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushTextRef)).State((dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText)).Value());
  
  ! ----- Empfängerliste zurücksetzen -----
  if((dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushUserList))){
    (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushUserList)).State("");
  }
}
Hat einer eine Idee odeer ist die Fehlermeldung bei Euch auch vorhanden? Wie gesagt, der Versand der Nachrichten klappt ja, nur die Fehlermeldung in der Log-Datei verstehe ich nicht. Bin für einen Tipp oder Erklärung Dankbar :D
CCU3 mit CUxD / CUL 433 mhz und Intertechno

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

Beitrag von dtp » 11.02.2022, 19:54

Ich muss mir das mal in Ruhe ansehen. Derzeit ist es bei mir aber leider etwas turbulent. Daher bitte etwas Geduld.

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.

Mechaniker
Beiträge: 10
Registriert: 05.08.2021, 09:42
System: CCU
Hat sich bedankt: 4 Mal
Danksagung erhalten: 1 Mal

Re: Howto - zentrales Push-Nachrichten-Programm zPNP

Beitrag von Mechaniker » 11.02.2022, 22:15

Hallo Thorsten, danke für die Rückmeldung. Kein Stress, es läuft ja und ist ein Hobby. VG Michael
CCU3 mit CUxD / CUL 433 mhz und Intertechno

FuFrank
Beiträge: 4
Registriert: 28.02.2022, 20:11
System: CCU
Wohnort: Karlsruhe
Hat sich bedankt: 1 Mal

Re: Howto - zentrales Push-Nachrichten-Programm zPNP

Beitrag von FuFrank » 31.03.2022, 20:47

Hallo Mechaniker,

seit dem Firmwareupdate der CCU3 auf 3.63.8 sind bei mir die Fehler im syslog weg.

Gruß FuFrank
Raspberrymatic auf Synology VMM mit aktueller Software, HmIP RFUSB, CUxD, CCU-Historian, Grafana, Tailscale

Mechaniker
Beiträge: 10
Registriert: 05.08.2021, 09:42
System: CCU
Hat sich bedankt: 4 Mal
Danksagung erhalten: 1 Mal

Re: Howto - zentrales Push-Nachrichten-Programm zPNP

Beitrag von Mechaniker » 03.04.2022, 18:24

Hallo FuFrank, danke für die Info. Habe es gerade ausprobiert, bei mir sind ebenfalls keine Einträge mehr seit dem Update auf 3.63.8. Damit gelöst, wobei mich es interessieren würde wie es zustande gekommen ist. VG Michael
CCU3 mit CUxD / CUL 433 mhz und Intertechno

Antworten

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