Good to Know Database

WuT Web-Thermograph 8x: Messwerte mit webiodb protokollieren und grafisch auswerten


Das Shell-Skript webiodb ist ein Beispielskript von der Wiesemann & Theis GmbH welches unter http://www.wut.de/e-57606-22-apde-000.php zu finden ist und im folgenden für die Protokollierung und zur grafischen Auswertung der Messwerte eines W&T Web-Thermographen 8x verwendet wird. Das Shell-Skript ruft die Messwerte mit lynx über das HTTP-Protokoll ab und speichert die Werte in eine RRDtool-Datenbank. Mit Hilfe des RRDtools kann anschließend der Temperaturverlauf automatisch in einer Grafik dargestellt werden.

1. Vorbereitungen

Sollten Sie die Pakete lynx und rrdtool noch nicht installiert haben, installieren Sie diese wie folgt.

[root@centos5 ~]# yum install lynx rrdtool

Laden Sie jetzt das Shell-Skript webiodb herunter und entpacken das Archiv.

[root@centos5 ~]# wget http://www.wut.de/download/e-576xx-10-swde-000.zip
[root@centos5 ~]# unzip e-576xx-10-swde-000.zip

2. webiodb konfigurieren

Bevor Sie webiodb verwenden können, müssen Sie einige Änderungen am Shell-Skript vornehmen. Dazu öffnen Sie das Skript mit einem Editor.

[root@centos5 ~]# vi webiodb

Zuerst definieren Sie mit der Variablen SENSORS die Sensorennummern, welche webiodb abfragen soll.

SENSORS="01234567"

Die Variable rrdtool muss das Kommando und wenn nötig den vollständigen Pfad enthalten, mit welchem das RRDtool aufgerufen werden kann.

#rrdtool=i386-suse-linux-rrdtool
rrdtool=rrdtool

Damit webiodb die abgerufenen Messwerte richtig interpretieren und in der RRDtool-Datenbank ablegen kann, sollten Sie wenn nötig mit der Option CSMODE Ihren Zeichensatz einstellen. Auf meinem CentOS 5 System musste ich die Option auf den Wert utf setzen.

# The iconv command is what comes in to save the day. We use it to convert
# characters from the ISO-8859-1 charset to the system default charset,
# whatever that may be. On systems lacking that command, you may set the
# following variable to either "iso" or "utf", depending on your actual
# environment. Otherwise, leave it as "auto".
CSMODE="utf"

Des Weiteren können Sie durch die folgenden beiden Variablen die IP-Adresse des Web-Thermographen und den Pfad zur RRDtool-Datenbank angeben. Sobald Sie jedoch mehr als einen Web-Thermographen einsetzen, müssen Sie diese Angaben als Argumente beim Skriptaufruf angeben. Im folgenden wollen wir auch einen Daemon für webiodb erstellen, welcher diese Angaben automatisch an das Skript übergibt und es auch ermöglicht weitere Instanzen des Skripts für mehrere Web-Thermographen zu starten.

DBASE=/var/webiodb/thermo.rrd
TGT_DEVICE=192.168.10.5

3. webiodb installieren

Nachdem Sie das Skript angepasst haben, verschieben Sie es in das Verzeichnis /usr/bin und ändern die Zugriffsrechte entsprechend.

[root@centos5 ~]# mv webiodb /usr/bin/
[root@centos5 ~]# chmod 755 /usr/bin/webiodb

Ein erster Aufruf von webiodb sollte Ihnen die folgenden Informationen anzeigen.

[root@centos5 ~]# webiodb
Please edit the script to match the properties of your Web-IO device,
then execute:
  /usr/bin/webiodb -c       [dbase]           to create the RRDtool database
  /usr/bin/webiodb -r       [dbase] [device]  to start recording values
  /usr/bin/webiodb -i       [dbase]           to show the most recent values
  /usr/bin/webiodb -d[days] [dbase] [diagram] [sensors]  to create a .png diagram
  /usr/bin/webiodb -D[days] [dbase] [diagram] [sensors]  for a min/max diagram
You may add -v before all other parameters for verbose output.
Current default values are:
  dbase=/var/webiodb/thermo.rrd
  device=192.168.10.5
  diagram=./diagram.png

Erstellen Sie jetzt das Verzeichnis /var/webiodb für die RRDtool-Datenbank und anschließend die Datenbank selbst.

[root@centos5 ~]# mkdir /var/webiodb
[root@centos5 ~]# webiodb -c /var/webiodb/thermo.rrd

4. webiodb-Daemon erstellen

Da wir webiodb nicht als root ausführen wollen, erstellen wir einen neuen Systembenutzer welchem wir auch die Zugriffsrechte auf die RRDtool-Datenbank geben.

[root@centos5 ~]# useradd -r -m webiodb
[root@centos5 ~]# chown -R webiodb:webiodb /var/webiodb/

Damit webiodb als Daemon eingesetzt werden kann, benötigen Sie ein Init-Skript welches Sie wie folgt erstellen.

[root@centos5 ~]# vi /etc/init.d/webiodb

Das folgende Skript ermöglicht das Starten, Stoppen und Neustarten des Daemons. Kopieren Sie den Code in die Datei /etc/init.d/webiodb und speichern diese ab.

#!/bin/sh
# chkconfig: - 99 00
# description: Start and stop webiodb

. /etc/init.d/functions

