Kategorie: Projekt

RaspberryPi als Überwachungskamera

Hier möchte ich dir gerne zeigen, wie ich mit einem Raspberry Pi eine Überwachungskamera gebaut habe und wie auch du das machen kannst.

Hardware

Materialliste

Raspberry: Ein Raspberry Pi Zero ist klein, günstig und verbraucht nur wenig Strom. Er ist aber auch in der Leistung stark beschränkt. Bei HD Auflösung (1280×720) hat er bei mir bei Bewegungserkennung und beim Speichern der Bilder ca. 1FPS erreicht. Das reicht mir aus. Wer mehr braucht, sollte lieber zu einem Raspberry Pi 4 greifen.

Netzteil: Ich verwende hier ein Hutschienennetzteil (Für den Pi4 hier). Wer lieber eines mit Stecker (Für den Pi4 hier) mag, kann das auch verwenden.

Kühlung: Da bei einer Videoübertragung und Bewegungserkennung der RPi ganz schön viel zu tun hat, ist eine Kühlung auf jeden Fall sinnvoll. Ich verwende diese Kühlkörper (Für den Pi4 hier). Da auch der USB Stick ziemlich heiß wurde und ich vom RPi Zero noch den kleinen Kühlkörper übrig hatte, habe ich diesen zum Kühlen des USB Sticks genutzt. In eine normale USB-Buchse passt er dann aber nicht mehr.

SD Karte: Ich verwende diese hier. 16 GB sind für das Projekt völlig ausreichend. Theoretisch würden auch weniger reichen, kleinere SD Karten kosten aber fast genau so wenig.

Kameramodul: Hier hat man eine große Auswahl. Ob mit Weitwinkel, Infrarot, gleich beidem, in extrem klein oder in High Quality (nicht für den Pi Zero zu empfehlen). Es gibt aber auch sehr günstige Kameras wie diese hier, die absolut ausreichend sind.

Flachbandkabel: Die meisten Kameras kommen bereits mit einem Kabel. Da Raspberry Pi Zero aber einen kleineren CSI Anschluss hat, braucht man dafür ein Adapterkabel.

USB Stick: Wenn Aufnahmen gespeichert werden sollen, macht man das wegen der begrenzten Haltbarkeit am besten nicht auf der SD Karte. Stattdessen kann man einen USB Stick verwenden oder die Aufnahmen auf einem NAS speichern. Ich verwende diesen Stick.

Adapter für USB-Stick: Da der Raspberry Pi Zero nur einen Micro USB Anschluss hat, braucht man für den USB Stick einen Adapter. Ich verwende diesen hier.

Gehäuse: Hier gibt es auch sehr viel Auswahl. Es gibt das offizielle Raspberry Pi Zero Gehäuse, welches schon eine Aussparung für eine Kamera hat, aber ich verwende gerne Kamera Dummys. Diese sehen dann nicht nur aus wie echte Kameras, sondern lassen sich auch gut einstellen.

Zusammengerechnet komme ich dann nach aktuellem Stand auf ca. 60€.

Zusammenbau

Zum Zusammenbau braucht man nicht viel sagen. Alles kommt in den Stecker, wo es reinpasst ;). Zusammengebaut sieht die Kamera (ohne Gehäuse) so aus:

Einbau in das Gehäuse

Meine Kamera soll in einen Kameradummy. Ich habe diese hier verwendet. Vermutlich sind aber die meisten Kamera Dummys auf eBay sehr ähnlich, wenn nicht sogar gleich. Er lies sich sehr gut zerlegen. Das sieht dann so aus:

Das Schutzglas lässt sich ebenfalls noch ausbauen. So kann man es reinigen. Die Kameralinse und die LED werden nicht benötigt. Zwischen den beiden Hälften des Gehäuses lässt sich sehr gut eine Kunststoffplatte befestigen. Auf dieser habe ich dann den Raspberry festgeschraubt.

Hinter der Platte mit den IR LED Attrappen kann man mit Heißkleber die Kamera befestigen. Das sieht dann so aus:

