Zum Inhalt

Ressourcenschonende Überwachungskamera mit einem Raspberry Pi

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

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

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 aufrufen

tcp/h264://ip-addresse-raspberry-pi:8081

VLC - Kamerastream aufrufen

Nun ist es immer ein wenig umständlich sich erst auf dem Raspberry Pi per SSH einzuloggen, 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.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: 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

Nun kann man sich jederzeit das Livebild der Kamera anschauen und mehr nicht, was manchmal zu wenig sein kann. Mit kleinen Shell Skripten 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.

Dein Weg zur eigenen Nextcloud

Dein Weg zur eigenen Nextcloud

Speicherung Bilder

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

Die Formatierung des Datenträgers kann entweder auf einem anderen Computer oder direkt am Raspberry Pi erfolgen.

ext4 - Bevorzugte Option

Der USB-Stick lässt sich direkt am Raspberry Pi ext4 formatieren.

Mit dem Befehl lsblk -f lassen sich alle Laufwerke auflisten und das richtige Verzeichnis auswählen. Kann das Laufwerk nicht eindeutig identifiziert werden, hilft ein Check mit sudo blkid. Die angezeigten UUIDs lassen sich dann vergleichen und der USB-Stick kann eindeutig identifiziert werden.

sudo mkfs -t ext4 /dev/sda1

mke2fs 1.46.2 (28-Feb-2021)
/dev/sda1 contains a ntfs file system labelled 'motion'
Proceed anyway? (y,N) y
Creating filesystem with 61145080 4k blocks and 15286272 inodes
Filesystem UUID: sssdddsssdddsssddd
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done
# Kontrolle und Abfrage der UUID
lsblk -f

NAME        FSTYPE FSVER LABEL  UUID                                 FSAVAIL FSUSE% MOUNTPOINT
sda
└─sda1      ext4   1.0          sssdddsssdddsssddd
mmcblk0
├─mmcblk0p1 vfat   FAT32 bootfs 2222222222                             223,3M    12% /boot
└─mmcblk0p2 ext4   1.0   rootfs 3333333333csaasdasdasdasdasdasdasdas   23,1G    16% /

Der Eintrag in der /etc/fstab für ein ext4-formatierten USB-Stick:

sudo nano /etc/fstab

UUID=sssdddsssdddsssddd /mnt/motion ext4 defaults 0 0

NTFS

Möchte man lieber einen NTFS-formatieren USB-Stick, dann unterscheiden sich die Befehle nur geringfügig.

Herausfinden der UUID des externen USB-Sticks

```bash
sudo mkfs -t ntfs /dev/sdb1

# Kontrolle und Abfrage der UUID
lsblk -f

Ein Eintrag in der /etc/fstab

UUID=sssdddsssdddsssddd /mnt/motion ntfs defaults 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 eingesetzt werden kann. In meiner Anleitung "Nextcloud Installation und Konfiguration" habe ich bereits einige Konfigurationen beschrieben.

Codeberg

Dein Weg zur eigenen Nextcloud

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!

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

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 älteren Pi-Modellen nicht möglich sind.

Gib mir gerne einen Kaffee ☕ aus ❗️

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

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj

Source

Foto von Mich Smith auf Unsplash