Howto - zentrales Push-Nachrichten-Programm zPNP

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

Moderator: Co-Administratoren

dtp
Beiträge: 10685
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 330 Mal
Danksagung erhalten: 507 Mal

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

Beitrag von dtp » 11.05.2020, 15:59

Okay, dann poste mal bitte einen Screenshot von deinem zPNP und füge noch deine Codesequenzen zum Aufruf des zPNP und für die Einstellungen der User-Daten in deinem zPNS-Po (deine Keys bitte durch XXXX ersetzen) bei.

EDIT 13.05.: Na dann scheint's ja nicht so wichtig gewesen zu sein. :roll:
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.

redy09
Beiträge: 40
Registriert: 18.11.2018, 12:31
Hat sich bedankt: 1 Mal

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

Beitrag von redy09 » 15.05.2020, 15:27

Das hab ich nicht verstanden... Das zPNP hatte ich ja schon gepostet. Was brauchst du noch?

dtp
Beiträge: 10685
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 330 Mal
Danksagung erhalten: 507 Mal

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

Beitrag von dtp » 15.05.2020, 17:19

Insbesondere diese Einstellungen aus dem zPNS-Po mit geixtem Code:

Code: Alles auswählen

! +++++ User-Daten +++++
! In den nachfolgenden Listen die User-Daten durch "xx|" einleiten und durch EINEN Leerschritt voneinander trennen. 
string keyList = "Name|API"; ! API-Basisschlüssel. Beispiel: "Empfänger01|xxxxKey1xxxx Empfänger02|xxKey2xx"
string HMinfoList = "Name|API"; ! API-Schlüssel für Info-Meldungen. Beispiel: "Empfänger01|xxxxKey1xxxx Empfänger02|xxKey2xx"
string HMwarnungList = ""; ! optionale API-Schlüssel für Warnmeldungen
string HMalarmList = ""; ! optionale API-Schlüssel für Alarmmeldungen
string prioMinList = ""; ! Prioritäten, ab der die User Nachrichten erhalten sollen. Beispiel: "Empfänger01|-2 Empfänger02|0"
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.

nils50122
Beiträge: 23
Registriert: 12.09.2019, 08:30
Hat sich bedankt: 8 Mal

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

Beitrag von nils50122 » 24.05.2020, 13:08

Bei mir werden leider in Verbindung mit diesem Skript V3.1 Servicemeldungen „HAT Kommunikationsfehler“ als Prio 1 (emergency prio in pushover) versendet.

Wie kann ich die Prio auf 0 abändern?
Dateianhänge
B418C2C9-B114-4A57-8ACC-9C9520BAEEAD.jpeg

dtp
Beiträge: 10685
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 330 Mal
Danksagung erhalten: 507 Mal

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

Beitrag von dtp » 24.05.2020, 13:39

Wie sieht denn das Skript aus, mit dem du die Meldungen erzeugst?

Frage 1: Hast du "svPushPrio" im zPNS-Po gesetzt?
Frage 2: Setzt du "svPushPrio" auch im aufrunden Skript mit

Code: Alles auswählen

(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushPrio)).State("0");
Siehe hier.
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.

nils50122
Beiträge: 23
Registriert: 12.09.2019, 08:30
Hat sich bedankt: 8 Mal

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

Beitrag von nils50122 » 25.05.2020, 10:52

So sieht mein Skript aus (die Keys wurden durch xxx"keytype"xxx ersetzt").

Code: Alles auswählen

! Push-Nachrichten per Pushover senden
! weitere Informationen unter http://homematic-forum.de/forum/viewtopic.php?f=31&t=26282
! Version 3.1.1, Autor: dtp
! ACHTUNG: dieses Skript benötigt eine CCU-Firmware ab Version 2.29.22
! Hinweis: nicht vorhandene Systemvariablen werden automatisch mit erstmaligem Aufruf dieses Skripts angelegt
 
! +++++ User-Daten +++++
! In den nachfolgenden Listen die User-Daten durch "xx|" einleiten und durch EINEN Leerschritt voneinander trennen. 
string keyList = "01|xxxxKey1xxxx"; ! API-Basisschlüssel. Beispiel: "01|xxxxKey1xxxx 02|xxKey2xx"
string HMinfoList = "01|xxxxInfoKey1xxxx"; ! API-Schlüssel für Info-Meldungen. Beispiel: "01|xxxxKey1xxxx 02|xxKey2xx"
string HMwarnungList = "02|xxxxWarningKey1xxxx"; ! optionale API-Schlüssel für Warnmeldungen
string HMalarmList = "03|xxxxAlertKey1xxxx"; ! optionale API-Schlüssel für Alarmmeldungen
string prioMinList = "01|-2"; ! Prioritäten, ab der die User Nachrichten erhalten sollen. Beispiel: "01|-2 02|0"
 
! +++++ Dauer in Sekunden, innerhalb der keine identischen Push-Nachrichten gesendet werden sollen +++++
integer stopRepeat = 10;

! +++++ 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: ""
string svPushoverSound = "CCU SV Pushover Sound"; ! Sound der Nachricht (z.B. "CCU SV Pushover Sound"), Voreinstellung: ""
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 HMinfo; string HMwarnung; string HMalarm; string prioMin; 
string pushService = "alle"; string userStr; string key; string title = ""; string image = ""; string sound = "pushover"; string device = ""; 
integer prio = 0; integer userIndex; integer startIndex; integer diff; integer sendFlag = 1;
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(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();}
}

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 = (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)).Value();}
}

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 = (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverTitle)).Value();}
}

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 = (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverDevice)).Value();}
}

