home
erste Version am 14.02.2016
letzte Änderung am 13.03.2016

IP-Kamera smartwares C704IP.2


Hier dokumentiere ich meine Erfahrungen und Erkenntnisse mit der IP-Kamera "smartwares C704IP.2".
Ich habe mir das Teil bei unserem lokalen Saturn-Markt mehr oder weniger spontan zum Spielen gekauft. Einen konkreten Einsatzzweck habe ich dafür noch nicht.


Inhalt
  1. Inbetriebnahme
  2. Web-GUI
  3. WLAN
  4. Debugger
  5. Einsatz (Ideen)
Einsatz-Idee: Bewegungserkennung und Kamera-Nachführung
     Bewegungserkennung
     Bewegungslokalisation
     Positionen anfahren und Bildvergleich
     Bewegungs-Nachführung
     Auto-Justage
     Bewegungs-Nachführung V2
     Bewegungs-Nachführung V3
     Weitere Erkenntnisse
     Umstellung auf np.int8 ?
     Bewegungs-Nachführung V4
     Erkennung der Bewegungsrichtung


Inbetriebnahme

Im ersten Ansatz habe ich die Kamera mit Netzteil und kabelgebundenem Ethernet verbunden und dann auf dem DHCP-Server der Fritzbox auf ein neues Gerät gewartet. Nachdem sich die Kamera eine IP-Adresse geholt hatte, habe ich diese per Webbrowser geöffnet.
Es kam eine Anmelde-Seite, bei der es aber erst mal nicht weiter ging. Weder mit der Benutzerkennung "admin" noch dem sog. Security code "000000".
Daraufhin habe ich eine VM mit Windows XP hochgefahren und darin die mitgelieferte Kamera-Software installiert. Aber damit scheiterte es ebenfalls an den Zugangsdaten.
Nach weiteren fruchtlosen Versuchen mit diversen Userid/Passwort-Kombinationen habe ich einen "reset to factory defaults" mittels Taster an der Geräte-Unterseite durchgeführt. Laut Doku habe ich den wohl 15 Sekunden lang gedrückt gehalten. Praktisch habe ich ihn einfach so lange gedrückt, bis die blinkende LED nicht mehr geblinkt hat. Und siehe da - nun kam ich auch mit der Benutzerkennung "admin" und leerem Passwort weiter.
Da war ich wohl nicht der Erste, der dieses Kamera-Exemplar in den Fingern hatte.


Web-GUI

Nach Eingabe der IP-Adresse von der Kamera in die Adresszeile des Browsers, werden vier Modi angeboten:
Das vollwertige GUI bekomme ich auf meinem Linux-System nur unter dem "Server Push Modus".
Sieht dann z.B. so aus (Bild anklicken für volle Größe):
Screenshot WebGUI
Wobei das schon die Anzeige ist, nachdem ich im Firefox die Funktion Aktueller Frame / Nur diesen Frame anzeigen gewählt hatte.
Um nur das Video angezeigt zu bekommen, reicht ein rechts-Klick auf das Video-Bild und Auswahl der Funktion Grafik anzeigen.
Das sieht dann so aus:
Screenshot Video
Wobei das nur klappt, wenn man sich bereits an der Kamera angemeldet hat.
Um direkt auf dem Video zu landen, lautet die URL
    http://camuser:pwd4Cam@192.168.178.36/videostream.cgi
Und damit das wiederum klappt, habe ich mir im WebGUI der Kamera natürlich erst einen Nutzer "camuser" mit dem Passwort "pwd4Cam" anlegen müssen.


WLAN

Die Kamera hat einen Ethernet-Port, aber es wird auch eine WLAN-Antenne mitgeliefert.
Jedoch mag die Kamera drolligerweise kein offenes WLAN.
Man kann ein solches zwar auswählen und einstellen, nachdem die Kamera dann aber neu gestartet hat, passiert nix.
In einem Anleitungs-Video von der mitgelieferten CD wird dieses Problem auch gezeigt -> ohne Schlüssel klappts nicht.

Für den ersten Test habe ich das WLAN von der Fritzbox aktiviert und dafür WPA+WPA2 eingestellt.
Hat geklappt. Allerdings will ich kein WLAN auf der Fritzbox.

