Homematic: Push-Nachricht versenden

kai am 16. Mai 2019 um 11:16

Mit der neuen CCU3 ist auch meine Begeisterung für Homematic wiedererwacht. Es ist einiges in Planung und im ersten Schritt habe ich mich entschieden von einer Benachrichtigung per Mail auf Push-Nachrichten umzusteigen.

Mit einem Dienst wie PushOver ist dies recht einfach und nahezu kostenfrei umsetzbar (lediglich die App kostet nach einer gewissen Zeit einmalig etwas Geld).

Nun sollte es aber die full-featured Lösung sein. Also nicht nur einfach eine Text-Nachricht, sondern die komplette (für mich sinnvolle) API von PushOver sollte unterstützt werden.

„Im Code steht die Wahrheit“, daher legen wir los…

!__Pushover Keys
string po_api_user="XXX";
string po_api_token="YYY";

!__Nachricht
string po_title=    dom.GetObject("PushOver_Subject").Value(); 
string po_message=  dom.GetObject("PushOver_Text").Value();

Die Key’s für den Zugriff auf PushOver bekommt ihr, wenn ihr Euch dort anmeldet. Die speichern wir in je einer Script-Variablen.

Die eigentliche Nachricht lesen wir aus vorher angelegen Systemvariablen aus. Diese sind beide als Zeichenkette angelegt:

  • PushOver_Subject
  • PushOver_Text
string po_file="-1";
if(dom.GetObject("PushOver_File").IsVar()){
  po_file = dom.GetObject("PushOver_File").Value();
}

Nun prüfen wir, ob ein Anhang mitgesendet werden soll. Das muss ein Bild sein, und auch kleiner als 2,5MB (Vergleiche PushOver-API).
Auch dieses müssen wir vorher in eine Systemvariable (Zeichenkette) schreiben. Hier natürlich nur den Pfad zu der Datei, nicht die Daten selbst.
Die Prüfung mittels .IsVar() bietet die (saubere) Möglichkeit, das Script auch zu nutzen, wenn es die Systemvariable nicht gibt. Sie muss also nur angelegt werden, wenn man Bilder verschicken will.

string po_priority = "0";
if(dom.GetObject("PushOver_Priority").IsVar()){
 string po_priority= dom.GetObject("PushOver_Priority").Value();
}

Weiter geht es mit der Priorität der Nachricht. Hier haben wir verschiedene Stufen:

  • 0=Normal
  • 1=High (AudioVibration auch waehrend quiet hour)
  • 2=Emergency (Meldung Muss bestätigt werden, solange sound/Vibration)
  • -1=Low
  • -2=Lowest

Ich verwende nur 0 für alle Informationen und 2, wenn ein Rauchmelder ausgelöst hat.

string po_retry="0";
string po_expires="0";
if(po_priority=="2"){
    po_retry = "30";     ! -- alle 30 Sekunden erneute Benachrichtigung
    po_expires = "3600"; ! -- nach einer Stunde keine neue Benachrichtigung, Message bleibt ungelesen
}

Wenn die Prioritär auf „Emergency“ steht, kann man mit weiteren Parameter die Dringlichkeit definieren. Mittels „retry“ ist zu definieren, in welchen Zeitabständen der User erneut eine Benachrichtigung bekommt, bis er diese bestätigt hat. Mit „expires“ definieren, wir wann das Nerven ein Ende hat. Beide Angaben sind in Sekunden zu definieren.

string po_sound = "pushover"; ! -- let it be the default
if(dom.GetObject("PushOver_Sound").IsVar()){
    string sounds = "pushover;bike;bugle;cashregister;classical;cosmic;falling;gamelan;incoming;intermission;magic;mechanical;pianobar;siren;spacealarm;tugboat;alien;climb;persistent;echo;updown;none";
    integer idx = dom.GetObject("PushOver_Sound").Value();
    po_sound = sounds.StrValueByIndex(";", idx);
}

Nun wird es laut. Ich habe eine Systemvariable „PushOver_Sound“ die eine Werteliste ist. Über diese kann ein „Sound“ auch in einem Programm ausgewählt werden:

Die Systemvariable enthält dann nur den Index, welchem man in den Parameter für PushOver übersetzen muss. Daher die Ermittlung des Listenelements aus „sounds“ (muss mit Inhalt der Systemvariablen übereinstimmen!) per StrValueByIndex.

Nun haben wir alles zusammen, was wir brauchen und können das Kommando zusammenbauen:

string po_request = "/usr/local/addons/cuxd/extra/curl -s -k"; ! --inital command 

po_request = po_request # " --form-string \"token="#po_api_token#"\" ";
po_request = po_request # " --form-string \"user="#po_api_user#"\" ";
po_request = po_request # " --form-string \"message="#po_message.ToUTF8()#"\" "; !--Use UriEncode to get the Umlauts running
po_request = po_request # " --form-string \"title="#po_title.ToUTF8()#"\" ";
po_request = po_request # " --form-string \"sound="#po_sound#"\" ";

! -- Always, default is 0
po_request = po_request # " --form-string \"priority="#po_priority#"\" ";

!--Optionals
if(po_priority == "2"){
    po_request = po_request # " --form-string \"retry="#po_retry#"\" ";
    po_request = po_request # " --form-string \"expire="#po_expires#"\" ";
}