! +++++ Push-Nachrichten erzeugen und versenden ++++
if((pushService == "alle") || (pushService == "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){
    ! ----- Abschneiden zu langer Push-Nachrichten, um das Senden sicherzustellen -----
    if(message.Length() > 980){message = message.Substr(0, 980)#"\nMaximale Nachrichtenlänge erreicht!";}

    ! ----- Umwandlung von Sonderzeichen gem. UTF-8 und URI -----
    message = message.ToUTF8().UriEncode(); title = title.ToUTF8().UriEncode();

    ! ----- Umwandlung Farbstrings in Farbcodes für Android-Kompatibilität -----
    message = message.Replace("orange", "#ffa500");

    ! ----- Absenden der Push-Nachrichten -----  
    foreach(key, keyList.Split(" ")){
      ! Werte zuordnen
      userIndex = key.Substr(0, 2).ToInteger(); userStr = key.Substr(0, 3);
      key = key.Substr(3, key.Length()-3);
      startIndex = HMinfoList.Find(userStr).ToInteger();
      if(startIndex != -1){
        HMinfo = HMinfoList.Substr(startIndex+3, HMinfoList.Length()-1);
        HMinfo = HMinfo.Substr(0, HMinfo.Find(" "));
      } else{quit;}
      startIndex = HMwarnungList.Find(userStr).ToInteger();
      if(startIndex != -1){
        HMwarnung = HMwarnungList.Substr(startIndex+3, HMwarnungList.Length()-1);
        HMwarnung = HMwarnung.Substr(0,HMwarnung.Find(" "));
      } else{HMwarnung = HMinfo;}
      startIndex = HMalarmList.Find(userStr).ToInteger();
      if(startIndex != -1){
        HMalarm = HMalarmList.Substr(startIndex+3, HMalarmList.Length()-1);
        HMalarm = HMalarm.Substr(0,HMalarm.Find(" "));
      } else{HMalarm = HMinfo;}
      startIndex = prioMinList.Find(userStr).ToInteger();
      if(startIndex != -1){
        prioMin = prioMinList.Substr(startIndex+3, prioMinList.Length()-1);
        prioMin = prioMin.Substr(0,prioMin.Find(" "));
      } else{prioMin = -2;}

      if(prio >= prioMin){      
        ! ----- Informationsmeldungen -----
        if((prio == -2) || (prio == -1) || (prio == 0)){
          (dom.GetObject(ID_DATAPOINTS).Get("CUxD.CUX2801001:1.CMD_EXEC")).State("extra/curl -s -k -d token='"#HMinfo#"' -d user='"#key#"' -d device='"#device#"' -d title='"#title#"' -d message='"#message#"' -d priority='"#prio#"' -d sound='"#sound#"' -d html=1 https://api.pushover.net/1/messages.json");
        }
        ! ----- Warnmeldungen -----
        if(prio == 1){
          (dom.GetObject(ID_DATAPOINTS).Get("CUxD.CUX2801001:1.CMD_EXEC")).State("extra/curl -s -k -d token='"#HMwarnung#"' -d user='"#key#"' -d device='"#device#"' -d title='"#title#"' -d message='"#message#"' -d priority='"#prio#"' -d sound='"#sound#"' -d html=1 https://api.pushover.net/1/messages.json");
        }
        ! ----- Alarmmeldungen -----
        if(prio == 2){
          (dom.GetObject(ID_DATAPOINTS).Get("CUxD.CUX2801001:1.CMD_EXEC")).State("extra/curl -s -k -d token='"#HMalarm#"' -d user='"#key#"' -d device='"#device#"' -d title='"#title#"' -d message='"#message#"' -d priority='"#prio#"' -d sound='"#sound#"' -d html=1 -d retry=30 -d expire=120 https://api.pushover.net/1/messages.json");
        }
        ! Bild senden, falls vorhanden
        if(image){
          (dom.GetObject(ID_DATAPOINTS).Get("CUxD.CUX2801001:1.CMD_EXEC")).State("extra/curl -s -k -F token='"#HMinfo#"' -F user='"#key#"' -F device='"#device#"' -F title='"#title#"' -F message='"#image#"' -F attachment='@"#image#"' -F priority='-2' -F sound='none'  https://api.pushover.net/1/messages.json");
        }
      }
    }
	
    ! ----- Zurücksetzen eines vergebenenen Titels -----
    if(title){(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverTitle)).State("");}
  }
}
Hier der aktuelle Status der Variablen:
VaR.PNG

dtp
Beiträge: 10685
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 330 Mal
Danksagung erhalten: 507 Mal

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

Beitrag von dtp » 25.05.2020, 12:21

Frage 2 ist so leider nicht beantwortet. Wie sieht das das zPNP aufrufende Skript aus und wo setzt du dort die Prio?

Zudem sei der Hinweis gestattet, dass du in deinem zPNS-xx für "HMwarnungList" und "HMalarmList" denselben User "01|" verwenden solltest, wie für "keyList" und "HMinfoList". Ansonsten werden diese beiden API-Schlüssel ignoriert, weil sie eben für die User "02|" und "03|" vorgesehen sind.
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.

nils50122
Beiträge: 23
Registriert: 12.09.2019, 08:30
Hat sich bedankt: 8 Mal

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

Beitrag von nils50122 » 25.05.2020, 13:15

Code: Alles auswählen

! Servicemeldungen auslesen und weiter verarbeiten
! v1.99 (c) by alchy
Zuletzt geändert von alchy am 25.05.2020, 19:11, insgesamt 1-mal geändert.
Grund: Scriptcopy gelöscht

dtp
Beiträge: 10685
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 330 Mal
Danksagung erhalten: 507 Mal

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

Beitrag von dtp » 25.05.2020, 15:43

Alchys allinclusive-Skript nutzt doch gar nicht das zPNP. Sorry, da kann ich dir leider keinen Support liefern.

Du könntest allerdings alternativ mein Servicemeldungen-Skript (siehe Link im Ausgangsposting dieses Threads) verwenden.
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.

Pihero
Beiträge: 238
Registriert: 02.08.2019, 21:24
Wohnort: Pforzheim
Hat sich bedankt: 1 Mal
Danksagung erhalten: 3 Mal

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

Beitrag von Pihero » 09.06.2020, 12:49

Hallo zusammen,

ich habemöchte gern das "Fenster-offen-Skript" vom Anfang des Threads verwenden...
Hier der Code zur Klarstellung:

Code: Alles auswählen

! Meldung Fenster/Türen schließen
! Version 2.5.3, 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 (trennen mit "\t")
string exTiltList = "UG Keller Fenster"; ! gekippte Fenster und Türen
string exOpenList = ""; ! geöffnete Fenster und Türen

! Schlüsselbegriffe von Fenstern und Türen mit Priorität 2 (trennen mit "\t")
string highPrioKeywordsList = "EG\tUG";

! 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; string highPrioKeyword; 
integer prio; integer prioMax = -2;

! +++++ 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(!exTiltList.Contains(device.Name())){
      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#"\t"#dom.GetObject(index).DPByHssDP("STATE").Value();
        }
      }
    }
    if(!exOpenList.Contains(device.Name())){
      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#"\t"#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#"\t2";
        }
      }
    }
  }
}

