[vz-dev] Fragen zum Protokoll "s0" in vzlogger (Zusammenfassung)

Justin Otherguy justin at justinotherguy.org
Mon May 16 09:09:33 CEST 2016


Guten Morgen,

> Am 14.05.2016 um 12:49 schrieb Andreas Goetz <cpuidle at gmail.com>:
> 
>> 2016-05-14 8:05 GMT+02:00 Justin Otherguy <justin at justinotherguy.org>:
>> 
>> Jetzt, wo ich die „[AVG]“-Blöcke im Log entdeckt habe, habe ich mich doch mal auf die Suche nach der relevanten Gegend in vzlogger gemacht und ich würde mal hier hin deuten: https://github.com/volkszaehler/vzlogger/blob/master/src/Buffer.cpp#L80
> 
> Zitat aus dem Link:
> 
> // AVG needs to handle tuples with different distances properly:
>  // so we need to consider the last tuple from last aggregate call as well 
> // and use this value as the starting point. 
> // we assume buffer values are already sorted by time here! TODO: is this always true? 
> // otherwise a sort by time would be needed but this might conflict with _last_avg
> 
> AVG macht genau kein arithmetisches Mittel sondern ein gewichtetes Mittel. Dahinter steht die Annahme dass AVG _nur_ für Sensorwerte zum Einsatz kommt, also z.b. Leistung. Um von da bei nicht gleih verteilten Timestamps auf eine durchschnittliche Leistung zu kommen muss eben gewichtet werden.
> 
> Ich kenne keine Anwendungfall wo wir AVG mit der von Dir erwarteten Funktion brauchen.

ok, dann sind wir spätestens jetzt an der Stelle angekommen, an der (auch mir) klar ist:

- "protocol s0“ in vzlogger eignet sich nicht in Kombination mit „avg“
- richtig wäre „sum“, damit werden alle Impulse aufsummiert und dann nach aggtime geloggt

vorher war schon klar (hier der Übersicht Halber nochmal zusammen gefasst):
- „send_zero“ wird benötigt (zumindest derzeit, s. https://github.com/volkszaehler/vzlogger/issues/231)
- „interval“ sollte nicht verwendet werden in Kombination mit protocol s0 (s. https://github.com/volkszaehler/vzlogger/issues/253)
- bei „protocol s0“ arbeitet vzlogger so, dass er die gezählten Impulse jede Sekunde im log ausgibt (bei entsprechend hoher verbosity)
- sobald https://github.com/volkszaehler/vzlogger/issues/252 implementiert ist, kommt ein solches Setup auch ohne Impulsformer (http://wiki.volkszaehler.org/hardware/channels/meters/working_hours) aus - ein geschalteter Eingang aus: „Förderung läuft -> Spannung“; "Förderung läuft nicht -> keine Spannung“; geloggt wird dann nach aggtime (zB 10s) die aufsummierte Laufzeit
- der Identifier muss in diesem Fall „Impulse“ sein (s. https://github.com/volkszaehler/vzlogger/issues/255)

Die passende vzlogger.conf sieht so aus:

{
  "retry": 0,
  "daemon": true,
  "verbosity": 5,
  "log": „/tmp/vzlogger.log",
  "meters": [
    { //Pellet-Simulator
      "enabled": true,
      "allowskip": false,
      "aggtime": 10, // aggregate all signals and give one update to middleware every <aggtime> seconds
      "protocol": "s0",
      "device": "GPIO17",
      "gpio": 17,
      "gpio_dir": -1,
      "configureGPIO": true,
      "resolution": 1,
      "send_zero": true,
      "debounce_delay": 1,
      "nonblocking_delay": 100000,
      "channels": [
        {
          "uuid": <uuid>,
          "identifier": "Impulse",
          "api": "volkszaehler",
          "middleware": "http://demo.volkszaehler.org/middleware.php",
          "type": "device",
          "aggmode": „sum",
          "duplicates": 0
        }
      ]
    }
  ]
}

Nächster Halt: Middleware :)


Gruß J.



More information about the volkszaehler-dev mailing list