Guten Morgen,

besten Dank für das Diff.
Werde es gleich bei mir probieren - hatte auch immer die gleichen Probleme. Damit wird mein Logger auch stabiler rennen ;-)

merci


Am 12.12.13 07:35, schrieb Sebastian Michel:
Hallo Zusammen,

ich habe bei mir einen opt. USB-Lesekopf von Udo in Verbindung mit einem Siemens TD-3511 am Laufen. Das ganze hängt an einem raspberry pi mit image von volkszähler.

Leider lief es nicht so problemlos wie erhofft. Der vzlogger hat zwar die pullseq geschickt, aber dann keine Daten empfangen. Ich hab mir dann die Quellen vom vzlogger angeschaut und folgende Änderungen in MeterD0.cpp gemacht, dass es läuft:

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.

-> Das ist vielleicht nicht ganz sauber, aber ich nehme nur obis-codes an die eine Länge von genau 5 bytes haben. 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.

Alles in allem freue ich mich, dass es nun funktioniert. Die Änderungen habe ich als Diff mal angehangen.

Viele Grüße
Sebastian

Antwort per Email an