CCU2: BotFather oder: Pushup umsonst…

Ich hatte immer den Wunsch, Bewegungen am Briefkasten und das Drücker der Klingel gebührend weiter zu verarbeiten, schließlich sind IP-Cams vorhanden und es sollte doch nicht so schwer sein, ein Pushup auf´s Handy zu bekommen…Ist es auch nicht, wenn man sich im Internet mit Geduld bewegt und schlussendlich erfolgreich vom Wissen Anderer partizipieren kann. Die Lösung heißt „Telegram Bot“ und den gibt´s, wenn man sich mit BotFather unterhält 🙂 Ich für meinen Teil musste dazu außerdem zwei Probleme lösen:

Aber der Reihe nach:
Pushup via Telegram ist einfach, wenn man weiß, wie´s geht. Es ist z.B. hier beschrieben. Setzt man nach Einrichtung einen Call an den Bot ab, erscheint der Text in der Handy-App mit allem „drum und dran“ also Klingelton, Benachrichtigung auf Startbildschirm, etc…Das Schöne am Telegram-Bot ist

  • er kostet nichts (noch nicht) und
  • man kann auch Bilder übertragen…

Auf der CCU2 dann einfach eine Verknüpfung machen („wenn“ das passiert, „dann“ führe scirpt aus“) Mein CCU2-Script sieht so aus:


! +++++ Settings +++++
string msg = "Es wurde geklingelt...";
string photo = "klingel.jpg"; ! ++++ hab ich so stehen lassen
string phogar = "phogar.jpg"; ! ++++ hab ich so stehen lassen
string camurl = "http://10.x.x.xxx/ISAPI/Streaming/channels/201/picture"; ! ++++ Snapshot URL CAM
string camgar = "http://10.x.x.xxx/Foto.jpg";
string chatid = "xxxxxxxxx";
string botAPI = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

! +++++ ffmpeg ausführen +++++
dom.GetObject("CUxD.CUX2801002:1.CMD_EXEC").State("wget 'http://10.x.x.xxx/testc.php'");

! +++++ Nachricht Senden +++++
dom.GetObject("CUxD.CUX2801002:1.CMD_EXEC").State("extra/curl -s -k https://api.telegram.org/bot"#botAPI#"/sendMessage -F text='"#msg#"' -F chat_id="#chatid);

! +++++ Klingelbild von Haustür holen +++++
dom.GetObject("CUxD.CUX2801002:1.CMD_EXEC").State("wget --http-user=xxxxx --http-password=xxxxxxxx -O "#photo#" "#camurl#"");

! +++++ Klingelbild versenden +++++
dom.GetObject("CUxD.CUX2801002:1.CMD_EXEC").State("extra/curl -s -k https://api.telegram.org/bot"#botAPI#"/sendPhoto -F chat_id="#chatid#" -F photo='@"#photo#"'");

! +++++ Klingelbild von Gartentür holen +++++
dom.GetObject("CUxD.CUX2801002:1.CMD_EXEC").State("wget -O "#phogar#" "#camgar#"");

! +++++ Klingelbild versenden +++++
dom.GetObject("CUxD.CUX2801002:1.CMD_EXEC").State("extra/curl -s -k https://api.telegram.org/bot"#botAPI#"/sendPhoto -F chat_id="#chatid#" -F photo='@"#phogar#"'");

Bedingung ist: CUxD ist installiert und ein Exec-Device ist angelegt…die entsprechenden xxxxxxx-Einträge sind durch meine persönlichen Daten ergänzt.
Ich habe als Auslöser zwei verschiedene Sensoren:

  • optischer Fenstersensor (HM-Sec-SCo) im Boden des Briefkasten („Post oder Zeitung ist da“)
  • Schließerkanal (HM-SCI-3-FM) an meiner chinesischen IP-DoorBell-Anlage („es hat geklingelt“)

Wenn nun einer der beiden Sesoren auslöst, bekomme ich den entsprechenden Text nach Telegram gepusht und zwei Schnappschüsse von meinen Außenkameras, ein „Übersichtsbild“ von der Haustür und ein „Detailbild“ von der IP-Cam in der Klingel…

Letztes war anfänglich ein Problem (das nicht nur ich habe/hatte) – viele der IP-Cams haben einfach keine entsprechende Snapshot-URL und die Herausforderung bestand nun, aus dem RTSP-Stream ein Bild zu vereinzeln…

Die Lösung heißt „ffmpeg“ und bescherte mir Zuwachs im IT-Verleilerschrank – einen weiteren Raspi, der durch Aufruf einer bereitgestellten PHP-Seite (testc.php) über eine shell ffmpeg startet und ein Bild zum Holen mit wget durch die CCU2 bereit stellt.

testc.php


<?php
$outvor = shell_exec('sudo /var/www/htdocs/bild.sh');
echo "$outvor";
?>

bild.sh


#!/bin/sh
ffmpeg -loglevel quiet -rtsp_transport tcp -i rtsp://xxxxxx:xxxxxxx@10.x.x.xxx/Streaming/channels/101 -ss 00:00:00.50 -y -r 1 -vframes 1 /var/www/htdocs/Foto.jpg

Klingt kompliziert, ist es aber nicht… (Tipp: ffmpeg für raspi2 von Github holen und compilieren)

So. Seit langer Zeit mal wieder (eigentlich nur für mich als Notiz) ein rein technischer Artikel…Falls es dazu Fragen gibt, einfach einen Kommentar scheiben…

P.S. ja – ich weiß, das php-Script ist von jedem auszuführen, aber der Raspi ist ja nur intern erreichbar…keine Gefahr also…