[vz-dev] Siemens TD3511 mit Protokoll D0

Sebastian Michel Sebastian_Michel at gmx.de
Thu Dec 12 17:39:06 CET 2013


Hallo,

ich bin es nochmal. Ich hab ein sleep in der Schleife vergessen. Der 
vzlogger funktioniert im Prinzip, aber ohne das sleep hat er 100% 
CPU-Auslastung.

Anbei mal eine berichtigte Version.

Gruß
Sebastian


Am 2013-12-12 07:41, schrieb Michael Wulz:
> 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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: vzlogger_d0.diff
Type: text/x-diff
Size: 5200 bytes
Desc: not available
URL: <http://demo.volkszaehler.org/pipermail/volkszaehler-dev/attachments/20131212/a3b12675/attachment.diff>


More information about the volkszaehler-dev mailing list