[vz-dev] *** GMX Spamverdacht *** Re: Segmentation Fault - vzlogger - Landis&Gyr D0

Michael Wulz michael.wulz at gmail.com
Wed Sep 3 17:22:23 CEST 2014


Am 03.09.14 17:20, schrieb Karlheinz:
> Hallo,
Hallo Karlheinz,

> in den C.*-Codes können Spannungsfehler aufgedeckt werden und wird von
> einigen Usern mitgeloggt. Bitte nicht ausschalten.
danke für die Info. Sollte dann aber angepasst werden.

Ich kann wiegesagt die Infos vom Landis Zähler mit Daten-Dumps liefern.

Anpassen kann ich's leider nicht dazu fehlt mir die C++ Praxis.

lg
Michael

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



More information about the volkszaehler-dev mailing list