Logo

WebCam mit Homematic verbinden

Der Hintergrund dieser Aktion war, dass eine WebCam im Wohnbereich installiert wurde. Dies war die Folge eines Einbruchs, zukünftig sollen die Langfinger bei ihren Missetaten beobachtet werden. Entschieden habe ich mich dabei für das folgende Gerät:


 

FI8921W von Foscam

Die Verbindung ist bei dieser Kamera sowohl über WLAN als auch LAN möglich. Die Kamera wird ganz normal ins Heimnetz eingebunden und erhält via DHCP eine feste IP-Adresse. Die entsprechenden Konfigurationen dafür werden im Web-Interface der Kamera bzw. des Routers vorgenommen.

Die Kamera lädt nun, sobald sie eine Bewegung erkennt, Bilder auf einen FTP-Server hoch und ist auch in der Lage, Bilder per Mail abzusetzen. Das ist prinzipiell gut, führt jedoch dazu, dass ich ständig mit Mails bombardiert werde, sobald die Kinder durchs Wohnzimmer toben. Hier kommt nun das Homematic-System ins Spiel.

Wenn alle das Haus verlassen haben, so geht der Status des Hauses auf “Abwesend”. Die Erkennung dieses Zustands erfolgt über eine Keymatic. Gleichzeitig damit erhält die Kamera den Befehl, jetzt alle Bewegungen auszuwerten und entsprechende Alarm-Mails zu generieren. Auch ist eine Steuerung der Kamera-Position möglich, wenn beispielsweise das Fenster aufgebrochen wird, so fährt die Kamera in diese Richtung. Das Gleiche gilt für ein unberechtigtes Öffnen der Haustür.

Wie ist das nun umgesetzt?

Zuerst werden in der Kamera die einzelnen Positionen gespeichert, die die Kamera anfahren soll. In meinem Beispiel gibt es da “Couch”, “Fenster”, “Kueche”. Die weiteren Position spielen in diesem Beispiel keine Rolle.



Innerhalb der CCU habe ich nun auch eine Variable angelegt, die die gleichen Werte enthält. Diese Variable wird verändert, wenn bestimmte Ereignisse eintreten.


Das folgende Programm reagiert beispielsweise, wenn ein Fenster geöffnet wird oder die Haustür geöffnet wird. Dazu wurde an der Haustür und den entsprechenden Fenstern ein Homematic Tür/Fensterkontakt angebracht. Die Kamera-Position wird auf die entsprechende Richtung gesetzt. Nach 3 Minuten geht's dann wieder in die Grundstellung.



Damit ist schon ein wichtiger Schritt vollzogen: Über das Web-Interface ist die Position der Kamera sichtbar, kann protokolliert werden etc. Nun geht es darum, die Kamera direkt anzusteuern. Hierzu muss auf das Web-Interface der Kamera zugegriffen werden. Das ist nur über ein Script möglich. Ein Beispiel für die Steuerung:

http://IP_der_Kamera/cgi-bin/CGIProxy.fcgi?cmd=ptzGotoPresetPoint&name=Couch&usr=USER&pwd=PASSWORT

Der Aufruf im Browser bewirkt, dass sich die Kamera nun in die Position Couch begibt. Nun muss dieser Aufruf durch die CCU erfolgen:

string text;
text="http://IP_der_Kamera/cgi-bin/CGIProxy.fcgi?cmd=ptzGotoPresetPoint&name=Couch&usr=USER&pwd=PASSWORT";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O /dev/null '" # text # "'");
dom.GetObject("CUxD.CUX2801001:1.CMD_RUNS").State(1);

Da hierzu die System-Funktion System.Exec aufgerufen werden muss, nutze ich hier den CUx-Daemon. Ist die Kamera, aus welchen Gründen auch immer, nicht ansprechbar, so schmiert die CCU sonst komplett ab. Der CUxD löst dieses Problem.
Kurz zur Erläuterung: In der text-Variable wird der Befehl an die Kamera zusammengebaut. Die IP-Adresse der Kamera, sowie USER und PASSWORT sind dabei natürlich durch die eigenen Daten zu ersetzen. Die vorletzte Zeile übergibt den Befehl an das Programm wget, welches (vereinfacht gesagt) einen Internet-Browser imitiert. In der letzten Zeile wird dann der eigentliche Befehl ausgeführt.

In der gleichen Art und Weise kann die Kamera auch in ihrer Alarmfunktion gesteuert werden. Der folgende Link schaltet die Bewegungserkennung auf die mittlere Stufe und sorgt dafür, dass bei Bewegung jede Sekunde ein Bild abgelegt wird:

text="http://IP_der_Kamera/cgi-bin/CGIProxy.fcgi?";
text = text # "cmd=setMotionDetectConfig&isEnable=1&linkage=12&";
text = text # "snapInterval=1&sensitivity=2&triggerInterval=1&";
text = text # "schedule0=281474976710655&schedule1=281474976710655&";
text = text # "schedule2=281474976710655&schedule3=281474976710655&";
text = text # "schedule4=281474976710655&schedule5=281474976710655&";
text = text # "schedule6=281474976710655&area0=1024&area1=1024&";
text = text # "area2=1024&area3=1024&area4=1024&area5=1024";
text = text # "&area6=1024&area7=1024&area8=1024&area9=1024&";
text = text # "usr=USER&pwd=PASSWORT";

Die einzelnen schedule-Werte geben die Zeiten innerhalb der Woche an, an welchem die Bewegungserkennung aktiv ist. Die area-Werte geben den Bereich an, in dem die Kamera auf Bewegung reagiert.
Viel einfacher ist das Abschalten der Bewegungserkennung:

text="http://IP_der_Kamera/cgi-bin/CGIProxy.fcgi?";
text = text # "cmd=setMotionDetectConfig&isEnable=0&";

text = text # "usr=USER&pwd=PASSWORT";

Hierzu habe ich dann ein weiteres Programm erstellt, welches sich an die (Standard-)Variable Anwesenheit der CCU hängt und dann die Bewegungserkennung ein- bzw. ausschaltet.

Damit haben wir nun alle Teile beisammen: Die Kamera kann von der CCU in die einzelnen Positionen gesteuert werden. Die Alarmerkennung wird abgeschaltet, sobald sich jemand (berechtigterweise) im Haus aufhält. Das Ziel ist erreicht: Ich bekomme keine ständigen Alarmmeldungen, obwohl gar keine "bösen" Buben im Haus sind.
Was wird nun für dieses Beispielprojekt alles benötigt?

Kleine Einkaufsliste:
1x CCU 1 oder CCU 2
2x Tür/Fensterkontakt oder mehrere, je nach Anzahl der Türen, Fenster etc.
1x Keymatic (für Anwesenheitserkennung)
1x IP-Webcam

Bei Fragen zu diesem Projekt wenden Sie sich bitte per Mail an Michael Moll.

Zurück zur Projekt-Übersicht



Stand: 28.03.2014