Tonis Bastelkeller - Bewegungsmelder mit Bild im Netzwerk

Hi zusammen…

Da hab ich doch am Wochenende ein netten Besuch in meinem Bastelkeller gehabt von dem ich euch unbedingt was erzählen muss. Es handelte sich um eine Axis 207, die mir schon in der Vergangenheit mehrfach positiv aufgefallen war. Ein Kumpel hatte sie günstig bei ebay geschossen und nun Probleme damit. „Stell mal hin, schau ich mir am Wochenende an“, hab ich ihm gesagt. In Wirklichkeit konnt ichs kaum abwarten, dass er sein Pils ausgetrunken hatte und ich mit der Kleinen allein war. :smiley:

Die kleine, damals verhältnismäßig günstige, Netzwerkkamera, die es übrigens auch als WLAN Variante gab, ist mir im Job schon mal über den Weg gelaufen und war dort als besserer Bewegungsmelder eingesetzt. Damals hab ich eine Software entwickelt, die direkt Aktionen ausgeführt hat wenn sie einen Alarm ausgelöst hat. Also eigentlich genau das richtige für IPS. Also frisch ans Werk und schau wir mal was da so geht.

Ich will hier mal auf bewusst niedrigem Niveau ein kleines Einsteiger-Tutorial tippen. Es soll mal rein mit „Bordmitteln“ und so knapp wie möglich zeigen wie man sowas realisieren kann. Auch das benötigte Script ist so kurz gehalten wie möglich und aufs Wesendliche reduziert.

Einstellungen an der Kamera

Zunächst sollte die Kamera wie vom Hersteller beschrieben in Betrieb genommen werden. Das mehrsprachige Handbuch hat der Hersteller online gestellt.

Wenn man sie dann im Browserfenster mit ihrer IP Adresse ärgert sollte sie sich direkt mit dem Livebild wehren. In dem Fall hat die Einrichtung geklappt und die Integration in IPS kann beginnen. Was sie so interessant macht ist die Tatsache, dass man ihr die Information, dass sich jetzt im Moment gerade etwas bewegt, entlocken kann. Das wollen wir mal über die „TCP Notification“ machen. Dafür oben rechts auf Setup gehen und ggf. einloggen. Im Hauptmenü sollte sich links der Punkt „Event Configuration“ und „Event Settings“ finden lassen.

Ganz unten findet sich unser Punkt „Send TCP Notification“. Diese kleine, unscheinbare Punkt macht hier den Unterschied zu den meissten anderen günstigen Netzwerkkameras aus. Bei „Message“ kann man noch hinterlegen was genau die Kamera melden soll, aber das spielt für uns keine Rolle. Wir tragen also irgend einen Unsinn ein und kümmern uns ums Wesendliche, den Button „TCP server settings“. Dort sollte sich die kleine Fenster öffnen.

AxisEventSetup.png

Wie der Server heisst spielt normal keine Rolle, wichtiger ist die Netzwerk Adresse. Hier kommt die IP unseres IPS-Servers rein. Wie im Screenshot zu sehen verwende ich den Port 556. Ich kann gar nicht mehr sagen ob ich den dort eingegeben hab oder ob es die Standardeinstellung war. Es spielt auch keine Rolle. Wichtig ist nur, dass hier und nachher in IPS der selbe Port eingestellt sind.

Sehr komfortabel ist der Testbutton, den uns die Firma Axis hier zur Verfügung gestellt hat. Wird er uns doch gleich ermöglichen unser IPS Script auszuprobieren ohne aufwändig Bewegung simulieren zu müssen. Also lasst das Fenster ruhig noch einen Moment offen.

Einstellungen in IPS

