Push Mitteilungen an iOS / Android senden

Das Versenden von Push Nachrichten über die CCU2 an das eigene Smartphone, ist ein wichtiges Thema bei Homematic.
Der Pushdienst „Pushover“ bietet eine Menge Möglichkeiten und ist für iOS und Android nutzbar.

Kontoeinrichtung

Um Pushover nutzen zu können, muss ein Konto unter https://pushover.net/login eingerichtet werden.
Nach der Einrichtung, zeigt die Startseite direkt den User Key:

Diesen User Key benötigen wir später im Skript. Er wird dauerhaft angezeigt, also nur im Hinterkopf behalten wo er zu finden ist 😉 Zusätzlich können auch Geräte, „Quiet Hours“ und die e-Mail Adressen Konfiguriert werden. Wie das geht, findet bestimmt jeder selbst heraus.

Als nächstes muss noch eine neue Anwendung hinzugefügt werden, bzw. ein API Token erstellt werden. Dieser API Token wird auch später im Skript benötigt (!). Ein Klick auf „Apps & Plugins“ öffnet die App Verwaltung. Ein weiterer Klick auf „Create a New Application / API Token“ erzeugt den Token.

Die Felder im Dialog „Create New Application“Plugin“ werden wie folgt ausgefüllt:

  • Name: Frei Wählbar, wird in der Weboberfläche und der App angezeigt.
  • Type: Bitte „Application“ wählen
  • Description: Freitext
  • URL: -frei lassen-
  • Icon: Optional kann ein Icon hochgeladen werden, das sollte auch in der App angezeigt werden. Habe ich nicht getestet.
  • Dann noch die AGB lesen und falls einverstanden, Akzeptieren.

Der folgende Screenshot zeigt das Endergebnis und den Weg zur Tokenerstellung:

Nach dem Bestätigen, wird direkt der API Token angezeigt:

Der Token kann jederzeit erneut über „Apps & Plugins“ angezeigt werden. Er muss also nicht gesichert werden.

Somit haben wir jetzt den User Token und den API Token. Beide ändern sich nie und müssen geheim gehalten werden! Die Übertragung zum Pushover Server später aus dem Skript heraus, erfolgt natürlich verschlüsselt.

 

Homematic Script

Wichtig ist, dass der CUx Daemon auf der CCU2 installiert ist und ein Exec-Device mit der Seriennummer „1“ existiert. Falls die Seriennummer abweicht, muss das Skript entsprechend angepasst werden.

In der Variable po_api_user wird der User Key aus dem ersten Schritt eingetragen.
In der Variable po_api_token wird der API Token aus dem zweiten Schritt eingetragen.

!__Pushover Keys
string po_api_user=„aaaaaaa“;
string po_api_token=„bbbbbb“;
!__Nachricht
string po_title=„Beispieltitel“;
string po_message=„Beispieltext“;
string po_sound=„none“;
string po_priority=„0“;
!___Nur benoetigt wenn Prioritaet auf Emergency (2) gesetzt ist
string po_retry=„30“;
string po_expires=„3600“;
!___Erlaeuterungen
! Sounds: pushover, bike, bugle, cashregister, classical, cosmic, falling, gamelan, incoming, intermission, magic, mechanical, pianobar, siren, spacealarm, tugboat, alien, climb, persistent, echo, updown, none
!Prioritaeten: 0=Normal; 1=High (AudioVibration auch waehrend quiet hour); 2=Emergency (Meldung Muss bestätigt werden, solange sound/Vibration); 1=Low ; 2=Lowest
! Bei Prio 2: po_retry gibt an (in sekunden), wie hauefig eine Nachricht vom Server geschickt wird (z.B. alle 30s)
! Bei Prio 2: po_expires gibt an (in Sekunden), wie lange nachrichten geschickt werden sollen. Bestätigt der User, stoppt die Benachrichtigung. Beispiel: Alle 30 sekunden wird eine Nachricht geschickt, das passiert eine Stunde lang (1 Stunde = 3600 sekunden).
! NICHT MODIFIZIEREN
string po_request;
if(po_priority==„2“){
po_request=„/usr/local/addons/cuxd/curl -X POST -k -H \“Content-Type: application/x-www-form-urlencoded\“ -d \“token=“ # po_api_token # „&user=“ # po_api_user # „&title=“ # po_title # „&priority=“# po_priority # „&sound=“ # po_sound # „&retry=“# po_retry # „&expire=“ # po_expires # „&message=“ # po_message # „\“ https://api.pushover.net/1/messages.json“;
}
else{
po_request=„/usr/local/addons/cuxd/curl -X POST -k -H \“Content-Type: application/x-www-form-urlencoded\“ -d \“token=“ # po_api_token # „&user=“ # po_api_user # „&title=“ # po_title # „&priority=“# po_priority # „&sound=“ # po_sound # „&message=“ # po_message # „\“ https://api.pushover.net/1/messages.json“;
}
dom.GetObject(„CUxD.CUX2801001:1.CMD_EXEC“).State(po_request);

