Zum Inhalt

Ü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 genauso 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 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 hoch, es tut auch ein altes Modell)

Raspberry Pi - Hardwarespezifikation

Betriebssystem

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

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

Codeberg

Dein Weg zur eigenen Nextcloud

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.

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

Konfigurationsdatei

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

~/.config/syncthing

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

Firewall

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

Infos zu ufw gibt es hier

Codeberg

Dein Weg zur eigenen Nextcloud

sudo ufw allow syncthing

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 Pis 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>Meine Kamera - WLAN</title>
    <trackList>
        <track>
            <location>http://192.168.312.61: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>

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.

Für Mac gibt es ein Homebrew Cask

brew install syncthing

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 Syncthing der Kamera im Webbrowser aufgerufen werden und auch konfiguriert werden.

http://localhost:18384/

Syncthing gibt es auch als Docker Image. 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 Shell Skript 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

Codeberg

Dein Weg zur eigenen Nextcloud

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

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

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