In unserem IPS benötigen wir nun eine Server Socket Instanz. Fieser weise ist die ein wenig versteckt. Dafür müssen wir beim Erstellen der Instanz (Rechtsklick, Objekt hinzufügen, Instanz hinzufügen) zunächst einmal unten rechts den Haken bei „Alle Module zeigen“ setzen und finden den Server Socket dann bei den I/O Instanzen. Als Namen hab ich, damit wir nicht ins Schleudern geraten, „Axis 207“ vergeben. Ein Doppelklick auf die gerade erstellte Instanz (sie versteckt sich im Objektbaum unter I/O Instanzen) öffnet die Konfigurationskonsole. Erleichtert werden wir feststellen, dass man kaum etwas einstellen muss. Einfach den Port, den wir auch der Kamera gegeben haben und den Haken bei Aktiv rein. Dann die Einstellungen übernehmen. Nun kann sich die Kamera auf unseren IPS-Server verbinden.

Aber wie gehts weiter? Irgendwie müssen wir ja noch definieren was passieren soll wenn die Kamera sich meldet, oder? Richtig. Dafür legen wir ein neues Script an. Um die Anweisungen selbst kümmern wir uns gleich. Zunächst reicht uns das leere Script, das ich mal „OnMotion“ genannt habe. Das „On“ bedeutet für mich, dass das Script auf etwas reagiert. Auf was genau es reagiert sehe ich daran, dass ich es als Unterpunkt meiner „Axis 207“ Instanz erstellt hab, wie ihr im letzten Bild, weiter unten, im Objektbaum sehen könnt. Das könnt ihr grundsätzlich aber handhaben wie ihr wollt. Ich finds halt übersichtlicher so.

Um den Server Socket mit unserem noch leeren Script zu verbinden benötigen wir eine „Register Variable“. Die findet ihr ganz normal beim Erstellen einer Instanz unter „Sonstiges“. Weil hier unsere Daten „versenkt“ werden (Datensenke ist tatsächlich ein Fachbegriff) habe ich sie mal „Datasink“ getauft. Auf einen Doppelklick hin öffnet sich wieder die Konfigurationskonsole. Dort wird oben unser leeres Script eingetragen und unten unser Server Socket namens „Axis 207“ als übergeordnete Instanz. Jetzt die Einstellungen übernehmen und wir können auch schon den ersten Test fahren.

Das Browserfenster mit unserem Testbutton hatten wir ja noch offen. Wenn wir dort drauf klicken sollte sich im Objektbaum hinter unserem Script die aktuelle Uhrzeit, also der Zeitpunkt wann das Script zuletzt ausgeführt wurde, wieder finden. Dann hat es geklappt. Die Kamera hat unser Script ausgeführt und wir können sehen wann sie zuletzt einen Grund dafür gesehen hat. Wenns nicht geklappt hat solltet ihr alle Einstellungen und vor Allem die Firewall prüfen.

Ein Bild schießen

Wir wollen aber ja auch wissen warum genau die Kamera ausgelöst hat. Eine Momentaufnahme des Livebildes von dem Zeitpunkt wäre da hilfreich. Zu diesem Zweck gibt es in IPS den Image Grabber. Wir erstellen uns auf dem bekannten Weg also eine neue Instanz, der Image Grabber ist ebenfalls unter „Sonstiges“ zu finden, und öffen wieder die Konfigurationskonsole. Der Image Grabber will etwas mehr von uns wissen. Wichtig ist natürlich die URL, ohne die gehts nicht. Bei der Axis sieht sie zum Beispiel so aus: „http://192.168.2.100/jpg/image.jpg“. Natürlich muss dort eure IP, statt dieser rein. Der Rest bleibt unverändert.

Den Typ lassen wir automatsch erkennen, die Benutzer Authentifizierung bekommt unseren Namen und das Passwort und - wichtig! - der Timer wird deaktiviert. Der Haken muss also raus. Wir wollen uns selbst um den download des Bildes kümmern. Nämlich immer dann wenn die Kamera eine Bewegung erkennt. Beim Klick auf den Testbutton sollte auch direkt ein Bild in der Mediabibliothek von IPS gespeichert worden sein. Normal müsste es jetzt als Unterinstanz des Image Grabbers erstellt worden sein. So sieht das bei mir aus.

