Schlagwort-Archive: Bot

Bild an Smartphone bei Auslösen der Haustürklingel

Bild beim Auslösen der Haustürklingel ans Smartphone übertragen

Oftmals wird die Haustürklingel betätigt, während man nicht zu Hause ist. Im Gegensatz zum Telefon hinterlässt die Person aber keine Rufnummer anhand derer wir sie identifizieren könnten.

Mithilfe einer Webcam und eines Türklingelsensors soll ein Foto in dem Augenblick erstellt werden, wenn die Person an der Haustüre den Klingelknopf gedrückt hat. Nun wird das Foto per Pushnachricht an das Smartphone übertragen.

Hard-und Software-Voraussetzungen

Zuerst brauchen wir einen Raspberry Pi mit entsprechendem Netzteil. Hierzu habe ich auch entsprechende Empfehlungen gegeben.
Genauso sollte man sich über die Vernetzung Gedanken machen, ob man die Raspberry Pis per Netzkabel oder per WLAN anbinden möchte. Dafür habe ich hier in meinen Artikeln über die Grundkonfiguration Tipps gegeben:

Klingelsignal-Sensor

Damit beim Drücken des Klingelknopfes ein Signal an die Hausautomatisierungs-Software FHEM übertragen werden kann, brauchen wir den passenden Sensor. Für das Haussteuerungsprotokoll FS20 ist das die mittlerweile kaum mehr erhältliche FS20 KSE.

Diese bekommt man noch in Restposten bei Amazon, wurde aber offensichtlich abgekündigt. Dagegen gibt es für Homematic ein Allround-Modul, mit dem auf Eingangsspannungen von bis zu 20V reagiert und daraufhin ein Signal an die Haussteuerung übertragen werden kann:

Mit leichten Anpassungen ist dies mit dem Homematic-Modul ebenfalls leicht möglich.

Outdoor-Webcam für die Hausautomatisierung

Im Grunde genommen klappt es mit jeder Outdoor-Webcam. Wenngleich es schon sehr günstige Webcams für den Außenbereich gibt, so wird man jedoch sehr schnell erkennen,  dass es massive Qualitätsunterschiede gibt.

Auf jeden Fall ist das Wichtigste an einer Outdoor-Webcam, dass sie für den Außenbereich auch auf Dauer geeignet ist und nicht bereits nach zwei Jahren den Betrieb einstellt. Entsprechend ist ein weiteres Kriterium, wie sich die Kamera bei schlechten Lichtverhältnissen schlägt. Dafür haben die besseren Geräte Infrarot-LEDs, mit deren Hilfe sehr brauchbare Schwarz-Weiß-Bilder in der Dunkelheit gelingen. Im Gegensatz zu den beiden gerade genannten Qualitätsmerkmalen spielt die Auflösung der Kamera eine eher untergeordnete Rolle. Full-HD als Auflösung wäre zwar schön, ist aber unnötig. Folglich ist HD-Auflösung (1280 x 720) völlig ausreichend. In erster Linie wollen wir ja lediglich ein Foto machen, anhand dessen wir eine Person erkennen können. Des Weiteren ist der Vorteil einer nicht zu hohen Auflösung der, dass die Kamera bei schlechten Lichtverhältnissen weniger verrauschte Bilder liefert.

Hierzu habe ich mich nach langer Recherche auf folgende Outdoor-Webcam festgelegt:

Die Instar IN-5907HD ist absolut robust und macht wirklich ansehnliche Fotos, auch und gerade bei schlechteren Lichtverhältnissen.

Push-Nachrichtendienst auswählen

Zuerst müssen wir uns auf einen Nachrichtendienst festlegen, der Bilder und Text an ein Smartphone übertragen kann. Die meisten von uns denken jetzt ganz automatisch an WhatsApp. Zuerst war das auch mein Ansatz und eine solche Integration hat auch bis Anfangs des Jahres 2017 funktioniert. Leider hat WhatsApp begonnen, nur noch zertifizierte Geräte für den Nachrichtendienst zuzulassen. iPhone bzw. Android sowie Windows Mobile Geräte funktionieren mit WhatsApp einwandfrei. Schwieriger wird es, wenn man selbst ein Gerät an WhatsApp koppeln wird. Ich habe mich ziemlich lange mit der Integration von WhatsApp beschäftigt. Nachdem mir WhatsApp meine Rufnummer das x-te gesperrt hatte, habe ich diesen Nachrichtendienst für die Einbindung in die Haussteuerung ad acta gelegt.

Es gibt einige Alternativen für Push-Nachrichtendienste. Wir suchen jedoch einen Nachrichtendienst, für den es entsprechende Programmier-Schnittstellen (APIs) gibt. Aus meiner Sicht gibt es hier zwei Alternativen zu WhatsApp:

Beide Nachrichtendienste sind gleichermassen für unser Vorhaben geeignet. Die Smartphone-App für Pushover ist allerdings kostenpflichtig. Demgegenüber ist Telegram völlig kostenlos und bietet einige andere Vorteile.

Push-Nachrichtendienst Telegram mit Bot

