Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
DZG DVH 4013 Modbus
Der DZG DVH 4013 ist ein 3-Phase-Zähler, der auf einer RS485-Schnittstelle über das Modbus-Protokoll angesprochen werden kann.
Hardware
Der Zähler hat sich in ersten Tests im Jahr 2016 und 2017 als „Diva“ erwiesen. Es mussten mehrere USB-RS485-Adapter ausprobiert werden, bis es funktioniert hat. Dabei scheint es Unterschiede zwischen Linux und Windows zu geben; es gibt mindestens einen Adapter, der unter Windows prima funktioniert, unter Linux aber nicht. Andersherum lässt sich der Adapter, der bei der Installation des Autors dieses Textes unter Linux prima funktioniert, unter Windows partout nicht zur Mitarbeit überreden. Die ca 150 cm lange Leitung zwischen RS485-Adapter und dem Zähler bei der Installation des Autors ist weder terminiert noch mit Pullup/Pulldown-Widerständen versehen.
Leider hat der Autor dieses Textes bei den Tests mit dem Modbus-Zähler die Übersicht über die Quellen der RS485-Adapter verloren. Aktuell besteht der „Verdacht“, dass es sich bei dem funktionierenden Exemplar um dieses bei Aliexpress bezogene Produkt handelt, das sich am Raspberry Pi als „Bus 001 Device 006: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light“ zeigt.
Dieser optisch ähnliche MENGS-Adapter von Amazon hat im Test im Spätjahr 2016 unter Linux nicht funktioniert. Der Unterschied zum funktionerenden Adapter ist, dass der MENGS-Adapter nur zwei Anschlußklemmen hat; das funktionierende Exemplar hat derer drei (von denen aber nur zwei zu beschalten sind.
Auslesen mit mbrtu
Für die folgenden Skripte benötigt man mbrtu, das auf libmodbus basiert. Es ist gegen die (statisch)e Bibliothek libmodbus gelinkt. mbrtu benötigt mindestens die Version 3.1.3 von libmodbus. Die im Dezember 2018 in Debian stable und dem darauf basierenden Raspbian enthaltene Version 3.0.6 ist zu alt für mbrtu. Es gibt ein Source-Paket einer neueren libmodbus in Debian unstable; ein Backport dieser Library könnte vermutlich zum gewünschten Ergebnis führen.
Die seriellen Parameter sind 9600 8E2. Die Modbus-Adresse sind die letzten zwei Ziffern der Seriennummer, als Hex-Ziffern geschrieben. Zum Beispiel hat das Gerät des Autors die Seriennummer 2546 und die Modbus-Adresse 0x47 (-a 0x47 auf der mbrtu-Kommandozeile).
Installation der Software
Siehe die Wiki-Seite zum Eastron SDM 630.
Nennt apt show libmodbus-dev | grep Version eine Version 3.1.3 oder neuer, kann man apt install libmodbus-dev ausführen und ist fertig. Sonst muss eine manuelle Installation erfolgen, wie auf Eastron SDM 630 beschrieben. mbrtu muss man aktuell selbst bauen, da es (noch?) nicht für Debian paketiert ist.
Ein möglicher, erfolgreicher Test:
./mbrtu -d/dev/ttyUSB2 -b9600 -pE -s2 -Q -P -a0x47 -f3 -tint32 -n2 -r0x4000 71 16384 4452560
Der Zählerstand des Zählwerks 1.8.0 ist in diesem Fall 4452,560 kWh.
BASH-Script, direkt
Das Beispiel loggt den Total-Zählerstand (und nur den) direkt über die VZ-Middleware.
- base bash
#!/bin/bash # # log a register (electric energie) of Eastron meter to Volkszaehler.org # # example conjob: # * * * * * root /usr/local/bin/dvh4013_mbrtu.sh >> /var/log/mbrtu.log 2>> /var/log/mbrtu.log # # PATH for cronjob PATH=/usr/local/bin:$PATH # config Modbus TTY="/dev/ttyUSB0" BAUD=9600 PARITY=E STOPBITS=2 ADDR=0x47 REG=0x4000 # config VZ HOST=localhost UUID=6836dd20-00d5-11e0-bab1-856ed5f959ae # read Modbus METER="$($HOME/mbrtu/mbrtu/mbrtu -d$TTY -b$BAUD -p$PARITY -s$STOPBITS -Q -P -a$ADDR -f3 -tint32 -n2 -r$REG | cut -d\ -f3)" if [ -z "$METER" ]; then echo "no data revcieved on modbus" else echo "$METER" # Timestamp TS=$(date +%s) TS=$(($TS*1000)) # write VZ echo wget -O - -q "http://$HOST/middleware.php/data/$UUID.json?operation=add&ts=$TS&value=${METER}" wget -O - -q "http://$HOST/middleware.php/data/$UUID.json?operation=add&ts=$TS&value=${METER}" printf "\n" fi