Pushbenachrichtigungen mit Pushover und ESP-Mikrocontroller

Pushbenachrichtigungen mit Pushover und ESP-Mikrocontroller

Sinn und Unsinn

Im Umfeld mit mobilen Geräten kennen wir sie, Pushbenachrichtigungen. Sie „ploppen“ auf diversen Geräten auf, egal ob iPhones, Desktops oder Tablets. Jeder möchte sie, aber jeder hasst sie gleichermaßen. Dennoch haben sie einen Sinn und eine Daseinsberechtigung.

Pushbenachrichtigungen sind immer dann sinnvoll, wenn man als Sender aktiv Empfänger erreichen möchte. Nehmen wir an, du hast einen Mikrocontroller zur Alarmanlage genutzt. Nun bringt dir aber eine Message in einer Weboberfläche nichts –  da du sie schlichtweg nicht siehst. Ein anderes Beispiel sind Börsenticker, da möchtest du zügig über Kursänderungen informiert werden, da es dabei um Geld geht.

Und genau da kommen Pushbenachrichtigungen zum Tragen.

Auch sind damit digitale Alarmsysteme für den Zivil- und Katastrophenschutz denkbar und teilweise auch umgesetzt. In Deutschland gibt es dazu eine App „Nina“ und wird vom Bundesamt für Bevölkerungsschutz und Katastrophenhilfe angeboten. Ein populäres Negativbeispiel dürfte das Warnsystem von Hawaii sein, welches vor Kurzem aus Versehen ausgelöst hatte und damit Unmengen an Mensch verängstigt hat.

Die Technik dahinter

Zur Kommunikation ist immer ein Server und ein Gateway notwendig. Apple bietet mit seinem Apple Push-Notification Service einen Dienst an, ebenso wie Google mit Google Cloud Messaging Service.

Im Grunde gliedert sich der Ablauf der Notifications wie folgt:

  • Das System registriert sich beim Hersteller des Betriebssystems oder der App
  • Als Rückgabe erhält das Gerät eine eindeutige ID womit das Gerät identifiziert werden kann (so können Empfängerkreise erstellt werden)
  • Diese ID wird an den eigenen Server übertragen und in einer Datenbank gespeichert.
  • Wird nun ein Event am Server erzeugt, was eine Pushbenachrichtigung auslöst, gibt der Server dies an den Service des Herstellers weiter, mit einem entsprechenden Empfängerkreis oder einem Broadcast an alle (Das Verhalten ähnelt sehr der Echtzeitkommunikation mit ESP32/ESP8266 via Websockets)
  • Der Service sendet dann den Inhalt der Nachricht an alle Empfänger

Es wird zwingend eine App benötigt

Damit man aber nun Pushbenachrichtigungen empfangen kann, am besten von seinem eigenen Server, muss man in der Theorie eine eigene App für iOS oder Android bauen. Gerade für Nutzer von Apple-Geräten ist dies schwierig, da man für die Entwicklung eigener Apps zwingend einen Mac benötigt oder eben ein Framework für Hybrid-Apps bzw. Progressive Web Apps, wie z.B. Ionic (welches auf AngularJS und Apache Cordova [PhoneGap] basiert).

Will man aber keine eigene App zaubern, weil das Wissen oder die Zeit fehlt, kann man auch auf entsprechende Anbieter zurückgreifen, wie in diesem Falle Pushover.

Pushover als Pushnotification-Broker

Pushover ist prinzipiell nichts anderes als die Services von Google oder Apple, sie bieten eine App an, mit der man auf diversen Geräten (vom Desktop bis hin zu mobilen Geräten) Notifications empfangen kann. Der große Vorteil an Pushover ist, man muss nur die API mit Daten füttern und es ist kostenlos*. Das einzige was man dafür machen muss ist, sich bei Pushover zu registrieren und seine App bei dem Dienst bekannt zu machen. Jede App kann bis zu 7.500 Nachrichten pro Monat umsonst versenden.

Die Clients (iOS, Android und Desktop) kosten jeweils pro Plattform $4.99, was sich meiner Meinung nach, gemessen an dem Umfang, lohnt.

* Danke an einen netten Facebook-User, der mich auf die Kosten hingewiesen hat. Scheinbar war meine Installation auf dem iPhone von Pushover noch aus Zeiten, als diese kostenfrei war, daher war mir der Kostenpunkt nicht aufgefallen.

Registrierung der eigenen App

Die Registrierung der eigenen App ist recht einfach. Hier loggt man sich bei Pushover ein und kann dort unter „Apps & Plugins“ seine App registrieren. Hier gibt es auch schon einige Apps, die Pushover integrieren. Mit einem Klick auf „Create a New Application / API Token“ kann man dann seine App anlegen:

