Benutzer-Werkzeuge

Webseiten-Werkzeuge


hardware:channels:meters:power:edl-ehz:emh-ehz-h1

EMH eHZ-H

Der EMH eHZ-H kann nach EN 62056-21 über die IR-Schnittstelle ausgelesen werden.

Hardware

Man benötigt den IR-Schreib-Lesekopf.

Der Zähler sendet lastabhängig alle paar Sekunden unaufgefordert ein SML-Datenpaket. Die Sendediode ist oben rechts hinter dem rechten der beiden Löcher in der Metallplatte. Gesendet wird mit 9600bd, 8N1. Die Signalqualität scheint sehr gut zu sein, mit einem Steckbrett-Aufbau war der Empfang ohne Abdunkelungsmaßnahmen aus mehreren cm Abstand möglich.

Beispielkonfiguration

Eine exemplarische vzlogger.conf:

vzlogger.conf
{
"retry" : 3,
"daemon": true,
"verbosity" : 0,
"log" : "/var/log/vzlogger.log",
 
"local" : {
	"enabled" : false,
	"port" : 8080,
	"index" : true,
	"timeout" : 30,
	"buffer" : 600
},
 
"meters" : [{
	"protocol" : "sml",
	"enabled" : true,
	"device" : "/dev/ttyUSB0",
	"parity" : "8N1",
	"baudrate" : 9600,
	"aggtime" : -1,
	"aggfixedinterval" : true,
	"channels": [{
		"uuid" : "6836dd20-00d5-11e0-bab1-856ed5f959ae",
		"middleware" : "http://localhost/middleware.php",
		"identifier" : "1-0:1.8.0",
		"aggmode" : "MAX"
		}]
	}
]}

Beispieldaten

1B 1B 1B 1B                                     Start Escape Zeichenfolge
01 01 01 01                                     Start Übertragung Version 1
76                                              Liste mit 6 Einträgen
   07 00 14 04 EC 6D 20                         transactionID (7 Byte)
   62 00                                        groupNo
   62 00                                        abortOnError
   72                                           Liste mit 2 Einträgen
      63 01 01                                  Nachricht 0101 = SML_PublicOpen.Res
      76                                        Liste mit 6 Einträgen
         01                                     codepage (leer)
         01                                     clientID (leer)
         07 00 14 01 82 24 60                   reqFileID 
         0B 06 45 4D 48 xx xx xx xx xx xx       serverID 
         01                                     username (leer)
         01                                     password (leer)
   63 B7 96                                     CRC
