[vz-dev] Siemens TD3511 mit Protokoll D0

Michael Wulz michael.wulz at gmail.com
Thu Aug 7 12:22:51 CEST 2014


Am 14.12.13 18:40, schrieb Sebastian Michel:
> Hallo zusammen,
Hallo,

habe deinen Patch nun versucht auf dem aktuellsten Git-Pull anzuwenden:
komme zu folgendem Ergebnis:
root at raspberrypi:~/vzlogger# patch -p 1 < ../vzlogger_d0_v2.diff
patching file src/Obis.cpp
patching file src/protocols/MeterD0.cpp
Hunk #1 FAILED at 204.
Hunk #2 FAILED at 215.
Hunk #3 FAILED at 239.
Hunk #4 FAILED at 305.
Hunk #5 succeeded at 526 (offset 160 lines).
Hunk #6 FAILED at 385.
5 out of 6 hunks FAILED -- saving rejects to file
src/protocols/MeterD0.cpp.rej

Ich habe das Problem, dass der vzlogger mit einem Segementation Fault
abstürzt beim Parsen der OID's. Hier der letzte Output des Zählers:
[...]
 hex= A
[Aug 07 10:21:20][d0]   DEBUG OBIS_CODE byte C hex= 43
[Aug 07 10:21:20][d0]   DEBUG OBIS_CODE byte . hex= 2E
[Aug 07 10:21:20][d0]   DEBUG OBIS_CODE byte 2 hex= 32
[Aug 07 10:21:20][d0]   DEBUG OBIS_CODE byte . hex= 2E
[Aug 07 10:21:20][d0]   DEBUG OBIS_CODE byte 1 hex= 31
[Aug 07 10:21:20][d0]   DEBUG OBIS_CODE byte ( hex= 28
[Aug 07 10:21:21][d0]   Parsed reading (OBIS code=C.2.1, value=00-01-01
00:00, unit=)
Segmentation fault


vermutlich, weil der Zähler irgendeine Zeichen sendet, die der Parser
nicht kennt.

lg
Michael

> 
> also es funktioniert nun sowohl mit dem ISKRAemeco MT174 als auch dem
> Siemens TD3511. Anbei findet ihr den Patch. Ich hab versucht sowenig
> Änderungen zu machen wie es geht. Hier nochmal die Zusammenfassungen:
> 
> 1) Das Device wird im blocking mode geöffnet. Das führte bei mir dazu,
> dass die read() Funktion mit 0 zurückkehrt. Das heißt normalerweise ein
> eof oder derartiges. Sowas sollte bei einem seriellen Device niemals
> passieren. Ich weiß auch nicht warum das der Fall ist.
> 
> -> Ich hab den Code dahingehend geändert, dass das Device im
> non-blocking mode geöffnet wird. Damit funktioniert's nun.
> 
> 2) Die Statemachine sollte niemals unendlich warten und irgendwo hängen
> bleiben.
> 
> -> Ich hab ein Timeout von 10s eingebaut. Also wenn innerhalb 10s keine
> Daten empfangen werden bzw. beim Start kein Sync-byte kommt, wird dieser
> Lesevorgang abgebrochen.
> 
> 3) Die Statemaching wird immer beim Empfang eines '/' zurückgesetzt. Da
> mein Zähler ein '/' im Identification String sendet, hängt sich die
> Statemachine auf.
> 
> -> Das habe ich rausgenommen.
> 
> 4) Mein Zähler sendet ca. 330 obis-codes. Da ist dann sowas dabei wie
> 2.8.1*16, 2.8.1*15 usw. Ich interessiere mich eigentlich nur für die
> Einträge von 2.8.0. Das ist insofern ein Problem, dass der D0-Meter nur
> maximal 32 Einträge zulässt. Das heißt bis die interessanten codes
> ankommen, sind die 32 Einträge schon längst belegt.
> 
> -> Ich filtere jetzt nur noch obis-codes heraus die ein value und eine
> Einheit besitzen. Damit kommen bei meinem Zähler genau 32 zusammen.
> 
> 5) Der Zähler sendet ungültige Obis-Codes. Zumindest ist der string für
> die Klasse Obis.cpp nicht auswertbar. Das führt dazu, dass vzlogger
> abstürzt. Vermutlich sind es die obis-codes die unter anderem Buchstaben
> statt Zahlen haben.
> 
> -> Ich hab die Stellen mit einem try-except Block abgefangen und
> überspringe die betroffenen obis-codes.
> 
> 6) Fehler beim Setzen der Parity
> 
> -> Das hab ich korrigiert.
> 
> 
> 
> Weiterhin habe ich mal die Ausgaben der beiden Zähler angehangen, mit
> denen das getestet wurde.
> 
> Gruß
> Sebastian



More information about the volkszaehler-dev mailing list