nee habs nur einmal laufen.
Hier dann mal das zPNS
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.3.1, Autor: dtp
! 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 = "Empfänger01|xxxxxxxxx"; ! API-Basisschlüssel. Beispiel: "Empfänger01|xxxxKey1xxxx Empfänger02|xxKey2xx"
string HMinfoList = "Empfänger01|xxxxxxx"; ! 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 = "Empfänger01|-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 = 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 svPushUserList = ""; ! Empfängerlist für die Push-Nachrichten (z.B: "CCU SV Push Empfängerliste"), Voreinstellung: ""
string svPushImage = ""; ! Link auf ein anzufügendes Bild (z.B. "CCU SV Push Bild"), Voreinstellung: ""
string svPushoverSound = ""; ! 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 key; string HMinfo; string HMwarnung; string HMalarm; string prioMin;
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;
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){
! ----- 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");
message = message.Replace("royalblue", "#4169e1");
message = message.Replace("yellowgreen", "#9acd32");
! ----- 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;}
if(prio >= prioMin){
! ----- Informationsmeldungen -----
if((prio == -2) || (prio == -1) || (prio == 0)){
(dom.GetObject(ID_DATAPOINTS).Get("CUxD.CUX2801001:1.CMD_EXEC")).State("/usr/bin/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("/usr/bin/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("/usr/bin/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("/usr/bin/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", pictDelay * 1000);
}
}
}
}
! ----- Zurücksetzen eines vergebenenen Titels -----
if(title){(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverTitle)).State("");}
}
}
Ich habs auch schon nochmal kopiert auch ohne Erfolg...
Hab natürlich das alte Skript auch nicht gesichert...
Ich bekomme auch die Pushmails vom zBSP so oft hintereinander. Die hab ich ja nicht geändert.
Grüße