Jetzt soll das aber alles automatisch passieren. Dazu benötigen wir nun unser vorbereitetes, noch leeres Script. Zunächst müssen wir dem Image Grabber ja mal sagen, dass er sich das Livebild jetzt holen soll. Das geht ganz komfortabel mit einer einzigen Zeile. Über das Medienobjekt, dass der Image Grabber erstellt hat, lässt sich das Bild kinderleicht im Webfront darstellen. Alle die aber, so wie ich, immer mehr wollen benötigen noch den Pfad um die Datei zum Beispiel in einer anderen Visualisierung darzustellen, sie per FTP zu publizieren/archivieren oder einfach per Mail zu verschicken. Dazu hab ich euch noch ein paar zusätzliche exemplarische Zeilen raus gesucht. Alle Anderen benötigen wirklich nur die erste Zeile.


<?
  IG_UpdateImage(52918 /*[Axis 207\Image Grabber]*/);  // Bild von der Kamera holen

  // Weitere Informationen zu unserem Bild
  $Bild = IPS_GetMedia(18967 /*[Axis 207\Image Grabber\Image]*/);
  
  print "path: ".$Bild['MediaFile']."
".
        "size: ".round($Bild['MediaSize']/1024, 1)."kb
".
		"date: ".date('d.m.y G:i:s', $Bild['LastUpdate']);
?>

Aber wir sind noch nicht fertig.

Wann genau soll sich die Kamera denn bei uns melden?

Wenn wir uns noch einmal das aller erste Bild vor Augen führen, dann gab es ganz oben noch einige Häkchen die man setzen konnte. Zum Einen, ganz wichtig, „Event enabled“. Dieser Haken schaltet den ganzen Vorgang überhaupt erst ein. Der muss also auf jeden Fall gesetzt werden. Die motion detection und der audio trigger sind im Handbuch der Kamera ausführlich erklärt. Der manuelle trigger ist für uns eher uninteressant doch auf den Input Port möchte ich noch kurz eure Aufmerksamkeit richten.

Die Axis hat einen Anschluss für einen externen Trigger. Das sind einfach zwei kleine Pins, die mit einem Kontakt überbrückt werden können. Wenn man dort zum Beispiel eine Lichtschranke, einen Türkontakt oder, wie ich es gemacht hab, einen kompatiblen Bewegungsmelder anschließt, so wird im Alarmfall unser Script ausgelöst. Dabei ist es auch möglich die einzelnen Auslösebedingungen durch setzen der entsprechenden Haken zu kombinieren. Eine Kombination aus einem klassischen Infrarot Bewegungsmelder und der eingebauten motion detection hat sich als sehr zuverlässig erwiesen. Nur muss es sich um einen Bewegungsmelder mit potentialfreiem Kontakt handeln, wie er zum Beispiel für Alarmanlagen verwendet wird. Dabei gibt es sogenannte Öffner oder Schließer, anderswo auch NO (normaly open) oder NC (normaly closed) genannt. Die Axis unterstützt beide Varianten indem man einfach auswählt „when port is active“ oder „inactive“. Je nach dem was ihr für Hardware verwenden wollt. Der einfache Bewegungsmelder aus dem Baumarkt wird nicht funktionieren.

Noch mal zum mitschreiben.

[ul]
[li]Kamera in Betrieb nehmen[/li][li]Event Settings: Event Enabled, gewünschte Notification und Send TCP Notification anhaken.[/li][li]Der Kamera die Serveradresse und Port verraten.[/li][li]Server Socket erstellen, Port einstellen und aktivieren.[/li][li]Script erstellen und den Code rein kopieren.[/li][li]Register Variable erstellen und mit Server Socket dem Script verknüpfen.[/li][li]Image Grabber erstellen, Benutzer eintragen und Timer deaktivieren[/li][/ul]

Ich hoffe ihr seid von meiner Wochenend-Begegnung genau so angetan wie ich und ich konnte euch auf das Gerät ein wenig neugierig machen. Vielleicht kennt der eine oder Andere auch noch Geräte mit denen diese Lösung auch funktioniert. Ich jedenfalls halte erstmal die Augen offen ob ich nicht auch, so wie mein Kumpel, ein Teil bei ebay schießen kann. Der lucky bastard. :wink:

Gruß,

Toni