<div dir="ltr">Männers,<div class="gmail_extra"><br><div class="gmail_quote">2014-09-03 17:22 GMT+02:00 Michael Wulz <span dir="ltr"><<a href="mailto:michael.wulz@gmail.com" target="_blank">michael.wulz@gmail.com</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Am 03.09.14 17:20, schrieb Karlheinz:<br>
> Hallo,<br>
Hallo Karlheinz,<br>
<div class=""><br>
> in den C.*-Codes können Spannungsfehler aufgedeckt werden und wird von<br>
> einigen Usern mitgeloggt. Bitte nicht ausschalten.<br>
</div>danke für die Info. Sollte dann aber angepasst werden.<br>
<br>
Ich kann wiegesagt die Infos vom Landis Zähler mit Daten-Dumps liefern.<br></blockquote><div><br></div><div>Gibts denn irgendeine Möglichkeit die Dumps an den Logger zu verfüttern? Dann könnte ich das in unsere Testsuite bei travis-ci mit einbauen, das wäre _richtig_ sexy...<br>
 <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Anpassen kann ich's leider nicht dazu fehlt mir die C++ Praxis.<br></blockquote><div><br></div><div>Ich auch nicht, insofern in jedem Fall 4-Augen-Prinzip...<br> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

lg<br>
<span class="HOEnZb"><font color="#888888">Michael<br></font></span></blockquote><div><br></div><div>Viele Grüße,<br>Andreas<br> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class="HOEnZb"><font color="#888888">
</font></span><div class="HOEnZb"><div class="h5"><br>
> Gruß<br>
> Karlheinz<br>
><br>
><br>
> ------- Original Nachricht --------<br>
> Betreff: *** GMX Spamverdacht *** Re: [vz-dev] Segmentation Fault -<br>
> vzlogger - Landis&Gyr D0<br>
> Von: Michael Wulz <<a href="mailto:michael.wulz@gmail.com">michael.wulz@gmail.com</a>><br>
> An: <a href="mailto:volkszaehler-dev@demo.volkszaehler.org">volkszaehler-dev@demo.volkszaehler.org</a><br>
> Datum: Dienstag, 2. September 2014 11:17:41<br>
><br>
>> Hallo,<br>
>><br>
>> so bin schon wieder...<br>
>><br>
>> Ich hab eine Lösung für mein Problem gefunden:<br>
>><br>
>> aus der IF hab ich ||(obis_code[0]=='C') rausgenommen.<br>
>><br>
>> die OBIS Codes mit C-beginnend interessieren mich in diesem Falle nicht.<br>
>> Nun parst er auch die C.xxx.xxx Werte nicht und läuft in meinem Falle<br>
>> nun auch brav!<br>
>><br>
>> Die Frage ist, ob evenutell der Parser selber angepasst werden kann<br>
>> sodass er auch:<br>
>><br>
>> OBIS code=C.2.1, value=00-01-01 00:00<br>
>> OBIS code=C.90.1, value=AAAAAAA<br>
>><br>
>> verarbeiten kann, denke nämlich dass er hier bei einen von den beiden<br>
>> hängen segfaulted.<br>
>><br>
>> grüße<br>
>> Michael<br>
>><br>
>> Am 01.09.14 23:01, schrieb Reinhard Wilzeck:<br>
>>> Hallo Michael,<br>
>>> tatsächlich hatte ich in dem Bereich Probleme mit dem Parser.<br>
>>> (Daher auch die ausführlichen log ausgaben)<br>
>>> Da waren es aber der STX (hex 02) u.ä. der aber vorher abgefangen wird.<br>
>>> Auch wird der Parser nur für codes gefragt die mit 1,2 oder C beginnen.<br>
>>><br>
>>><br>
>>> 1. In diesem Fall verwirrt mich, dass der Parser noch gearbeitet hat und<br>
>>> es erst beim nächsten lesen  der Fehler kommt  (vielleicht aber auch<br>
>>> Zufall ,das die letzte log zeile nicht mehr ausgegeben wird).<br>
>>> "<br>
>>><br>
>>> [Sep 01 12:36:16][d0]   Parsed reading (OBIS code=2.8.1*02,<br>
>>> value=000000.0, unit=)<br>
>>> [Sep 01 12:36:17][d0]   DEBUG OBIS_CODE byte<br>
>>>  hex= A<br>
>>> Segmentation fault<br>
>>><br>
>>> "<br>
>>> In dem branch vzlogger-master scheint mir aber noch eine Schwäche zu sein.<br>
>>> "<br>
>>>             case END_LINE:<br>
>>>                 if (byte == '\r' || byte == '\n') {<br>
>>>                     /* free slots available and sain content? */<br>
>>> *                    if ((number_of_tuples < max_readings) &&<br>
>>> (strlen(obis_code) > 0) && **<br>
>>> *                           *(strlen(value) > 0)*) {<br>
>>>                         print(log_debug, "Parsed reading (OBIS code=%s,<br>
>>> value=%s, unit=%s)", name().c_str(), obis_code, value, unit);<br>
>>>                         rds[number_of_tuples].value(strtod(value, NULL));<br>
>>>                     *    if<br>
>>> ((obis_code[0]=='1')||(obis_code[0]=='2')||(obis_code[0]=='C')) {*<br>
>>>                             /*print(log_debug, "DEBUG END_LINE Obis code<br>
>>> = %s value %s ",name().c_str(), obis_code, value);*/<br>
>>>                             Obis obis(obis_code);<br>
>>>                             ReadingIdentifier *rid(new<br>
>>> ObisIdentifier(obis));<br>
>>>                             rds[number_of_tuples].identifier(rid);<br>
>>>                             rds[number_of_tuples].time();<br>
>>>                             byte_iterator = 0;<br>
>>>                             number_of_tuples++;<br>
>>>                         }<br>
>>>                     }<br>
>>>                     context = OBIS_CODE;<br>
>>>                 }<br>
>>>                 break;<br>
>>> "<br>
>>> Das heißt: egal wie die beiden inneren IF ausgehen: der Context wird auf<br>
>>> OBIS_CODE gesetzt. Die folge ist, das wahrscheinlich der byte_iterator<br>
>>> nicht auf 0 geschrieben wird. Also haben wir dort eine Überschreitung<br>
>>> der Array grenzen, wenn z.B.  *number_of_tuples = max_readings* erreicht<br>
>>> wird.<br>
>>> Korrektur Vorschlag:<br>
>>> ...<br>
>>>                     }<br>
>>>                     byte_iterator = 0;<br>
>>>                     context = OBIS_CODE;<br>
>>>                 }<br>
>>><br>
>>><br>
>>> 2) Zum testen mal den parser auskommentieren. Damit kannst Du<br>
>>> ausschliessen, dass es der Parser ist.<br>
>>>   /*                         Obis obis(obis_code);<br>
>>>                             ReadingIdentifier *rid(new<br>
>>> ObisIdentifier(obis));<br>
>>>                             rds[number_of_tuples].identifier(rid);<br>
>>>                             rds[number_of_tuples].time();<br>
>>>  */<br>
>>><br>
>>>  Gruß<br>
>>>     Reinhard<br>
>>> Am 01.09.2014 14:40, schrieb Michael Wulz:<br>
>>>> Hallo Leute,<br>
>>>><br>
>>>> mein neuer Vzlogger:<br>
>>>><br>
>>>> root@raspberrypi:~# vzlogger --version<br>
>>>> 0.3.6<br>
>>>><br>
>>>> macht einen Segmentation Fault beim parsen der OID's.<br>
>>>><br>
>>>> Meine Config:<br>
>>>> {<br>
>>>> "retry" : 30,                      /* how long to sleep between failed<br>
>>>> requests, in seconds */<br>
>>>> "daemon": false,                    /* run periodically */<br>
>>>> "foreground" : true,              /* run in background */<br>
>>>> "verbosity" : 9999,                   /* between 0 and 9999, je höher<br>
>>>> desto mehr Infos */<br>
>>>> "log" : "/var/log/vzlogger.log",   /* path to logfile, optional */<br>
>>>><br>
>>>> "local" : {<br>
>>>>         "enabled" : false,      /* local HTTPd for serving live<br>
>>>> readings, 'false' für Daten an die middleware !!! */<br>
>>>>         "port" : 80,            /* the TCP port for the local HTTPd */<br>
>>>>         "index" : true,         /* should we provide a index listing of<br>
>>>> available channels if no UUID was requested? */<br>
>>>>         "timeout" : 30,         /* timeout for long polling comet<br>
>>>> requests, 0 disables comet, in seconds */<br>
>>>>         "buffer" : 600          /* how long to buffer readings for the<br>
>>>> local interface, in seconds */<br>
>>>>           },<br>
>>>><br>
>>>> "meters" : [{                           /* Beispiel-Meter */<br>
>>>>         "enabled" : true,               /* disabled meters will be<br>
>>>> ignored (default) */<br>
>>>>         "protocol" : "d0",              /* see 'vzlogger -h' for list of<br>
>>>> available protocols */<br>
>>>>         "device" : "/dev/ttyUSB0",<br>
>>>>         "parity" : "7E1",               /* oder 8N1  */<br>
>>>>         "baudrate" : 300,              /* oder 300  */<br>
>>>>         "pullseq" : "2f3f210d0a",<br>
>>>>         "interval" : 500,<br>
>>>>           "interval": 6,                                   /* Wartezeit<br>
>>>> in Sekunden bis neue Werte in die middleware übertragen werden */<br>
>>>>            "channel": {                                   /*<br>
>>>> Beispiel-channel */<br>
>>>>                                  "uuid" :<br>
>>>> "a02ea060-1e18-11e4-a178-5be9227ad291",<br>
>>>>                                  "middleware" :<br>
>>>> "<a href="http://127.0.0.1/middleware.php" target="_blank">http://127.0.0.1/middleware.php</a>",<br>
>>>>                                  "identifier" : "1-0:1.8.1" /* alias for<br>
>>>> '1-0:1.8.1', see 'vzlogger -h' for list of available aliases */<br>
>>>>                               }<br>
>>>>                    }]<br>
>>>> }<br>
>>>><br>
>>>> der Output vom vzlogger:<br>
>>>> [Sep 01 12:35:41][mtr0] Creating new meter with protocol d0.<br>
>>>> [Sep 01 12:35:41][d0]   pullseq len:5 found<br>
>>>> [Sep 01 12:35:41][mtr0] Meter configured. enabled<br>
>>>> [Sep 01 12:35:41]       New meter initialized (protocol=d0)<br>
>>>> [Sep 01 12:35:41]       Configure channel.<br>
>>>> [Sep 01 12:35:41][chn0] New channel initialized (uuid=...7ad291<br>
>>>> protocol=volkszaehler id=1-0:1.8.1)<br>
>>>> [Sep 01 12:35:41]       Have 1 meters.<br>
>>>> [Sep 01 12:35:41][main] foreground=1, daemon=0, local=0<br>
>>>> [Sep 01 12:35:41]       NOT Daemonize process...<br>
>>>> [Sep 01 12:35:41]       Opened logfile /var/log/vzlogger.log<br>
>>>> [Sep 01 12:35:41][]     ===> Start meters.<br>
>>>> [Sep 01 12:35:41][mtr0] Meter connection established<br>
>>>> [Sep 01 12:35:41][mtr0] Meter thread started<br>
>>>> [Sep 01 12:35:41][mtr0] meter is opened. Start channels.<br>
>>>> [Sep 01 12:35:41][chn0] Logging thread started<br>
>>>> [Sep 01 12:35:41][]     Startup done.<br>
>>>> [Sep 01 12:35:41][chn0] Start logging thread for volkszaehler-api.<br>
>>>> Running as daemon: no<br>
>>>> [Sep 01 12:35:41][chn0] Using default api:<br>
>>>> [Sep 01 12:35:41][mtr0] Number of readers: 32<br>
>>>> [Sep 01 12:35:41][mtr0] Config.daemon: 0<br>
>>>> [Sep 01 12:35:41][mtr0] Config.local: 0<br>
>>>> [Sep 01 12:35:41][d0]   sending pullsequenz send (len:5 is:5).<br>
>>>> [Sep 01 12:35:42][d0]   Pull answer (vendor=LGZ, baudrate=5,<br>
>>>> identification=\2ZMD3102400.B14)<br>
>>>> [Sep 01 12:35:44][d0]   DEBUG OBIS_CODE byte ^B hex= 2<br>
>>>> [Sep 01 12:35:44][d0]   DEBUG OBIS_CODE byte F hex= 46<br>
>>>> [Sep 01 12:35:44][d0]   DEBUG OBIS_CODE byte . hex= 2E<br>
>>>> [Sep 01 12:35:44][d0]   DEBUG OBIS_CODE byte F hex= 46<br>
>>>> [Sep 01 12:35:44][d0]   DEBUG OBIS_CODE byte ( hex= 28<br>
>>>> [Sep 01 12:35:44][d0]   Parsed reading (OBIS code=F.F, value=02000000,<br>
>>>> unit=)<br>
>>>> [Sep 01 12:35:44][d0]   DEBUG OBIS_CODE byte<br>
>>>>  hex= A<br>
>>>> [Sep 01 12:35:44][d0]   DEBUG OBIS_CODE byte 0 hex= 30<br>
>>>> [Sep 01 12:35:44][d0]   DEBUG OBIS_CODE byte . hex= 2E<br>
>>>> [Sep 01 12:35:44][d0]   DEBUG OBIS_CODE byte 0 hex= 30<br>
>>>> [Sep 01 12:35:44][d0]   DEBUG OBIS_CODE byte . hex= 2E<br>
>>>> [Sep 01 12:35:44][d0]   DEBUG OBIS_CODE byte 0 hex= 30<br>
>>>> [Sep 01 12:35:44][d0]   DEBUG OBIS_CODE byte ( hex= 28<br>
>>>> [Sep 01 12:35:45][d0]   Parsed reading (OBIS code=0.0.0, value=11111111,<br>
>>>> unit=)<br>
>>>> [Sep 01 12:35:45][d0]   DEBUG OBIS_CODE byte<br>
>>>>  hex= A<br>
>>>><br>
>>>> [....]<br>
>>>><br>
>>>> [Sep 01 12:36:14][d0]   DEBUG OBIS_CODE byte 2 hex= 32<br>
>>>> [Sep 01 12:36:15][d0]   DEBUG OBIS_CODE byte . hex= 2E<br>
>>>> [Sep 01 12:36:15][d0]   DEBUG OBIS_CODE byte 8 hex= 38<br>
>>>> [Sep 01 12:36:15][d0]   DEBUG OBIS_CODE byte . hex= 2E<br>
>>>> [Sep 01 12:36:15][d0]   DEBUG OBIS_CODE byte 1 hex= 31<br>
>>>> [Sep 01 12:36:15][d0]   DEBUG OBIS_CODE byte * hex= 2A<br>
>>>> [Sep 01 12:36:15][d0]   DEBUG OBIS_CODE byte 1 hex= 31<br>
>>>> [Sep 01 12:36:15][d0]   DEBUG OBIS_CODE byte 0 hex= 30<br>
>>>> [Sep 01 12:36:15][d0]   DEBUG OBIS_CODE byte ( hex= 28<br>
>>>> [Sep 01 12:36:15][d0]   Parsed reading (OBIS code=2.8.1*10,<br>
>>>> value=000000.0, unit=)<br>
>>>> [Sep 01 12:36:15][d0]   DEBUG OBIS_CODE byte<br>
>>>>  hex= A<br>
>>>> [Sep 01 12:36:15][d0]   DEBUG OBIS_CODE byte 2 hex= 32<br>
>>>> [Sep 01 12:36:15][d0]   DEBUG OBIS_CODE byte . hex= 2E<br>
>>>> [Sep 01 12:36:15][d0]   DEBUG OBIS_CODE byte 8 hex= 38<br>
>>>> [Sep 01 12:36:15][d0]   DEBUG OBIS_CODE byte . hex= 2E<br>
>>>> [Sep 01 12:36:15][d0]   DEBUG OBIS_CODE byte 1 hex= 31<br>
>>>> [Sep 01 12:36:15][d0]   DEBUG OBIS_CODE byte * hex= 2A<br>
>>>> [Sep 01 12:36:15][d0]   DEBUG OBIS_CODE byte 0 hex= 30<br>
>>>> [Sep 01 12:36:15][d0]   DEBUG OBIS_CODE byte 9 hex= 39<br>
>>>> [Sep 01 12:36:15][d0]   DEBUG OBIS_CODE byte ( hex= 28<br>
>>>> [Sep 01 12:36:16][d0]   Parsed reading (OBIS code=2.8.1*09,<br>
>>>> value=000000.0, unit=)<br>
>>>> [Sep 01 12:36:16][d0]   DEBUG OBIS_CODE byte<br>
>>>>  hex= A<br>
>>>> [Sep 01 12:36:16][d0]   DEBUG OBIS_CODE byte 2 hex= 32<br>
>>>> [Sep 01 12:36:16][d0]   DEBUG OBIS_CODE byte . hex= 2E<br>
>>>> [Sep 01 12:36:16][d0]   DEBUG OBIS_CODE byte 8 hex= 38<br>
>>>> [Sep 01 12:36:16][d0]   DEBUG OBIS_CODE byte . hex= 2E<br>
>>>> [Sep 01 12:36:16][d0]   DEBUG OBIS_CODE byte 1 hex= 31<br>
>>>> [Sep 01 12:36:16][d0]   DEBUG OBIS_CODE byte * hex= 2A<br>
>>>> [Sep 01 12:36:16][d0]   DEBUG OBIS_CODE byte 0 hex= 30<br>
>>>> [Sep 01 12:36:16][d0]   DEBUG OBIS_CODE byte 2 hex= 32<br>
>>>> [Sep 01 12:36:16][d0]   DEBUG OBIS_CODE byte ( hex= 28<br>
>>>> [Sep 01 12:36:16][d0]   Parsed reading (OBIS code=2.8.1*02,<br>
>>>> value=000000.0, unit=)<br>
>>>> [Sep 01 12:36:17][d0]   DEBUG OBIS_CODE byte<br>
>>>>  hex= A<br>
>>>> Segmentation fault<br>
>>>><br>
>>>> Es scheint der Zähler nach dem Obis CODE: 2.8.1*02 irgendein Zeichen zu<br>
>>>> senden, dass den Parser abstürzen lässt.<br>
>>>><br>
>>>> Hat jemand von euch das Problem auch schonmal gehabt?<br>
>>>><br>
>>>> danke<br>
>>>> Michael<br>
>>>><br>
>><br>
><br>
<br>
</div></div></blockquote></div><br></div></div>