Welche Kameras sind die richtigen für ioBroker und VIS? Eine häufig gestellte Frage, die aus unserer Sicht nicht eindeutig beantwortet werden kann.  Zwei aus unserer Sicht wesentliche Kriterien zur Bewertung sind:

  • Die Kameras lassen sich ohne eine Kommunikation zu Cloud-Services des Herstellers betreiben und lokale Aufzeichnungen des Videostreams, entweder auf Speicherkarte direkt in der Kamera oder über eine Drittsoftware mithilfe des Videostreams sind möglich.
  • Der Videostream lässt sich direkt in eine VIS-Oberfläche einbinden.

Das zweite Kriterium ist für uns nicht das Wesentliche, weswegen wir für die semi-professionelle Überwachung eines Ferienhauses und den gelegentlichen Rundumblick eine Kameralösung gesucht haben, die folgende Kriterien erfüllen:

  • Schwenkbare Kameras
  • Gutes Preisleistungsverhältnis (vor allem, weil unter dem Dachgiebel Indoor-Varianten der Kameras installiert werden)
  • Speicherung auf lokaler SD-Karte oder mit Drittsoftware (z.B. MotionEye)
  • Wenn möglich Personenerkennung statt einfach Bewegungserkennung
  • Notifications bei Bewegung

Nach Recherche sind die Kameras der Marken Reolink und TP-Link Tapo in die nähere Auswahl gekommen. Beide Marken bieten Kameras für den Outdoor-Bereich, schwenkbare Kameras, Personenerkennung uvm.

Auswahl Reolink Kameras

Auswahl TP-Link Tapo Kameras

Wir haben uns für die schwenkbaren Kameras TP-Link Tapo C210 und C200 und C100 entschieden, auch wenn die Kameras keinen HTTP-Stream des Videos für die Einbindung in ioBroker VIS bieten. Trotz halbwegs intensiver Recherche sind uns die Unterschiede zwischen Tapo C200 und C210 bzw. C100 und C110 nicht aufgefallen bzw. klar geworden.

Was ist der Unterschied zwischen TP-Link Tapo C200 und TP-Link Tapo C210?

Im direkten Vergleich der Eigenschaften besitzt die Kamera C200 eine HD-1080p-Auflösung, C210 ist mit 3MP angegeben. Tatsächlich fällt die Qualität der beiden Kameras im Ergebnis ziemlich gleich aus, was die Vermutung zulässt, dass die verbaute Hardware identisch ist und die Unterschiede durch die Software verursacht sind.



Die wesentlichen Unterschiede sind allerdings, dass die Kamera-Varianten mit C*10, also auch bei der Kamera C100 und C110,

  • eine Personenerkennung bieten und
  • die Bewegungs- und Personenerkennung einzeln abrufbar speichert (die C*00-Varianten bieten lediglich einen Zeitstrahl mit Markierungen).

Tapo C210 Bewegungs- und Personenerkennung

Tapo C210 Bewegungs- und Personenerkennung

Tapo C200 Bewegungserkennung nur in timeline

Tapo C200 Bewegungserkennung nur in timeline

Das Vorhaben: Zwei bewegliche Kameras TP-Link Tapo C210 werden an den gegenüberliegenden Ecken des Hauses unter dem Dach befestigt. Durch die 360°-Sicht können bei Bedarf alle vier Seiten des Hauses überwacht werden, primär ist dies allerdings nur für zwei Eingänge notwendig. Bisher zeigt unsere über 15-jährige LAN-Kamera-Erfahrung bisher noch keinen einzigen Ausfall einer Indoor-Kamera im Außenbereich, solange die Kamera vor direkter Nässe durch Regen geschützt ist.

Eine Einbindung in VIS als Bewegtbild ist nicht notwendig, weswegen regelmäßig ein Standbild per ioBroker-Script erzeugt und in VIS angezeigt werden soll, wir werden die Standbilder wie später beschrieben über ffmpeg aus dem Videostream extrahieren. Die Aufzeichnung der Bewegungserkennung erfolgt auf den SD-Karten bzw. einer MotionEye-Instanz.

Über ein ioBroker-Script soll außerdem die Bewegung der beiden TP-Link Tapo C210 Kameras für die Standbildaufnahme getriggert werden, also Position der Kamera verändern, Standbild aufnehmen und Kamera zurück auf die primäre Position verändern.

Die Tapo-Kameras bieten eine API, mit der wir die Steuerung übernehmen können, es gibt zwar keine offizielle API-Dokumentation von TP-Link, aber glücklicherweise bereits eine python-Bibliothek, die uns alle notwendigen Funktionen bereitstellt: https://github.com/JurajNyiri/pytapo

Wir werden also über ein lokales python-Script auf dem ioBroker-raspberryPI die Steuerung der Kameras übernehmen, das Script wird dabei über ein Blockly-Script mit den entsprechenden Befehlen aufgerufen, um die vollständige Steuerung und Kontrolle in ioBroker übernehmen zu können. Die Standbilder werden dann in einem lokalen Verzeichnis gespeichert und über einen lokalen Webserver als http-Request in VIS eingebunden.



Zur Installation der pytapo-Bibliothen müssen wir zunächst mit folgenden Befehlen auf dem raspberryPI in der Console python installieren:
sudo apt-get install python3-setuptools
sudo apt-get install python3-pip

python3 auf raspberry für pytapo installieren

python3 auf raspberry für pytapo installieren