! +++++ Setzen der Priorität in Abhängigkeit vom Zustand der Fenster und Türen sowie der Schlüsselbegriffe +++++
if(stateList.Contains("2")){
  foreach(highPrioKeyword, highPrioKeywordsList){
    if(list.Contains(highPrioKeyword)){prio = 2; if(prio >= prioMax){prioMax = prio;}} 
    else{prio = 1; if(prio >= prioMax){prioMax = prio;}}
  }
}
else{prio = "0"; if(prio >= prioMax){prioMax = prio;}}
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushPrio)).State(prioMax);

! +++++ Erzeugen der Nachricht +++++
if(prio == 2){message = "<font color=red>Achtung, Fenster/Türen schließen!</font>";}
else{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();
}

Ich habe allerdings eine wired Installation und einige Reed-Kontakt als Fenstersensoren im Einsatz.
Wie kann ich diese Kanäle im Skript berücksichtigen?
Wie muss ich die Abfrage der HmIPw-FIO6 Kanäle gestallten?

Ich versuche mich langsam an die Skript-Thematik anzunähern...allerdings kann ich leider noch keinen Vorschlag beisteuern.

Da ich zPNP nutze poste ich diese Frage hier obwohl es auch noch weitere Threads zum Thema gibt.

Danke vorab und Gruß, Philipp

Antworten

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