00                                              Ende Nachricht
76                                              Liste mit 6 Einträgen
   07 00 14 04 EC 6D 21                         transactionID
   62 00                                        groupNo
   62 00                                        abortOnError
   72                                           Liste mit 2 Einträgen
      63 07 01                                  Nachricht 0701 = SML_GetList.Res
      77                                        Liste mit 7 Einträgen
         01                                     clientID (leer)
         0B 06 45 4D 48 xx xx xx xx xx xx       serverID 
         01                                     listName (leer)
         72                                     Liste mit 2 Einträgen = actSensorTime
            62 01                               Typ = secIndex
            65 01 82 78 48                      Sekunden-Index als unsigned 32
         77                                     Liste mit 7 Einträgen = valList mit ValListEntries
            77 (1)                               
               07 81 81 C7 82 03 FF             objName 129-129:199.130.3*255
                                                Herstelleridentifikation
               01                               status (leer)
               01                               valTime (leer)
               01                               unit (leer)
               01                               scaler (leer)
               04 45 4D 48                      value
               01                               valueSignature (leer)
            77 (2)                                
               07 01 00 00 00 09 FF             objName 1-0:0.0.9*255
                                                Geräteidentifikation
               01                               status
               01                               valTime
               01                               unit
               01                               scaler
               0B 06 45 4D 48 xx xx xx xx xx xx value
               01                               valueSignature
            77 (3)                                
               07 01 00 01 08 00 FF             objName 1-0:1.8.0*255
                                                Wirkarbeit Bezug total
               63 01 82                         status = unsigned 16
               01                               valTime
               62 1E                            unit (unsigned8) 1E = Wh
               52 FF                            scaler (int8) -1 = *10^-1 = /10
               56 00 01 29 71 4F                value  19493967/10 = 1949396,7 Wh = 1949,3967 kWh
               01                               valueSignature (leer)
            77 (4)
               07 01 00 01 08 01 FF             objName 1-0:1.8.1*255
                                                Wirkarbeit Bezug Tarif 1
               01                               status (leer)
               01                               valTime (leer)
               62 1E                            unit (unsigned8) 1E = Wh
               52 FF                            scaler (int8) -1 = *10^-1 = /10
               56 00 01 29 71 4F                value  19493967/10 = 1949396,7 Wh = 1949,3967 kWh
               01                               valueSignature (leer)
            77 (5)
               07 01 00 01 08 02 FF             objName 1-0:1.8.2*255
                                                Wirkarbeit Bezug Tarif 2
               01                               status (leer)
               01                               valTime (leer)
               62 1E                            unit (unsigned8) 1E = Wh
               52 FF                            scaler (int8) -1 = *10^-1 = /10
               56 00 00 00 00 00                value 0
               01                               valueSignature (leer)
            77 (6)
               07 01 00 0F 07 00 FF             objName 1-0:15.7.0*255
                                                Wirkleistung total
               01                               status (leer)
               01                               valTime (leer)
               62 1B                            unit (unsigned8) 1B = W
               52 FF                            scaler (int8) -1 = *10^-1 = /10
               55 00 00 11 51                   value 4433/10 = 443,3 W
               01                               valueSignature (leer)
            77 (7)
               07 81 81 C7 82 05 FF             objName 129-129:199.130.5*255
                                                Public Key des Zählers
               01                               status (leer)
               01                               valTime (leer)
               01                               unit (leer)
               01                               scaler (leer)
               83 xx xx xx xx xx xx xx xx xx xx value
                  xx xx xx xx xx xx xx xx xx xx 
                  xx xx xx xx xx xx xx xx xx xx 
                  xx xx xx xx xx xx xx xx xx xx 
                  xx xx xx xx xx xx xx xx xx
               01                               valueSignature (leer)
         01                                     listSignature (leer)
         01                                     actGatewayTime (leer)
   63 C1 04                                     CRC
00                                              Ende Nachricht
76     
   07 00 14 04 EC 6D 24                         transactionID
   62 00                                        groupNo
   62 00                                        abortOnError
   72 
      63 02 01                                  Nachricht 0201 = SML_PublicClose.Res
      71 
         01                                     Signature (leer)
   63 DD 06                                     CRC
00                                              Ende 
00                                              Ende
1B 1B 1B 1B                                     Escape-Sequenz
1A 01 64 62                                     Ende Nachricht mit Füllbyte und Prüfsumme
00                                              Ende

Zähler mit Shell-Skripte abfragen

Um die Zähler schnell und ohne große Vorarbeit auslesen zu können, bieten sich folgende Skripte an. Für einen Dauerbetrieb sind sie jedoch weniger geeignet, da manchmal einige Zeit vergehen muss, um den Datenanfang zu erfassen.

HINWEIS: für die Ausführung werden folgende Utities benötigt

  • bc
  • stty
  • xxd (wird mit dem vi installiert)

Zählerwerte ausgeben

Die folgenden Zeilen werden in eine Datei read.sh gespeichert und erzeugen nach deren Ausführung folgende Ausgabe:

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 2>/dev/null | 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:518:8}
VALUE=$(echo "scale=2; $METER_180 / 10" |bc)
echo "Total effective power (+/-): " $VALUE "W"

HTML-Seite erzeugen

Die folgenden Zeilen in eine Datei read2html.sh gespeichert und als cgi-script aufgerufen, präsentieren die Zähler als HTML-Seite für einen Browser. Die Konfiguration eines http-Servers wie lighttpd muss natürlich separat erfolgen.

#!/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&auml;hlerauswertung</title>"
echo "   <meta name=\"viewport\" content=\"width=device-width,
initial-scale=1.0, user-scalable=no\">"
echo " </head>"
echo " <body>"
 
echo " <h1> Z&auml;hlerst&auml;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>"
hardware/channels/meters/power/edl-ehz/emh-ehz-h1.txt · Zuletzt geändert: 2019/04/30 12:40 von jau