Ressourcenschonende Überwachungskamera mit einem Raspberry Pi

Eine Überwachungskamera lässt sich mit Bordmitteln auch auf älteren Raspberry Pi Modellen recht gut betreiben.


Beitrag auf der neuen Website:

Ressourcenschonende Überwachungskamera mit einem Raspberry Pi


In einem meiner letzten Beiträge habe ich beschrieben, wie man mit einem Raspberry Pi und einer Kamera eine kleine Überwachungskamera mit motion und Syncthing konfigurieren kann. Dieses Setup funktioniert aber evtl. bei einer schwachen Hardware nicht sehr zuverlässig.

Ältere Hardware kann aber durchaus noch als Überwachungskamera verwendet werden, jedoch ohne motion.

Die Hardware

  • Raspberry Pi Zero W oder Raspberry Pi Model B Rev 2
  • Raspberry Pi Camera V1.3

Die Tools

  • raspistill
  • raspivid

Die neue Raspberry Pi Camera 3 funktioniert nicht mehr mit dem kleinen Tool raspistill und raspivid, es wird libcamera verwendet.

Das Betriebssystem Raspberry Pi OS bringt bereits alle notwendigen Tools mit einen Livestream von der Kamera auf den eingenen PC zu holen. Die Installation von weiteren Apps ist damit nicht mehr notwendig.

Die Kamera ist am Pi anzuschließen und in den Einstellungen zu aktivieren

sudo raspi-config

Interface Options --> Legacy Camera --> Enable
raspi-config - Interface Options - Legacy Camera
raspi-config – Interface Options – Legacy Camera
raspi-config - Interface Options - Legacy Camera
raspi-config – Interface Options – Legacy Camera

Den Livestream kann man nach dem Neustart des Pi auf der CLI einfach starten:

raspivid -a 12 -t 0 -w 1280 -h 720 -vf -ih -fps 30 -l -o tcp://0.0.0.0:8081