Im Folgenden verwenden wir Telegram als Nachrichtendienst. Die Apps für Smartphones (iOS, Android, Windows Phone) sind kostenlos. Darüberhinaus gibt es Einbindung in alle gängigen Desktop Betriebssysteme wie Windows, macOS und Linux.

Den größten Vorteil, den ich aber sehe, ist die Möglichkeit, einen Bot zu erstellen.  Dazu ein paar erklärende Worte. Normalerweise ist die Funktionalität einer Push-Nachricht wie folgt: Jeder Teilnehmer an dem Nachrichtendienst ist über seine Telefonnummer angemeldet. Normalerweise gibt es eine 1:1-Beziehung zwischen dem Gerät, dem Smartphone und dieser Telefonnummer. Dementsprechend hieße das für die Einbindung des Nachrichtendienstes für FHEM, dass wir eine eigene Telefonnummer für die Haussteuerung bräuchten, unter der FHEM erreichbar wäre. Anders ausgedrückt soll ja FHEM Nachrichten sowohl empfangen als auch senden können. Natürlich könnten wir einen Surfstick für den Raspberry Pi besorgen und dort eine eigene Simkarte betreiben. Demgemäß würden aber nicht unwesentliche Zusatzkosten entstehen. Dieses Geld müssen wir aber gar nicht ausgeben.

Was ist ein Bot?

Die Einbindung in die Haussteuerung FHEM kann man beim Nachrichtendienst Telegram mit einem sehr einfachen Bot bewerkstelligen. Dieser Bot (vom englischen Wort robot) soll in unserem Fall einfach als virtueller Account arbeiten. Später wollen wir uns auf diesen von FHEM aus verbinden. Anders ausgedrückt erstellen wir über unseren echten Telegram-Account (ebenso wie bei WhatsApp registriert mit unserer Smartphone-Telefonnummer) einen virtuellen Account, den Bot. Normalerweise kann man mit einem solchen Bot komplexe Antwortverhalten einstellen. Im Gegensatz dazu nutzen wir den Bot nur als weiteren Account. Die Logiken werden nicht im Bot selbst, sondern in der Haussteuerung implementiert.

Einen Bot anlegen

Zuerst brauchen wir einen Account für Telegram. Hierzu laden wir im Falle eines Android-Smartphones aus dem Google Play Store die App Telegram und für iPhones über iTunes die App Telegram Messenger herunter.

Telegram iTunes

Nachdem die App installiert und konfiguriert auf die Handynummer gekoppelt ist, können wir loslegen. Für die nächsten Schritte müssen wir den virtuellen Account anlegen, den wir an FHEM koppeln werden. Dazu gibt es einen virtuellen Ansprechpartner namens Botfather. Mit diesem Botfather führen wir ein Konversation über bestimmte Befehle.

Telegram Botfather

Dazu laden wir den User @botfather ein, mit uns zu „sprechen“. Wir drücken auf Starten.

Telegram Botstart

Daraufhin erscheint eine Auflistung von Befehlen, die unser Botfather versteht.

Telegram Botstart

Mit /newbot legen wir einen neuen Bot an. Wir werden nach einem Namen gefragt und wir nennen ihn beispielsweise MyFHEM:

Telegram newbot

Nun werden wir noch nach einem Accountnamen gefragt. Dieser muss eindeutig sein, im Gegensatz zu dem gerade eingegebenen Bot-Namen. Es kann also sein, dass der von uns eingegebene Name zunächst abgelehnt wird, hier müssen wir also kreativ sein. Der Name des Accounts muss nur auf „bot“ enden.

Telegram newbot MyFHEMresponsebot

In der letzten Antwort können wir das wichtige Token erkennen, das für die Einrichtung in FHEM gebraucht wird. Mit Klick auf den Link  t.me/MyFHEMresponsebot laden wir den erzeugten Bot und können ihn über Starten am unteren Bildschirmrand starten.

Telegram Bot starten

Telegram-Bot in FHEM einbinden

Danach gehen wir in FHEM und legen mit den Token-Daten aus der letzten Antwort des Bots (bitte in der ersten Zeile die Token-Werte aus der letzten Antwort übernehmen)

define teleBot TelegramBot 3071xxxxx:AAGKh5o-FfOK_2EUCy-xxxxxxxxxxxx
attr teleBot pollingTimeout 120

ein neues Device an und stellen mit dem zweiten Befehl die Timeout-Zeit ein. Nach den beiden Befehlen drücken wir unter dem Fhem-Symbol auf Save Config. Sofort können wir ein neues Gerät erkennen und dort auch über den Status erfahren, ob wir mit dem Bot gekoppelt sind. Der Status sollte durch das obige Starten auf Polling wechseln.

FHEM Telebot anlegen

Nun sind wir mit FHEM gekoppelt. Dies können wir gleich testen, in dem wir von unserem Smartphone eine Nachricht an unseren Bot schreiben.

Telebot Testmessage

Diese Nachricht sollten wir daraufhin in FHEM in den readings zu unserem neuen Gerät sehen:

Telegram Bot Readings

