[vz-users] vzlogger s0 protocol + aggtime funktioniertsporadisch nicht wie erwartet

Matthias Behr mbehr at mcbehr.de
Sun Dec 18 22:58:16 CET 2016


Hallo,

das Problem tritt mit den nicht blockierenden S0 Zähler nicht auf. Ich habe über die Problematik auch länge nachgedacht, aber kam zu dem Entschluss, nicht Aggmode zu ändern, sondern auf nicht blockierende Zähler umzustellen (z.B. per gpio mit sendzero).
Dann bekommst du ziemlich genaue Daten und es skaliert viel besser für hochfrequente (bis paar hundert kHz) Signale.

> Am 18.12.2016 um 21:38 schrieb <mail at claus-beckenbauer.de> <mail at claus-beckenbauer.de>:
> 
> Hallo Zusammen,
>  
> hier eine kurzer Auszug aus dem LogFile, der das Verhalten belegt und auch erklärt. Ich bin mir nur nicht sicher ob es ein Bug oder doch en Feature ist. Zur Erinnerung: aggtime ist auf 180 Sekunden konfiguriert.
>  
> $ cat vzlogger.log | grep RESULT
> [Dec 18 16:18:18][SUM]  RESULT 1.000000 @ 1482074297367
> [Dec 18 16:26:24][SUM]  RESULT 1.000000 @ 1482074784160
> [Dec 18 16:34:30][SUM]  RESULT 1.000000 @ 1482075269620
> [Dec 18 16:42:44][SUM]  RESULT 1.000000 @ 1482075763855
> [Dec 18 16:50:54][SUM]  RESULT 1.000000 @ 1482076253440
> [Dec 18 16:59:04][SUM]  RESULT 1.000000 @ 1482076743708
> [Dec 18 17:07:11][SUM]  RESULT 1.000000 @ 1482077230993
> [Dec 18 17:15:14][SUM]  RESULT 1.000000 @ 1482077713184
> [Dec 18 17:23:16][SUM]  RESULT 1.000000 @ 1482078195362
> [Dec 18 17:30:23][SUM]  RESULT 1.000000 @ 1482078623062
> [Dec 18 17:31:23][SUM]  RESULT 1.000000 @ 1482078682365
> [Dec 18 17:32:12][SUM]  RESULT 1.000000 @ 1482078731995
> [Dec 18 17:33:38][SUM]  RESULT 1.000000 @ 1482078817905
> [Dec 18 17:35:01][SUM]  RESULT 1.000000 @ 1482078901141
> [Dec 18 17:35:57][SUM]  RESULT 1.000000 @ 1482078957060
> [Dec 18 17:36:36][SUM]  RESULT 1.000000 @ 1482078995379
> [Dec 18 17:37:07][SUM]  RESULT 1.000000 @ 1482079026684
> [Dec 18 17:38:05][SUM]  RESULT 1.000000 @ 1482079084316
> [Dec 18 17:38:55][SUM]  RESULT 1.000000 @ 1482079134720
> [Dec 18 17:39:44][SUM]  RESULT 1.000000 @ 1482079183307
> [Dec 18 17:40:27][SUM]  RESULT 1.000000 @ 1482079226809
> [Dec 18 17:41:11][SUM]  RESULT 1.000000 @ 1482079271028
> [Dec 18 17:41:53][SUM]  RESULT 1.000000 @ 1482079312363
> [Dec 18 17:42:31][SUM]  RESULT 1.000000 @ 1482079351137
> [Dec 18 17:43:10][SUM]  RESULT 1.000000 @ 1482079389844
> [Dec 18 17:43:50][SUM]  RESULT 1.000000 @ 1482079430045
> [Dec 18 17:44:30][SUM]  RESULT 1.000000 @ 1482079470132
> [Dec 18 17:45:10][SUM]  RESULT 1.000000 @ 1482079509486
> [Dec 18 17:45:49][SUM]  RESULT 1.000000 @ 1482079548973
> [Dec 18 17:46:29][SUM]  RESULT 1.000000 @ 1482079588680
> [Dec 18 17:47:09][SUM]  RESULT 1.000000 @ 1482079628743
> [Dec 18 17:47:50][SUM]  RESULT 1.000000 @ 1482079669334
> [Dec 18 17:48:34][SUM]  RESULT 1.000000 @ 1482079713419
> [Dec 18 17:49:19][SUM]  RESULT 1.000000 @ 1482079758291
> [Dec 18 17:50:02][SUM]  RESULT 1.000000 @ 1482079801734
> [Dec 18 17:50:45][SUM]  RESULT 1.000000 @ 1482079844569
> [Dec 18 17:51:28][SUM]  RESULT 1.000000 @ 1482079887909
> [Dec 18 17:52:11][SUM]  RESULT 1.000000 @ 1482079931165
> [Dec 18 17:52:54][SUM]  RESULT 1.000000 @ 1482079973669
> [Dec 18 17:53:38][SUM]  RESULT 1.000000 @ 1482080017676
> [Dec 18 17:56:18][SUM]  RESULT 3.000000 @ 1482080177836
> [Dec 18 17:59:27][SUM]  RESULT 3.000000 @ 1482080366835
> [Dec 18 18:02:54][SUM]  RESULT 3.000000 @ 1482080573948
> [Dec 18 18:05:13][SUM]  RESULT 2.000000 @ 1482080712362
> [Dec 18 18:08:41][SUM]  RESULT 3.000000 @ 1482080920902
>  
> Aus dem Log wird ersichtlich, dass die gehäuften Logeinträge immer dann Zustande kommen, wenn die Last von weniger als ein S0 Impuls innerhalb von 180 s auf mind. 1 S0 Impuls innerhalb von 180 s steigt.
>  
> Nach einem Blick in die Sourcen von vzlogger, insb. threads.cpp ist das Verhalten auch erklärbar. Ob das so gewollt ist, kann der Entwickler beurteilen. Für mich kam es erst einmal überraschend.
>  
> Die verantwortliche Stelle im Code stammt aus der Funktion reading_thread().
>  
>         aggIntEnd = time(NULL);
>         do { /* start thread main loop */
>             aggIntEnd += mtr->aggtime(); /* end of this aggregation period */
>             do { /* aggregate loop */
>                 /* fetch readings from meter and calculate delta */
>                 n = mtr->read(rds, details->max_readings); // blocking call bei S0 Protokol
>  
>                 // nicht relevanter Code gelöscht
>  
>             } while((mtr->aggtime() > 0) && (time(NULL) < aggIntEnd)); /* default aggtime is -1 */
>  
> Ein Blick in mein angehängtes Logfile zeigt, dass mtr->read in Situation mit sehr wenig Last deutlich länger als die konfigurierte aggtime blockiert (teilweise bis zu 15 Minuten).
> Das führt nun dazu, dass aggIntEnd sehr weit in der Vergangenheit liegt. Die nächste Berechnung von aggIntEnd += mtr->aggtime() führt zu einem Wert, der immer noch weit in der Vergangenheit liegt, womit die Abbruchbedingung der Aggregation loop weiterhin erfüllt ist.
>  
> Ist dieses Verhalten absichtlich so implementiert? Immerhin hat man dadurch über den kompletten Messzeitraum durchschnittlich immer einen Wert innerhalt von aggtime.
>  
> Ich hätte jetzt ehrlich gesagt eher sowas in der Art erwartet:
>  
> do {
>    aggIntEnd += mtr->aggtime(); /* end of this aggregation period */
> } while(aggIntEnd <= time(NULL)); /* aggIntEnd has to be in the future */
>  
> Viele Grüße,
> Claus
>  
>  
> Von: Claus Beckenbauer <mailto:mail at claus-beckenbauer.de>
> Gesendet: Sonntag, 18. Dezember 2016 11:15
> An: volkszaehler.org - users <mailto:volkszaehler-users at demo.volkszaehler.org>; Jens <mailto:panterglas at web.de>; volkszaehler-users <mailto:volkszaehler-users at demo.volkszaehler.org>
> Betreff: Re: [vz-users] vzlogger s0 protocol + aggtime funktioniertsporadisch nicht wie erwartet
>  
> Das mit dem Lastwechsel würde ich eher auf kurze Lastspitzen reduzieren.
> Bei mir läuft das ganze auf nem RaspberryPi.
> Ich generiere jetzt mal ein Log File und poste es hier.
> 
> 
> Am 18. Dezember 2016 10:40:10 MEZ, schrieb Jens <panterglas at web.de>:
> Hallo Claus,
>  
> das Problem habe ich auch. Es tritt bei mir nur bei S0 Zähler auf und am Anfang eines Lastwechsels, z.B. wenn die Wärmepumpe einschaltet. Nach eine weile arbeitet blogger dann wie er soll.
>  
> Würde gerne helfen, das Problem zu lösen, weiß aber nicht so recht was ich machen soll um den Experten zu helfen.
>  
> Viele Grüße Jens
>  
> 
> Am 18.12.2016 um 09:38 schrieb Daniel Lauckner <vz at jahp.de <mailto:vz at jahp.de>>:
>  
> Hallo Claus,
> 
> 
> am Samstag, 17. Dezember 2016 um 19:39 hast du geschrieben:
> 
> Ich hätte jetzt erwartet, dass vzlogger maximal alle 180 Sekunden
> einen Wert in die DB einträgt. Meistens funktioniert das auch. 
> [...]
> 
> Sporadisch kommt es jedoch vor, dass Werte häufiger eingetragen
> werden.
> 
> 
> Kann sich das jemand erklären?
> 
> Erklärung hab ich keine. Ein Logfile mit verbosity 15 und eine grobe
> Richtung wie oft das auftritt wäre hilfreich.
> 
> 
> mfg Daniel
> 
>  
> 
> -- 
> Diese Nachricht wurde von meinem Android-Mobiltelefon mit K-9 Mail gesendet.

Gruß

Matthias

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://demo.volkszaehler.org/pipermail/volkszaehler-users/attachments/20161218/576a9e2a/attachment-0001.html>


More information about the volkszaehler-users mailing list