[vz-users] Kurzes Shellskript um den SML-eHZ abzulesen

Dimitrios Bogiatzoules info at bogiatzoules.de
Mon Jan 7 16:30:39 CET 2013


Hallo zusammen,

nachdem ich meinen IR-Auslesekopf ordentlich ausgerichtet hatte (war
dann doch überrascht, dass sich die Hexadecimalwerte ändern, wenn man
nicht sehr genau zielt) wollte ich schon mal was ablesen, bevor ich mich
an vzlogger heran mache.

Im Netz "schwirren" einige Skripte in perl oder bash, für letztere habe
ich mir ein auf dieser Liste gefundenes ein wenig modifiziert. Das
Ergebnis steht weiter unten.

Grüße

Taki

Benötigt werden neben der bash folgende Programme:

   bc
   stty
   xxd (wird mit dem vi installiert)

Die kryptische Datenreihe beim stty-Befehl erhält man wenn man den
Befehl mit der Option -q aufruft. Ich hatte dazu im Vorfeld sämtliche
Einstellungen mittels minicom vorgenommen, welches ich dann mit CTRL-A Q
ohne Reset der seriellen Schnittstelle verlassen habe. Damit bleiben die
ganzen Einstellungen erhalten und man kann sie mit stty -g -F Device
recht einfach "konservieren"...

Die Ausgabe sieht dann in etwa wie folgt aus:

Meter 1.8.0 (from plant):     1488.36 kWh
Meter 2.8.0 (to plant):       1591.32 kWh
Total effective power (+/-):  1687.14 W


#!/bin/bash
# read and evaluate SML output received from EMH eHZ

# set serial device
INPUT_DEV="/dev/ttyUSB0"

#set $INPUT_DEV to 9600 8N1
stty -F $INPUT_DEV
1:0:8bd:0:3:1c:7f:15:4:5:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0

SML_START_SEQUENCE="1B1B1B1B0101010176"
METER_OUTPUT__START_SEQUENCE=""

while [ "$METER_OUTPUT__START_SEQUENCE" != "$SML_START_SEQUENCE" ]
do
        METER_OUTPUT=`cat $INPUT_DEV | xxd -p -u -l 460`
        METER_OUTPUT__START_SEQUENCE=$(echo "${METER_OUTPUT:0:18}")
        if [ $METER_OUTPUT__START_SEQUENCE != $SML_START_SEQUENCE ];
        then
                echo "missed start and trying again..."
                #exit 1
        fi
done

let METER_180=0x${METER_OUTPUT:390:10}
VALUE=$(echo "scale=2; $METER_180 / 10000" |bc)
echo "Meter 1.8.0 (from plant):    " $VALUE "kWh"

let METER_180=0x${METER_OUTPUT:347:10}
VALUE=$(echo "scale=2; $METER_180 / 10000" |bc)
echo "Meter 2.8.0 (to plant):      " $VALUE "kWh"

let METER_180=0x${METER_OUTPUT:519:10}
VALUE=$(echo "scale=2; $METER_180 / 10000" |bc)
echo "Total effective power (+/-): " $VALUE "W"



More information about the volkszaehler-users mailing list