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

Andreas Goetz cpuidle at gmail.com
Wed Sep 3 17:29:42 CEST 2014


Männers,

2014-09-03 17:22 GMT+02:00 Michael Wulz <michael.wulz at gmail.com>:

> 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.
>

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...


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

Ich auch nicht, insofern in jedem Fall 4-Augen-Prinzip...


> lg
> Michael
>

Viele Grüße,
Andreas


>
> > 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
> >>>>
> >>
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://demo.volkszaehler.org/pipermail/volkszaehler-dev/attachments/20140903/9db6aabf/attachment-0001.html>


More information about the volkszaehler-dev mailing list