Code: Alles auswählen
/usr/bin/curl
Moderator: Co-Administratoren
Code: Alles auswählen
/usr/bin/curl
Code: Alles auswählen
!Variablen definieren
string message = "Testnachricht";
string key = "xxxxxxxxx"; ! API-Basisschlüssel
string HMinfo = "xxxxxxxx"; ! Token für Info-Meldungen
!Textnachricht versenden
(dom.GetObject(ID_DATAPOINTS).Get("CUxD.CUX2801001:1.CMD_EXEC")).State("/usr/bin/curl -s -k -d token='"#HMinfo#"' -d user='"#key#"' -d message='"#message#"' -d priority=0 -d html=1 https://api.pushover.net/1/messages.json");
WriteLine("okay");
So war es gemeint
Das Skript funktioniert ohne Problem. Kann ich jetzt den teil einfach so in das vorhandene Script einsetzen oder war das nur zum testen und in den Script kommt was anderes?
Du hast recht, und wer hat gibt einen aus
Ich hab jetzt nochmal das aktuelle Cript aus dem ersten Beitrag runtergeladen. Hab die Basis API sprich den Userkey eingetragen und den API Key dem ich HM zugeordnet habe. Beide API sind direkt von Pushover per Copy&Paste ins Script gekommen. Ich häng hier nochmal die SV, das Prog für das zPNP und Script an. Ich bin sehr sehr sicher das mir dort keine Fehler unterlaufen sind.
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.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|uxxxxxxxxx1"; ! API-Basisschlüssel. Beispiel: "Empfänger01|xxxxKey1xxxx Empfänger02|xxKey2xx"
string HMinfoList = "Empfänger01|axxxxxxxxxxo"; ! 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 == "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(" ")){
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");
}
}
}
}
! ----- Zurücksetzen eines vergebenenen Titels -----
if(title){(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverTitle)).State("");}
}
}
! Setzen der Push-Nachrichten-Referenz und Zurücksetzen der URL eines übertragenen Bilds
! weitere Informationen unter http://homematic-forum.de/forum/viewtopic.php?f=31&t=26282
! Version 4.0, Autor: dtp
! +++++ 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 = ""; ! Link auf ein anzufügendes Bild (z.B. "CCU SV Push Bild"), default: ""
! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################
! +++++ Zurücksetzen der Systemvariablen +++++
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushTextRef)).State((dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText)).Value());
if((dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushImage))){
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushImage)).State(""); ! URL eines übertragenen Bilds zurücksetzen
}
if((dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushUserList))){
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushUserList)).State(""); ! Empfängerliste zurücksetzen
}
Dieses erforderliche Skript fehlt bei dir (zumindest auf dem Bild)
Du hast es zwar nicht vergessen, aber es darf auch nicht einfach an das zPNS-Po hinten angehängt werden. Bitte füge es als separates Skript in das zPNP ein, wie in der Anleitung beschrieben.