start() {
  echo "Starting webiodb..."
  # Please copy the following line for further devices.
  su webiodb -s /bin/sh -c "/usr/bin/webiodb -r /var/webiodb/thermo.rrd 192.168.10.5 &"
  }

stop() {
  echo "Shutting down webiodb..."
  su webiodb -s /bin/sh -c "killall webiodb 2>/dev/null"
  }

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    start
    ;;
  *)
    echo "Usage: $0 {start|stop|restart}"
    ;;
esac

exit 0

Hinweis: Passen Sie den Pfad zur RRDtool-Datenbank und die IP-Adresse des Web-Thermographen im Start-Abschnitt an Ihre Umgebung an.

Nachdem das Init-Skript erstellt wurde, ändern Sie die Zugriffsberechtigungen der Datei.

[root@centos5 ~]# chmod 755 /etc/rc.d/init.d/webiodb

Anschließend wird der Service webiodb mit den folgenden Befehlen erstellt und im Runlevel 3 und 5 aktiviert.

[root@centos5 ~]# chkconfig --add webiodb
[root@centos5 ~]# chkconfig --level 35 webiodb on

Der soeben erstellte Service kann jetzt gestartet werden.

[root@centos5 ~]# service webiodb start

Sobald der Service im Hintergrund läuft, werden alle 60 Sekunden die aktuellen Messwerte abgerufen und in der RRDtool-Datenbank abgelegt. Bevor sich eine grafische Auswertung lohnt, sollten Sie warten bis genügend Messwerte gesammelt wurden.

5. Grafische Auswertung des Themperaturverlaufs

Wenn Sie genügend Messwerte gesammelt haben, können Sie mit dem folgenden Befehl den Temperaturverlauf der letzten 24 Stunden in einer Grafik darstellen lassen. Geben Sie den Pfad zur RRDtool-Datenbank (/var/webiodb/thermo.rrd) und den Ausgabepfad (/tmp/thermo.png) als Argumente an.

[root@centos5 ~]# webiodb -d1 /var/webiodb/thermo.rrd /tmp/thermo.png

Durch die Option -d können Sie festlegen wie viele Tage in die Auswertung einbezogen werden sollen. Um zum Beispiel einen Wochenrückblick zu erhalten, geben Sie durch die Option -d den Wert 7 an.

[root@centos5 ~]# webiodb -d7 /var/webiodb/thermo.rrd /tmp/thermo.png

Die Abmessungen des erstellten Graphen können Sie wenn nötig im Shell-Skript webiodb anpassen. Dazu öffnen Sie das Skript wieder mit einem Editor.

[root@centos5 ~]# vi /usr/bin/webiodb

Suchen Sie hier den Abschnitt welcher für die Erstellung des grafischen Temeraturverlaufs zuständig ist.

# Create standard diagram (short range, fine resolution)
if [[ $1 == -d* ]]; then
    # optional number of days is stuck directly to the "-d"
    days=${1#-d}
    if [ -n "$days" ]; then
        STDPLOT_DAYS=$days
    fi
    # $3 has a different meaning here
    if [ -n "$3" ]; then
        DIAGRAM=$3
    fi
    # $4 selects a sensor subset for plotting
    if [ -n "$4" ]; then
        SENSORS=$4
    fi
    # Create (trivial) variable definitions and plot commands for all sensors.
    i=0
    defs=""
    plots=""
    set -- $COLORS
    for name in $NAMES; do
        if [[ $SENSORS == *$i* ]]; then
            defs="$defs DEF:a$i=$DBASE:$name:AVERAGE"
            plots="$plots\"LINE1:a$i#$1:${LABELS[$i]}\" "
        fi
        shift
        let i=$i+1
    done
    let seconds=24*3600*$STDPLOT_DAYS
    # Remember how carefully we just crafted the contents of the $plots
    # variable, so that parameters containing spaces are enclosed in
    # quotes? For the verbose output we are now going to split the command
    # parameters into words, and sadly, the quotes don't do here what we'd
    # expect them to. We have to do some fiddling to get the output right.
    if [ -n "$verbose" ]; then
        echo "$rrdtool graph $DIAGRAM -s -$seconds \\"
     for i in $defs; do
         echo "  $i \\"
     done
     # Temporarily replace all spaces by underscore, except for those
     # following a quote sign.
     temp=${plots// /_}
     set -- ${temp//\"_/\" }
     while [ -n "$2" ]; do
         echo "  ${1//_/ } \\"
         shift
     done
     echo "  ${1//_/ }"
    fi
    # The following line may appear to do the same as executing the command
    # between "echo" and "| /bin/sh" directly. Well, it doesn't. Unless we
    # invoke our command in this complicated fashion, the quotes around the
    # parameters with spaces aren't properly recognized.
    echo $rrdtool graph $DIAGRAM -s -$seconds $defs $plots | /bin/sh
    exit 0
fi

In der oberen Hälfte dieses Abschnittes finden Sie die folgende Zeile.

    defs=""

Hier können Sie wie folgt die Breite (-w) und Höhe (-h) des Graphen festlegen.

    defs="-w 800 -h 200"

Wenn Sie eine regelmäßig aktualisierte Grafik über Ihren Webserver bereitstellen oder den Temperaturverlauf des Vortages per E-Mail versenden wollen, erstellen Sie sich am Besten einen Cronjob welcher diese Aufgabe für Sie übernimmt.


Dieser Eintrag wurde am 26.10.2009 erstellt und zuletzt am 10.07.2010 bearbeitet.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_7_767.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2018 by Georg Kainzbauer