Leider musste ich damals vor Jahren feststellen, dass irgendwie jede Wanscam Dome-Kamera, die man so bei Amazon kauft, ohne Hinweis auf eine Modellnummer, irgendwie anders ist. Von den zwei Kameras hatte besagte Kollegin auch schon zwei wieder zurück geschickt, weil immer irgendetwas anderes nicht funktionierte...und seltsamerweise war auch das WebInterface immer anders.
Nachdem bei meiner alten Kamera nun nach etwa 5 Jahren irgendetwas (nur nicht das Netzteil) durchgebrannt ist, musste ich mich nach einer neuen umschauen und bin wieder bei einer Wanscam Dome-Kamera gelandet.
Bei GearBest, von dem ich zuvor noch nie gehört hatte, bin ich auf eine Wanscam HW0038 für 45€ gestoßen. Das ist weniger als die Hälfte, was diese Teile ansonsten kosten und wurde noch dazu versandkostenfrei geliefert. Einserseits gibt das einiges an negativen Karma-Punkten, sich billige Chinaware so billig aus China hierherverfrachten zu lassen, andererseits dachte ich mir, dass eine Wanscam aus einem Amazon-Shop von nirgendwoher anders kommt und nur ein Zwischenhändler noch umso mehr daran verdient. Deutsche Markenprodukte zum fairen Preis sind in dieser Kategorie rar.
Überraschenderweise scheint es inzwischen bei Wanscam Modellbezeichnungen zu geben. Die HW0038 sieht im großen und ganzen wie meine alte Kamera aus, bietet aber ein deutlich besseres Bild. Auch die Nachtsicht ist nun tatsächlich nutzbar, auch wenn sich die Anzahl der IR-LEDs nicht geändert hat.Konfiguration
Wie es sich für billige China-Netzwerkgeräte gehört, habe ich sämtlichen Internetverkehr dieser Kamera auf dem Router gesperrt. Auf meinem Webserver ist ein Reverse-Proxy eingerichtet, so dass ich auch von unterwegs auf die Kamera zugreifen kann, wobei ich sowieso nie direkt auf das Kamera-WebUI zugreife, sondern einerseits all 10 Minuten die Kamera einmal rundum fahren lasse und Snapshots anfertige und dann noch auf meiner Intranet-Seite einen Livestream habe, der mehr oder weniger dem Mobile-Zugriff entspricht, den auch das kameraeigene WebUI zur Verfügung stellt.Die Kamera lässt sich mit denselben Befehlen steuern, die im Wiki einer InStar-Kamera zu finden sind: https://wikiold.instar.de/index.php/Complete_CGI_Command_List_(HD)
Zwar unterstützt die HW0038 auch das Onvif-Protokoll, aber einerseits fand ich hier auf Anhieb keine Dokumentation zur Schnittstelle und außerdem ist die Steuerung per HTTP-GET um einiges einfacher, als der XML-Schrott.
Beispiel für die Steuerung per HTTP-GET
Nehmen wir an, die IP-Adresse der Kamera lautet192.168.178.77und Benutzername und Passwort für den Zugriff lauten
adminund
wanscam. Dann kann ich wie hier dokumentiert mit einem Aufruf der Adresse
http://admin:wanscam@192.168.178.77/cgi-bin/hi3510/param.cgi?cmd=ptzctrl&-step=1&-act=leftdie Kamera um einen Schritt nach links bewegen.
Livestream
Einen aktuellen Snapshot der Kamera erhalte ich zu jeder Zeit über die Adressehttp://admin:wanscam@192.168.178.77/tmpfs/auto.jpg
Zudem kann ich mir z.B. mit dem VLC den Livestream der Kamera anschauen.
In niedriger Auflösung (VGA):
rtsp://admin:wanscam@192.168.178.77:554/12
Und in höherer Auflösung (720p):
rtsp://admin:wanscam@192.168.178.77:554/11
In diesem Artikel hatte ich mal beschrieben, wie man so einen RTSP-Stream auch in einen MJPEG-Stream umwandeln kann und hier, wie man einen Stream in Einzelbilder umwandelt.
Allerdings ist es mir noch nicht gelungen, einen RTSP-Stream so hin zu biegen, um am Ende einen HTML5-Kompatiblen Stream zu haben, den ich per
<video/>-Tag in meine Intranet-Seite einbinden könnte.
Mein Use Case
ReverseProxy
Wie gesagt habe ich sämtlichen Traffic zwischen Kamera und Internet unterbunden.Um von extern auf die Kamera zugreifen zu können, habe ich auf meinem Webserver (Mac/Apache) einen ReverseProxy eingerichtet, der dafür sorgt, dass Anfragen zum Webserver auf die URL
http://intranet.meinedomain.de/intranet/kamera/direkt/zur Kamera geleitet werden.
Somit umschifft man auch das Problem, dass man eigentlich schon an Port 80 der eigenen Domain eine eigene Website betreibt und die Kamera nicht an einem HTTP-fremden kryptischen Port betreiben möchte.
Folgende drei Zeilen sind in der Apache-Konfiguration ausreichend:
ProxyPass http://192.168.178.77/
</Location>
All 10 Minuten ein Bild von verschiedenen Perspektiven aufnehmen
Gleich auf meiner Intranet-Startseite sind Bilder zu sehen, die mein Grundstück einmal rundherum abdecken. Hierbei handelt es sich um keine Livebilder, sondern um Schnappschüsse, die all 10 Minuten erneuert werden.Dies ist für mich ausreichend, um einen kurzen Überblick über Wetter und Co. zu erlangen.
Grundlage dieser Übersicht ist ein Bash-Skript, welches all 10 Minuten von meinem Server aufgerufen wird und per curl die Kamera schwenkt, sich einen Schnappschuss herunterlädt und in das Web-Verzeichnis des Apache-Webservers legt.
IP="192.168.178.77"
USER="admin"
PASS="wanscam"
OUTPATH="/Library/Webserver/Documents/intranet/kamera/uebersicht/pics/" # Pfad zum Apache-Verzeichnis, in dem die Bilder gespeichert werden
# Zwischen 22 und 6 Uhr verzichte ich auf Bilder
# Da das Skript per launchd und nicht per cron aufgerufen wird,
# erfolgt die Ausnahmeregelung an dieser Stelle
STUNDE=`eval expr $(date +%H)`;
if [[ $STUNDE -ge 22 || $STUNDE -lt 6 ]]; then
exit
fi
# Schwenkt die Kamera zu den vorab gespeicherten Positionen 1, 2, 3 und 4
# und speichert ein Standbild
for POS in 1 2 3 4
do
RESPONSE=`curl --basic -u $USER:$PASS -s "http://$IP/web/cgi-bin/hi3510/param.cgi?cmd=preset&-act=goto&-number=$POS"` # Zur Position schwenken
if [[ $RESPONSE == "[Succeed]set ok." ]]; then
if [[ ! -d $OUTPATH/$POS ]]; then
mkdir $OUTPATH/$POS
fi
sleep 5s # Kurz warten, denn die Kamera benötigt ja ein paar Sekunden, bis sie geschwenkt hat
curl --basic -u $USER:$PASS -s http://$IP/tmpfs/auto.jpg > $OUTPATH/$POS/$(date +%Y%m%d)-$(date +%H%M%S).jpg # Bild speichern
if [[ `stat -f%z $OUTPATH/$POS/$(date +%Y%m%d)-$(date +%H%M%S).jpg` == 0 ]]; then rm $OUTPATH/$POS/$(date +%Y%m%d)-$(date +%H%M%S).jpg; fi # Falls was schief ging und das Bild 0kB groß ist...
fi
sleep 5s
done
# Am Ende wieder zur Standard-Position 1 zurückschwenken
curl --basic -u $USER:$PASS -s "http://$IP/web/cgi-bin/hi3510/param.cgi?cmd=preset&-act=goto&-number=2"
Die Positionen 1,2,3 und 4 wurden zuvor im Web-Interface der Kamera gesetzt, so dass die Kamera bei jedem Snapshot genau dieselbe Stelle ablichtet.
Aufräumen
All 10 Minuten 4 Bilder...da kommt mit der Zeit etwas zusammen. Schon nach wenigen Tagen interessiert es mich eigentlich nicht mehr, was auf Perspektive X um Y Uhr zu sehen war. Aber ein Bild je Tag und Perspektive würde ich gerne aufbehalten.Deshalb habe ich ein Säuberungs-Skript geschrieben, welches einmal am Tag alle Bilder der vor-vortages löscht, das Bild von 1200h (bzw. um 1200h rum, da ich nicht davon ausgehen kann, dass das Bild um die Minute genau um 1200h aufgenommen wurde) allerdings auf behält und in ein Archiv verschiebt.
ARCHIV="/Library/WebServer/Documents/intranet/kamera/historie/pics/"
STUNDE=12 #Bild welcher Stunde soll aufbehalten werden?
for VIEW in 1 2 3 4
do
# Bild von 1200h ins Archiv kopieren
DATUM=$(date +%Y%m%d)
DATEI=`ls $PFAD$VIEW/$DATUM-$STUNDE* 2>/dev/null | head -n 1`
if [[ ! -d "$ARCHIV$VIEW" ]]; then mkdir -p "$ARCHIV$VIEW"; fi
if [[ $DATEI != "" ]]; then
cp $DATEI $ARCHIV$VIEW/$DATUM.jpg
fi
# Andere Bilder von Vorgestern löschen
find $PFAD$VIEW -mtime +2 | xargs rm -Rf
done
Das Jahr als Zeitraffer
Die täglich aufbewahrten Bilder haben für mich persönlich einmal den Zweck, mal schnell nachzuschauen "wann hatte es nochmal das letzte Mal geschneit?" und zum zweiten den Zweck, am Ende des Jahres ein nettes Zeitraffervideo zu erstellen. Hierbei werden alle 365 Bilder je Perskeptive jeweils zu einem kleinen Daumenkino zusammengesetzt. Sehr amüsant, wenn auf dem einen oder anderen Bild Pflanzen zu sehen sind, die während des Frühlings die Herrschaft über den Boden übernehmen.Für den Teil "Timestamp in Bild einfügen" (optional) wird ImageMagick benötigt, für die Filmerstellung mencoder
Im Anschluss habe ich noch eine Variante, die auf ffmpeg statt auf mencoder setzt.
PFAD="/Library/WebServer/Documents/intranet/kamera/historie/pics/"
OUTDIR="/Library/WebServer/Documents/intranet/kamera/timelapse/"
FONTFILE="/Library/Fonts/Courier New Bold.ttf"
JAHR=$(date +%Y)
for VIEW in 1 2 3 4
do
# Timestamp in Bild einfügen
COUNTER=1
mkdir /tmp/timelapse
for bild in `ls $PFAD$VIEW/$JAHR*.jpg`; do
DATUM=`echo "$bild" | sed 's/.*\([0-9][0-9][0-9][0-9]\)\([0-9][0-9]\)\([0-9][0-9]\).*/\3.\2.\1/g'`
TMP_NAME=$(printf '%03d.jpg' $COUNTER)
((COUNTER++))
convert $bild -fill white -stroke black -pointsize 20 -font "$FONTFILE" -gravity SouthEast -annotate 0 "$DATUM" /tmp/timelapse/$TMP_NAME 2>/dev/null
done
# Film erstellen
mencoder -nosound mf:///tmp/timelapse/*.jpg -mf type=jpg:fps=5 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=2160000:mbd=2:keyint=132:v4mv:vqmin=3:lumi_mask=0.07:dark_mask=0.2:mpeg_quant:scplx_mask=0.1:tcplx_mask=0.1:naq -o $OUTDIR$VIEW-$JAHR.mkv
rm -r /tmp/timelapse
done
Steht
mencodernicht zur Verfügung (für den Raspberry Pi konnte ich zum Beispiel nichts finden), so lässt sich zur Filmerstellung natürlich auch
avconvdes
ffmpeg-Projektes einsetzen:
Fazit
Ich bin zufrieden mit dem 45€-Teil...besonders, wenn sich herausstellen sollte, dass sie mindestens so lange wie die alte Kamera durchhält.
![]() ![]() ![]() ![]() |
|
Erstellt am: 26.05.2017 | .Kommentieren |