Jetzt muss nur noch alles wieder zusammengebaut werden. Der Raspberry hängt bei mir in der unteren Kamerahälfte, da es wegen dem Batteriefach oben sehr eng wird.

Von vorne sieht die Kamera dann so aus:

Software

Installation des Images

Als Software für die Überwachungskamera verwende ich Motioneye OS. Das ist eine für verschiedene Einplatinencomputer optimierte Linuxdistribution, mit der man sehr einfach und benutzerfreundlich Überwachungskameras bauen kann.

Nachdem das Image heruntergeladen und mit z. B. dem Raspberry Pi Imager auf die SD Karte gespielt wurde, muss noch das WLAN, falls vorhanden eingestellt werden. Erstelle dazu auf der kleineren der beiden Partitionen auf der SD Karte (boot Partition) eine Datei mit dem Namen „wpa_supplicant.conf“. Diese Datei braucht folgenden Inhalt:

Die SSID und das Passwort müssen natürlich angepasst werden.

Konfiguration von Motioneye

Nach dem Booten und aufrufen der IP im Browser sieht man direkt das Bild der Kamera:

Userinterface Motioneye

Um weitere Einstellungen vorzunehmen, muss man sich aber anmelden. Das geht über den „switch user“ Button oben links. Der Benutzername ist „admin“ und das Passwort muss leer gelassen werden.

Jetzt kann man im seitlichen Menü alle möglichen Einstellungen vornehmen. Diese sind meist selbsterklärend, trotzdem gibt es noch neben jeder Einstellung ein ?, welches die Einstellung noch mal erklärt. Meine Einstellungen sehen so aus:

Wenn man auf den Livestream und anschließend auf das „Foto“ Icon klickt, kann man sich Kameraaufnahmen anschauen:

Picture Browser

Homeserver mit dem RaspberryPi

Hier möchte ich dir meinen kleinen Homeserver vorstellen.

Hardware

Materialliste

Zusammenbau

Achtung: Arbeiten an 230V darf nur von Elektrofachpersonal durchgeführt werden!

Versorgt wird der ganze Homeserver mit 230V. Diese gehen zuerst durch den Zähler, dann an eine Steckdose, an der der Überspannungsschutz und dann ein Mehrfachstecker angeschlossen ist. An dieser hängt das Netzteil für den Pi und das Netzteil für die HDD. Das 5V Netzteil hat zwei Ausgänge, einen verwende ich nur für den Pi, den anderen für alles andere.

Das Display ist mit 3,3V und I2C (Pin 3 und 5) angeschlossen. Onewire Sensoren, die die Temperatur der Wärmepumpe kontrollieren sind ebenfalls mit 3,3V und Onewire (Standard Pin 7) angeschlossen. Die Relais laufen mit 5V und beliebigen GPIOs. Die S0 Schnittstelle des Stromzählers ist an einen freien GPIO angeschlossen. Die HDD, SSD und der Modbus Adapter, der Stromzähler überwacht sind per USB angeschlossen (HDD und SSD an USB3, Modbus an USB2).

Software

Zur Software möchte ich gar nicht so viel sagen. Auf dem Raspberry läuft Raspbian 10 und:

  • Nextcloud
  • InfluxDB
  • Pihole
  • Wireguard
  • Webserver, u.A. für diese Webseite
  • Grafana
  • Minetest
  • Samba Server
  • Webmin
  • kleinere Skripte von mir, die verschiedene Werte (Modbus, Netzwerk, 1Wire) auslesen, verarbeiten, speichern und je nach Wert Relais schalten)
  • Und bestimmt noch ein paar weitere, die ich jetzt vergessen hab

LCD Display

Zu einem Punkt möchte ich doch noch weiter ins Detail gehen. Für das Display verwende ich folgendes Skript: klick. Ein Video dazu gibt es hier:

Statusdisplay für meinen Homeserver

Energiezähler

Mit diesem simplen Programm, welches ich programmiert habe, lassen sich Zählerstände von unterschiedlichen Zählern (Stromzähler, Wasserzähler, …) manuell eintragen (später auch automatisch) und analysieren. Als Server dient hier ein Raspberry Pi (theoretisch funktioniert auch jeder andere Linuxserver, aber wenn Sensoren hinzugefügt werden, dann nicht mehr). Es gibt ein Webinterface und eine App. Das Projekt findet man auf Github: https://github.com/jjk4/energiezaehler