Nun kann direkt die Nachricht eingegeben werden, dazu einfach diesen Block im Skript anpassen:

!__Nachricht
string po_title=“Beispieltitel„;
string po_message=“Beispieltext„;
string po_sound=“none„;
string po_priority=“0„;

Ein wichtiger Hinweis noch: Der Text muss URL kodiert werden. Das bedeutet, dass Umlaute wie folgt ersetzt werden müssen:

Ä wird ersetzt durch %C3%84
ä wird ersetzt durch %C3%A4
Ö wird ersetzt durch %C3%96
ö wird ersetzt durch %C3%B6
Ü wird ersetzt durch %C3%9C
ü wird ersetzt durch %C3%BC

Genaugenommen muss auch das Leerzeichen durch ein %20 ersetzt werden, es funktioniert aber auch, wenn man das nicht macht. Wer es sich einfach machen will, verwendet einfach einen online URL Encoder, wie z.B. diesen hier. Einfach den Text normal eingeben und auf „Encode“ klicken. Das Ergebnis dann in das Skript kopieren.

Erläuterungen

Ich habe bereits ein paar einfache Erläuterungen in das Skript gepackt, damit sie genau dort sind, wo man sie benötigt, falls das Skript später angepasst werden soll. Die detaillierte Erklärung, insbesondere zu den Prioritäten erfolgt aber hier.

Prioritäten

Beim Versand einer Nachricht, wird eine Priorität festgelegt. Die Prioritäten werden wie folgt interpretiert:

  • Priorität -2 (Lowest Priority): Es wird keine Benachrichtigung auf dem Smartphone erzeugt. Bei iOS wird aber der Zähler an dem App Icon erhöht.
  • Priorität -1 (Low Priority): Es wird kein Sound oder Vibration erzeugt, jedoch eine Notification in der Notification bar. Meldungen, die in einer Quiet Hour gesendet werden, werden wie Priorität -1 behandelt.
  • Priorität 0 (Normal Priority): Akustische Benachrichtung bzw. Vibration und Notifaction in der Notification Bar. Letztendlich wie eine WhatsApp Nachricht.
  • Priorität 1 (High Priority): Die Quiet Hour wird ignoriert, es wird trotzdem ein Sound abgespielt, bzw. die Vibration erfolgt. Zusätzlich wird die Nachricht Rot hervorgehoben.
  • Priorität 2 (Emergency Priority): Wie bei Prio 1. Zusätzlich wird die Nachricht in einem vordefiniertem Intervall (variable po_retry, Zeit in Sekunden) permanent an das Handy geschickt, bis der User sie bestätigt. Das ganze passier über eine definierte Zeitdauer (Variable po_expires, Zeit in Sekunden). Somit wird sichergestellt, dass der BEnutzer definitiv reagiert, wenn ein kritisches Ereignis eintritt. Z.B.: Einbruc, Rohrbuch oder Regen wenn ein Fenster geöffnet ist.

Sounds

Standardmäßig wird ein default Sound abgespielt. Dieser kann im Smartphone auch verändert werden. Über den Sound-Parameter kann jedoch ein vordefinierter Sound abgespielt werden. Die genaue Liste aller Möglichkeiten steht im Skript. Einfach rumspielen…

Push Mitteilungen an iOS / Android senden
Markiert in:                                         

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.