Menüs

Raspberry Pi 3 und IP-Kameras zur Videoüberwachung

Hardware: Raspberry Pi 3, Digoo DG-WO2f, FosCam FI9826P, Digoo BB-M2

Das Angebote chinesischer Hersteller an billigen IP-Cams ist groß und obwohl man sich damit möglicherweise zum potentiellen Mitbetreiber eines Bot-Netzes macht und sich außerdem noch Zuschauer ins heimische Wohnzimmer holt, werden diese Cams massenhaft verkauft. Digoo z.B. wirft zum Beispiel seine Cloud-Cams mit minimalen Gewinnspannen auf den Markt, um mit dem dafür benötigten Cloudspeicher dem unbedarften Laien jeden Monat Geld aus der Tasche zu ziehen. Den Betrieb solcher Kameras sollte man nur über ein VLAN oder zumindest über NAT verbinden, da etliche dieser Billig-Cams bereits massenhaft gehackt wurden und über Backdoors verfügen. Zudem sind sie sehr geschwätzig und kontaktieren laufend Server, da sie als Cloudcams konzipiert wurden.

Für dieses Projekt verwende ich diese billigen Kameras, da sie auch bei mir zuhause rumliegen…

Hinweis (10.10.2018)

In ZD-Net erschien am 9.10.2018 ein -> Artikel in ZDNet von Catalin Cimpanu, in dem er die Sicherheitsprobleme von Kameras des chinesischen Herstellers Hangzhou Xiongmai Technology Co., Ltd. beschreibt und auf die Anfälligkeit auch von DiGoo-Produkten hinweist. Insbesondere die Gefahr diese Kameras zum Werkzeug eines BotNetzes zu machen, sollte man beachten und beim Einsatz keine Verbindung zum Internet zulassen!

Streams der Kameras anzeigen

Als Erstes gilt es heraus zu finden, wie man an die Streams der Kameras kommt. Um die Kamerabilder auf den PC-Monitor zu bekommen, genügt bereits der Aufruf im Browser (z.B. Firefox mit dem AddOn Open in VLC media player und dem VLC-Player).

FosCam FI9826P

Für die FosCam FI9826P gibt man in die Adressleiste ein:

rtsp://<user>:<passwort>@<IP der Kamera>/videoMain

Das AddOn öffnet den VLC Mediaplayer und videoMain liefert den Mainstream (hohe Auflösung). Für den Substream lautet der Aufruf

rtsp://<user>:<passwort>@<IP der Kamera>/videoSub

Für unseren Zweck kann man auch den Link zum Snapshot verwenden:

http://<user>:<password>@<IP der Kamera>:<Port>/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=<root>&pwd=<password>&;

Digoo DG-WO2f

Für die Digoo DG-WO2f lautet der Aufruf für den Main- und Sub-Stream mit den originalen Zugangsdaten:

rtsp://admin:dg20160404@<IP der Kamera>/onvif1
rtsp://admin:dg20160404@<IP der Kamera>/onvif2

Bei älteren Modellen ist das Passwort 20160404.
Eine Verbindung über TELNET ist bei dieser Kamera mit dem User root und dem Passwort cxlinux möglich.
Offene Ports dieser Kamera:
Discovered open port 23/tcp
Discovered open port 80/tcp
Discovered open port 554/tcp
Discovered open port 6670/tcp
Discovered open port 7103/tcp
Discovered open port 7101/tcp
Discovered open port 5050/tcp
Discovered open port 843/tcp
Discovered open port 8001/tcp
Discovered open port 3201/tcp

Digoo BB-M2

Bei diesem China-Billig-Modell erhält man Snapshots unter

http://<IP der Kamera>:81/snapshot.cgi?user=admin&pwd=admin&

Hat man das Admin-Passwort oder den Port geändert, muss das angepasst werden. Streaming ist über http://

http://<IP der Kamera>:81/videostream.cgi?loginuse=admin&loginpas=admin

und rtsp:// möglich:

rtsp://<user>:<password>@<IP der Kamera>:10554/tcp/av0_0
rtsp://<user>:<password>@<IP der Kamera>:10554/tcp/av0_1

 

Streams mit mplayer anzeigen

Um einen Stream auf einem eigenen Display oder dem Display eines anderen Rechners anzuzeigen, eignet sich der mplayer hervorragend. Meist ist er in der Distribution schon enthalten oder man installiert ihn einfach nach.