Installation

Installation über das Installationsskript

Lade dir das Installationsskript mit wget https://raw.githubusercontent.com/jjk4/energiezaehler/main/install.sh herunter und führe es mit sudo bash install.sh aus. Das Skript fragt dich nun ein paar Dinge, die du beantworten musst:

  1. In welchem Ordner soll sich der Energiezähler befinden? Beispiel: Wenn du /energie eingibst, wird der Energiezähler unter http://IP_DEINES_RPI/energie erreichbar sein
  2. Soll eine lokale oder entfernte Datenbank verwendet werden? Bei der lokalen Datenbank speichert der Energiezähler die Daten direkt auf dem Gerät, auf dem er läuft. Bei einer entfernten Datenbank kann das auch ein anderer Server sein. Dabei musst du aber selbst influxdb installieren und eine Datenbank erstellen
Bei lokaler Datenbank:
  1. Wie soll die Datenbank heißen? Das ist der Name der Datenbank. du brauchst sie nicht zu erstellen. Das passiert automatisch
Bei entfernter Datenbank
  1. Gib die IP oder den Hostname des Servers der Datenbank ein Die IP des Servers
  2. Gib den Port des Servers der Datenbank ein Standard: 8086
  3. Erstelle auf dem Server eine Datenbank und gib den Namen der Datenbank ein Name der Datenbank, die du erstellt hast

Das war’s. Du kannst jetzt den Energiezähler verwenden und einrichten.

Konfiguration

Unter „Einstellungen“ im Webinterface lassen sich verschiedene Einstellungen vornehmen. Die Datenbankeinstellungen hast du schon bei der Installation festgelegt und solltest du nur ändern, wenn man weiß, was man tut. Zähler lassen sich folgendermaßen Konfigurieren: Der technische Name darf nur aus Kleinbuchstaben und Unterstrichen (_) bestehen. Er wird intern als Erkennungsmerkmal verwendet. Der Anzeigename ist die Bezeichnung eines Zählers, die der Nutzer im Webinterface sieht. Die Einheit sollte selbsterklärend sein. zum Beispiel kWh für Strom- oder m³ für Wasserzähler. Die Art kann man bis jetzt noch nicht einstellen. Sie soll später dazu da sein, die Software mit einem Hardwarezähler zu verbinden, um Werte automatisch auszulesen. Wenn du bei Löschen? einen Haken setzt, dann wird der Zähler nach Bestätigen gelöscht. Hierbei werden keine Daten gelöscht. Wenn du einen Zähler mit dem gleichen technischen Namen erstellst, werden wieder die Daten vom gelöschten Zähler verwendet.

Daten importieren von Energiesparkonto

Der Datenimport ist nicht für absolute Anfänger geeignet. Es wird in einer späteren Version noch die Möglichkeit geben, die Daten direkt grafisch per Webinterface zu setzen.

Du kannst Daten von energiesparkonto.de importieren . Dazu muss man sie zuerst dort exportieren. Das geht folgendermaßen: Zunächst geht man auf die entsprechende Seite (Stromseite, Wasserseite, …) und wählt unter „Meinen Verbrauch entragen“ den Punkt „Hier können Sie Daten importieren oder exportieren“

Im darauffolgenden Menü wählt man „Exportieren“, seinen gewünschten Zähler und „Mac/Unix“. Nachdem man auf Ausführen geklickt hat, wird die Datei heruntergeladen, die im nächsten Schritt auf dem Energiezähler hochgeladen wird.

Kopiere die Datei ins Webverzeichnis (/var/www/html/energie). Um die Daten dann in die Datenbank zu schreiben, mit cd /var/www/html/energie ins Verzeichnis wechseln und dann folgendes eingeben:

sudo -u www-data python3 energiesparkonto.py localhost 8086 file.csv zähler

