Raspberry Pi und RaspiCam zur Videoüberwachung nutzen mit MotionEyeOs
Ich habe letztens unter anderem eine als defekt zurückgeschickte Raspberry Pi Kamera rev 1.3 (Aufschrift "Sunny") geschenkt bekommen, die ein Freund für mich samt anderer "Rückläufer zur Entsorgung" vor dem Mülleimer gerettet hat.Die Kamera wollte ich natürlich ausprobieren, ob sie funktioniert und ein möglichst nützliches Projekt damit machen. Einen Raspberry Pi Zero V1 (mit WLAN und Header) hatte ich auch noch übrig, hatte ich doch mein OctoPrint-Server für meinen 3D-Drucker doch aufgerüstet: dort kommt jetzt ein Raspberry Pi Zero 2 W zum Einsatz, was das 3D-Drucken doch sehr viel flüssiger macht.
Man kann zwar mit dem Raspbian getauften Standard-Raspi-OS von der Raspberry Pi Foundation schon die Kamera ansprechen, zum Beispiel per Befehlszeile Standfotos oder Videos aufnehmen (siehe hierzu das Tutorial Getting started with the Camera Module von der Raspberry Pi Foundation). Aber mein Blick fiel auf MotionEyeOS, ein komplett fertiges OS (als Ersatz für Raspbian).
Wie ich das MotionEyeOS installiere, was es kann und welche Erfahrungen ich damit mache, soll Inhalt dieser Artikels sein. Warum die Cam nicht scharf stellen wollte (und darum ein berechtigter Rückläufer war) und wie ich das löste, erfahrt ihr in einem weiteren Artikel namens Raspberry Pi Kamera Rev 1.3 (Sunny) Fokus justieren und scharf einstellen.
Was kann MotionEyeOS?
Ihr wollt wissen, was man mit MotionEyeOS überhaupt alles anstellen kann, bevor ihr euch die Mühe macht, die Hardware zusammen zu stöpseln und das OS zu instalieren? Bitte sehr:MotionEyeOS will eine komplette Videoüberwachungssoftware für Einplatinencomputer sein. Es läuft übrigens nicht nur auf dem Raspberry Pi, sondern auch noch auf Banana Pi, Orange Pi, Pine, Nano Pi Neo2, Odroid C1x//C2/XU4x/HCx/MCx und Tinker Board. Da war jemand fleißig ;)
Mit MotionEyeOS kann man sich das Videobild, dass die Kamera (oder auch mehrere) live im Webbrowser anzeigen lassen, bei mehreren Kameras auch nebeneinander gekachelt. Dabei kann man je nach Leistungsfähigkeit des Raspis (ich beziehe mich im Folgenden nur noch auf die Raspberry Pis) an der Framerate und der Auflösung schrauben, was man über das Admin-Interface ebenfalls im Webbrowser bewerkstelligt.
Für meinen alten Raspi Zero V1 habe ich jetzt mal 10 Frames per Second (FPS) und eine VGA-Auflösung (640x480) gewählt. Das Bild kann man außerdem um 0°, 90°, 180° und 270° drehen, falls man die Kamera zum Beispiel kopfüber angebracht hat.
Und nun kommt das coole an der Software: es wäre ja ziemlich verschwenderisch ständig alles aufzuzeichnen. Dafür gibt es die Motion Detection. Hier kann man einstellen, wieviel Prozent des Bildschirms sich geändert haben muss und wielange die Änderung anhalten muss. Erst dann wird aufgenommen und das Video landet auf der Mikro-SD-Karte. Will man also seinen Garten überwachen und mitkriegen, was da immer nachts über (oder unter) den Zaun kommt und das PIR-Licht anschaltet, dann stellt man das so ein, dass nicht jede Fliege ein Video auslöst, Nachbars Katze aber schon. Oder wenn einen nur größere Tiere (wie Menschen oder große Hunde) interessieren, stellt man das noch unempfindlicher ein.
Die Bereiche des Bildes, die sich ändern, kann man umrahmen lassen. Das ist besonders in der Testphase nützlich, um ein Gefühl dafür zu bekommen, wie die Motion Detection "tickt" und welche Werte man einstellen muss. Hier muss man einfach ein bisschen mit den Reglern spielen.
Aufgenommene Videoschnipsel landen dann auf der Mikro-SD-Karte und lassen sich über Samba-Freigabe kopieren bzw. mit einem Videoprogramm wie VLC anschauen.
Außerdem lässt sich einstellen, in welchen Zeiträumen die Kamera "scharf" sein soll, also aufnimmt und wer will, kann sich auch eine e-mail bei jedem Aufnahme-Vorfall schicken lassen. Alternativ kann auch eine URL, etwa auf dem eigenen Webserver, aufgerufen werden.
Die Videos bleiben alle im eigenen Netzwerk und auf der SD-Karte, es geht nichts über das Internet, wie es bei so mancher gekauften IP-Kamera der Fall ist. Ich frage mich immer, wie man solch eine IP-Kamera kaufen kann, wo die Daten aus meinem Wohnzimmer dann wahrscheinlich nicht oder schlecht gesichert irgendwo in China landen und sich Hobby-Hacker einen Spaß daraus machen, sich die Videos anzuschauen.
Da halte ich MotionEyeOs für eine sehr viel bessere Lösung.
Die Hardware: was brauche ich?
Zuerst einmal einen Raspberry Pi. Es tut zur Not auch ein alter Raspberry Pi Zero V1, wie ich ihn hier auch benutze. Bei einem Raspi 2, 3 oder sogar 4 kann man natürlich die Framerate und Auflösung hochsetzen.
Dann natürlich eine Kamera, die per RaspiCam-Flachbandkabel angeschlossen wird. Dafür gibt es unterschiedliche Längen und Breiten, je nachdem welche Kamera man an welchen Raspi anschließt. Die hier verwendete Raspberry Pi Camera Rev 1.3 mit dem Aufdruck "Sunny" hat ein schmales Flachbandkabelende und der Raspi Zero hat ebenfalls ein schmales Flachbandkabelende. Hier muss man das richtige aussuchen bzw. kaufen.
Und dann braucht man natürlich noch eine Micro-SD-Karte. Da hier auch die Videos landen, besser 32 GB oder mehr statt nur 4 GB. Sonst passen da nur ein paar Tage drauf. Und selbstverständlich braucht man noch ein USB-Ladegerät (USB A auf Micro USB), das übrigens in den mit "PWR IN" bezeichneten USB-Port kommt und nicht in den mit "USB" beschrifteten. Bitte nicht verwechseln. Mein Gespann hat so durchgehend 150 mA im Betrieb an Strom gezogen. Allerdings kommt das natürlich auch auf Auflösung und Video-Codec an, wie sehr das den Prozessor auslastet. Je mehr Auslastung, je mehr Stromverbrauch. Also das Netzteil besser nicht unter 500 mA, besser 1A. Und selbstverständlich 5 Volt.
- Raspberry Pi, mindestens Pi Zero V1 mit WLAN (ca. 15 €)
- Raspi Cam, mindestens V1 (Sunny) (ca. 10 €, aus China günstiger)
- RaspiCam-Flachbandkabel für die Verbindung von Raspi und Cam (ca. 3 €)
- Micro SD Karte mit min. 4 GB für OS und Videos (ca. 5 €)
- USB-Ladegerät (sollte schon so 500 mA, besser 1 A liefern können) (ca. 5-10€)
Installation von MotionEyeOS
Nachdem wir jetzt alles an Hardware zusammen haben, geht es an die Software. Die bringt das MotionEyeOS-Image schon komplett mit und ist vorkonfiguriert. Im Prinzip nur downloaden, "flashen", einschieben, funktioniert. Im Prinzip. In der Praxis müssen wir noch eine Kleinigkeit mehr machen.Aber zuerst einmal das Image besorgen. Das motionEye Project wird bei Github gehostet. Dort sollte man sich natürlich zuerst das Readme zu Gemüte führen und dann einen Blick in das Wiki werfen, um das Wichtigste zu MotionEye zu erfahren.
Dann suchen wir uns auf der Supported Devices-Devices die richtige Version heraus. Es gibt unterschiedliche Images für
- Raspberry PI (A, B, A+, B+, Compute Module, Zero and Zero W models)
- Raspberry PI 2
- Raspberry PI 3 (B, B+, A+, Compute Module 3)
- Raspberry PI 4
Das ist die Image-Datei des OS, also ein Abbild des SD-Karten-Inhalts mit allen Partitionen, Dateien etc., die es darauf gibt. Praktisch zusammengepackt in nur einem File. Um das Image nun auf die SD-Karte zu bringen, brauchen wir ein Zusatzprogramm wie Etcher oder Win32DiskImager, dass wir uns vorher noch downloaden müssen, wenn wir es nicht bereits installiert haben.
Wie das Flashen eines Images genau geht, zeigt diese Anleitung unter Abschnitt "Image laden und flashen". Dort gibt es auch noch ein paar technische Details zum Raspi Zero WH. Ich benutze mittlerweile bevorzugt Etcher als Flash-Programm, weil ich das einfacher zu bedienen finde.
Dort könnt ihr dann auch gleich weiterlesen, denn eine Kleinigkeit müssen wir doch noch machen. Und zwar dem MotionEyeOS unsere WLAN-Credentials mitteilen. Das geht über eine Datei wpa_supplicant.conf, die wir ins Hauptverzeichnis auf der unter Windows zugreifbaren Partition kopieren müssen. Und in die wir die Zeilen "ssid=..." mit dem Namen unseres Heim-WLANs und die Zeile "psk=..." mit dem Passpwort unseres Heimnetzwerkes ausfüllen müssen. Genaue Anleitung wie gesagt in der Anleitung unter Abschnitt "Konfiguration vornehmen".
Danach sollte es auf der SD-Karte in etwa wie folgt aussehen:
Verzeichnis von S:\
06.06.2020 15:32 24.201 bcm2708-rpi-b-plus.dtb
06.06.2020 15:32 23.938 bcm2708-rpi-b.dtb
06.06.2020 15:32 23.719 bcm2708-rpi-cm.dtb
06.06.2020 15:32 24.379 bcm2708-rpi-zero-w.dtb
06.06.2020 15:32 52.304 bootcode.bin
06.06.2020 15:32 129 cmdline.txt
06.06.2020 15:32 112 config.txt
06.06.2020 15:32 9.816 fixup.dat
06.06.2020 15:32 2.134.635 fwupdater.gz
06.06.2020 15:32 2.142.357 initrd.gz
06.06.2020 15:32 5.155.912 kernel.img
06.06.2020 15:32 <DIR> overlays
06.06.2020 15:32 3.794.600 start.elf
21.07.2018 12:57 185 wpa_supplicant.conf
13 Datei(en), 13.386.287 Bytes
1 Verzeichnis(se), 17.434.624 Bytes frei
Danach wird die SD-Karte in den Raspi eingesteckt und dieser gebootet. Wer ein Mini-HDMI zu Normal-HDMI-Kabel für den Raspi Zero hat und einen entsprechenden Monitor mit HMDI-Eingang, der kann sich den Bootvorgang des Pis live anschauen. Am Ende wird dort auch verraten, welche dynamische IP des Raspi von eurem WLAN-Router zugewiesen bekommen hat. Gleich notieren, brauchen wir gleich.
Die IP kann sich übrigens bei jedem Reboot ändern, da sie dynamisch bei jeder neuen Anfrage vom WLAN-Router vergeben wird. Das, was grad frei ist, es sei denn, man weist im Router der MAC-Adresse des Raspis eine fest zu vergebenen IP-Adresse zu.
Ansonsten dürfte der Raspi mit den richtigen WLAN-Credentials auch komplett durch booten, das MotionEyeOS starten und damit alle Services, so dass man nach dem vielleicht 30 Sekunden dauernden Bootvorgang über die dynamisch zugewiesene IP (Stichwort DHCP) darauf zugreifen kann.
Welche IP dem Raspi zugewiesen wurde, das weiß der WLAN-Router. Also mit dem verbinden (meist 192.168.0.1 oder 192.168.1.1) und dort unter "My Network", "Verbindungen" bzw. "DHCP" die Liste der verbundenen Geräte anzeigen lassen. Da nach einem Eintrag nach dem Muster "meye-be1a741b" Ausschau halten. Und die IP dahinter notieren. In meinem speziellen Fall ist das diesmal die 192.168.0.30 .
Steht kein solches Gerät in der Liste, dann muss man den Raspi wohl doch an einen Monitor via HDMI anschließen und schauen, welche Fehlermeldung dort steht.
Konfiguration von MotionEyeOS
Nachdem der Bootvorgang abgeschlossen ist (LED auf dem Raspi flackert nicht mehr wie wild), kann man auf MotionEye mit dem Webbrowser zugreifen. Mit meiner IP wäre das "http://192.168.0.30/", was in die Adresszeile eingegeben werden müsste.
Nach einem kurzen Moment erscheint das Videobild, ein Drei-Striche-Button und ein Person-Button. Über das Hamburger-Menü (Drei-Striche-Button) könnte man Einstellungen vornehmen, wenn man denn dürfte. Nicht angemeldet darf man hier nur die Anzeige selbst bestimmen.
Will man mehr einstellen, so muss man sich anmelden. Dazu dient das Icon mit der Person. Draufklicken und Username und Passwort eingeben. Das ist defaultmäßig "admin" und "", also leeres Passwort:
Klickt man dann wieder auf das Hamburger-Menü, sieht man alles Einstellungen. Hier kann man natürlich auch ein Passwort vergeben, wenn man nicht will, dass jeder, der sich im lokalen Zugriff rumtreibt, Zugriff auf die Videos hat.
Die wichtigsten Einstellungen habe ich ja schon oben unter "Was kann MotionEyeOS?" aufgeführt. Den Rest muss man sich einfach mal anschauen und schauen, was man an seine Bedürfnisse ändern muss.
Ich zum Beispiel habe geändert:
- die Timezone unter General Settings. Auf Berlin, damit ich die richtige lokale Uhrzeit ins Video eingeblendet bekomme.
- den FTP-Server unter Services habe ich auf off gestellt, weil ich den nicht brauche. Samba ist für die Datei-Freigabe. SSH dürfte klar sein.
- "Enable Samba Write Support" unter Services habe ich eingeschaltet (steht dann auf "on"), damit ich Videos auch über Windows löschen kann. Auf die Freigabe kommt man unter Windows übrigens mit "\\192.168.0.xx" in einem Explorer-Fenster. User und Passwort wie vergeben bzw. keins, wenn man "Require Samba Authentication" auf off gestellt hat.
- Die Videoeinstellungen habe ich auf 640x480 bei 10 FPS gestellt. Evtl. kann mein Raspi Zero auch mehr, aber das soll mir reichen. Man kann den Raspi über die Einstellungen praktischerweise gleich übertakten und so mehr FPS rausschlagen. Aber aufgepasst, dass man es nicht übertreibt, das wäre nicht gut für die CPU. Und auf ausreichende Kühlung achten (Luftabfuhr, Kühlkörper)
- Unter Motion Detection eigentlich alle Einstellungen. Besonders wichtig ist hier, "Show Frame Changes auf on" zu setzen, um live zu sehen, ob eine Bewegung erkannt wurde (wird dann eingekästelt) oder nicht. Da kriegen die Kinder auch mal wieder ein bisschen Bewegung, wenn man sie immer wieder durch den Garten scheucht, um zu testen, ob MotionEye eine Bewegung erkennt und wie lange diese ist ;)
Besondere Aufmerksamkeit und viel Rumgespiele, bis man die richtige Einstellung hat, bedürfen die Motion Detection Settings.
Fazit
Für zusammen roundabout 40 € bekommt man ein System, dass sparsam im Verbrauch ist. Bei mir ca. 150 mA bei 5V, macht 750 mW oder 0,75*24*365/1000*0,40 = 2,63 Euro im Jahr bei 40 Cent pro Kilowattstunde im Dauerbetrieb. Und das vor allem die Daten im eigenen Netzwerk belässt, ohne Umweg über irgendwelche dubiose Cloud-Server irgendwo im fernöstlichen Ausland.
Gerade wenn man noch einen unbenutzten Raspberry Pi herumliegen hat, dürfte das eine günstige Alternative sein.
MotionEyeOS glänzt durch einfache und schnelle Installation und genügend Features für einen brauchbaren Einsatz als Überwachungskamera. Die Einstellmöglichkeit sind sinnvoll, nachvollziehbar und es macht fast Spaß, damit herumzuspielen.
Wenn man dem Raspi Zero und der Raspi-Kamera noch ein eigenes 3D-gedrucktes Gehäuse gönnt, dann sieht das Ensemble auch gleich viel adretter aus. Das nackte Design ist natürlich auch erlaubt und sieht viel nerdiger aus. ;)
Das kleine Gehäuse für die Rev 1.3 "Sunny"-Cam habe ich selbst entworfen. Die STL-Dateien dafür können hier heruntergeladen werden für alle, die einen 3D-Drucker ihr eigen nennen dürfen. Ich persönliche besitze einen Anycubic i3 mega
Für das Raspberry Pi Zero Gehäuse habe ich den Entwurf von Neil Johnston (Naj) vom 22. April 2021 auf ThingiVerse genommen. Der enthält auch eine anpassbare OpenSCAD-Datei.