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

Dimitrios Bogiatzoules info at bogiatzoules.de
Tue Jan 8 11:13:49 CET 2013


Dimitrios Bogiatzoules said the following on 08.01.2013 10:28:
[...]
> Details zu liefern. Wie dem auch sei, ich habe sowieso einen Fehler im
> Wirkleistungsbereich entdeckt, sodass ich irgendwann noch eine Korrektur
> nachliefern muss....

Hier meine aktuelle Variante ein wenig aufgehübscht, damit man das
Ergebnis auf den Smartphones im Haus ordentlich lesen kann.

Grüße

Taki

Hinweis: bitte dafür sorgen, dass bc, stty und xxd auf dem Zielsystem
vorhanden sind. Die Datei gespeichert als read.sh und mittels chmod +x
ausführbar gemacht, verwende ich als cgi-Skript, man kann sie aber auch
gekürzt um die Zeilen

echo "Content-Type: text/html; charset=utf-8"
echo ""
echo ""

mittels cron aufrufen und sich regelmäßig eine html-Seite generieren lassen:

/path/to/read.sh > /path/to/htdoc/read.html

--------------------------

#!/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 2>/dev/null | xxd -p -u -l 365`
        METER_OUTPUT__START_SEQUENCE=$(echo "${METER_OUTPUT:0:18}")
done

echo "Content-Type: text/html; charset=utf-8"
echo ""
echo ""
echo "<html>"
echo " <head>"
echo "   <title>Zählerauswertung</title>"
echo "   <meta name=\"viewport\" content=\"width=device-width,
initial-scale=1.0, user-scalable=no\">"
echo " </head>"
echo " <body>"

echo " <h1> Zählerstände </h1>"

let METER_180=0x${METER_OUTPUT:390:10}
VALUE=$(echo "scale=2; $METER_180 / 10000" |bc)
echo " <tt>Bezug.......: " $VALUE "kWh</tt><br>"

let METER_180=0x${METER_OUTPUT:347:10}
VALUE=$(echo "scale=2; $METER_180 / 10000" |bc)
echo " <tt>Einspeisung.: " $VALUE "kWh</tt><br>"

let METER_180=0x${METER_OUTPUT:518:8}
VALUE=$(echo "scale=2; $METER_180 / 10" |bc)
echo " <tt>Wirkleistung: " $VALUE "W</tt>"

echo " </body>"
echo "</html>"



More information about the volkszaehler-users mailing list