Dabei ist localhost und 8086 der Host/die IP und der Port der Datenbank. Wenn du bei der Installation „lokal“ gewählt hast, ist es wie hier localhost und 8086. Zähler ist der technische Name des Zählers. File.csv ist der Name der Datei. Nach wenigen Sekunden ist der Datenimport fertig. Damit die Daten auch zu 100% korrekt angezeigt werden, muss man evtl. noch auf Zwischenberechnungen warten, die nach jetzigem Stand einmal am Tag um 12 Uhr stattfinden.

Screenshot Galerie

7″ RaspberryPi Touchscreen Wandeinbau

Dieser Blogeintrag hat mich dazu gebracht, auch so einen Touchscreen in die Wand einzubauen. Hier zeige ich dir, wie ich das Hardware- und Softwaretechnisch gelöst habe.

(Kleiner Tipp am Rande: Ich habe auch schon ein 13″ Display eingebaut: https://blog.jjk1.de/index.php/2021/08/17/13-touchscreen-wandeinbau/)

Mit dem Display kann ich das Bild der Überwachungskamera ansehen, die Lüftungsanlage steuern, die Produktion der Solaranlage überwachen, Meine Mobile Alerts Sensoren auslesen und den Wetterbericht lesen.

Hardware

Einkaufsliste:
Einbau

Zum Einbau des Gehäuses gibt es nicht viel spannendes zu sagen. Ein Loch in die Wand machen, Gehäuse rein schieben und fixieren. Im Gehäuse habe ich dann noch Schrauben eingebaut, die später zur Befestigung mit den Magneten wichtig sind.

Im Keller direkt unter dem Display ist das Netzteil und eine LAN Buchse untergebracht. Von dem geht ein Kabel zu Stromversorgung und ein LAN Kabel nach oben. Zur Verkabelung habe ich im Gehäuse noch eine Lüsterklemme befestigt, um die Kabel, welche vom Bewegungsmelder und dem Netzteil kommen mit Jumperkabeln zu verbinden, die dann später auf die GPIO des Raspberry gesteckt werden können.

Um das Display mit Raspberry im Gehäuse zu befestigen, kann man dann einfach 4 Magnete auf den Schrauben platzieren, alle Kabel am Raspberry anstecken und das Display ins Gehäuse einsetzen. Es wird von den Magneten so fest gehalten, dass es nicht von selbst herausfällt, aber, dass man es mit etwas Kraft heraus holen kann.

Ich habe zusätzlich noch einen Bewegungsmelder eingebaut. Dieser ist in einer Blindabdeckung unter dem Display. Er ebenfalls mit einem Kabel mit dem Raspberry am Pin 10 angeschlossen.

Software

Skript für Bewegungsmelder

Folgendes Python Skript nutze ich, damit ich mit dem Bewegungsmelder das Display an- und ausschalten kann:

Vielleicht müssen auch noch Rechte angepasst werden:

sudo chmod 644 /sys/class/backlight/rpi_backlight/bl_power

Grafische Oberfläche

Als Grafische Oberfläche nutze ich eine selbst geschriebene HTML Seite.

Nistkasten Überwachen mit dem RapberryPi

Hier stelle ich dir vor, wie ich mit einem Raspberry Pi eine Kamera in einen Nistkasten gebaut habe.

Material

Für die Technik
Für den Nistkasten
  • Ein Brett der Größe 27×190, 1,8cm Dick
  • 30 Schrauben 3x35mm oder 3x40mm, Senkkopf
  • 2Schrauben 3x20mm, Senkkopf
  • 2Schraubenhaken 4x30mm für die Verriegelung an der Front
  • 2Nägel
  • 1 Scharnier

Bau des Nistkastens:

Zunächst wurde der Höhlenbrüternistkasten des NABU so umgebaut, dass der Raspberry Pi darin Platz hat. Folgendes wurde verändert:

  • Das Seitenteil gibt es 2 Mal
  • Der Boden ist durchgehend
  • Es kommt ein weiteres Teil mit den Maßen 5x25cm hinzu
  • Das Dach und die Rückwand sind 5cm länger

Das Gehäuse

Das Gehäuse habe ich mit dem 3D Drucker ausgedruckt. In dieses Gehäuse passt der Raspberry und der enc28j60. Ich musste es, weil der Ethernet Adapter nicht rein passte, noch etwas abändern. Wenn man gerade keinen 3D Drucker hat, kann man sich natürlich auch eines kaufen. Wichtig ist dabei nur, dass es nicht dicker als 4cm sein darf. Ansonsten muss der Nistkasten umgeplant werden. Da ich meine Infrarot LEDs gerne schalten möchte, habe ich diese extra an einen GPIO angeschlossen. Da diese aber nicht genug Strom lieferten, musst ich ein Relais einsetzen. Dieses und natürlich auch die Kamera und die IR LEDs selbst brauchen auch Gehäuse. Diese habe ich ebenfalls mit dem 3D-Drucker ausgedruckt.
Gehäuse für Kamera und IR LEDs
Halterung zum Einstellen der Kamera
Gehäuse für das Relais

Verkabeln

Das LAN Modul habe ich nach diesem Tutorial so verkabelt:

LAN ModulRaspberry
VCCPin 1
GNDPin 6
CSPin 24
SIPin 19
SCKPin 23
SOPin 21
INT

Das Relais und die LEDs habe ich so verkabelt:

Relais ModulRaspberryLEDs
VCCPin 1
GNDPin 6
In1Pin 8
IN2Pin 10
Ausgang1, Pin 1Pin 1
Ausgang2, Pin 1Pin 1
Ausgang1, Pin 2+
Ausgang2, Pin 1+
Pin 6
Pin 6

LAN Modul aktivieren

Nun geht‘s an die Software. Das LAN-Mudul habe ich aktiviert, indem ich in der raspi-config I2c aktiviert und in der /boot/config.txt die Zeile

eingefügt habe.

Samba client einrichten

Alle meine Bilder, die ich mit der Kamera aufnehme, sollen auf einem Samba Server gespeichert werden. Dazu installiere ich einen Samba Client nach diesem Tutorial:
1. Updaten:

sudo apt-get update && sudo apt-get upgrade

2. Samba Client installieren:

sudo apt install smbclient

3. mountpoint erstellen:

sudo mkdir /media/bilder

4. rc.local öffnen

sudo nano /etc/rc.local

5. Folgende Zeile eintragen

Motion installieren und und konfigurieren

Ich orientiere mich hier an diesem Tutorial. Als Überwachungssoftware nutze ich motion. Diese kann ganz einfach installiert werden mit:

sudo apt-get install motion

Natürlich muss man in der raspi-config auch die Kamera noch aktivieren. Wenn das erledigt ist, muss man noch ein paar Einstellungen vornehmen. Als erstes braucht man ein paar Informationen über die Kamera:

v4l2-ctl -V


Hier sind die Informationen „Pixel Format“ und „Widht/Height“ wichtig. Diese werden wir später brauchen.
Nun muss man in der Datei

sudo nano /etc/motion/motion.conf

ein paar Dinge bearbeiten:
daemon on
Dadurch startet motion im daemon Modus
stream_localhost off
Damit man auch von anderen Geräten, außer dem Pi selber auf den stream von motion zugreifen kann.
target_dir /media/Bilder
Der Ort, an dem die Aufnahmen gespeichert werden sollen
v4l2_palette 17
Das Videoformat, das die Kamera hat. (siehe Befehl am Anfang) hier gilt:
# V4L2_PIX_FMT_SN9C10X : 0 'S910'
# V4L2_PIX_FMT_SBGGR16 : 1 'BYR2'
# V4L2_PIX_FMT_SBGGR8 : 2 'BA81'
# V4L2_PIX_FMT_SPCA561 : 3 'S561'
# V4L2_PIX_FMT_SGBRG8 : 4 'GBRG'
# V4L2_PIX_FMT_SGRBG8 : 5 'GRBG'
# V4L2_PIX_FMT_PAC207 : 6 'P207'
# V4L2_PIX_FMT_PJPG : 7 'PJPG'
# V4L2_PIX_FMT_MJPEG : 8 'MJPEG'
# V4L2_PIX_FMT_JPEG : 9 'JPEG'
# V4L2_PIX_FMT_RGB24 : 10 'RGB3'
# V4L2_PIX_FMT_SPCA501 : 11 'S501'
# V4L2_PIX_FMT_SPCA505 : 12 'S505'
# V4L2_PIX_FMT_SPCA508 : 13 'S508'
# V4L2_PIX_FMT_UYVY : 14 'UYVY'
# V4L2_PIX_FMT_YUYV : 15 'YUYV'
# V4L2_PIX_FMT_YUV422P : 16 '422P'
# V4L2_PIX_FMT_YUV420 : 17 'YU12'

Da meine Kamera YU12 hat, nehme ich hier Nummer 17
widht 960
height 720

hier kann alles beliebige genutzt werden, was die Kamera maximal kann, nur das Seitenverhätnis muss stimmen. Ich empfehle aber dieses Format.
threshold 1500
Das ist die Anzahl der Pixel, die sich verändern müssen, damit ein Bild aufgezeichnet wird. Sozusagen die Empfindlichkeit der Bewegungserkennung. Hier muss man selbst ausprobieren, was das beste ist.
Als nächstes muss man noch die Datei
sudo nano /etc/default/motion
bearbeiten. Dort setzt man no auf yes.
Damit motion auch automatisch gestartet wird, habe ich in der
sudo nano /etc/rc.local
noch die Zeile sudo motion hinzugefügt.

Email Versand

Bis ein Vogel eingezogen ist, muss motion nicht die ganze Zeit laufen. Deshalb hätte ich gerne, dass mir der Pi jeden Tag eine Email sendet, sodass ich sehen kann, ob bereits jemand eingezogen ist. Dazu verwende ich folgendes Skript:

Dieses Skript macht als erstes die IR LEDs an, dann macht es ein Bild, schickt es mir per Email und schaltet die LEDs anschließend wieder aus.

Bild auf Webserver

Diese Bilder, die auch per Email versendet werden, sollen auf einem Webserver gespeichert werden, sodass man immer das letzte Bild sehen kann. Dazu muss erstmal ein Webserver, in diesem Fall apache2 installiert werden:
sudo apt-get install apache2
Dann muss die Zeile
os.system("raspistill -o foto.jpg -w 960 -h 720")
in
os.system("raspistill -o /var/www/html/foto.jpg -w 960 -h 720") und
fn= ‘/var/www/html/foto.jpg‘

abgeändert werden. Das war‘s auch schon. Das Bild kann man jetzt im Browser mit http://IP_DES_RPI/foto.jpg anschauen.

Zeitstempel im Bild

Dieser Teil ist nicht mehr aktuell.

Um sicherzustellen, dass auch wirklich ein neues Bild und nicht ein altes verschickt wird, hätte ich gerne, dass auf dem Bild ein Zeitstempel angezeigt wird. Das mache ich nach diesem Tutorial.
Also eine neue Datei erstellen:
/var/www/html/skript.sh
Ausführbar machen:
sudo chmod +x skript.sh
Außerdem muss eine gewünschte Schriftart mit dem Namen „arial.ttf“ im Verzeichnis /var/ www/html liegen. Das einzige, was ich verändert habe, ist, dass die Datei immer den gleichen Namen bekommt und vorher gelöscht wird. Jetzt muss man noch die Zeile
os.system(„sudo /var/www/html/skript.sh“)
nach der Zeile os.system(„raspistill… in Datei mit dem Email Versandt schreiben.
Dann kann man das Bild mit Zeitstempel im Browser unter http://IP_DES_RPI/time.jpg angeschaut werden. Soll das Bild auch per Email versendet werden, muss man die Zeile
fn= ‘/var/www/html/foto.jpg‘
in
fn= ‘/var/www/html/time.jpg‘
abgeändert werden.

Das Vogelhaus ist fertig!

Das aktuelle Bild kann man sich https://jojokorpi.ddn.net/birdcam/bird.jpg oder auf der Startseite dieser Webseite anschauen.
Das ganze Projekt gibt es auch noch als PDF: raspberrypi_vogelhaus_kamera.pdf es ist allerdings etwas veraltet.