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:
- Checkliste für Raspberry Pi mit FHEM
- Raspberry Pi Grundkonfiguration
- FHEM Grundkonfiguration
- um bei Änderung des Anwesenheitsstatus etwas schalten zu können: CUL Integration in FHEM
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.
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.
Dazu laden wir den User @botfather ein, mit uns zu „sprechen“. Wir drücken auf Starten.
Daraufhin erscheint eine Auflistung von Befehlen, die unser Botfather versteht.
Mit /newbot legen wir einen neuen Bot an. Wir werden nach einem Namen gefragt und wir nennen ihn beispielsweise MyFHEM:
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.
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 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.
Nun sind wir mit FHEM gekoppelt. Dies können wir gleich testen, in dem wir von unserem Smartphone eine Nachricht an unseren Bot schreiben.
Diese Nachricht sollten wir daraufhin in FHEM in den readings zu unserem neuen Gerät sehen:
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:
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:
Zuletzt aktualisiert am 05.02.2017.
Hallo ,
kannst Du vielleicht mal kurz erklären wie Du die KSE an deinen
Türgong angebunden hast ?
Versuche ich schon eine ganze Weile ,habe leider einen Gong mit Batterien .
Viele Grüße
Hallo,
das Entscheidende ist, dass die KSE eine externe Spannungsversorgung bekommt. Ich habe hier zufälligerweise noch einen Versuchsaufbau bei mir herumliegen. An diesem ist einfach eine 9V-Batterie angeschlossen. Die hält gut und gerne 2 Jahre, bevor diese mal gewechselt werden muss.
Anbei ein Bild:
Unten wird die 9V-Spannung angelegt, oben kommt der Klingeldraht herein.
Es ist wichtig, dass hier der Klingeldraht nicht in Reihe angeschlossen wird. Also parallel zu einem Gong, wenn dieser auch über den Klingeldraht angeschlossen wird.
D.h. in unserem Bild das weisse und rote Kabel: Also vom roten Kabel 2 Kabel anschliessen, eines in die KSE, das andere in den Gong. Für das weiße Kabel analog.
Eine Reihenschaltung löst nicht mehr aus, da die Spannung sonst zu stark abfällt.
Ich hoffe, ich konnte ein wenig weiterhelfen.
Viele Grüße
Martin
Hallo, würde mich sehr freuen, wenn die Vorgehensweise zum Alternativprogramm „Pushover“ ebenfalls beschrieben werden könnte. Hintergrund: Pushover account ist schon da, und ich will meine Infrastruktur nicht unnötig aufblähen.
Vielen Dank vorab!
Hallo Albrecht,
mein erster Ansatz war ebenfalls Pushover. Leider habe ich keine Möglichkeit gefunden, über Pushover ein Bild zu verschicken. Eine Textnachricht jederzeit, hierfür eine andere Funktion aufzurufen, um die Nachricht über Pushover zuzustellen, wäre schnell beschrieben. Leider ist das aber nur die halbe Miete. Ich kenne lediglich die Möglichkeit, einen Link zu schicken, das hieße aber, dass das Bild nicht eingebettet in der Nachricht ist und dann heruntergeladen werden müsste. Das wollte ich nicht. Ich wollte das Bild von der Webcam direkt mit verschicken.
Deswegen habe ich mich dann für Telegram entschieden.
Ist dann eine Beschreibung für Pushover immer noch interessant?
Ich habe Telegramm jetzt schon lange im Einsatz und kann es wirklich empfehlen!
Gruß
Martin
Hallo Martin,
vielen Dank für Deine Antwort. Ich werde mich dann halt mal mit Telegramm auseinandersetzen.
VG,
Albrecht
Hallo Martin,
du hast dein Projekt super detailliert und nachvollziehbar beschrieben. Ich habe alles nachgebaut und es funktioniert einwandfrei.
Vielen Dank für die Mühe und weiter so!
Vielen Grüße, Andreas.
Hallo Andreas,
vielen Dank für das nette Feedback! Ich verbringe in der Tat viel Zeit mit meinem Blog, damit eigentlich komplex erscheinende Aufgabenstellungen möglichst einfach lösbar werden….
Viele Grüße
Martin
…funktioniert jetzt auch bei mir sehr gut! Vielen Dank!
Aber, was muss ich machen, wenn ich Messages via fhem (auch) an einen anderen Empfänger schicken möchte?
Muss dieser zunächst meinen fhem-Bot anschreiben? Könntest Du das auch kurz erklären?
Vielen Dank vorab, – sehr gute Seite !
Hallo,
nur damit ich die Anforderung richtig verstehe – an einen anderen Empfänger heißt in diesem Falle:
Auch per telegram verschicken?
Dann hieße das, dass wir einen weiteren Bot einrichten müssten. Das geht natürlich schon, auch wenn ich die Funktionen der Einfachheit halber immer über den Default Empfänger realisiert habe.
Das geht dann natürlich so nicht. Wir müssten auch noch den Empfänger (also praktisch den Namen des Bots) für die message Funktionen jeweils mitgeben.
Vielleicht komme ich am kommenden Wochenende dazu, das zu probieren. Dann werde ich es hier posten!
Gruß
Martin
nein, ich möchte eigentlich nur messages via fhem an einen Freund senden. Habe aber nur dessen Benutzername.
—> set teleBot message @Benutzername bla bla bla
funktioniert nicht. Welche Voraussetzungen müssen geschaffen werden, dass dies geht?
Vielen Dank vorab!
Hallo,
ich habe das soeben ausprobiert. Damit das funktioniert, muss bei Deinem Freund nur einmal eine Meldung an den Bot geschickt werden.
Das wird erst mal scheitern.
Dann einfach das Attribut allowUnknownContacts von 0 auf 1 setzen!
Danach nochmal eine Nachricht von Deinem Freund an den Bot schicken.
Nun ist im Reading Contacts auch Dein Freund mit der PeerID und Vorname_Nachname eingetragen.
Danach kannst Du das Attribut allowUnknownContacts wieder von 1 auf 0 setzen, der Freund ist eingetragen.
Wenn Du jetzt mit
set teleBot message @Benutzername blablabla
etwas schickst, dann sollte auch die Message dort ankommen.
Bei mir hat es zumindest geklappt, habe es eben am Smartphone meiner Frau ausprobiert….
Gruß
Martin
habe es gerade erfolgreich so umsetzen können. Super, vielen vielen Dank!
VG,
Albrecht
Hallo !
Ich hätte eine Frage bezüglich des alternativen HomeMatic Moduls. In der Anleitung des Moduls steht gesachrieben das dieses ein Funk-Aktor ist und nicht wie das oben verwendete KSE20 ein Funksensor. Mir stellt sich die Frage mit welchen konkreten Anpassungen Sie einen Sensor aus diesem Modul machen ?
Hallo,
sorry, dass ich erst jetzt antworte, ich war im Urlaub.
Aus einem Aktor kann man natürlich nicht so ohne Weiteres einen Sensor machen. Ein Modul, das nur reagiert, kann nicht gleichzeitig senden, auch wenn das Homematic Protokoll mit Handshake arbeitet. Aber man kann die hier den von mir beschriebenen Aktor dazu benutzen, einen Sensor zu schalten. Wenn man den Homematic Funk-Aktor also am Ausgang beispielsweise mit dem Homematic Funk-Taster koppelt, dann sendet der Funk-Taster wie benötigt, sobald der Aktor auslöst.
https://www.amazon.de/Homematic-075604-HomeMatic-Funk-Tasterschnittstelle-4-fach/dp/B0024NP98Y/ref=as_li_ss_tl?ie=UTF8&qid=1533991641&sr=8-8&keywords=homematic&linkCode=ll1&tag=wwwkochworldd-21&linkId=80c2141b5e532aa408f396978ff17387&language=de_DE
Mit dem Funktaster kann man das direkt leider nicht machen, da man hier keine Spannung anlegen darf. Aber genau dafür kann man den Funk-Aktor benutzen, um diese beiden Stromkreise sauber zu trennen.
Einen vergleichbaren KSE20 für Homematic gibt es leider bisher nicht, deshalb muss man hier etwas tricksen.
Gruß
Martin
Noch mal auf deutsch lach, ist es möglich das Kamerasignal einer normalen Hausklingel mit integrierter Kamera via ESP z.B. zu übertragen und zu versenden?
Hallo,
theoretisch wäre das möglich, aber nicht in der Art, wie das hier vorgesehen und beschrieben ist. Mit einem ESP8266 müsste man das Signal abgreifen, verarbeiten, ein Jpg erzeugen und dann beispielsweise über einen Webendpunkt bereitstellen. Dieses Bild könnte dann in fhem so weiterverarbeitet werden, als ob es aus einer Webcam käme. Ich habe noch keine Erfahrungen gemacht, ob das schnell genug wäre. Zusätzlich müsste der Raspberry oder ein zusätzlicher Raspberry irgendwo verwendet werden und mit dem Signal beschickt werden (Kabel? Kann man aus einer bestehenden Hausklingel dieses Bild auf einfache Weise das Bild an den ESP8266 ausleiten? Dazu bräuchte man einen Bauplan der Haustürklingel. Ausserdem sind diese meistens verschweißt).
Meistens sind ausserdem diese Bilder so schlecht, dass jede aktuelle Webcam ein viel besseres Bild liefert, als jenes, das für die interne Darstellung der Hausklingel im Display optimiert ist.
Das wäre mir der Aufwand nicht wert, lieber eine günstigere Outdoor-Webcam zusätzlich aufstellen…
Gruß
Martin
Was für eine prima Anleitung!
Genau das, wonach ich gesucht habe!
Vielen Dank!