Also habe ich auf einem meiner, sowieso immer funkenden, WLAN-Router ein weiteres Radio angelegt und dies mit WPA2-PSK gesichert.
Klappte damit dann auch - aber irgendwie nur zeitweilig.
Am nächsten morgen, als ich die Kamera wieder an Strom angeschlossen hatte, hat sich diese keine IP-Adresse geholt.
Hmm.... Der WLAN-Router macht jede Nacht um 03:10 Uhr einen Reboot.
Sollte ich irgendwelche Einstellungen nicht gespeichert haben!?
Irgendwie nicht. Passt alles.
Ein erneuter Test mit WLAN von der Fritzbox ist erfolgreich.
Sonderbar. Warum mag die Kamera den WLAN-Router nicht mehr?
Auf dem Ethernet-Port hat die Kamera die MAC-Adresse AC:A2:13:78:1E:B8 und die selbe bei WLAN. Das ist ja mal eher verdächtig...
Auch kann ich den Eintrag für die Kamera aus dem DHCP-Server der Fritzbox nicht löschen. Das wird ja immer sonderbarer.
Das Löschen klappt erst, nachdem ich WLAN an der Fritzbox wieder ausgeschaltet habe.
Nun mal wieder einschalten und die Kamera per WLAN reinkommen lassen. Ergebnis: selbe MAC-Adresse. Na toll.
Nun das WLAN an der Fritzbox wieder aus und das Radio am WLAN-Router wieder an und deren Gäste ins VLAN42 auf meinen DHCP-Server@Gateway-VM leiten. Ergebnis: der WLAN-Router sieht einen Gast mit der MAC-Adresse AC:A2:13:78:1E:B8, auf dem DHCP-Server kommt aber nix an.
Notgedrungen wird die Kamera wieder per Netzwerkkabel angeschlossen.
Jetzt mal unter den "Basic Network Settings" das Setting "Obtain IP from DHCP Server" markiert.
....Schon klappts mit dem Radio des WLAN-Routers und meinem DHCP-Server im VLAN42.
Die MAC-Adresse hier lautet ac:a2:13:78:1e:b8 - also wie oben.

Das lässt sich ja wohl nur so deuten, dass die "Basic Network Settings" nicht nur für das kabelgebundene Ethernet gelten.
Die 192.168.178.36 wurde gestern allerdings nicht von mir, sondern vom DHCP-Server der Fritzbox vergeben.
Bedeutet also, dass sich die Kamera eine IP-Adresse von der Fritzbox geholt und sich diese dann quasi statisch eingetragen hat.
Somit ist das Verhalten durchaus zu erklären: wenn der Lease auf dem DHCP-Server der Fritzbox abgelaufen ist, gibts keine Route zur Kamera mehr.

Natürlich will ich die Kamera nicht dauerhaft im offenen VLAN42 haben. Das würde ja geradezu eine Einladung sein, damit Schabernack zu treiben.
Also im WLAN-Router wieder zurückstellen auf VLAN1 bzw. den DHCP-Server der Fritzbox.
Und klappt. Mal sehen, obs jetzt stabil so bleibt.


Debugger

Nun will ich aber spielen.
Will heißen: ich brauche die Kommandos, mit denen ich die Kamera nicht nur per Mausklick im Web-GUI, sondern auch per eigenem Programm schwenken kann.
Im ersten Ansatz habe ich mir dazu den Seiten-Quelltext angesehen (rechts-Klick im Firefox und Auswahl von Seitenquelltext anzeigen).
Das ist zwar schon mal ganz spannend, zeigt aber, dass es da mindestens noch einen sog. content_frame geben muss.
Also: Debugger öffnen (mit Element untersuchen (Q)) und mal schauen, was sich dort so findet.

Nachdem der Debugger geöffnet war und ich im Web-GUI der Kamera ein paar Funktionen genutzt hatte, sah es im Debugger dann so aus:
Screenshot Firefox Debugger
In live.htm findet sich das Gesuchte.
Es gibt eine decoder_control.cgi, die einen Parameter und eine camera_control.cgi, die zwei Parameter annimmt.
Wobei die jeweiligen Funktionen m.E. eigentlich eher ins jeweils andere cgi passen würden.
Also Steuer-Funktionen in camera_control und sowas wie Helligkeit oder Kontrast in decoder_control. Aber was solls.