Auf dem eigenen PC / Laptop kann man dann das Kamerabild sehr einfach in der App VLC ( ➡ https://www.videolan.org/vlc/) aufrufen:

tcp/h264://ip-addresse-raspberry-pi:8081
VLC - Kamerastream aufrufen
VLC – Kamerastream aufrufen

Nun ist es immer ein wenig umständlich sich erst auf dem Raspberry Pi per SSH einzulogen, um dann den raspivid-Befehl einzugeben, um das Kamera-Livebild anzusehen.
Zudem ist der Stream ohne eine Authentifizierung aufrufbar und kann damit von jedem im Gerät im eigenen Netzwerk angeschaut werden.


Gib mir gerne einen Kaffee ☕ aus!

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕ ausgeben.

PayPal Logo


liberapay.com/strobelstefan.de


Kaffee via Bitcoin

bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj


Um beide Nachteile zu vermeiden, kann der raspivid-Befehl direkt beim SSH-Zugriff auf den Raspberry Pi aufgerufen und der Kamerastream getunnelt werden.

Es wird dazu ein Eintrag in der ~/.ssh/config erstellt. Damit kann die SSH-Verbindung sehr einfach auf der CLI mit dem Befehl ssh kamera aufgebaut werden.

Die Option RemoteCommand bietet die Möglichkeit, dass direkt ein Befehl an den Raspberry Pi übermittelt wird.

Nachdem nun raspivid gestartet wurde, wird der Kamerastream in einen SSH-Tunnel verpackt, der dann auf dem eigenen PC in VLC aufgerufen werden kann.
Anstatt aber die IP-Adresse des Raspberry Pis einzutragen, erfolgt der Aufruf mit localhost

tcp:/h264://127.0.0.1:18000

Der Eintrag in der ~/.ssh/config-Datei kann wie folgt aussehen

nano .ssh/config

Host kamera
    HostName ip-addresse-raspberry-pi
    User benutzername
    Port 22
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa.pub
    LocalForward 18000 localhost:8081
    RemoteCommand raspivid -a 12 -t 0 -w 1280 -h 720 -fps 30 -l -o tcp://127.0.0.1:8081
    RequestTTY yes

Die Anmeldung an meinem Raspberry Pi ist nur mit einem SSH-Schlüssel möglich, der auf einem YubiKey gespeichert ist, deshalb sind noch die beiden Optionen eingetragen

  • PreferredAuthentications publickey
  • IdentityFile ~/.ssh/id_rsa.pub

Weitere Informationen zum YubiKey siehe ➡ YubiKey Themenseite

Nun kann man sich jederzeit das Livebild der Kamera anschauen und mehr nicht, was manchmal zu wenig sein kann.
Mit kleinen Shellskripten und Crontabs lassen sich aber Bilder oder Videos in regelmäßigen Abständen erstellen und per E-Mail versenden.

Anstatt einem Versand per E-Mail können die Bilder / Videos z.B. auch per rsync, rclone oder Syncthing auf einen anderen Server übertragen werden.

Für den Versand von E-Mails muss ein MTA, wie Postfix, auf dem Raspberry Pi installiert werden. In meinem Manual „Nextcloud Installation und Konfiguration“ wird die Installation und Konfiguration ausführlich beschrieben.

https://codeberg.org/strobelstefan.org/nextcloud-installation-configuration/src/branch/main/nextcloud-installation.md#user-content-raspberry-pi—e-mail-versand-einrichten

Speicherung Bilder

Alle Bilder und Videos werden auf einen externen USB-Stick im NTFS-Format gespeichert.

Herausfinden der UUID des externen USB-Sticks

sudo blkid

Ein Eintrag in der /etc/fstab

UUID=1112222333444 /mnt/motion ntfs defaults,auto,umask=000,users,rw 0 0

Zum Schluss ist noch der Mount Point zu erstellen

sudo nano mkdir /mnt/motion

Nun kann der externe USB-Stick eingebunden werden

sudo mount -a

Auf dem USB-Stick werden die Bilder in das Verzeichnis /mnt/motion/pictures gespeichert, welches noch anzulegen ist

sudo mkdir /mnt/motion/pictures

Bilder aufnehmen

Das Skript camera.sh kann mithilfe von raspistill Bilder aufnehmen.

sudo mkdir /etc/scripts

sudo touch /etc/scripts/camera.sh
sudo chown root:root /etc/scripts/camera.sh
sudo chmod 0644 /etc/scripts/camera.sh
sudo chmod u+x /etc/scripts/camera.sh
sudo nano /etc/scripts/camera.sh

Der Inhalt der Datei

#!/usr/bin/env bash

DATE=$(date +"%Y-%m-%d_%H%M")

# Takes an image in FULL size
#raspistill -o /mnt/motion/pictures/$DATE.jpg -rot 90

# Takes an image in SMALL size
raspistill -q 10 -e jpg -o /mnt/motion/pictures/$DATE.jpg -rot 0

# Call Script
/bin/bash /etc/scripts/newest-file.sh

exit 0

Bilder per E-Mail versenden

Das Skript newest-file.sh kann das neueste Bild in einem bestimmten Verzeichnis, hier /mnt/motion/pictures/, per E-Mail versenden.

sudo touch /etc/scripts/newest-file.sh
sudo chown root:root /etc/scripts/newest-file.sh
sudo chmod 0644 /etc/scripts/newest-file.sh
sudo chmod u+x /etc/scripts/newest-file.sh
sudo nano /etc/scripts/newest-file.sh

Der Inhalt des Skripts:

#!/usr/bin/env bash

# E-Mail where the log file should be mailed to
EMAIL="email@adresse.de"
picpath='/mnt/motion/pictures/'

newest=$(ls -rt ${picpath}*.jpg | tail -n1)
echo $(date +%Y-%m-%d_%H-%M-%S) '- Motion detected' | mutt ${EMAIL} -a $newest -s "imow"

exit 0

Die Skripte können gleich getestet werden. Dazu ist lediglich camera.sh aufzurufen

sudo sh /etc/scripts/camera.sh

Damit das Ganze automatisiert abläuft, ist ein CRON Job zu serstellen. In diesem Beispiel wird das Skript um 9:00 Uhr ausgeführt.

sudo crontab -e

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

00 09 * * * /bin/bash /etc/scripts/camera.sh

Bilder regelmäßig automatisch löschen

Die aufgenommenen Bilder lassen sich in regelmäßigen Abständen automatisch löschen.

sudo touch /etc/scripts/autodelete.sh
sudo chown root:root /etc/scripts/autodelete.sh
sudo chmod 0644 /etc/scripts/autodelete.sh
sudo chmod u+x /etc/scripts/autodelete.sh
sudo nano /etc/scripts/autodelete.sh

Der Inhalt des Skripts

#!/usr/bin/env bash

#
# This scripts deletes files older than x days/minutes
#

###################################
# Variables
###################################

# Script name
MAINSCRIPT=$(basename -- "$0")

# Storage device as defined in your /etc/fstab.
picpath='/mnt/motion/pictures'

###################################
# Delete Old Files
###################################

find ${picpath}/*.* -type f -mmin +10800 -exec rm {} \;

exit 0

Der CRON Job dafür kann sein

sudo crontab -e

# Autodelete
00 08 * * * /bin/bash /etc/scripts/autodelete.sh

Raspberry Pi absichern

Der Raspberry Pi sollte noch ein wenig abgesichert werden, damit er etwas sicherer als Überwachungskamera engesetzt werden kann.
In meiner Anleitung „Nextcloud Installation und Konfiguration“ habe ich bereits einige Konfigurationen beschrieben:

https://codeberg.org/strobelstefan.org/nextcloud-installation-configuration/src/branch/main/nextcloud-installation.md#user-content-server-hardening

Bei der Firewall ufw ist für den Kamerastream kein eigener Port zu öffnen, alles wird über den SSH-Port 22 übertragen.

Zu beachten ist, dass der Kamerastream via raspivid und das Skript camera.sh nicht gleichzeitig aufgerufen werden kann. Die Kamera wird entweder von raspivid oder vom Shell Skript verwendet.

Das bedeutet, läuft raspivid, kann das Skript camera.sh keine Bilder aufnehmen und umgekehrt!


Gib mir gerne einen Kaffee ☕ aus!

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕ ausgeben.

PayPal Logo


liberapay.com/strobelstefan.de


Kaffee via Bitcoin

bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj


Fazit

Der hier dargestellte Weg ermöglicht es eine bereits in die Jahre gekommene Hardware als Überwachungskamera schnell und einfach zu konfigurieren.

Die komfortablere Lösung mit mehr Funktionen ist aus meiner Sicht der von mit beschriebene Weg mit motion und SyncthingÜberwachungskamera mit einem Raspberry Pi, motion und Syncthing in 20 Minuten.

Wenn es mal wieder Raspberry Pis zu kaufen gibt, dann ist ein Raspberry Pi 3 oder 4 dafür die richtige Wahl. Es lassen sich mit dieser Hardware einfach mehr Funktionen nutzen, die mit einem Zero oder ältereren Pi-Modellen nicht möglich sind.

Foto von Mich Smith auf Unsplash

Schreibe einen Kommentar

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