<p dir="ltr">Hallo Marc,</p>
<p dir="ltr">noch ganz kurz vor der Bescherung:-)</p>
<p dir="ltr">Win-Software lief hier out of the box, Geräte-Manager hab ich nicht angefasst. Bin davon ausgegangen, dass sich die Software die Schnittstelle selbst konfiguriert.</p>
<p dir="ltr">MinmalModbus hab ich per pip installiert, und pip gab es zumindest für Raspbian (apt-get python-pip).</p>
<p dir="ltr">Mit dem Hexdump kann ich spontan nix anfangen, aber die Ausgabe von mbrtu zeigt, dass die Antwort deines Zählers immer mit 0x00 beginnt, tatsächlich sollte sie aber mit der Slave-Adresse 0x47 beginnen.<br>
Wie sieht deine Hardware momentan aus, insbesondere Widerstände? Mit Abschlusswiderstand hatte ich auch immer falsche CRCs. Wobei, wenn es unter Win läuft, sollte das ja passen...</p>
<p dir="ltr">Aber jetzt erst mal frohe Weihnachten für alle, die hier mitlesen!</p>
<p dir="ltr">Grüße<br>
Frank</p>
<div class="gmail_quote">Am 24.12.2016 15:48 schrieb "Marc Haber" <<a href="mailto:mh%2Bvolkszaehler-users@zugschlus.de">mh+volkszaehler-users@zugschlus.de</a>>:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hallo Frank, hallo Liste,<br>
<br>
On Thu, Dec 22, 2016 at 09:54:42AM +0100, Frank Richter wrote:<br>
> ich war ungeduldig und hab mir einfach einen DVH4013 bestellt.<br>
<br>
Hehe ;-)<br>
<br>
Meiner wurde inzwischen getauscht, funktioniert jetzt unter Windows<br>
(aber seltsamerweise mit 8n1, nicht wie von Dir beobachtet 8e1), aber<br>
unter Linux mit mbrtu ist nach wie vor nix.<br>
<br>
Der Support der DZG ist vorbildlich. Geduldig, erklärt die Dinge auf<br>
Augenhöhe, wirft nicht mit Textbausteinen. Gegenüber diesem Pluspunkt<br>
steht die abgrundtiefe Dokumentation, die wichtige Dinge wie die<br>
RS485-Adresse unterschlägt und in anderen Punkten schlicht inkorrekt<br>
ist und die Tatsache, dass man die Windows-Software für den Zähler<br>
erst auf Nachfrage erhält.<br>
<br>
> * Der DVH4013 spricht 9600 8E1. Die Baudrate lässt sich verändern, die<br>
> ungewöhnliche Parity wohl nicht.<br>
<br>
Interessanteweise muss ich die Schnittstelle im Gerätemanager (!) auf<br>
9600 8_N_1 einstellen, damit die Windows-Software funktioniert. Mit<br>
mbrtu muss es jedoch -pE (mit _zwei_ Stoppbits) sein, damit der Zähler<br>
überhaupt mit etwas antwortet.<br>
<br>
> * Die Modbus-Slave-Adresse berechnet sich aus den letzten beiden Stellen<br>
> der Seriennummer + 1. Dabei wird Ziffer für Ziffer behandelt, es erfolgt<br>
> keine Umrechnung dezimal zu hex. Beispiel: Meine Seriennummer endet mit 38,<br>
> daraus wird das Adressbyte 0x39 = 57, nicht wie man auch erwarten könnte<br>
> 0x27 = 39!<br>
<br>
Eiwei. Das hätte ich in dieser Form niemals geraten.<br>
<br>
Andererseits, Seriennummer 46 führt zu Adresse 0x47,<br>
<br>
> * Der DVH4013 erwartet zur Abfrage der Modbus-Register function code 03<br>
> (output holding register), im Gegensatz zum Eastron SDM630, der function<br>
> code 04 (input register) verwendet.<br>
<br>
Auch das hätte ich vermutlich erst im wilden ausprobieren<br>
herausgefunden. Überraschung.<br>
<br>
> Nachdem ich das alles aussortiert hatte, konnte ich den Zähler mit Python<br>
> (lib: MinimalModbus), mbrtu (lib: libmodbus) und auch per Arduino (lib:<br>
> ModbusMaster) zumindest rudimentär auslesen. Hier die zugehörigen<br>
> Codeschnipsel:<br>
><br>
> * Python:<br>
> #!/usr/bin/env python<br>
> import minimalmodbus<br>
> minimalmodbus.TIMEOUT = 1<br>
> # port name, slave address (in decimal)<br>
> dvh4013 = minimalmodbus.Instrument('/<wbr>dev/ttyUSB0', 57, mode='rtu')<br>
> dvh4013.serial.baudrate = 9600<br>
> dvh4013.serial.parity = minimalmodbus.serial.PARITY_<wbr>EVEN<br>
> # Zaehlerstand 1.8.0<br>
> print dvh4013.read_long(0x4000)<br>
<br>
minimalmodbus scheint es für Debian noch nicht zu geben. In Debian<br>
gibt es:<br>
<br>
python-pymodbus/unstable,<wbr>unstable,testing,testing 1.2.0+git20151013-1 all<br>
full Modbus protocol implementation<br>
<br>
Die scheint aber nicht so toll im Bereich RTU zu sein, richtig?<br>
<br>
> * mbrtu:<br>
> mbrtu -d/dev/ttyUSB0 -b9600 -pE -a57 -f3 -tint -n2 -r0x4000<br>
> mbrtu ist Stand heute allerdings nicht wirklich für den Zähler geeignet, da<br>
> es nichts mit den 32--bit-Integern anzufangen weiß. Außerdem treten in<br>
> meinem Setup öfters Timeouts auf, die ich via Python nicht bekomme.<br>
<br>
1 [2/892]mh@drop:~ $ ./mbrtu -d/dev/ttyUSB0 -b9600 -pE -s1 -D -a0x47 -f3 -tint -n2 -r0x4000<br>
ADDR=71 FUNC=3 REG=16384 CNT=2<br>
Opening /dev/ttyUSB0 at 9600 bauds (E, 8, 1)<br>
[47][03][40][00][00][02][DF][<wbr>6D]<br>
Waiting for a confirmation...<br>
<00><03><04><00><00><0D><70><<wbr>D8><83><br>
ERROR CRC received 0xD883 != CRC calculated 0xEF87<br>
ADDR=71 REG=16384 ERROR: Invalid CRC<br>
1 [3/893]mh@drop:~ $ ./mbrtu -d/dev/ttyUSB0 -b9600 -pE -s2 -D -a0x47 -f3 -tint -n2 -r0x4000<br>
ADDR=71 FUNC=3 REG=16384 CNT=2<br>
Opening /dev/ttyUSB0 at 9600 bauds (E, 8, 2)<br>
[47][03][40][00][00][02][DF][<wbr>6D]<br>
Waiting for a confirmation...<br>
<00><03><04><00><00><0D><70><<wbr>D8><83><br>
ERROR CRC received 0xD883 != CRC calculated 0xEF87<br>
ADDR=71 REG=16384 ERROR: Invalid CRC<br>
1 [4/894]mh@drop:~ $ ./mbrtu -d/dev/ttyUSB0 -b9600 -pN -s2 -D -a0x47 -f3 -tint -n2 -r0x4000<br>
ADDR=71 FUNC=3 REG=16384 CNT=2<br>
Opening /dev/ttyUSB0 at 9600 bauds (N, 8, 2)<br>
[47][03][40][00][00][02][DF][<wbr>6D]<br>
Waiting for a confirmation...<br>
ERROR Connection timed out: select<br>
ADDR=71 REG=16384 ERROR: Connection timed out<br>
1 [5/895]mh@drop:~ $ 1 [5/895]mh@drop:~ $ ./mbrtu -d/dev/ttyUSB0 -b9600 -pN -s1 -D -a0x47 -f3 -tint -n2 -r0x4000<br>
ADDR=71 FUNC=3 REG=16384 CNT=2<br>
Opening /dev/ttyUSB0 at 9600 bauds (N, 8, 1)<br>
[47][03][40][00][00][02][DF][<wbr>6D]<br>
Waiting for a confirmation...<br>
ERROR Connection timed out: select<br>
ADDR=71 REG=16384 ERROR: Connection timed out<br>
1 [6/896]mh@drop:~ $<br>
<br>
Zusammengefasst: Wenn der Zähler antwortet ist die CRC verkehrt, und<br>
er antwortet mit 9600 8E1 und 9600 8E2.<br>
<br>
> * Arduino:<br>
> auf Anfrage, keine Ahnung ob das hier jemand interessiert<br>
<br>
Das würde mich interessieren, wenn man den Arduino irgendwie dazu<br>
kriegt, selbständig den Zähler alle Minute zu pollen und einen Teil<br>
Daten, z.B. eine halbe Stunde, zu puffern, wenn das eigentliche<br>
Speicherbackend mal nicht da ist (z.B. für Updates oder im<br>
Störungsfall). Aber das ist für mich nur die kür, das hat im Moment<br>
geringste Priorität.<br>
<br>
> Vorteile gegenüber dem Eastron SDM630 sehe ich vor allem in den<br>
> phasensaldierenden Registern für Bezug und Einspeisung und möglicherweise<br>
> in der Mehrtarif-Fähigkeit, falls jemand sowas sucht.<br>
> Nicht vorhanden sind wohl Blind- und Scheinleistung, halte ich aber für<br>
> entbehrlich.<br>
<br>
Ohne jetzt den SDM630 in der Hand gehabt zu haben, sieht er auch<br>
größer aus als der DVH4013, was vielleicht den Anschluß in der<br>
Unterverteilung schwierig machen könnte. In der Beschreibung stand<br>
auch eine Warnung vor den Klemmen, bei denen man wissen möchte, wie<br>
fest man sie anziehen darf, bevor sie "ab" sind. Bei einer potenziell<br>
mit > 40A belasteten Verbindung möchte ich sowas eigentlich nicht haben.<br>
<br>
Die Klemmen des DVH4013 hingegen machen mir einen recht guten Eindruck.<br>
<br>
Hier noch ein Mitschnitt einer erfolreichen Kommunikiation der<br>
Windows-Software des Zählers mit dem Zähler. Vielleicht wirdda jemand<br>
schlauer als ich.<br>
<br>
[10/908]mh@drop:~ $ hexdump zaehler.bin<br>
0000000 0347 1309 d006 75a0 47e7 1303 200c 3380<br>
0000010 ac01 7430 8435 0d47 0622 2010 7960 47e7<br>
0000020 2303 200e 5384 0f21 ff7b 0347 0201 9004<br>
0000030 5930 47eb 0103 200e 0080 d601 ffdb 0d47<br>
0000040 0302 9004 afb0 47fb 0303 200e 0d80 d870<br>
0000050 ff09 0d47 0d02 2018 3f60 47ad 2303 200e<br>
0000060 0580 ef01 e11f 0347 2381 9006 8e30 47f5<br>
0000070 0103 600e 0200 e393 ff4d 0547 3302 9004<br>
0000080 c4b0 47fe 2303 200e 0280 e3a0 47ef 0205<br>
0000090 0c43 3090 f5ed 0347 0e01 8020 a902 2ee3<br>
00000a0 47ff 020d 1848 6020 db6d 0347 0e23 8020<br>
00000b0 0100 dbd6 47ff 0a0d 1009 6020 f92b 0347<br>
00000c0 0e01 8020 5b0a 1e6d 47c6 0a0d 0612 b090<br>
00000d0 fd8b 0347 0e23 8020 ce02 035d 47ff 0a0d<br>
00000e0 0c22 b090 f90a 0347 0e23 8020 9802 ebdd<br>
00000f0 47fe 0503 0432 3090 fa06 0347 1e01 0040<br>
0000100 9902 aee3 0347 4205 9006 69b0 47e5 2303<br>
0000110 200e 0280 dd8c fe93 0347 8201 9006 79b0<br>
0000120 47da 0103 200e 0380 eb01 fa09 0d47 2402<br>
0000130 8008 4d60 47ea 0303 200e c380 d683 e7b4<br>
0000140 0747 a402 2010 f560 47af 2303 600e 0080<br>
0000150 d601 ffdb 0d47 4402 2018 5160 479b 2303<br>
0000160 401e 5a00 675b d735 0d47 c402 2010 8360<br>
0000170 47ae 0103 200e 0080 d601 ffdb 0d47 c802<br>
0000180 2010 c960 47ac 2303 200e 0080 d601 ffdb<br>
0000190 0347 7201 9006 75b0 47d7 2303 200e 0080<br>
00001a0 d601 ffdb 0347 4201 9006 49b0 47f3 2303<br>
00001b0 200e 0080 d600 ffdb 0d47 3622 500c 6f60<br>
00001c0 4796 1303 20ce 3280 ff2b 0d47 0c22 2010<br>
00001d0 7960 47e7 0103 200e 5384 0701 47e7 0103<br>
00001e0 0402 3090 eb59 0347 0e23 8020 0100 dbd6<br>
00001f0 47ff 020d 1005 6020 fbaf 0347 0e01 8020<br>
0000200 700d 1bd8 47ff 0103 0613 3090 ff6a 0347<br>
0000210 0e23 8020 a305 1fef 47e1 8103 0623 3090<br>
0000220 f58e 0347 0e23 8060 9302 4de3 47ff 0103<br>
0000230 0433 b090 f3c4 0347 1e01 0040 a002 efe3<br>
0000240 0347 4301 9004 ed30 47f5 0303 200e 0280<br>
0000250 61a9 ff2e 0347 1201 9006 6db0 47db 2303<br>
0000260 200e 0080 d601 ffdb 0347 0205 9004 2b30<br>
0000270 47f9 2303 600e 0a80 6d5b c61e 0347 1205<br>
0000280 9006 8bb0 47fd 0303 200e 0280 5dce ff03<br>
0000290 0d47 220a 900c 0ab0 47e5 2303 600e 0280<br>
00002a0 dd98 fee1 0347 3205 9008 0630 47fa 0103<br>
00002b0 401e 0200 6199 47ae 0a05 0642 b090 e569<br>
00002c0 0347 0e01 8020 8c02 93dd 47fe 020d 0c04<br>
00002d0 6020 b479 0347 0e23 8060 0103 5beb 47fa<br>
00002e0 020d 0824 6090 d44d 0347 0e01 8020 03c3<br>
00002f0 b4d6 47e7 0003 0452 3090 f57d 0347 0e01<br>
0000300 0060 0100 dbd6 47ff 020d 1844 6020 9b51<br>
0000310 0347 0e23 8020 015a b967 47ff 0103 0462<br>
0000320 3090 fd41 0347 0e23 8020 0100 dbd6 47ff<br>
0000330 020d 1064 6020 acd5 0347 0e03 8020 0100<br>
0000340 dbd6 47ff 0103 0672 b090 d775 0347 0e23<br>
0000350 8060 0100 dbd6 47ff 020d 1884 6020 f349<br>
0000360 0347 0e23 8060 0100 dbd6 47ff 2206 0c36<br>
0000370 60a0 59bd 0347 ce01 8020 2b32 00ff<br>
000037d<br>
[11/909]mh@drop:~ $<br>
<br>
Grüße<br>
Marc<br>
<br>
--<br>
------------------------------<wbr>------------------------------<wbr>-----------------<br>
Marc Haber | "I don't trust Computers. They | Mailadresse im Header<br>
Leimen, Germany | lose things." Winona Ryder | Fon: *49 6224 1600402<br>
Nordisch by Nature | How to make an American Quilt | Fax: *49 6224 1600421<br>
</blockquote></div>