Danach bekommt man dann eine Übersichtsseite seiner App mit Statistiken (wieviele Nachrichten wurden wann versendet) und den Einstellungen der App. Auch bekommt man hier seinen API-Key zugewiesen, den man später für das Versenden von Nachrichten benötigt. Dieser sollte nur dir bekannt sein, da man mit diesem Key fröhlich Nachrichten versenden kann.

Nutzer können Benachrichtigungen selbst ein- und ausschalten

Was ich persönlich sehr cool finde ist, dass man sich auch bei bestehenden Apps einschreiben kann, dass man hier auch Notifications erhält. Hierzu muss man nur eine Subscription für seine App erstellen. Dies ist sinnvoll, wenn man bei einer Hausautomation mehrere Familienmitglieder hat. Die Benutzer kann man auch in Gruppen einteilen und selektiv Nachrichten an Gruppen versenden.

Man kann generell Nachrichten an bestimmte User, Geräte oder Gruppen versenden.

Features von Pushover

Ich persönlich habe mich für Pushover entschieden, da es eine Vielzahl an nützlicher Features anbietet, die man auch noch kostenfrei nutzen kann:

  • Man kann Nachrichten zeitlich planen
  • HTML kann innerhalb von Nachrichten verwendet werden
  • Nachrichten mit Prioritäten versehen
  • Device-Links nutzen, z.B. tel:// oder twitter:// (so kann man native Funktionen des Gerätes aufrufen)
  • Eigene Notifications-Sounds
  • Anhänge
  • Seit neustem (Version 3.0) kann man auch Bilder versenden, die direkt angezeigt werden (sehr nützlich bei Kameraüberwachungen die auf Bewegungen reagieren)
  • Eigene Mailadresse. Schickt man hier Mails hin, wird daraus eine Pushbenachrichtigung
  • Definierbare Ruhezeiten
  • Kleine Nachrichten können auch, über die Glance API, direkt an eine Apple Watch versendet werden

Pushover bietet zur Nutzung der API und der Features eine sehr gute und detaillierte Anleitung als Doku an.

Testen der API

Wie bereits angesprochen, kann man die API über einfache HTTP-Requests ansprechen. Hierzu nutze ich ganz gerne die Ubuntu-Bash unter Windows 10 zusammen mit cURL. Eine einfache Nachricht wird mit dem nachfolgenden Code versendet:

curl -s \
  --form-string "token=APP_TOKEN" \
  --form-string "user=USER_KEY" \
  --form-string "message=this is a

message with a line break" \
  https://api.pushover.net/1/messages.json

Selbst mit der Powershell von Windows kann man Nachrichten versenden.

Implementierung im Mikrocontroller

Die Implementierung ist recht einfach und kann mit Hilfe der HTTPClient-Klasse erledigt werden. Hierzu habe ich mit eine einfache Funktion geschrieben (die kann natürlich als Wrapper-Klasse aufgebaut werden):

void pushover(String pushovermessage) {
  Debug.println("[pushover] Sending Message:");
  if (client.connect("api.pushover.net", 80) && usePushover) {
      int length;
      String Msg = pushovermessage;
      length = 81 + Msg.length();
    
      client.println("POST /1/messages.json HTTP/1.1");
      client.println("Host: api.pushover.net");
      client.println("Connection: close\r\nContent-Type: application/x-www-form-urlencoded");
      client.print("Content-Length: ");
      client.print(length);
      client.println("\r\n");
      client.print("token="+Token+"&user="+User+"&message="+Msg);
      /* Einkommentieren, wenn man die Rückgabe von Pushover auswerten möchte
      while(client.connected()) {
        while(client.available()) {
          char ch = client.read();
          Serial.write(ch);
        }
      }
      */
      client.stop();
      Debug.println("[pushover] Sending Message done");
    }else{
      Debug.println("[pushover] Deactivated");
    }
}

Damit dies klappt, muss man natürlich den API- und User-Key vergeben als Variablen deklarieren und entsprechend übergeben. Über den User-Key wird die App bzw. der Nutzer identifiziert.

Eine entsprechende Nachricht sähe dann auf meinem iPhone so aus:

Mehr braucht man auch eigentlich nicht, um Nachrichten von seinem Mikrocontroller (oder jedem anderem System) zu versenden.

Selbstverständlich bietet Pushover in den FAQs auch einige Beispiele für weitere Programmiersprachen (C#, Go, Haskell, Java, Node.JS, Powershell etc.).

Pushover bietet auch den Versand von Echtzeitnachrichten über Websockets an. Wie genau Websockets funktionieren und wie man diese auf Mikrocontrollern nutzen kann, erfährst du in meinem Beitrag Echtzeitkommunikation mit ESP32/ESP8266.