if(po_file != "-1"){
    !# -- Use -F here for upload function of curl
    po_request = po_request # " -F \"attachment=@"#po_file#"\" ";    
}

po_request = po_request # " https://api.pushover.net/1/messages.json";

Ich verwende hier das für mehrere Parameter – meiner Ansicht nach – besser lesbare Format mit „form-string“. So kann ich alle Parameter in beliebiger Reihenfolge anhängen. Die optionalen weglassen wenn sie nicht gebraucht werden und auch die spezielle Option für den Upload des Bildes (-F -> FileUpload via curl) nutzen.

Wichtig ist noch, die Freitexte richtig zu encodieren. Hierzu bietet die CCU (seit Version 2.29.22 (September 2017)) die Möglichkeit, „.ToUTF8()“ zu verwenden. Was eine universelle Codierung ist und auch Umlaute und Sonderzeichen erlaubt.

Was bleibt nun noch über …

dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State(po_request);

Raus damit!

Volvo Sensus – Das Navi-Update

kai am 31. Januar 2014 um 11:51

Bedienungsanleitung, Hinweise auf der Herstellerseite und auch div. Foreneinträge berichten von waren Horrorszenarien was die Laufzeit des Updates eines Volvo-Navigationssystems angeht. Nun war es auch bei mir so weit, das Update erreichte mich auf 4 DVDs per Post.

Ich will mehr »

Mautgebühren in den USA / Californien

kai am 30. Mai 2013 um 10:54

Da bei unserem Urlaub einige Unsicherheit herrschte, wie wir uns bzgl. der Mautgebühren (z.B. Golden-Gate-Bridge, San Francisco) zu verhalten haben will ich hier versuchen ein bisschen Hilfestellung zu geben für alle die, die das noch vor sich haben.

Ich will mehr »

HD+ Hinweis 110! Oder plötzlich kein Bild und Ton mehr

kai am 4. Januar 2013 um 19:06

Es ist Freitag Abend, die kurze erste Woche im neuen Jahr ist vorbei. Also entspannt auf das Sofa und Fernsehen. ARD und ZDF kein Problem. Doch RTL, SAT.1 und alle anderen „HD+ privaten“ hatten weder Bild noch Ton. Einzig der Receiver meldet mit Hinweis 110 das meine SmartCard nicht für den Empfang geeignet ist.

Das ist mir doch nun auch mal wieder einen Blogeintrag wert. Vielleicht hilft er ja anderen mit dem gleichen Problem.

Ich will mehr »

Symfony, symlinks und Cache Problem

kai am 20. Februar 2011 um 16:33

Nach einiger Zeit habe ich mal wieder an einem Symfony-Projekt gearbeitet und eine Kleinigkeit geändert. Eigentlich war es nur eine simple Konfigurationseinstellung. Notwendigerweise musste ich dafür den Cache löschen (symfony cc). Damit hatte ich mir dann aber erst richtig Probleme an Land gezogen.

Ich will mehr »

Telefonanschluss

kai am 15. August 2010 um 23:02

Mit meinem Umzug hat sich natürlich auch ergeben, dass mein Telefonanschluss mit umziehen musste. Das dies nicht ganz so einfach ist, kann sich wohl jeder denken, der schonmal umgezogen ist.

Ich will mehr »

Umgezogen

kai am 13. August 2010 um 19:55

Ich bin umgezogen! Der ein oder andere hat es sicher schon gehört oder sogar selbst mit angefasst beim renovieren bzw. beim Umzug selber. Vielen Dank dafür nochmal an dieser Stelle.

Ich will mehr »

Malle oder Sylt

kai am 28. Juli 2010 um 12:10

Heute morgen hatten wir mal wieder eine Reisegruppe als Begleitung im ICE nach Hamburg. Hellwach war ich, als ich die Truppe von etwa 10 18-20 jährigen erblickte. Mit einer Wollmütze und quitsch-oranger Warnweste bekleidet verteilten sie sich im Großraumabteil.

Ich dachte schon so bei mir „Na Mahlzeit, etwas Schlaf nachholen kannst Du Dir wohl abschminken“. Aber ich wurde absolut positiv überrascht. Nachdem die Truppe sich mit einem anderen Fahrgast geeinigt hatten das sie ihn Helmut nennen dürfen und dafür dann ruhig sind war alles prima.

Da muss ich also mal wieder eine Lanze für unsere „Jugend“ brechen. Mit einer Reisegruppe von Damen auf dem Weg nach Sylt (ohne ihre Männer versteht sich) im Bereich der 40er wäre die Fahrt mit Sicherheit nicht so ruhig verlaufen. Auch da konnte ich ja schon meine Erfahrungen machen.

Rauchmelder

kai am 22. Juli 2010 um 08:43

Schon immer plagte mich die Frage, ob ich denn auch wach werde, wenn ein Rauchmelder bei mir mal auslöst. Diese Frage ist nun beantwortet.

Ich will mehr »

Zeltlager

kai am 30. Juni 2010 um 22:59

„Nu is Zeltlager“ So wurde auch in diesem Jahr das in jedem Jahr stattfindende Zeltlager der Jugendfeuerwehren aus dem Landkreis Diepholz eröffnet. Zum ersten Mal seit vielen Jahren war ich nicht dabei. Es ist nun schon ein komisches Gefühl zu Hause bzw. auf der Arbeit zu sitzen und daran zu denken, wie es in den letzten Jahren so war.

Ich will mehr »