Raspberry Pi + Android: Benachrichtigungen von Bewegungsmelder

In diesem Tutorial geht es um das Zusammenspiel von dem Raspberry und Android Geräten. Im speziellen nutzen wir die Push Benachrichtigungen vom Android System, welche wir bei bestimmten Aktionen auslösen: Dazu soll z.B. bei der Aktivierung eines Bewegungsmelder oder dem Öffnen von Fenstern eine Nachricht an verbundene Android Devices gesendet werden. Anwendung finden kann dies in einer Raspberry Pi Alarmanlage.

Dies ist der erste von mehreren Teilen, in denen wir die Zusammenarbeit mit Android Smartphones und Tablets nutzen.

Alle Android-relevanten Tutorials findest du dazu auf staticfloat.de.

 

Zubehör

Neben einem Android Device (Smartphone/Tablet/Phablet), welches mit dem Internet verbunden ist, brauchst du noch folgendes, um den Aufbau dieses Tutorials nachzubauen:

 

Dabei spielt die Anzahl der Bewegungssensoren keine Rolle, da das Skript sehr einfach anpassbar ist. Du kannst sogar mehrere Raspberry Pi’s z.B. in verschiedenen Zimmern aufstellen und das unten verfügbare Skript mit kleinen Änderungen auf allen laufen lassen.

Falls sich jemand fragt, warum das Tutorial nur für Android OS erscheint und nicht für iOS oder Windows Mobile: Nicht nur aufgrund des enorm größeren Marktanteil, sondern auch aufgrund des einfacheren Zugriffs und Erstellung eigener Apps, bietet sich Android mehr als andere mobile Betriebssysteme an. Außerdem sind gute Android-Mittelklasse Smartphone bereits ab 100€ verfügbar, wohingegen selbst veraltete iPhones noch ein vielfaches kosten.

Im Folgenden kannst du dir bereits einmal ein solches Setup ansehen:

 

 

Vorbereitung und Aufbau

Bevor wir auf dem Raspberry Pi loslegen, sollten wir die App zum Empfangen der Daten erstellen. Wie das genau funktioniert und was zu beachten ist, ist hier auf staticfloat.de ausführlich erklärt. Die App muss auf dem Smartphone installiert sein und einmalig gestartet sein, da sie als Empfänger der Daten, die wir anschließend senden, dient.
Geplant ist von unserer Seite bald auch eine App im PlayStore zu veröffentlichen, sobald wir mehrere Projekte erstellt haben.

 

Anschließend kümmern wir uns um den Aufbau. Es müssen nicht sowohl PIR Bewegungsmelder als auch die Fenster Magnetkontakte verwendet werden, aber es können auch mehrere Module von beiden genutzt werden. Der Aufbau dazu ist immer der gleiche, wobei jeweils an freier GPIO verwendet werden muss und das Skript anschließend angepasst wird.

Die generelle Benutzung von PIR Bewegungsmelder und Fenster Reed-Relais wurde ja bereits in vorherigen Tutorials gezeigt. Der Aufbau unterscheidet sich nicht sonderlich davon und sieht schematisch folgendermaßen aus:

Raspberry Pi Android Bewegungsmelder Alarmanlage Steckplatine

PIR Bewegungsmelder und Fenster Magnetkontakt richtig anschließen.

Wie du siehst habe ich GPIO23 als Datenpin des PIR Sensors benutzt und für das Magnetrelais GPIO24. Falls der Magnetkontakt „geschlossen“ ist (d.h. Magnete nah beieinander), bekommt der GPIO eine Spannung von 3.3V. Andernfalls besteht eine Verbindung zu GND über einen 10kΩ Widerstand, damit der GPIO einen eindeutigen Zustand (LOW) bekommt. Für uns ist in beiden Fällen nur die Flanke von HIGH zu LOW interessant, da diese aussagt, dass eine Bewegung stattfand (Bewegungsmelder aktiviert oder Fenster geöffnet).

 

 

