Auswertungsscript für Strom- und Gaszähler.

brenner

Commander
Registriert
Apr. 2002
Beiträge
3.030
Moin moin,

nach viel Frickelei habe ich es endlich geschafft meinen Strom- und Gaszähler elektronisch auszuwerten. Diese Daten würde ich gerne in Cacti visualisieren.
Zu Zeit sehen die Ausgaben in der Linuxkonsole von den Sensoren so aus und werden durch einen internen Konverter (den ich nicht beinflussen kann) erzeugt:

root@cacti01:~# echo CGET CUX2711111:1 | nc localhost 6770 -q 1
COUNTER:86 LAST_VALUE:0.00 METER:1634.56 LAST_TICKS:7147.00 SUM:8.10 UNITSPTURN:100.00

Mittels diesen Aufrufes bekomme ich die Werte auch in Cacti integriert. Die Werte werden ca. alle 2-3 Minuten aktualisiert.
Nutzbar davon ist für mich momentan nur der METER Wert da dieser den aktuellen (hier Gas in m³) Zählerstand anzeigt. Das ist zwar schon mal schön, für das Langzeittracking aber nicht brauchbar.

Ich würde nun gerne mein eigenes Script schreiben welches mir die Daten bis zu einem Jahr auswertet, danach können die verwendeten Daten gelöscht werden. Ich würde gerne flexibel bleiben und die Werte nicht eine Datenbank sondern in eine Textdatei legen.


Die gewünschte Scriptausgabe sollte demnach so aussehen:
root@cacti01: meinscript.sh/pl
METER: 1634.56 DIFF: 0.12 TAG: 3.54 WOCHE: 18.32 MONAT: 450.78 JAHR6200.10


Zur Erklärung:
METER = Aktueller Zählerstand
DIFF = Differenz zwischen aktuellen und letzten METER Wert
TAG = Tagesverbrauch (0-24Uhr)
WOCHE = Wochenverbrauch (Mo-So)
MONAT = Monatsverbrauch (1.x-31.x)
JAHR = Jahresverbrauch (1.1-31.12)


Ist das grundsätzlich machbar und wenn ja, wie gehe ich das Script am besten an. Hab da so momentan gar keine Idee :(


Viele Grüße
Stefan
 
Nun, die Bash ermöglicht ja einfache mathematische Rechnungen. Von daher sollte das kein größeres Problem darstellen.

Der einzige Wert, den Du aus Deinem Ergebnis-String brauchst ist der METER-Wert, wie Du selber schon schreibst. Also ich würde diesen Ergebnis-String in einer Variable speichern, und dann mittels z.B. dem Befehl cut den gewünschten Wert "heraustrennen" und in einer neuen Variable (oder auch der alten, egal) abspeichern.
Die weiteren Daten lassen sich ja alle dann ausrechnen. Das ganze dann am Ende des Scripts mittels ">>" an die gewünschte Textdatei anhängen.
Das Script dann mittels Cron im gewünschten Intervall starten lassen. Fertig.
 
und fertig....


Witzig ;-)

Mal schauen ob ich mein Perl noch irgendwie Kopftechnisch reaktiviert bekomme, dann bin ich wenigstens Plattform unabhängig.
Ergänzung ()

Hab jetzt doch rumgebasht.

Zu Zeit sind es so aus, auch wenn es nur der erste Anfang und Versuch ist:

Code:
#!/bin/bash

#Datei einlesen
d=$(head -2 ESA1000-log.txt)
#echo $d

#Reinen METER-Wert rauscutten
c=$(echo CGET CUX2711110:1 | nc localhost 6770 -q 1 | awk -F " " '{print $2}' | awk -F ":" '{print $2}')
echo $c >ESA1000-log.txt

wahr=$(echo  "$c >  $d" | bc)
 if  [ $wahr = 1 ]; then 
    z=$(echo "$c $d" | awk '{ print($1 - $2) }')
fi


#Gesamtausgabe:
echo "METER:"$c" DIFF:"$z""



Wie kann ich das ganze vom Aufrufort unabhängig machen, also das die Logsfiles z.B. immer in ein bestimmtes Verzeichnis geschrieben und gelesen werden?
 
Zurück
Oben