Im Folgenden können wir also sicher sein, dass FHEM an den virtuellen Telegram-Account angebunden ist. Aber eines fehlt noch: Damit wir Nachrichten und Bilder an unser Smartphone schicken können, müssen wir noch unseren Standard-Account angeben, an den wir senden wollen. Das ist also unser eigener Telegram-Account, von dem wir den Bot eingerichtet haben. Demzufolge setzen wir mit

attr teleBot defaultPeer Vorname_Nachname

den default peer (auf den Wert, den wir gerade in den Readings unter msgPeer sehen) und können nun mit

set teleBot send Nachricht angekommen

eine Nachricht zurück an unser Smartphone schicken. Auf unserm Smartphone kommt prompt die Nachricht wieder an:

Telebot Nachricht angekommen

Webcam in FHEM anlegen

Damit wir das Bild bei Betätigen der Haustürklingel an das Smartphone übertragen können, müssen wir die Webcam auch in FHEM anlegen. Hierfür legen wir in der Konfigurationsdatei fhem.cfg neue Einträge an. User und Passwort müssen natürlich angepasst werden.

define WebCamHaustuere IPCAM 192.168.188.71:80
attr WebCamHaustuere delay 0
attr WebCamHaustuere group Webcams
attr WebCamHaustuere icon it_camera
attr WebCamHaustuere path tmpfs/snap.jpg?usr=admin&pwd=instar
attr WebCamHaustuere snapshots 1
attr WebCamHaustuere storage /opt/fhem/www/webcam/WebCamHaustuere

Dadurch haben wir jetzt die Webcam per Modul in FHEM integriert. Wir können nun über den Befehl

get WebCamHaustuere image

das aktuelle Bild von der Webcam holen und in dem konfigurierten Verzeichnis /opt/fhem/www/WebCamHaustuere ablegen. Da das Verzeichnis /opt/fhem/www im Standard schon existiert, müssen wir hier nichts weiter tun. Wir sehen, dass das Verzeichnis WebCamHaustuere angelegt wurde, falls es noch nicht existiert hat. Darin befinden sich nun zwei Dateien, von denen für uns die Datei WebCamHaustuere_snapshot.jpg wichtig ist.

FS20 Klingelsensor KSE in FHEM anlegen

Nun brauchen wir nur noch den Klingelsensor selbst. Wir brauchen den Klingelsensor FS20 KSE lediglich mit dem Klingeldraht verbinden, der selbst in modernen Häusern immer noch verbaut wird.

Durch folgende, einfache Konfiguration lässt sich der Klingelsensor in FHEM einbinden:

# Tuerklingelsensor
define FS20_Tuerklingel FS20 12341234 00
attr FS20_Tuerklingel IODev CUL
attr FS20_Tuerklingel alias Tuerklingel
attr FS20_Tuerklingel devStateIcon on:rc_dot@green off:rc_dot@grey
attr FS20_Tuerklingel icon phone_missed_out
attr FS20_Tuerklingel model fs20kse
define FileLog_FS20_Tuerklingel FileLog ./log/FS20_Tuerklingel-%Y-%m-%V.log FS20_Tuerklingel
attr FileLog_FS20_Tuerklingel logtype text

Über das FS20 Zahlensystem habe ich im Artikel Kalenderabhängige Schaltung einer FS20-Steckdose bereits geschrieben. Die Vorgehensweise bei der Einbindung des FS20 Klingelsensors unterscheidet sich kaum von der Einbindung einer dort beschriebenen Funksteckdose.

Versenden von Text und Bild bei Auslösung durch den Klingelsensor

Schließlich haben wir eigentlich alles, um die gewünschte Funktionalität umzusetzen. Wir haben den Klingelsensor eingebunden, der bei Auslösen der Haustürklingel ein Signal an FHEM schickt. Weiters haben wir die Outdoor-Webcam an FHEM gekoppelt, wo wir durch einen einfachen Befehl das aktuelle Bild holen und im Filesystem des Raspberry Pi ablegen. Ausserdem haben wir FHEM über einen Messagedienst-Bot angebunden. Was uns jetzt nur noch fehlt, ist die Verbindung dieser drei Dinge.

Das ist denkbar einfach. Wir brauchen lediglich ein Notify in der zentralen Konfigurationsdatei fhem.cfg erstellen. Hiermit wird eine Push-Nachricht mit dem Text „An der Haustüre hat es geklingelt" an das Smartphone geschickt. Folglich wird über das Hilfsmodul IPCAM ein Bild geholt und sogleich dieses ebenfalls per Push-Nachricht ans Smartphone geschickt. Das geschieht mit folgenden Einträgen:

define Haustuerklingel_notify notify FS20_Tuerklingel:on {\
        { fhem("set teleBot send Jemand hat an der Haustüre geklingelt");; \
          fhem("get WebCamHaustuere image");; \
          fhem("set teleBot sendPhoto /opt/fhem/www/WebCamHaustuere/WebCamHaustuere_snapshot.jpg");; \
}

Das Ergebnis sieht am Smartphone dann so aus:

FHEM Klingelsensor Botnachricht

Zuletzt aktualisiert am 05.02.2017.