:~ $ sudo apt-get install mplayer

Von einer lokalen Konsole auf einer grafischen Benutzeroberfläche des Raspberry startet man die Kamera-Streams mit

:~$ mplayer <Streamingadresse der Kamera> 

und aus einer SSH-Sitzung mit

:~$ mplayer -vo fbdev <Streamingadresse der Kamera> 

Damit lassen sich komplette Überwachungsdisplays aufbauen, da man mit mplayer die Streams mehrer Kameras auf dem Bildschirm verteilt anzeigen kann. Ich komme später noch darauf zurück.

Raspberry vorbereiten

Dazu habe ich -> hier schon auf etliche Seiten verwiesen, die sich damit sehr fundiert mit der Installation beschäftigen. Um sich Arbeit zu sparen falls etwas schief geht, erstelle ich vor jeder größeren Installation ein Image der SD-Karte des Pi. Unter Windows verwende ich das USB-Image-Tool ( -> hier) .

Unter Ubuntu reichen die Bordwerkzeuge aus. zunächst muss mit

:~$ df -h

der Gerätenamen der SD-Karte festgestellt werden. Die SD-Karte erkennt man zum einen an der Größe und an den beiden Partitionen, von denen eine mit boot benannt ist.
Um den gesamten Inhalt der SD-Karte zu sichern, benutz man den Gerätenamen (z.B. /dev/sdc).

:~$ dd if=/dev/sdc of=/path/images.img bs=4M

Damit erhält man ein image, das genauso groß ist wie die SD-Karte. Wer Platz sparen will/muss, kann daraus gleich ein ZIP-File erstellen, in dem die leeren Bereiche der SD-Karte sehr gut komprimiert werden.

:~$ dd if=/dev/sdc bs=4M | gzip > /home/<user>/<filename>.gz

Das Kopieren des Images aus einem gzip-File auf die SD-Karte erfolgt mit:

:~$ gunzip /home/<user>/<filename>.gz | sudo dd bs=4M of=/dev/sdc

 

Motion detection auf Raspberry

Motion ist in allen mir bekannten Distributionen enthalten.

:~ $ sudo apt install motion

Unter Debian benötigt man libav-tools, da ffmpeg warum auch immer damit ersetzt wurde. Die meisten anderen Distributionen verwenden weiterhin ffmpeg.

:~ $ sudo apt install libav-tools

Die Konfiguration von motion befindet sich im Verzeichnis /etc/motion/ und besteht nach der Installation aus der Hauptkonfigurationsdatei motion.conf und aus Konfigurationsdateien camera_x.conf.  Für den Betrieb einer einzigen Kamera kann man alle Konfigurationsparameter in der motion.conf unterbringen. Will man mehrere Kameras betreiben, stehen nur die Parameter in der Datei motion.conf, die universell gelten. Die kameraspezifischen Angaben stehen für jede Kamera in einer eigenen Datei. Im Verzeichnis /etc/motion muss dann auch noch das Unterverzeichnis conf.d angelegt werden.

:~$ sudo mkdir /etc/motion/conf.d

Die Aufnahmen speichere ich auf einer USB-Festplatte, die ich an den Raspberry angesteckt habe. Die wird deshalb auch unter /home/pi/<UUID der HDD> ins Dateisystem eingebunden und bei den Kameras als target_dir angegeben. Es ist sicher eine gute Idee, z.B. eine NAS zu mounten, aber zur Demonstration genügt mir diese Variante

Ich habe eine Hauptkonfiguration motion.conf und für die beiden Kameras eigene Konfigurationen erstellt. Die originale Datei sollte man sich irgendwo sichern, da ich hier alle Kommentare zwecks Übersichtlichkeit entfernt habe.

TIPP

Wenn die Bilder später von motion immer wieder mit mehr oder weniger großen verwaschenen Streifen oder auch mit nach unten gezogenen vertikalen gleichfarbigen Streifen aufgezeichnet werden, dann glaubt man dem Hersteller zu sehr!
Mit der VLC-Erweiterung für den Firefox oder irgendeinem anderen Programm die Informationen zur Bildgröße der Kamera suchen und in motion korrekt eintragen. Die Werte von height und width müssen auch durch 8 ohne Rest teilbar sein.
In VLC findet man die Original-Bildgröße des Streams im Menü Werkzeuge -> Codec-Informationen und kann mit den aufgezeichneten Bildern gegenprüfen.

