<div dir="auto">Hallo Thomas,<div dir="auto"><br></div><div dir="auto">welche Länge haben deine Impulse? Hast du mal mit debounce_delay gespielt? Wenn nicht explizit konfiguriert, nimmt vzlogger IMHO 30ms als Default.</div><div dir="auto"><br></div><div dir="auto">Dass es da ein grundsätzlich Problem gibt, mag ich noch nicht recht glauben, denn mit S0-Stromzählern, für die die Funktion ursprünglich gedacht war, funktioniert das seit Jahren, ohne das derartige Messfehler berichtet werden. Und die bouncen auch nicht...</div><div dir="auto"><br></div><div dir="auto">Viele Grüße</div><div dir="auto">Frank</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Thomas Gentsch <<a href="mailto:tg@e-tge.de" target="_blank" rel="noreferrer">tg@e-tge.de</a>> schrieb am Sa., 25. Apr. 2020, 21:30:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
Hallo allerseits,<br>
ich hab seit einer Weile den VZ laufen plus einem separaten vzlogger, der im Moment u.a. 2x Gas (per Reed-Kontakte) und 1x H20 (aehnlich dem hier:<br>
 <a href="https://wiki.volkszaehler.org/hardware/controllers/ferrariszaehler_lesekopf_rpi_gpio" rel="noreferrer noreferrer noreferrer" target="_blank">https://wiki.volkszaehler.org/hardware/controllers/ferrariszaehler_lesekopf_rpi_gpio</a><br>
bloss eben auf die kleine Drehscheibe im Wasserzaehler angewendet) misst.<br>
<br>
Die Gas-Zaehler sind recht zuverlaessig, aber Wasser stimmt gar nicht. Ich hab eine Weile gebraucht, glaube aber, das Problem verstanden zu haben.<br>
<br>
Es zuwenig gezaehlt, was m.A. daher kommt, weil in MeterS0::HWIF_GPIO::waitForImpulse() bereits Werte gelesen werden:<br>
 - MeterS0::counter_thread ruft in der Endlosschleife waitForImpulse()<br>
 - waitForImpulse() pollt den FD und (im Moment), wenn etwas da, liest von dort + return true<br>
 - counter_thread merkt, es gibt was zu lesen u liest in status() selbst nochmal - jetzt ist aber schon nichts mehr da und der Impuls ist verloren<br>
 - wenn man noch etwas logging einbaut, sieht das dann so aus:<br>
[Apr 08 11:31:07][S0]   MeterS0:HWIF_GPIO:first poll returned 1 for GPIO 18 (FD 6, PRI: 2)<br>
[Apr 08 11:31:07][S0]   MeterS0:HWIF_GPIO:wait: read on FD 6 ok: 1<br>
[Apr 08 11:31:07][S0]   MeterS0:counter_thread has value (timed out: 0)<br>
[Apr 08 11:31:07][S0]   MeterS0:HWIF_GPIO:status: read on FD 6 ok: 0<br>
<br>
Bei den Gaszaehlern faellt das nicht auf, weil die Reed-Kontakte bouncen und in MeterS0:HWIF_GPIO:status() kann nochmal erfolgreich gelesen werden.<br>
Ich hab jetzt mal das pread() in MeterS0::HWIF_GPIO::waitForImpulse() ausgebaut, scheint OK.<br>
<br>
*** Jetzt die Frage: Warum ist das so? Verstehe ich das nur nicht richtig? Sieht jemand Probleme mit meiner Aenderung?<br>
<br>
1000 Dank!!<br>
  Thomas<br>
<br>
-- <br>
 ........................................................<br>
 Thomas Gentsch<br>
 e-mail: <a href="mailto:tg@e-tge.de" rel="noreferrer noreferrer" target="_blank">tg@e-tge.de</a><br>
 ........................................................<br>
</blockquote></div>