Raspberry Pi + Android Bewegungsmelder

Projekte

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 droid-lernen.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 droid-lernen.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.

 



, , , , , , , , ,


29 Kommentare

  1. iO sagt:

    gibt es so was auch für iOS?

  2. Michael sagt:

    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

    • Felix sagt:

      Hallo Michael,
      ich verstehe nicht ganz, was du vor hast?

    • Michael sagt:

      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

    • Felix sagt:

      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.

    • Michael sagt:

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

      Es scheitert am syntax

      lg

    • Felix sagt:

      Zeile 25: message = "Hallo Welt"

    • Michael sagt:

      Ich danke dir.

      Jetzt stürzt mir die APP ab.

      Muss ich mal drüben nachfragen 😉

      Danke Danke

  3. Ich sagt:

    Cool… Ist eine App inzwischen im PlayStore?

  4. Ich sagt:

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

  5. Ich sagt:

    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?

  6. Ich sagt:

    Ich werde allerdings immer wieder darauf aufmerksam gemacht, dass Google Cloud kostenpflichtig ist. Wie umgehe ich das?

    • Marvin sagt:

      Hallo,

      Wo wirst du denn darauf aufmerksam gemacht?

      Wenn ich in die Cloud Konsole schaue, dann finde ich dort kein Kontingent.
      Bei allen Dingen, die kostenpflichtig sind oder auch nur ein Kontingent haben bekomme ich dieses angezeigt. Wie zum Beispiel bei der Google Speech API.

  7. Ich sagt:

    Dort steht immer was von 30Tage kostenlos testen und was von 15gb Kontingent.
    brauche ich das speech api?

  8. Marvin sagt:

    Hallo,

    wie bereits angesprochen.
    Die Google Cloud Platform vereint hunderte von Schnittstellen und Business-Services in einer Oberfläche.
    Die Nutzung der Cloud Platform Oberfläche an sich und vieler Schnittstellen (z.B. GCM) ist kostenlos.

    Wer mehr brauch, der muss auch zahlen.
    Deine angesprochenen 30 Tage Testversion für die Google Cloud Platform, sind in Wirklichkeit 60 Tage zum Ausprobieren der Business-Services.
    Darunter zählen zum Beispiel Datenbanken, Cloud Computing, Big-Data Analysen, Online Speicher und natürlich sind dort auch alle Schnittstellen integriert, die wir auch kostenlos nutzen können.

    Hier findest du mehr Infos zu den 60 Tagen Testversion: https://cloud.google.com/free-trial/?hl=de

    Wenn du wissen möchtest, wie was berechnet wird, dann siehe hier: https://cloud.google.com/products/calculator/?hl=de

    Ich kann natürlich nicht dafür garantieren, dass die Services nicht mal kostenpflichtig waren oder in Zukunft wieder kostenpflichtig werden, aber momentan musst du nichts bezahlen, wenn du dich an unsere Anleitung hältst.

  9. Ich sagt:

    Und was ist das? Mein Entwickleraccount ist aber kostenpflichtig?
    medienpapst.com/android-entwickler-account-erstellen/

    • Felix sagt:

      Willst du deine persönliche App etwa in den PlayStore hochladen? Das macht keinen Sinn. Du kannst die App selbst kompilieren und ohne Store auf dein Android Smartphone übertragen.

  10. Ich sagt:

    Wofür benötige ich nun den API KEY?

  11. Bernd sagt:

    Super Tutorial funktioniert auch alles super!!
    Wie müsste ich den Quelltext anpassen um einfach einen vordefinierten Text ans Handy zu schicken? Was müsste ich also am Ende eines Programms ergänzen? Als Beispiel wenn ich meinem Handy etwas über Telegramm schicke:
    Im /home/pi/tg/test.lua Verzeichnis

    elseif (string.lower(msg.text) == 'pc an') then
      local handle = io.popen("/home/pi/pc1")
      local res = handle:read("*a")
      os.execute("/home/pi/tg/send_script "..msg.from.print_name.." 'Computer wurde eingeschaltet' ")
      handle:close()
      return

    Was müsste ergänzt werden damit ich auf mein Handy die Push-Nachricht „Computer wurde eingeschaltet“ bekomme anstelle der Antwort per Telegram.
    Hoffe es war eine verständliche Frage

    • Felix sagt:

      Du könntest ein (Python) Skript schreiben, welches eben jene Push-Nachricht versendet (siehe Beispiel hier) und dieses statt dem send_script aufrufen.

Schreibe einen Kommentar

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

Blog abonnieren

Abonniere Tutorials-RaspberryPi, um kein Tutorial mehr zu verpassen!