motion.conf

############################################################
# motion.conf
############################################################

daemon on
process_id_file /var/run/motion/motion.pid

setup_mode off
logfile /var/log/motion/motion.log
log_level 5
log_type all

v4l2_palette 17
input -1
power_line_frequency -1
minimum_frame_time 0
auto_brightness off
brightness 0
contrast 0
saturation 0
hue 0

roundrobin_frames 1
roundrobin_skip 1
switchfilter off
smart_mask_speed 0
lightswitch 0
pre_capture 0
post_capture 0
event_gap 60
max_movie_time 0
emulate_motion off

output_pictures on
output_debug_pictures off
quality 75
picture_type jpeg

ffmpeg_output_movies on
ffmpeg_output_debug_movies off
ffmpeg_timelapse 0
ffmpeg_timelapse_mode daily
ffmpeg_bps 400000
ffmpeg_variable_bitrate 0
ffmpeg_video_codec mpeg4
ffmpeg_duplicate_frames true

use_extpipe off

snapshot_interval 0

locate_motion_mode off
locate_motion_style box
text_right %Y-%m-%d\n%T-%q
; text_left CAMERA %t
text_changes off
text_event %Y%m%d%H%M%S
text_double off

movie_filename %v-%Y%m%d%H%M%S
ipv6_enabled off

quiet on

camera /etc/motion/foscam1.conf
camera /etc/motion/dgwo2f1.conf
camera_dir /etc/motion/conf.d

Die Konfigurationsdatei ist im Original gut kommentiert. Wichtig ist, daran zu denken, dass alle allgemein gültigen Parameter in der motion.conf stehen und die kameraspezifischen Parameter in alle Konfigurationsdateien für die einzelnen Kameras übernommen werden. Damit diese Konfigurationen eingebunden werden, benötigt man die letzten drei Zeilen der motion.conf.

foscam1.conf

In dieser Datei muss mindestens target_dir und netcam_url den eigenen Erfordernissen angepasst werden.

###########################################################
# foscam1.conf FI9826P
############################################################
camera_id = 1
text_left FosCam_OG2
target_dir /media/pi/e156aff4-dab9-4e24-bbd8-1a40e0e4013b/motion-images
picture_filename FOSCAM1_%v-%Y%m%d%H%M%S-%q
snapshot_filename FOSCAM1_SS_%v-%Y%m%d%H%M%S-%q
timelapse_filename %Y%m%d-timelapse
rotate 0
width 1280
height 720
framerate 4
netcam_url http://<user>:<password>@<IP der Kamera>:<Port>/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=<root>&pwd=<password>&;
netcam_keepalive on
netcam_tolerant_check off
rtsp_uses_tcp on
threshold 1500
threshold_tune off
noise_level 32
noise_tune on
despeckle_filter EedDl
minimum_motion_frames 3

dgwo2f1.conf

In dieser Datei muss mindestens target_dir und netcam_url den eigenen Erfordernissen angepasst werden.

###########################################################
# Digoo DH-WO2f
############################################################

camera_id = 2
text_left DG_WOf2_1
target_dir /media/pi/e156aff4-dab9-4e24-bbd8-1a40e0e4013b/motion-images
picture_filename DG_WO2f_1_%v-%Y%m%d%H%M%S-%q
snapshot_filename DG_WO2f_1__SS_%v-%Y%m%d%H%M%S-%q
timelapse_filename %Y%m%d-timelapse
rotate 0
width 1280
height 720
framerate 4
netcam_url rtsp://<user>:<pasword>@<IP der Kamera>/onvif1
netcam_keepalive on
netcam_tolerant_check off
rtsp_uses_tcp on
threshold 1500
threshold_tune off
noise_level 32
noise_tune on
despeckle_filter EedDl
minimum_motion_frames 3 

Start der Aufzeichnung

Wir starten den Service motion

:~$ sudo service motion start 

und beobachten in einer zweiten Konsole das log-File

:~$ tail -f /var/log/motion/motion.log

Bei der Fehlersuche hilft

:~$ systemctl status motion.service

weiter.

Buy Me a Coffee at ko-fi.com

Kommentare 4

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.