Überwachungskamera mit einem Raspberry Pi, motion und Syncthing in 20 Minuten

Eine Überwachungskamera mit einem Raspberry Pi nichts einfacher als das? Auf vielen Seiten im Internet findet man dazu einen Verweis auf motioneyeos, so auch hier im Blog. Aber, das Betriebssystem wird nicht mehr weiter entwickelt.

Es gibt aber Alternativen, die sich genau so einfach installieren und managen lassen.

Das Ziel

Eine kleine Überwachungskamera,

  • die Bilder und/oder Videos von Bewegung aufzeichnet,
  • Zeitrafferaufnahmen macht,
  • der überwachte Bereich im Webbrowser oder VLC in (fast) Echtzeit (Stream1 angeschaut werden kann
  • die Bilder-/Video-Aufnahmen automatisch auf den eigenen Client übertragen werden

Was wird benötigt?

Hardware: Raspberry Pi ( die Hardwareanforderungen sind nicht wirklich groß, es tut auch ein altes Modell)

Raspberry Pi - Hardwarespezifikation
Raspberry Pi – Hardwarespezifikation

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.org


Kaffee via Bitcoin

bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj


Betriebssystem

Als Betriebssystem kommt das aktuellste Raspberry Pi OS zum Einsatz. Es kann nach dieser Anleitung auf die SD-Karte geschrieben werden.

https://codeberg.org/strobelstefan.org/nextcloud-installation-configuration/src/branch/main/flash-raspberry-pi-os.md

Das System kann noch ein wenig abgesichert werden. Dazu kann man z.B. fail2ban, unattender-upgrades, ufw, etc. installieren und konfigurieren.

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

motion installieren

Im nächsten Schritt ist motion aus den Repositories zu installieren.

sudo apt update && sudo apt dist-upgrade && sudo apt autoremove

sudo apt install motion

Die Konfigurationsdatei motion.conf findet sich im Verzeichnis /etc/motion/motion.conf.

Die einzelnen Optionen sind auf der offiziellen Seite des Projekts genau beschrieben.

https://motion-project.github.io/motion_config.html#Configuration_OptionsAlpha

Ein kleines Beispiel soll zeigen, wie einzelne Funktionen in der Konfigurationsdatei aktiviert werden.

# Backup anlegen
sudo nano /etc/motion/motion.conf /etc/motion/motion.conf-bak

# Datei bearbeiten
sudo nano /etc/motion/motion.conf

Den Stream anschalten, damit man darauf mit einem Webbrowser oder VLC ( ➡ https://www.videolan.org/vlc/) zugreifen kann.

############################################################
# Live stream configuration parameters
############################################################

# The port number for the live stream.
stream_port 8081

# Restrict stream connections to the localhost.
stream_localhost off

# This parameter establishes the username and password to use for the stream.
# The syntax is username:password
# stream_authentication username:password

Je nach verwendetem Kameramodell kann die Auflösung angepasst werden. Dazu sind die Einträge entsprechend ein- oder auszuschalten.

  • ein = ohne #
  • aus = mit #
# Image width in pixels.
width 640
#width 1280
#width 1920

# Image height in pixels.
height 480
#height 720
#height 1080
rotate 180
text_changes on
text_double on

Nach jeder Änderung an der motion.conf ist die Datei neu einzulesen, also motion neu zu starten.

sudo systemctl restart motion

Befehlsliste für motion

sudo systemctl start motion
sudo systemctl restart motion
sudo systemctl stop motion

syncthing installieren

Die Installation von Syncthing ist optional. Das Tool wird nur benötigt, wenn die Bilder und/oder Videos von der Kamera automatisc auf einen anderen Computer übertragen werden sollen.

Die Installation von Syncthing ist relativ schnell erledigt.

sudo apt install syncthing

Syncthing muss PRO Benutzer auf der Kamera gestartet werden. Ein Benutzer ist dafür ausreichend.

sudo systemctl start syncthing@benutzername

Damit Syncthing auch automatisch mit dem Pi gestartet wird, ist der Autostart ebenfalls PRO Benutzer anzulegen

sudo systemctl enable syncthing@benutzername

Befehlsliste für Syncthing

sudo systemctl status syncthing@benutzer
sudo systemctl stop syncthing@benutzer
sudo systemctl restart syncthing@benutzer

Wer Syncthing nicht installieren möchte, kann auch rsync für das Übertragen der Bilder/Videos auf den eigenen Client verwenden. Am Einfachsten ist dann das Anlegen eines eigenen Shell Skripts, dass in regelmäßigen Abständen mit einem CRON gestartet wird.

mehr zu rsync hier im Blog

Konfigurationsdatei

Die Konfigurationsdatei für Syncthing kann für jeden Benutzer individuell angepasst werden. Sie befindet sich im Home-Verzeichnis.

~/.config/syncthing

Firewall

Für ufw wird eine Profil-Datei mit ausgeliefert, die für die Firewallregel verwendet werden kann.

Infos zu ufw gibt es hier

https://strobelstefan.de/2021/03/28/ufw-app-profile-fuer-die-nextcloud/


https://codeberg.org/strobelstefan.org/nextcloud-installation-configuration/src/branch/main/nextcloud-installation.md#user-content-ufw—firewall

sudo ufw allow syncthing

https://docs.syncthing.net/users/firewall.html

SSH-Zugriff

Da der Raspberry Pi Headless betrieben wird, steht dort keine grafische Benutzeroberfläche für die Administration zur Verfügung.

Mithilfe eines SSH-Tunnels (TCP-Forwarding) kann jedoch die grafische Oberfläche vom Pi auf den eigenen Client (oder einen anderen PC) geholt werden, was die Administration von Syncthing sehr vereinfacht.

SSH-Verbindung herstellen:

ssh benutzername@ip-adresse-kamera -L 18384:localhost:8384

Auf dem eigenen Client kann nun im Webbrowser die Syncthing-Oberfläche des Pi aufgerufen werden.

http://localhost:18384/

In der sshd_config der Kamera ist zu prüfen, ob die Option AllowTcpForwarding auf yes gestellt ist.

###
# AllowTcpForwarding
###
# Specifies whether TCP forwarding is permitted. The default is ''yes''. 
# Note that disabling TCP forwarding does not improve security unless users are also 
# denied shell access, as they can always install their own forwarders.
AllowTcpForwarding yes

Der eigene Client

Auf dem eigenen Client benötigt man lediglich einen Webbrowser, um den Stream der Überwachungskamera anzuschauen.

In die Adresszeile ist einzutragen:

http://ip-addresse:8081

Auch mit VLC lässt sich der Stream der Kamera öffnen. Dazu legt man sich ein kleines Skript mit dem Namen vlc.xspf an. Es ist lediglich der Eintrag http://ip-addresse:8081 zu ändern.

<?xml version="1.0" encoding="UTF-8"?>
<playlist xmlns="http://xspf.org/ns/0/" xmlns:vlc="http://www.videolan.org/vlc/playlist/ns/0/" version="1">
	<title>motioneyeos</title>
	<trackList>
		<track>
			<location>http://ip-addresse:8081/</location>
			<extension application="http://www.videolan.org/vlc/playlist/0">
				<vlc:id>0</vlc:id>
				<vlc:option>network-caching=1000</vlc:option>
			</extension>
		</track>
	</trackList>
	<extension application="http://www.videolan.org/vlc/playlist/0">
			<vlc:item tid="0"/>
	</extension>
</playlist>

siehe auch

MotionPiOS – Kamerakachelübersicht

motioneyeos in VLC anschauen

Möchte man auch die Bilder und/oder Videos von der Überwachungskamera auf den eigenen Client holen oder auf einen anderen Laptop/Server übertragen, dann ist Syncthing zu installieren.

https://syncthing.net/

Für Mac gibt es ein Homebrew Cask

brew install syncthing

https://formulae.brew.sh/formula/syncthing#default

Nach der Installation kann das Tool gestartet werden und im Webbrowser aufgerufen werden, um eine Verbindung zur Kamera herzustellen.

https://127.0.0.1:8384/

Damit man sehr einfach die Verbindung zum Client auf der Kamera freigeben kann, ist der SSH-Tunnel wie oben beschrieben aufzubauen.
Auf dem eigenen Client kann dann Synchting der Kamera im Webbrowser aufgerufen werden und auch konfiguriert werden.

http://localhost:18384/

Syncthing gibt es auch als Dockerimage. Damit kann man das kleine Tool auch auf dem eigenen NAS (Synology, omv, etc.) sehr einfach installieren.

Weitere Tweaks für die Kamera

USB-Stick anschließen

An der Kamera kann ein externer USB-Stick angeschlossen werden, der eine größere Speicherkapazität als die interne SD-Karte hat.

In der motion.conf ist der Speicherpfad dann entsprechend einzustellen.

# USB-Stick ist NTFS-formatiert
sudo apt install ntfs-3g

# USB-Stick anschließen und UUID herausfinden
sudo blkid

# Eintrag für das Mounten des USB-Sticks in die /etc/fstab eintragen
# Die UUID des USB-Sticks wird hier benötigt
sudo nano /etc/fstab

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

# Mount Point für USB-Stick anlegen
sudo mkdir /mnt/motion

# USB-Stick mounten
sudo mount /mnt/motion

# Ordner für Bilder / Videos auf USB-Stick anlegen
sudo mkdir /mnt/motion/pictures

# Ordner für motion logfiles anlegen
sudo mkdir /mnt/motion/logs

In der motion.conf sind die Pfade anzupassen, damit die Bilder/Videos und die Logfiles auf dem USB-Stick gespeichert werden.

sudo nano /etc/motion/motion.conf

In der Datei sind die Zeilen anzupassen.

target_dir /mnt/motion/pictures
log_file /mnt/motion/logs/motion.log

Nach dem Speichern ist motion neu zu starten, um die Änderungen einzulesen.

sudo systemctl restart motion

Automatisches Löschen von Bildern/Videos auf der Kamera

Die Bilder/Videos lassen sich auf der Kamera sehr einfach mit einem kleinen Shellskript löschen.

sudo mkdir /etc/scripts

sudo nano /etc/skripte/autodelete.sh

Der Inhalt von autodelete.sh

#!/usr/bin/env bash

#
# This scripts deletes files older than x days
#
# Copyright by Stefan Strobel
# https://www.strobelstefan.de


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

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

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

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

find ${MOUNTPOINT}* -mtime +7 -exec rm {} \;

exit 0

Die Datei ist noch ausführbar zu machen und die Rechte sind anzupassen.

sudo chmod +x /etc/scripts/autodelete.sh
sudo chown root:root /etc/scripts/autodelete.sh

Der Cron ist danach anzulegen

sudo crontab -e

Die Zeile ist einzutragen

# Deletes files older than x days
00 8 * * * /bin/bash /etc/scripts/autodelete.sh

E-Mail-Versand für Kamera einrichten

Eine ausführliche Anleitung, wie der Versand von E-Mails einzurichten ist, ist in der Anleitung auf codeberg.org zu finden.

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

Man kann z.B. ein regelmäßiges Statusupdate von der Kamera versenden lassen

https://strobelstefan.de/2021/03/16/raspberry-pi-systemstatus-per-e-mail-versenden/

Regelmäßiger Neustart

Manchmal ist es ganz sinnvoll den Raspberry Pi in regelmäßigen Abständen neu zu starten.

sudo crontab -e 

# Reboot to defined time
0 5 * * * /sbin/shutdown -r +5

Foto von Mich Smith auf Unsplash


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.org


Kaffee via Bitcoin

bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj


7 Antworten auf „Überwachungskamera mit einem Raspberry Pi, motion und Syncthing in 20 Minuten“

  1. Hi Stefan,
    danke für den interessanten Beitrag.
    Gibt es eine Empfehlung für die Pi-Kamera, die fehlt hier eigentlich als wichtigster Bestandteil im Bereich Hardwarevoraussetzungen, denn ohne Optik geht ja nix.
    Danke
    Harry

  2. Hallo Stefan,
    vielen Dank für Deine Anleitung.
    Ich habe ein frisch aufgesetztes System (Raspi 4).
    Der Stream ruckelt aber.
    Hast Du eine Idee, wie ich das abstellen kann?
    Meine Cam ist eine: Electreeks® Raspberry Pi Kamera Modul mit Automatik Infrarot-Sperrfilter – Full HD mit Infrarot LEDs
    Vielen Dank
    Conrad

  3. Hallo Stefan,
    vielen Dank dafür!
    Ich habe die Anleitung gestern teilweise durchgearbeitet. Dann verließen mich meine Kenntnisse. Die Doku ist sehr umfangreich. Das ist schon mal gut.
    Mit „libcamera-vid -t 0 –inline –listen -o tcp://0.0.0.0:8080“ auf dem Raspi und „tcp/h264://192.168.178.36:8080“ per VLC vom Windows 11 kann ich mir zwar den Stream anschauen, allerdings läuft dieser auch nicht flüssig.
    Ich denke, ich bestelle mir mal eine andere Kamera. Vielleicht liegt es nicht an mir, sondern an der Hardware.
    Vielen Dank für Deine Mühe und eine schöne Restwoche.
    Conrad

    1. Nachtrag:
      In einem Forum (https://forum-raspberrypi.de/forum/thread/37673-kamera-zeigt-in-motion-nur-1-bild-pro-sekunde-egal-bei-welche-framerate/) habe ich die Lösung gefunden:
      In der Konfiguration (/etc/motion/motion.conf) war bei mir der Schalter „Stream_maxrate“ nicht vorhanden. Dieser steht offensichtlich per default auf 1.

      Ich habe folgendes meiner Konfiguration hinzugefügt:
      Stream_maxrate 10
      Nun läuft der Stream wunderbar!

      Schöne Grüße
      Conrad

Schreibe einen Kommentar

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