Code um Push Benachrichtigungen zu senden

Falls du die App erstellt und kompiliert hast, wirst du den Google Cloud API Key bereits haben (falls nicht, steht hier wie man ihn bekommt). Diesen werden wir gleich im Skript eintragen müssen.

Zuerst erstellen wir ein Skript

sudo nano android-bewegung.py

mit folgendem Inhalt:

 

In Zeile 5 gilt es deinen API Schlüssel einzutragen. Nach dem Speichern und Beenden (STRG+O, STRG+X) kann das Skript bereits ausgeführt werden (sudo python android-bewegung.py). Die Benachrichtigungen sollten nun auf dem Smartphone eintreffen. Damit direkte Bewegungen hintereinander mehrfach erkannt werden, gibt es eine sog. „Cooldown“ Zeit, die nach der letzten Aktivierung dieses Moduls gewartet wird, bis die nächste Nachricht gesendet wird. Dies, sowie alle anderen Parameter kannst du natürlich individuell deinen Ansprüchen anpassen.

Wichtig: Falls du mehrere gleiche Module benutzt (z.B. für mehrere Fenster), sollte jeder vergebene Name eindeutig sein, um die Push Nachrichten auf dem Android Gerät auch eindeutig identifizieren zu können. Auch falls du einen zweiten Pi mit diesem Skript (und selben API Key) nutzt, müssen sich die Modulnamen von jenen unterscheiden.

 

Autostart

Damit das Skript nun auch immer startet, sobald der Pi bootet, tragen wir es noch in den Autostart ein. Dies können wir mittels rc.local machen oder eben Crontab.

In diesem Tutorial nutze ich crontab. Wir öffnen den Konsoleneditor

crontab -e

und fügen folgende Zeile ans Ende (Pfad ggf. anpassen):

@reboot sudo python ~/android-bewegung.py

Nach einem Neustart (sudo reboot) wird das Skript nun automatisch gestartet und läuft im Hintergrund weiter. Um es rauszunehmen, brauchst du einfach nur diese Zeile zu löschen und nach einem Neustart wird es nicht mehr automatisch geöffnet.

 

45 Kommentare

  1. Hallo,

    Erstmal danke für dieses grandiose Projekt.

    Ich würde gerne aus einer normalen If-Anweisung herraus zb „Hallo Welt“ schicken.

    Leider beiße ich mir an der Zeile die Zähne aus.

    os.system('curl --header "Authorization: key="'+AUTH_KEY+' --header Content-Type:"application/json" '+SEND_URL+' -d '{"to":"'+SENDER_CHANNEL+'", "data": {"message": "'+message+'" }}'');

    ist das mit großem Aufwand verbunden?

    lg

    Antworten
    • Ich nutze ein Programm welches mir Backups erstellt.
      Nach fertigstellung hätte ich gerne eine Benachrichtigung auf mein Smartphone.

      Ich müsste also nicht auf gpio’s reagieren.

      Sondern einfach am ende des Programms die Meldung schicken.

      lg

      Antworten
      • Dann kannst du den Befehl so verwenden und musst nur die Variablen ersetzen. Sprich den API_Key, ein Topic und eine Nachricht (wir geben hier ein JSON Objekt als String an) angeben.

    • Aber wie müsste ich den Befehl dann bearbeiten damit er mir zb einfach „Hallo Welt“ schickt?

      Es scheitert am syntax

      lg

      Antworten
  2. ok das ist cool. Ich lese in manchen Quellen davon, dass Google Cloud Messaging Dienst (GCM) kostenpflichtig ist. Ist das korekt?

    Antworten
  3. Achso das ist ja super. Wo finde ich denn Daten wie lange das nichts kostet. Und ich bin irgendwie zu blöd, weil ich finde die App nicht. Kann mir da jemand helfen?

    Antworten