[vz-dev] sml - aggregation oder interval?

Thorben Thuermer r00t at constancy.org
Tue Feb 18 23:44:23 CET 2014


On Tue, 18 Feb 2014 21:29:46 +0100
Michael Baer <mibaer at web.de> wrote:
> Kann / könnte man in der vzlogger.conf bei 
> "protocol" : "sml", 
> anstatt "aggregation" nicht auch "interval" nehmen?
>
> Weniger Daten lesen und auswerten - vor allem auf dem PI!
> 
> Ein kurzer Versuch hat keine Fehlermeldung aber auch keine Daten in 
> der DB gebracht.
>
> Ist das überhaupt so vorgesehen oder kann das gar nicht funktionieren?


der "interval" wert hat nicht die bedeuting die du vermutest,
und ist nur bei sehr wenigen metern direkt sinnvoll,
und zwar diesen die als "periodic" definiert sind,
siehe die METER_DETAIL() eintraege in vzlogger/src/Meter.cpp
das "random" meter erzeugt zB alle "interval"-sekunden einen zufallswert.

es koennte sein, das die einstellung bei verwendung einer pull-sequenz funktioniert,
aber wenn der zaehler von sich aus daten sendet, duerfte vzlogger diese auch alle
verarbeiten (wenn keine aggregation aktiviert ist).

wenn du dir den code anschaust, ist die verwendung recht uebersichtlich:
[vzlogger]$ grep -rB1 -- -\>interval . | grep -v ://
./src/local.cpp:          json_object_object_add(json_ch, "interval", json_object_new_int(mapping->meter()->interval()));
./src/MeterMap.cpp:       if (meter_get_details(_meter->protocolId())->periodic && options.local()) {
./src/MeterMap.cpp:           (*it)->buffer()->keep(ceil(options.buffer_length() / (double) _meter->interval()));
./src/threads.cpp:        if (options.local()) {
./src/threads.cpp:            (*ch)->buffer()->keep((mtr->interval() > 0) ? ceil(options.buffer_length() / mtr->interval()) : 0);
./src/threads.cpp:         if (mtr->interval() > 0) {
./src/threads.cpp:              print(log_info, "Next reading in %i seconds", mtr->name(), mtr->interval());
./src/threads.cpp:              sleep(mtr->interval());

prinzipiell wird nur in threads.cpp zwischen den aufrufen von meter->read
jeweils eine pause fuer 'interval' sekunden eingelegt.
das macht halt nur bei wenigen meter-typen sinn
(halt zB das random-meter, das bei jedem aufruf einen zufallswert liefert).

ich kann im code auch nicht direkt erkennen, wie das dann mit der
aggregation interagiert.

wenn dein zaehler staendig daten sendet, wird in der wartezeit vermutlich
der lesepuffer vollaufen, und dann umgueltige daten ankommen, weil
zwischendurch bytes verlorengehen.
(das koennte erklaeren, warum dann garnichts geloggt wird,
 ist aber nur eine vermutung.)

> Auszug vzlogger.conf:
> "meters" : [{
>          "protocol" : "sml",
>          "interval" : 60,
> 
> vzlogger.log:  
> [Feb 18 20:53:03][mtr0] Next reading in 60 seconds


> Gruss,
> 	Michael

- Thorben


More information about the volkszaehler-dev mailing list