EgiGeoZone und GCM-Nachrichten
Allgemeines
EgiGeoZone kann nun GCM-Nachrichten (Google Cloud Messaging) empfangen.Google Cloud Messaging (GCM) ist ein kostenloser Dienst, mit dem Nachrichten (Daten) von Servern aus, die GCM implementiert haben, über einen zentralen GCM-Server von Google an Android-Apps gesendet werden können. Meistens handelt es sich dabei um einfache Kurznachrichten, die den Status von z.B. Geräten anzeigen.
Diese Art von Benachrichtigungen werden auch noch Push-Nachrichten genannt.
Anbei wird nun die Konfiguration anhand des FHEM-Servers und dessen Modul gcmsend beschrieben.
GCM bei Google registrieren
Um GCM nutzen zu können, muss man sich für den Dienst bei Google registrieren.Dafür auf die Seite https://console.developers.google.com/project gehen und sich dort anmelden.
Falls man das erste Mal die Google Developer Console besucht, wird man aufgefordert ein neues Projekt anzulegen. Dafür klickt man auf „Create Project“.
Im nächsten Schritt wird man nach einen Projektnamen gefragt. Hier kann man einen beliebigen Namen eintragen. Z.B. EgiGeoZone.
Dann eine Project ID vergeben, die „Terms of Service“ akzeptieren und durch Klick auf „Create“ das Projekt anlegen.
Projektnummer
Nachdem das Projekt erzeugt wurde, sieht man oben in der Mitte eine Projektnummer (Project Number). Diese Projektnummer wird später bei der Konfiguration von GCM in der App benötigt. Also bitte merken. Man kann die Nummer auch später nochmals beim Besuch dieser Seite ersehen.
Beispiel: Project Number: 1234567890
APIs & auth: Schnittstelle GCM für Android aktivieren
Unter dem Menüpunkt APIs & auth dann APIs anwählen. Hier sieht man ein paar von Haus aus freigeschaltete Schnittstellen. Zusätzlich brauchen wir noch Google Cloud Messaging for Android. Dazu rechts auf den Button OFF klicken, um die Schnittstelle zu aktivieren. Die Nutzungsbedingungen akzeptieren und die aktivierte Schnittstelle rutscht nun an den Anfang der Liste nach oben.API Key: Server Schlüssel erzeugen
Unter dem Menüpunkt Credentials nun Create new Key wählen. Danach auf Server key klicken.
Anschließend auf Create klicken. „Accept requests from these server IP addresses” muss nicht gefüllt werden.
Auf der nächsten Seite wird uns nun der API KEY angezeigt. Diesen Schlüssel brauchen wir zur späteren Konfiguration auf dem Server.
Dieser Schlüssel kann bei Bedarf auch neu generiert oder gelöscht werden.
Konfiguration der App EgiGeoZone für GCM
Unter Verwaltung kann man nun die vorhin erhaltene GCM-Projektnummer angeben.Danach GCM-Nachrichten empfangen aktivieren. Die Registrierung mit dem GCM-Dienst erfolgt nun im Hintergrund. Dazu braucht man eine aktive Internet-Verbindung. Nach wenigen Sekunden erscheint ein Dialog und zeigt den generierten API-Client Key an. Dieser wird auch sofort zur weiteren Verwendung in die Zwischenablage kopiert. Diesen Schlüssel braucht man später bei der Serverkonfiguration.
Server Konfiguration (Fhem)
Hier wird das gcmsend-Modul aus FHEM konfiguriert. Andere Server sind analog zu betrachten.Das gcmsend-Modul 98_gcmsend.pm aus dem contrib-Verzeichnis von FHEM kopieren und die richtigen Rechten dazu vergeben. Der FHEM-benutzer unter dem der Server läuft, muss das Skript lesen können.
Dazu müssen auch noch die abhängigen Module
LWP::Protocol::https (download from here
Mozilla::CA (download from here
installiert werden.
Nun in FHEM ein GCM-Gerät erstellen:
define <gcm_device_name> gcmsend
Damit FHEM nun mit GCM sprechen kann, muss nun der Server-API-Key, welchen wir beim Anlegen des GCM-Projekts erhalten haben, eintragen werden:
attr <gcm_device_name> apiKey <apiKey>
Und zuletzt muss man noch den API-Client-Key, welcher in der EgiGeoZone App generiert wurde, angeben. Somit weiß nun FHEM an wen die Nachrichten gesendet werden sollen. Hier kann man auch mehrere Client-Keys getrennt mit „|“ angeben.
Anmerkung: andFHEM trägt diese Keys selber in Konfiguration ein. Wir müssen diese manuell hier eintragen, da EgiGeoZone keine Änderungen an FHEM durchführt!
attr <gcm_device_name> regIds <apiClientKeys>
Die restlichen optionalen Attribute wären:
gcmsend_stateFilter
Sendet eine GCM-Nachricht nur, wenn das Attribut der RegExp des Attribut Filters entspricht.
gcmsend_vibrate
Gibt an, ob das empfangende Gerät (Smartphone) vibrieren soll oder nicht. Werte: true oder false
Beispiel: attr <gcm_device_name> vibrate true
gcmsend_deviceFilter
Sendet eine GCM-Nachricht nur, wenn das Gerät der RegExp des Filters entspricht.
gcmsend_playSound
Gibt an, ob das empfangende Gerät (Smartphone) einen Benachrichtigungton ausgeben soll oder nicht. Werte: true oder false:
Beispiel: attr <gcm_device_name> playSound true
Siehe dazu auch:
http://andfhem.klass.li/installation.html#gcm
http://forum.fhem.de/index.php/topic,14064.0.html
Das gcmsend-Modul hat im Wesentlichen zwei Methoden.
Eine Methode sendet Statusänderungenen per Push automatisch entsprechend der Filtereinstellungen an die Endgeräte (Handys).
Über die zweite Methode kann man Benachrichtigungen das Gerät senden.
Beispiel:
define dummy_standby_notify notify Fernseher:standby set gcm send
Standbymeldung|Fernseher|Der Fernseher ist nun im standby
Zum Testen: kann man in Fhem folgenden Befehl eingeben:
set gcm send Achtung|Einhornalarm|Das Einhorn frisst schon wieder
das Popcorn!
In EgiGeoZone wird zwischen Statusänderungen und
Benachrichtigungen
unterschieden. Statusänderungen
und Benachrichtigungen werden von nachfolgend ankommenden
Nachrichten überschrieben. Es ist immer nur die letzte sichtbar.EgiGeoZone zeigt bei den Statusänderungen den deviceName und seine changes an.
Beispiel:
Andere Server
Nachrichten von anderen Servern werden einfach als Ganzes angezeigt.