====== EMH eHZ-H======
{{ :hardware:channels:meters:power:edl-ehz:emh-ehz-h.jpg?nolink&150|}}
Der EMH eHZ-H kann nach EN 62056-21 über die IR-Schnittstelle ausgelesen werden.\\
===== Hardware =====
Man benötigt den [[hardware:controllers:ir-schreib-lesekopf|IR-Schreib-Lesekopf]].\\
Der Zähler sendet lastabhängig alle paar Sekunden unaufgefordert ein [[software:sml|SML]]-Datenpaket. Die Sendediode ist oben rechts hinter dem rechten der beiden Löcher in der Metallplatte. Gesendet wird mit [[hardware:controllers:ir-schreib-lesekopf#grundlagen|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:
{
"retry" : 3,
"verbosity" : 0,
"log" : "/var/log/vzlogger/vzlogger.log",
"local" : {
"enabled" : false,
"port" : 8081,
"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 ""
echo " "
echo " Zählerauswertung"
echo " "
echo " "
echo " "
echo " Zählerstände
"
let METER_180=0x${METER_OUTPUT:390:10}
VALUE=$(echo "scale=2; $METER_180 / 10000" |bc)
echo " Bezug.......: " $VALUE "kWh
"
let METER_180=0x${METER_OUTPUT:347:10}
VALUE=$(echo "scale=2; $METER_180 / 10000" |bc)
echo " Einspeisung.: " $VALUE "kWh
"
let METER_180=0x${METER_OUTPUT:518:8}
VALUE=$(echo "scale=2; $METER_180 / 10" |bc)
echo " Wirkleistung: " $VALUE "W"
echo " "
echo ""