Ist die Installation erfolgreich abgeschlossen, installieren wir die pytapo-Bibliothek mit folgendem Befehl:
sudo python3 -m pip install pytapo

pytapo auf raspberry für ioBroker installieren

pytapo auf raspberry für ioBroker installieren

Im nächsten Schritt müssen wir bei den Kameras den Zugriff über die API einrichten, hierzu definieren wir in den Kameraeinstellungen > Erweiterte Einstellungen > Kamerakonto einen Benutzernamen und ein Passwort für den Zugriff (Wir gehen davon aus, dass die Anmeldung der Kameras im TP-Link Konto und damit der APP bereits erfolgreich erfolgt ist).

WICHTIG:
Die API-Zugangsdaten für die Kameras C*00 lauten exakt so, wie in den Einstellungen eingegeben. Für die Kameras C*10 hingegen muss als Benutzername „admin“ und das Tapo-Konto-Passwort gewählt werden!

Wir legen also im nächsten Schritt unser python-Script an, um die Positionssteuerung der Kameras zu übernehmen.

Wir legen mit dem Befehl „mkdir tapo“ einen Ordner an, wecheln mit „cd tapo“ in den Ordner und starten den Editor „nano“. Wir fügen folgendes Script ein und speichern z.B. als c210.py:

#!/usr/bin/env python3
from pytapo import Tapo
import sys

position = sys.argv[2] #Position wird aus Aufruf-Argument ausgelesen
cam = sys.argv[1] #KameraIP wird aus Aufruf-Argument ausgelesen


user = 'admin' 
password = '' # Passwort des TP-Link-Tapo-Accounts
host = cam

tapo = Tapo(host, user, password)
presets = tapo.getPresets()
print(tapo.getBasicInfo())
print(presets)
#tapo.setPreset(position)

Wir können jetzt mit folgendem Aufruf das Script testen, es verbindet sich mit der Kamera und listet alle gespeicherten Kamerapositionen auf:
python3 /home/pi/tapo/c210.py „IP-Adresse der Kamera“ 1

pytapo lieste gespeicherte Positionen der Tapo Kamera aus

pytapo liest gespeicherte Positionen der Tapo Kamera aus

Funktioniert das Script problemlos, können wir folgende Zeilen auskommentieren bzw. kommentieren und das Script steuert die Positionen:
#presets = tapo.getPresets()
#print(tapo.getBasicInfo())
#print(presets)
tapo.setPreset(position)

Für den Aufruf aus ioBroker heraus als Blockly mussten wir den Umweg über ein Bash-Script gehen, das wie folgt aussieht:

#!/usr/bin/env bash
python3 /home/pi/tapo/c210.py $1 $2

Dieses speichern wir im Ordner /home/pi/tapo als c210.sh ab.



Installieren wir im nächsten Schritt ffmpeg, um aus dem rtsp-Stream der Kameras ein Standbild zu kopieren. Mit folgendem Befehl installieren wir ffmpeg auf dem raspberryPI:
sudo apt-get install ffmpeg

Nach erfolgreicher Installation folgt der einfache Webserver, um die Standbilder für die VIS-Anzeige bereitzustellen (neue Sicherheitsrichtlinien erlauben es leider nicht mehr, die Bilddateien direkt in dem VIS-ioBroker-Verzeichnis abzulegen).

Um den Webserver zu installieren, nutzen wir folgenden Befehl:
sudo apt install lighttpd

Der Webserver wird mit den Standardeinstellungen installiert und sollte sich automatisch starten. Wir können dies einfach über den Aufruf von http://IP-Adressse-raspberry prüfen, es sollte folgende Standard-Seite erscheinen:

Testwebseite des Webservers

Testwebseite des Webservers

Wir haben alle Installationen auf dem System vorgenommen und können nun die entsprechenden Scripte in ioBroker anlegen.

Das Blockly soll die im System hinterlegten Scripte aufrufen, die Kameras steuern bzw. bewegen und Standbilder erzeugen. Diese werden dann über den http-Link in eine beliebige VIS eingebunden.

Wir nutzen das Exec-Modul in Blockly, um die angelegten Scripte aufzurufen. Die Scripte sind dynamisch, d.h. wir geben die IP-Adresse der Kamera und die Position direkt im Blockly an. Zunächst müssen wir in den Einstellungen der Javascript-Instanz sicherstellen, dass wir exec-Aufrufe ausführen können, hierzu einfach den Haken setzen:

exec Blockly für Bash Aufruf

exec Blockly für Bash Aufruf

Javascript enable command exec für Blockly

Javascript enable command exec für Blockly

Danach legen wir ein Blockly-Script an, in dem wir nacheinander die Position der Kamera verändern und ein Standbild erzeugen.

ioBroker Blockly für Script zur Tapo Steuerung

ioBroker Blockly für Script zur Tapo Steuerung

ioBroker Blockly schedule für Tapo Kamera

ioBroker Blockly schedule für Tapo Kamera

Der exec-Befehl für die Positionierung lautet:
bash /home/pi/tapo/c210.sh IP-Adresse-Kamera Positionsnummer

Der Befehl für das Standbild lautet:
ffmpeg -rtsp_transport tcp -i rtsp://Benutzername:Passwort@192.168.XXX.XXX:554/stream2 -frames:v 1 -pix_fmt yuvj420p /var/www/html/Standbildname.jpg -y -loglevel 0

Das Standbild lässt sich direkt unter der URL http://IP-Adresse-raspberry/Standbildname.jpg abrufen und in einer VIS einbinden.