Einbinden der Wetterdaten der Davis Vantage Pro2 in das Webcam-Bild der Mobotix M25 (HD-Cam)
Als Ergänzung zu meiner Wetterstation Vantage Pro2 von Davis Instruments sind seit Januar 2014 zwei Full-HD Cams vom Typ M25 im Einsatz.
Die Wahl auf die Kameras aus dem Hause Mobotix fiel aus folgenden Gründen:
- hohe Auflösung und gute Restlichtempfindlichkeit
- Outdoor Kamera (IP65)
- PoE Versorgung der Kamera
- Integrations-/Anzeige-Möglichkeit von Wetterdaten
Der Standort der Wetterstation wie auch der Kameras sind auf der OpenStreetMap Karte eingetragen. Die eine Kamera ist 'gen westlichen Himmel (Blickrichtung Landsham/München) und die andere 'gen östlichen Himmel (Blickrichtung Gelting/Markt Schwaben) ausgerichtet. Die aktuellen Livebilder sind über die folgende URL bzw in der Full-HD Auflösung hier erreichbar.
Variante 1: Einbindung der Daten via Netzwerkmeldung
Im ersten Konfigurationsbeispiel nutzen wir die vorhandenen Möglichkeiten der Mobotix-Kamera, genauer gesagt, die Möglichkeit der Einblendung von Netzwerkmeldungen in das Kamerabild.
Konfiguration der M22M
Netzwerkmeldungen definieren
Zur Aktivierung der Netzwerkmeldungen rufen wir die Konfigurationsseite der Kamera unter der folgenden URL auf:
https://{IP-der-Kamera}/control/text
Die Variable {IP-der-Kamera} ersetzen wir entweder mit der IP-Adresse oder dem FQDN unserer Kamera.
$ firefox https://{IP-der-Kamera}/control/text
Im Setup-Menü - Darstellungs- und Texteinstellungen definieren wir nun einen Bereich, der für die spätere Texteinblendung genutzt werden soll.
Die erste Option ist selbsterklärend - wir setzen diese auf Ein, da wir die Wetterdaten ja eingefügt haben wollen.
Die beiden Nächsten Optionen Textfarbe und Hintergrundfarbe wählen wir entsprechend unseren Wünschen an. In dem gezeigtem Beispiel ist das weiß auf schwarz.
Die Option Deckkraft des Hintergrunds regelt, ob und ggf. wie stark das Bild von dem eingestelltem Text in den Hintergrund gesetzt wird. Der Wert Transparent bewirkt, dass der engestellte Text, transparent über das Kamerabild gelegt wird.
Der nächste Konfigurationspunkt Datum und Uhrzeit, definiert, wie unsd im welchen Format das Datum rechts oben im Bild eingefügt werden soll.
Im nächsten Konfigurationswert/Textfeld Kommentar fürgen wir nun folgende zwei Zeilen ein:
Name und Beschreibung der Webcam ^S7
Die erste Zeile benötigt keiner großen Erklärung, sie steht für die Stationsbeschreibung. Mit dem Platzhalter ^S7 definieren wir nun einen Bereich von 7 Zeilen, in denen die späteren Wetterdaten, die die Kamera via Netzwerkmeldungen erhalten soll, eingeblendet werden.
Nachrichtenereignis definieren
Zur Definition eines eigenen Ereignisses rufen wir die Konfigurationsseite der Kamera unter der folgenden URL auf:
https://{IP-der-Kamera}/control/events
Unserem Nachrichtenereignis Netzwerkmeldung geben wir einen passenden Namen und klicken auf die Schaltfläche [Bearbeiten…].
Der Konfigurationswert Port legt fest, auf welcher Port-Nummer die Kamera die Nachricht erwartet, sprich an welchen Port wir später die Nachricht schicken müssen.
Den Defaultwert von 5 Sekunden beim Punkt Ereignistotzeitdefiniert, wieviel Zeit zwischen den einzelnen Textnachrichten vergehen müssen. Da wir die Wetterdaten nur alle Minuten aktualisieren wollen, reicht die Totzeit von 5 Sekunden allemal aus.
Die nächsten drei Optionen Vergleichsmodus, Groß/Kleinschreibung ignorieren und Meldung übergehen wird, da wir keinen Text- oder Mustervergleich vornehmen wollen und werden.
Beim Punkt Sender geben wir entweder die IP-Adresse oder den FQDN unseres Netzwerkhosts an, von dem aus die Wetterdateninformationen an die Mobotix-Kamera geschickt werden wird.
Dies ist insofern wichtig, da wir ja nicht wollen, dass Leute aus unserem eigenen Netzwerk plötzlich irgendwelche unsinnigen Textnachrichten in Richtung Kamera schicken!
Scharfschalten der Kamera(einstellungen)
Damit unsere Textnachrichten auch wirklich in das Kamerabild eingefügt werden können,müssen wir die Kamera(einstellungen) noch scharf schalten.
Wir rufen hierzu die folgende Adresse auf:
$ firefox https://{IP-der-Kamera}/control/settings
Bei der Konfigurationsoption Scharfschaltung wählen wir Aktiviert aus, da sonst die Nachrichten nicht übernommen werden.
Sichern der aktuellen Konfiguration
Zum Schluß sichern wir dann unsere aktuelle Konfiguration in den permanenten Speicher der Kamera:
$ firefox https://{IP-der-Kamera}/admin/saveconfig
Die Konfiguration der Mobotix-Webcam ist somit abgeschlossen und wir fahren mit der Aufbereitung der erfassten Wetterdaten fort.
Datenaufbereitung mit Hilfe von wview
Mit Hilfe der HTML-Engine htmlgend unserer wview-Installation lassen wir uns einfach die gewünschten Messdaten in eine Textdatei schreiben, die wir dann später in die M25 „schieben“ und anzeigen lassen.
Diese Textdatei schreibt und dann alle 60 Sekunden der wview-Daemon in unseren Pfad auf unserem Webserver und hat in dem obigen Beispiel folgende Daten:
10.8°C bei 71% Feuchte 1018.8 hPa Tendenz + Solarstrahlung: 5 W/m^2 - UV-Index: 0.0 0 km/h aus ONO mit max. 11.3 km/h Regen: 0.0 mm bei 0.0 mm / Std. Wolkenuntergrenze: 631 m
Die für die Generierung der Wetterdaten zugehörige Vorgabedatei m25-display.htx im Konfigurationsverzeichnis /usr/local/etc/wview/html/ hat hier folgenden Inhalt:
- /usr/local/etc/wview/html/m25-display.htx
<!--outsideTemp-->°C bei <!--outsideHumidity-->% Feuchte <!--barometer-->hPa Tendenz <!--baromtrend--> Solarstrahlung: <!--solarRad--> W/m^2 - UV-Index: <!--UV--> <!--windSpeed--> km/h aus <!--windDirectionDegrees-->° mit max. <!--hiWindSpeed--> km/h Regen: <!--dailyRainMM--> mm bei <!--rainRate--> mm / Std. Wolkenuntergrenze: <!--cumulusBase--> m
Wir legen uns also eine Datei mit obigem Inhalt an:
$ vim /usr/local/etc/wview/html/m25-display.htx
Damit der wview-Daemon diese Datei auch alle 60 Sekunden erzeugt, tragen wir unsere /etc/wview/html-templates.conf die benötigte Konfiguration ein.
# vim /usr/local/etc/wview/html-templates.conf
############################################################################### ### Mobotix Texteinblendungsvorlage ############################################################################### m25-display.htx
Anschließend starten wir den wview-daemon einmal durch, damit die Änderungen aktiviert und alle 60 Sekunden die Datei mit den Texteinblendungen aktualisiert werden können.
# service wview stop
# service wview start
Datentransfer zur Kamera
Damit nun die Wetterdaten unserer Wetterstation im Bild der Kamera eingeblendet werden können, ist es notwendig den Inhalt der erstellten Datei /usr/local/var/wview/img/m25-display.htm via TCP zum vorher definierten Port unserer Mobotix-Kamera zu schicken.
$ cat /usr/local/var/wview/img/m25-display.htm >/dev/tcp/{IP-der-Kamera}/{Port}
Automatische Datenaktualisierung
Für die automatisierte Aktualisierung unserer Wetterdaten im WEB-Cam-Bild bedienen wir uns nun eines einfachen Shell-Scriptes, welches wir im /bin Pfad unseres Webcam-Users ablegen. Mit dem besten Editor unser Wahl legen wir nun also dort eine Datei cam-update.sh an.
$ vim ~/bin/cam-update.sh
- cam-update.sh
#!/bin/bash # Script zum Aktualisieren der Wetterdaten # im Webcam-Bild der Mobotix M22M # Version 0.01 vom 2008-03-06 cat /usr/local/var/wview/img/m25-display.htm >/dev/tcp/{IP-der-Kamera}/{Port}
Anschließend machen wir unser Shell-Script noch ausführbar:
$ chmod +x ~/bin/cam-update.sh
Und schon können wir das erste mal Testen, ob die Wetterdaten in das Webcam-Bild eingefügt werden.
$ cam-update.sh
Damit nun auch dieser Datenfluss jede Minute automatisch abläuft, legen wir noch einen cronjob für unseren Web-Cam-User an. Hierzu schlüpfen wir in die Rolle unseres Webcam-Users
su - webcam-user
und bearbeiten die nutzereigene crontab:
$ crontab -e
#Wetterdatenupdate der Webcam * * * * * /home/webcam/bin/cam-update.sh
Das war es dann auch schon! Nun werden alles 60 Sekunden die aktuellen Wetterdaten aktualisiert und in das Bild unserer Wetter-Webcam eingefügt.
Variante 2: Einbindung der Daten mit Hilfe von ImageMagick
Bei einer Auflösung von z.B. 640×480 erscheint der eingeblendete Text noch hinreichend groß.
Verwendet man aber hochauflösende Bilder der Mobotix-Kamera, so verlieren sich die eingeblendeten Wetterdaten bei einer Auflösung von 1920×1080 sich doch arg, vor allem, wenn die Bilder dann noch weiter verkleinert werden.
Leider gibt es bei der Konfiguration der Mobotix-Kameras keine Option, die Schriftgröße zu verändern. Somit muss ein anderer Weg gefunden werden. Da wir die Webcam-Bilder nicht direkt den Gästen von der Kamera aus präsentieren sondern von unserem Web-/Proxy-Server, werden wir einfach die Wetterdaten mit Hilfe von ImageMagick, einem freien Softwarepaket zur Erstellung und Bearbeitung von Rastergrafiken, in die Bilder einfügen.
Hintergrundinfo
Eine Bildauflösung von 1920×1080 Bildpunkten benötigt pro Sendeaktion eine Bandbreite von ca. 2.074kBit je Bild. Das ergibt bei den zwei Kameras und einem Besucher 4 Mbit. Werden nun von einem oder mehreren Usern Bilder der Webcam abgerufen, so wird das sehr schnell sehr große Datenmengen nach sich ziehen. Bei der Nutzung von asymetrischen Anbindungen, wie aDSL oder vDSL wird sehr schnell negativ auf die vorhandene Upstreambandbreite auswirken. Besonders kritisch wäre dies noch dazu, wenn der böswillige Nutzer die Frameraten selbst einstellen könnte.
Abhilfe kann hier zum Beispiel leisten, die Bilddaten nicht für das WWW, vom Webserver der „kleinen Kamera“ abzufackeln, sondern von einem Webserver, der eine entsprechend „dicke“ Upstreamleitung zum Internet besitzt. Freilich könnte man nun die Bilder von der Kamera via FTP auf einen Webserver schieben, dies ginge recht gut bei Standbildern - bei Echtzeitkommunikation wird es hier auch schon schwerer. Ganz zu schweigen von der andauernden Übertragung von Nutzer-/Logindaten beim Upload.
Unter Umständen, wie auch in der Konfigurationsumgebung im SOHO-LAN, steht auf dem Webserver gar kein FTP-Server zur Verfügung. Wir müssen also dies anders und auch eleganter lösen.
Lösung
Wir cashen den Traffic über einen zentralen Proxy, holen uns von dort die Kamerabilder direkt von der Mobotix-Kamera, fügen dort die Wetterdaten ein und gestatten über diesen Proxy den Zugriff für das gemeine Fußvolk.
Hierzu sind ein paar Vorarbeiten auszuführen.
RAM-DISK
Damit nun unser Caching nicht auf Lasten der Festplatten-Stapel geht (Datendurchsatz und Schreib-/Lesezugriffe) nutzen wir für unseren VHost eine RamDisk.
Diese legen wir wie folgt an:
# vim /etc/fstab
- /etc/fstab
... # django : 2013-02-16 RAM-Disk für Wetterwebcam-Bilder /dev/shm /var/www/webcam/ tmpfs defaults,size=25m,mode=750,uid=48,gid=48 0 0 ...
Die User- und Group-ID stellen wir dann auf den/die User/Gruppe apache ein.
Anschließend mounten wir unsere zusätzliche RAM-Disk:
# mount /var/www/webcam
Da wir sowohl über das Verzeichnis record wie auch current unsere Bilder bzw. Liveimages weitergeben wollen, legen wir diese beiden Verzeichnisse an:
# mkdir /var/www/html/webcam/control/
# mkdir /var/www/html/webcam/record/
Anschließend passen wir noch die betreffenden Userrechte an:
# chown apache:apache /var/www/html/webcam/control/
# chown apache:apache /var/www/html/webcam/record/
DokumentRoot-Erweiterungen
Für unsere Webcam(s) legen wir nun einen VHost an:
# vim /etc/httpd/conf.d/vhosts.conf
- vhosts.conf
# # webcam.nausch.org # <VirtualHost *:80> ServerAdmin webmaster@nausch.org ServerName webcam.nausch.org:80 ServerAlias webcam.nausch.org *.webcam.nausch.org ServerPath / DocumentRoot "/var/www/html/webcam" <Directory "/var/www/html/webcam"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> DirectoryIndex index.html index.php ErrorLog logs/webcam_error.log CustomLog logs/webcam_access.log combined </VirtualHost>
Nach einem Restart unseres Apache-Webservers steht uns nun dieser VHost zur Verfügung.
Initiale Bildbefüllung
Für einen ersten Test holen wir uns jeweils ein aktuelles Webcambild und speichern dieses Im Verzeichnis /var/www/webcam/record/ ab.
# cd /var/www/webcam/record/
# wget https://cam-west.intra.nausch.org/record/current.jpg
# mv current.jpg current_2.jpg
# wget https://cam-ost.intra.nausch.org/record/current.jpg
# cp /var/www/webcam/record/current.jpg /var/www/webcam/control/cam1.jpg
# cp /var/www/webcam/record/current.jpg /var/www/webcam/control/cam2.jpg
HTML-Seite anlegen
Damit in der Überschrift die aktuellen Daten der Wetterstation eingefügt werden, nutzen wir die automatische Seitengenerierung durch wview. Wie legen uns also im Arbeitsverzeichnis von Wview ein Grundgerüst unserer HTML-Seite an.
# vim /usr/local/etc/wview/html/webcam.htx
- webcam.htx
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Private Wetterstation Pliening in Bayern</title> <meta http-equiv="refresh" content="1" ;=""> </head> <script language="JavaScript"> function openURL(urlname) { window.location=urlname; } </script> <body style="background-image: url(django_bg.jpg);"> <center> <img src="https://wetterstation-pliening.info/wetterstation-pliening.info-banner.png" banner="0" height="100" width="800" alt="Wetterstation Pliening Info Banner"> <hr><br> </center> <!-- nav-buttons_Plus.incx --> <table align="center" border="0" cellpadding=2 cellspacing=2> <tr> <td colspan="5" align="center" valign="top" height="30"> <input type="button" value=" Übersicht " onclick="openURL('https://wetter.nausch.org/index.html')"> <input type="button" value=" Almanach " onClick="openURL('https://wetter.nausch.org/Almanac_Plus.htm')"> <input type="button" value=" aktuelle Werte " onClick="openURL('htts://wetter.nausch.org/Current_Plus.htm')"> <input type="button" value=" Letzte 24 Std. " onClick="openURL('https://wetter.nausch.org/Daily_Plus.htm')"> <input type="button" value=" Letzte 7 Tage " onClick="openURL('https://wetter.nausch.org/Weekly_Plus.htm')"> <input type="button" value=" Letzte 28 Tage " onClick="openURL('https://wetter.nausch.org/Monthly_Plus.htm')"> <input type="button" value=" Letzte 365 Tage " onClick="openURL('https://wetter.nausch.org/Yearly_Plus.htm')"> <input type="button" value=" Stationsdaten " onClick="openURL('https://wetter.nausch.org/Station.htm')"> <input type="button" value=" akt. Blitzkarte " onClick="openURL('https://wetter.nausch.org/stormforce.htm')"> <input type="button" value=" Wetter-Satellit " onClick="openURL('https://wxtoimg.nausch.org')"> <input type="button" value=" Impressum " onClick="openURL('https://wetter.nausch.org/Impressum.htm')"> </td> </tr> </table> <!--include header.inc--> <!-- Aufforderung zum Aktivieren von JavaScript --> <noscript> <center> <p> <a href="https://webcam.nausch.org/control/userimage.html"><font face="Helvetica,Arial" size="-1">Open Menu (cam1)</font></a> </p> <p> <font face="Helvetica,Arial" size="+3" color=red>Press Shift-Reload to refresh the image.<br>Enable JavaScript / Active Scripting to see more details.</font> </p> </center> </noscript> <!-- Seitenkorpus --> <hr> <font size="5" face="Arial, Helvetica, sans-serif" color="#000000"><b>Wetterwebcams der Wetterstation</b></font> <br> <table cellpadding="2" cellspacing="0" border="0" width="100%" align="center"> <tbody> <tr> <td> <i> Kamera mit Blickrichtung Westen (Landsham / München):</i><br> <a href="fullhd.html"> <img src="https://webcam.nausch.org/cache/current_big.jpg" width="1000" height="533" alt="Kamera-Livebild (Auflösung 1000x533) - Aktualisierung jede Sekunde"> </a> <font size="1" face="Arial, Helvetica, sans-serif" color="#000000" <i>Zur Anzeige in Full-HD (1920x1080) auf das Bild klicken!</i> </font> </tr> <tr> <td> <hr> </td> </tr> <tr> <td> <i>Kamera mit Blickrichtung Osten (Gelting / Markt Schwaben):</i><br> <a href="fullhd.html"> <img src="https://webcam.nausch.org/cache/current_2_big.jpg" width="1000" height="533" alt="Kamera-Livebild (Auflösung 1000x533) - Aktualisierung jede Sekunde"> </a> <font size="1" face="Arial, Helvetica, sans-serif" color="#000000" <br> <i>Zur Anzeige in Full-HD (1920x1080) auf das Bild klicken!</i> </font> </td> </tr> </tbody> </table> <hr width="100%" size="4"> <table cellpadding="2" cellspacing="2" border="0" width="100%"> <tbody> <tr> <td width="40%" valign="bottom" align="left"> <small> <font face="Arial, Helvetica, sans-serif" align="left" color="blue"> <a href="https://wetter.nausch.org">wetter.nausch.org</a> </font> </small> </td> <td width="20%" valign="bottom" align="center"> <small> <font face="Arial, Helvetica, sans-serif" align="center" color="blue"> . </font> </small> </td> <td width="40%" valign="bottom" align="right"> <small> <font face="Arial, Helvetica, sans-serif" align="right" color="blue"> <a href="https://wetterstation-pliening.info">wetterstation-pliening.info</a> </font> </small> </td> </tr> </tbody> </table> </body> </html>
Da wir die, von wview generierte HTML-seite als index.HTML für unseren VHOST verwenden wollen, lassen wir die generierte Seite von Wview noch an die richtige stelle kopieren.
# vim /usr/local/etc/wview/post-generate.sh
- /usr/local/etc/wview/post-generate.sh
#/bin/sh # Add any post template generation processing or utilities here. Keep in mind this # script runs in the htmlgend process's context so don't add anything that is overly # time constrained. # Django : 2013-02-16 # Index-Datei für Webserver nach Document-Root kopieren /bin/cp /usr/local/var/wview/img/webcam-hd.htm /var/www/webcam/index.html exit 0
Datenaufbereitung mit Hilfe von wview
Wie auch schon beim ersten Konfigurationsbeispiel nutzen wir auch hier die HTML-Engine htmlgend unserer wview-Installation und lassen uns einfach die gewünschten Messdaten in eine Textdatei schreiben, die wir dann später in die Wetter-WebCam-Bilder einfügen.
Diese Textdatei schreibt und dann alle 60 Sekunden der wview-Daemon in unseren Pfad auf unserem Webserver und hat in dem obigen Beispiel folgende Daten:
Wetterstation Pliening (Blick in Richtung Westen) 7.8°C bei 65% Feuchte 1016.0 hPa Tendenz + Solarstrahlung: 149 W/m^2 - UV-Index: 0.9 4.8 km/h aus ONO mit max. 19.3 km/h Regen: 0.0 mm bei 0.0 mm / Std. Wolkenuntergrenze: 772 m (berechnet)
Da wir in unserem Konfigurationsbeispiel zwei Kameras benutzen und die Titelzeilen Wetterstation Pliening (Blick in Richtung Westen) sowie Wetterstation Pliening (Blick in Richtung Westen) vewenden, benötigen wir auch zwei zugehörige Vorgabedatei m25-west-display.htx und m25-ost-display.htx im Konfigurationsverzeichnis /usr/local/etc/wview/html/.
# vim /usr/local/etc/wview/html/m25-west-display.htx
- /usr/local/etc/wview/html/m25-west-display.htx
Wetterstation Pliening (Blick in Richtung Westen) Temperatur : <!--outsideTemp-->°C bei <!--outsideHumidity-->% Feuchte Luftdruck : <!--barometer--> hPa Tendenz <!--baromtrend--> Solarstrahlung : <!--solarRad--> W/m^2 - UV-Index: <!--UV--> Wind : <!--windSpeed--> km/h aus <!--windDirection--> mit max. <!--hiWindSpeed--> km/h Niederschläge: <!--dailyRainMM--> mm bei <!--rainRate--> mm / Std. Wolkenuntergrenze: <!--cumulusBase--> m (berechnet)
und
# vim /usr/local/etc/wview/html/m25-ost-display.htx
- /usr/local/etc/wview/html/m25-ost-display.htx
Wetterstation Pliening (Blick in Richtung Osten) Temperatur : <!--outsideTemp-->°C bei <!--outsideHumidity-->% Feuchte Luftdruck : <!--barometer--> hPa Tendenz <!--baromtrend--> Solarstrahlung : <!--solarRad--> W/m^2 - UV-Index: <!--UV--> Wind : <!--windSpeed--> km/h aus <!--windDirection--> mit max. <!--hiWindSpeed--> km/h Niederschläge: <!--dailyRainMM--> mm bei <!--rainRate--> mm / Std. Wolkenuntergrenze: <!--cumulusBase--> m (berechnet)
Damit der wview-Daemon diese Datei auch alle 60 Sekunden erzeugt, tragen wir unsere /etc/wview/html-templates.conf die benötigte Konfiguration ein.
# vim /usr/local/etc/wview/html-templates.conf
############################################################################### ### Mobotix Texteinblendungsvorlage ############################################################################### m25-west-display.htx m25-ost-display.htx
Anschließend starten wir den wview-daemon einmal durch, damit die Änderungen aktiviert und alle 60 Sekunden die beiden Dateien mit den Texteinblendungen aktualisiert werden können.
# service wview stop
# service wview start
Webcam-Bilder cachen und Wetterdaten einfügen
Da wir ja unsere Wetterdaten in die jeweils aktuellen Webcam-Bilder einfügen und diese dann unseren Besuchern präsentieren wollen, müssen wir nun noch dafür sorgen, dass die Bilder auch fortlaufend kopiert und bearbeitet werden.
Hierzu behelfen wir uns eines kleinen Bash-Scriptes.
# vim /usr/local/bin/cam2pic+.sh
- /usr/local/bin/cam2pic+.sh
#!/bin/sh # Script zum Abholen und Abspeichern der Kamerabilder # für den virtuellen Mobotix-Cambetrieb # (c) Michael Nausch # # v0.01 : 2008-12-29 # v0.02 : 2013-03-16 # v0.03 : 2014-01-10 CAMURL_1="http://10.0.10.17/record/current.jpg" CAMURL_2="http://10.0.10.18/record/current.jpg" WORKDIR_1="/var/www/webcam/cache/" WORKDIR_2="/var/www/webcam/record/" WORKFILE_1="west_current.jpg" WORKFILE_2="ost_current.jpg" PRG=/usr/bin/convert WORKDIR_2="/var/www/webcam/record/" FILE_1="current.jpg" cd $WORKDIR_1 while true do PIC_DAY=`date +%d` PIC_MONTH=`date +%m` PIC_YEAR=`date +%Y` PIC_HOURS=`date +%H` PIC_MINUTES=`date +%M` PIC_SECONDS=`date +%S` PIC_DATE=$PIC_DAY"."$PIC_MONTH"."$PIC_YEAR" - "$PIC_HOURS":"$PIC_MINUTES":"$PIC_SECONDS DATA_1=`cat /usr/local/var/wview/img/m25-west-display.htm` DATA_2=`cat /usr/local/var/wview/img/m25-ost-display.htm` wget --user="webcam_user" --password="Django-1$-4-G33k!" $CAMURL_1 $PRG -gravity northwest -fill black -pointsize 25 -draw "text 7,6 '$DATA_1'" current.jpg $WORKFILE_1 $PRG -gravity northwest -fill white -pointsize 25 -draw "text 5,5 '$DATA_1'" $WORKFILE_1 $WORKFILE_1 $PRG -gravity northeast -fill black -pointsize 25 -draw "text 5,6 '$PIC_DATE'" $WORKFILE_1 $WORKFILE_1 $PRG -gravity northeast -fill white -pointsize 25 -draw "text 7,5 '$PIC_DATE'" $WORKFILE_1 $WORKFILE_1 convert -geometry 320x180 $WORKDIR_1$WORKFILE_1 $WORKDIR_1"current_small.jpg" convert -geometry 1000x533 $WORKDIR_1$WORKFILE_1 $WORKDIR_1"current_big.jpg" mv $WORKDIR_1$WORKFILE_1 $WORKDIR_1"current_hd.jpg" rm current.jpg wget --user="webcam_user" --password="Django-1$-4-G33k!" $CAMURL_2 $PRG -gravity northwest -fill black -pointsize 25 -draw "text 7,6 '$DATA_2'" current.jpg $WORKFILE_2 $PRG -gravity northwest -fill white -pointsize 25 -draw "text 5,5 '$DATA_2'" $WORKFILE_2 $WORKFILE_2 $PRG -gravity northeast -fill black -pointsize 25 -draw "text 5,6 '$PIC_DATE'" $WORKFILE_2 $WORKFILE_2 $PRG -gravity northeast -fill white -pointsize 25 -draw "text 7,5 '$PIC_DATE'" $WORKFILE_2 $WORKFILE_2 convert -geometry 320x180 $WORKDIR_1$WORKFILE_2 $WORKDIR_1"current_2_small.jpg" convert -geometry 1000x533 $WORKDIR_1$WORKFILE_2 $WORKDIR_1"current_2_big.jpg" mv $WORKDIR_1$WORKFILE_2 $WORKDIR_1"current_2_hd.jpg" rm current.jpg done
Automatischer Bilderupdate
Damit nun nach einem Systemstart der Bildercashvorgang automatisch anläuft legen wir uns ein passendes Startscript an:
# vim /etc/init.d/weathercam
- /etc/init.d/weathercam
#!/bin/sh # # chkconfig: 3 98 30 # description: cyclic Weatherwebcam-Picture Update # # processname: weathercam # DAEMON=/usr/local/bin/cam2pic+.sh PIDFILE=/var/run/cam2pic.pid PROG="cam2pic+" test -x $DAEMON || exit 0 . /lib/lsb/init-functions case "$1" in start) # initiale Befüllung #/bin/cp -R /root/webcam/ /var/www/ #/bin/chown -R weather:apache /var/www/webcam/ #/bin/chmod 755 /var/www/webcam/ echo -n $"Starting $PROG: " $DAEMON & #1>/dev/null echo " [ OK ]" ;; stop) pid=`ps -ef | grep "cam2pic+" | grep -v grep | awk '{ print $2}'` echo -n $"Stopping $PROG: " kill $pid echo " [ OK ]" ;; status) cnt=`ps -ef | grep "cam2pic+" | grep -v grep | wc -l` if [ "$cnt" -eq "0" ] ; then echo "$0 is not running" else echo "$0 is running" fi ;; *) echo "Usage: $0 {start|stop|status}" exit 1 esac exit 0
Die Ausführungsrechte geben wir dann unserem script mittels:
# chmod +x /etc/init.d/weathercam
Damit der „service“ automatisch beim Systemstart anläuft, aktivieren wir diesen mit:
# chkconfig weathercam on
Die Überprüfung ob der Dienst (Daemon) weathercam auch wirklich bei jedem Systemstart automatisch mit gestartet werden, kann durch folgenden Befehle erreicht werden:
# chkconfig --list | grep weathercam
weathercam 0:Aus 1:Aus 2:Ein 3:Ein 4:Ein 5:Ein 6:Aus
Den Daemon starten wir nun initial mit:
# service weathercam start
Das war es dann auch schon! Nun werden jede Sekunden die aktuellen Wetter-WebCam-Bilder gecached und mit den aktualisierten Wetterdaten versehen.
Das Ergebnis sieht nun wesentlich besser au und ist besser bei skalierten Darstellungen lesbar, als bei der vorgestellten Konfigurationsvariante 1.
Im Vergleich dazu nochmals das äquivalente Ergebnis aus Konfigurationsbeispiel 1.