Es wäre doch genial wenn die Homematic CCU / Raspberrymatic automatisch Bilder von Überwachungskameras versenden könnte, sobald ein Türkontakt oder Fensterkontakt geöffnet wird.
Das funktioniert sehr gut, wenn als Benachrichtigungs-Kanal Telegram verwendet wird.
Die Einrichtung eines Telegram-Bots hat Digitaldad gut erklärt und aufgrund dieser Anleitung habe ich auch meinen Chatbot eingerichtet.
Vorbereitung
Da vorher Benachrichtigungen über Pocketcontrol versendet wurden, habe ich diese erstmal alle auf Telegram umgestellt und ich muss an dieser Stelle feststellen, das waren verdammt viele – unglaublich was sich da so über die Zeit ansammelt.
Wenn die Benachrichtigungen so laufen, hat man alles vorbereitet um nun an das Thema Bilder per Telegram versenden zu gehen.
Kameras – Voraussetzungen
Die Grundvoraussetzung um Kamerabilder über Telegram zu versenden ist, dass die Kamera ein Bild über .jpeg bereitstellen kann.
Das ganze ist nicht zu verwechseln mit einem .mjpeg-Stream.
ispyconnect.com ist eine sehr gute Anlaufstelle um herauszufinden ob die eigene Kamera diese Funktion unterstützt.
In meinem Fall unterstützt keine Kamera diese Funktion deshalb musste ich einen Plan B suchen.
Kamera – Direkte Unterstützung .jpeg
Wenn die Kamera direkt eine .jpeg Datei liefert, kann direkt mit dem Progam in der CCU begonnen werden.
Nehmen wir als Beispiel mein Programm für die Kamera in der Garage.
Skript Sofort-Ausführung:
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("wget -q -O '/tmp/garage.jpg' 'http://<user>:<password>@<kamera-ip>/pfad/zur/jpeg.jpeg'");
Skript nach Zeit:
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("extra/curl -s -k 'https://api.telegram.org/bot<Bot-APIcode>/sendPhoto' -F chat_id=<Chat-ID> -F photo='@/tmp/garage.jpg' -F caption='Garagentor'");
Zur Erklärung:
Das erste Script lädt das aktuelle Bild von der Kamera per wget sofort in den Ordner /tmp/garage.jpg .
Das zweite Script versendet das Bild per Telegram über euren Bot an euren Chat.
Die Verzögerung musste ich einbauen, da diese Vorgänge unweigerlich Zeit benötigen und je nach Bildgröße (SD Qualität, HD Qualität), kann das herunterladen einige Sekunden benötigen.
Diese Einstellung ist individuell und muss ausgetestet werden.
Als Auslöser sind einem hier natürlich keine Grenzen gesetzt, es können auch Bilder beim schließen versendet werden oder Aufnahme mit Verzögerung und so weiter.
Kameras – Keine Unterstützung .jpeg
Nun kommt es auch vor dass gerade die günstigeren China Modelle keine .jpeg Datei unterstützen.
An dieser Stelle kommt meine Synology Surveillance Station ins Spiel.
Nach einiger Recherche bin ich auf ein PHP-Script aufmerksam geworden welches die WebAPI anzapft und ein jpeg Datei bereitstellt.
Das Script musste ich nur an einer Stelle ändern.
In der Funktion printImage relativ am Schluss der Datei folgende Zeile auskommentieren oder rauslöschen.
Vorher:header ( "Content-Length: " . ( string ) (filesize ( $image )) );
Nachher:// header ( "Content-Length: " . ( string ) (filesize ( $image )) );
Diese Zeile hat bei mir im Apache Errorlog folgenden Fehler produziert.
filesize() expects parameter 1 to be a valid path, string given in /var/www/html/webcam.php on line 103
Alternativ soll es wohl auch direkt über ffmpeg eine Möglichkeit geben, jpeg-Dateien zu erzeugen.
Diese Möglichkeit ist von mir aber ungetestet.
Fazit
Diese Funktion ist wirklich praktisch gerade wenn man es auch mit einer smarten Klingel kombiniert.
So erhält man gleich ein Bild von demjenigen der geklingelt hat.
Hallo,
danke für den interessanten Artikel.
Das von die verlinkte PHP-Script funktioniert (zumindest bei mir) mit der aktuellen Synology- und Surveillance-Software nicht mehr. Ich habe auch die genannte Zeile auskommentiert, trotzdem funktioniert es nicht.
Kannst du freundlicherweise mitteilen, welche Software-Versionen (DSM, Surveillance-Station) und welche Kamera du bei dir verwendest?! Vielleicht hilft mir das ja.
Danke und freundliche Grüße
Jens
Hallo Jens,
ich habe auch die aktuelle Version der Surveillance Station im Einsatz (8.2.8-6335).
Verwendet PHP-Version: 7.0.33-0ubuntu0.16.04.16
Kameras sind verschieden.
2 von SV3C, WansView (K2) und eine NoName Kamera.
Ich bin aktuell dabei die Kameras durch Reolink zu ersetzen.
Das läuft mit den Screenshots auch wenn ich mittlerweile das ganze auf die FFMPEG Lösung umgeändert habe und den RTSP direkt von der Kamera Verarbeite.
ffmpeg -y -i rtsp://Benutzer:Passwort@Kamera-IP:554/Streampfad -vframes 1 /var/www/html/cam/kamername.jpg
Funktioniert fast noch zuverlässiger als die Surveillance API.
Vorraussetzung ist:
– FFMPEG installiert
– Webserver (Apache z.B.)
Was sagt den der Webserverlog?