Die Parameter für decoder_control.cgi sind diese hier:
var PTZ_STOP=1;
var TILT_UP=0;
var TILT_UP_STOP=1;
var TILT_DOWN=2;
var TILT_DOWN_STOP=3;
var PAN_LEFT=4;
var PAN_LEFT_STOP=5;
var PAN_RIGHT=6;
var PAN_RIGHT_STOP=7;
var PTZ_LEFT_UP=90;
var PTZ_RIGHT_UP=91;
var PTZ_LEFT_DOWN=92;
var PTZ_RIGHT_DOWN=93;
var PTZ_CENTER=25;
var PTZ_VPATROL=26;
var PTZ_VPATROL_STOP=27;
var PTZ_HPATROL=28;
var PTZ_HPATROL_STOP=29;
var PTZ_PELCO_D_HPATROL=20;
var PTZ_PELCO_D_HPATROL_STOP=21;

Mit dem Kommando
    curl camuser:pwd4Cam@192.168.178.36/decoder_control.cgi?command=4
wird die Kamera also angewiesen, einen PAN_LEFT auszuführen.

Die Parameter für das Anfahren gespeicherter Kamera-Positionen finden sich an anderer Stelle.
Und zwar in IPCameralive.htm unter "div_usepreset". Dort finden sich 16 Zeilen wie diese:
    <td width="20"><div align="center"><span class="curspan3" onclick="use_preset(31);hideprepos('div_usepreset')"> &nbsp;1&nbsp;</span></div></td>

Die Werte gehen von 31 bis 59 in Zweier-Schritten. Somit lautet z.B. das Kommando, um die gespeicherte Position 2 anzufahren:
    curl camuser:pwd4Cam@192.168.178.36/decoder_control.cgi?command=33
Offenbar greift da irgendein Timeout. Liegt zwischen der aktuellen Position und der anzufahrenden Position zu viel Strecke bzw. Zeit, liefert das Kommando schon mal ein
    fail.
statt, wie normalerweise, ein
    ok.
Wird das Kommando nach einem "fail." erneut abgesetzt, kommt brav "ok." zurück.

Zum Speichern von Snapshots gibt es ein eigenes cgi:
    curl camuser:pwd4Cam@192.168.178.36/snapshot.cgi >pic.jpg


Also zusammengefasst:
steuern
curl camuser:pwd4Cam@192.168.178.36/decoder_control.cgi?command=3     [0 - 7, 20, 21, ...s.o.]
preset pos anfahren curl camuser:pwd4Cam@192.168.178.36/decoder_control.cgi?command=33    [31, 33, 35, ...., 59]
bild speichern
curl camuser:pwd4Cam@192.168.178.36/snapshot.cgi >pic.jpg
video anzeigen
seamonkey http://camuser:pwd4Cam@192.168.178.36/videostream.cgi

So weit, so schön.
Nun muss ich mal schauen, wozu ich die Kamera einsetzen kann.
Im Leerlauf zieht das Kamera-Netzteil 2.3 Watt, 2.4 Watt, wenn ein Video abgegriffen wird, 5.7 Watt, wenn eine andere Position angefahren und 5.8 Watt, wenn zusätzlich auch das Video abgegriffen wird.
Nicht gerade wenig, wenn sie 24x7 laufen sollte.


Einsatz (Ideen)

Zwei Ideen bezüglich eines Einsatzes habe ich schon.

Wobei die erste eigentlich kein wirklicher Einsatz, sondern eher eine interessante Problemstellung ist:


Die zweite Idee hätte schon etwas mehr praktischen Nutzen (wenn auch einen minimalen):

Das programmgesteuerte Schwenken der Kamera wäre dabei allerdings nicht nötig.


Mal sehen....eilt ja nicht....vielleicht finde ich auch was Nützlicheres.

Wäre die Video-Qualität nicht so grottig schlecht, wäre ein Zeitraffer-Filmchen sicher noch ganz spannend.
Also etwa: ein ganzes Jahr lang den Garten von einer Position aus aufnehmen. Alle 10 Minuten ein Bild.
Daraus dann eine DVD machen und damit ein persönliches und selbstgebautes Weihnachtsgeschenk für Eltern und Schwiegereltern haben.

Erste Spielchen mit Bewegungserkennung und Python