<div dir="ltr"><div><div><div><div>Hallo,<br><br></div>ich bin neu hier. Nachdem Udo mir schon ein paar Tipps gegeben hat, möchte ich mein aktuelles vzlogger-Problem hier schildern.<br><br>Ich möchte meinen Gaszähler über den eingebauten Magneten und einen Reed-Kontakt auslesen. Ich stehe vor der Herausforderung über
saubere Zählimpulse zu einer korrekten Zählung zu kommen. Die Auswertung soll über die HTTPd-Schnittstelle in Fhem erfolgen (keine Volkzaehler-Middleware und Frontend). Die optimale
Lösung habe ich noch nicht gefunden bzw. bin ich auf Ungereimtheiten im
vzlogger gestossen.<br></div><br></div>Ich hoffe, jemand hast den ein oder anderen Hinweis für mich.<br><br></div>Hier meine Überlegungen:<br><ul><li>Mein
Gaszähler liefert bei einer Umdrehung (entspricht 0,001 m³) einen Magnetimpuls. Für
eine Umdrehung werden vermutlich minimal ca. 20 Sekunden bei voller Leistung
benötigt.</li><li>Der Impuls erfolgt beim Nulldurchgang der 1000er-Nachkommastelle.</li><li>Der Reedkontakt prellt beim Schliessen und prellt beim Öffnen</li><li>Der Reedkontakt bleibt bei kontinuierlicher Abnahme je nach Leistung ca. 0,6 bis mehrere Sekunden geschlossen</li><li>Bleibt
der Gaszähler im Nulldurchgang stehen, kann der Reedkontakt über
Stunden und Tage geschlossen bleiben, solange, bis die Heizung wieder
startet.</li></ul><p>Um auch den letzten Fall im obigen Szenario
abzudecken, sieht meine Ideallösung so aus, dass jeweils beim Schliessen
und beim Öffnen ein Impuls registriert wird. Bei der Auswertung teile
ich später die Impulse durch 2. Mit dieser Regel sollte eine maximale
Ablesegenauigkeit erreicht werden.</p><p>Soweit zur Theorie. Zur Umsetzung:</p><ul><li>Der Reedkontakt ist direkt mit den S0-Eingängen der YPORT+_Erweiterung von Udo verbunden.</li><li>Die Signalerfassung erfolgt über vzlogger (v0.4.8) mit protocol S0 und identifier Impulse (komplette Config siehe unten).<br></li><li>Das Entprellen soll vzlogger mit dem Parameter debounce_delay erledigen.</li><li>Mit debounce_delay = 500 sollte nach meinem Verständnis das Entprellen unterdrückt werden.</li></ul><p>Das sind meine Testergebnisse mit meinem Testaufbau (aufgeführt sind immer nur die erzeugten Datentupel des HTTPd-Outputs):</p><p>
</p><p style="margin-left:18pt"><span style="font-family:Symbol"><span><span style="font:7pt "Times New Roman""></span></span></span>Entprellen mit debounce_delay = 500:<span><span></span></span></p><ul><li><span><span><span style="font:7pt "Times New Roman""></span></span></span><span style="font-family:"Arial",sans-serif">erster Impuls < 0.5s:<span> </span>[ 1451463068203, 2 ], [ 1451463069203, 1 ]<span> </span>> 3 Zähler</span><span><span></span></span></li><li><span><span><span style="font:7pt "Times New Roman""> </span></span></span><span style="font-family:"Arial",sans-serif">zweiter Impuls</span><span style="font-family:"Arial",sans-serif"><span style="font-family:"Arial",sans-serif"> < 0.5s</span>: <span> </span>[ 1451463068203, 2 ], [ 1451463069203, 1 ]<span> </span>> 3 Zähler</span><span><span></span></span></li><li><span><span><span style="font:7pt "Times New Roman""> </span></span></span><span style="font-family:"Arial",sans-serif">dritter Impuls</span><span style="font-family:"Arial",sans-serif"><span style="font-family:"Arial",sans-serif"> < 0.5s</span>:<span> </span>[ 1451463086203, 1 ], [ 1451463091203, 1 ], [ 1451463092203, 1 ]<span> </span>> 3 Zähler</span><span><span></span></span></li><li><span><span><span style="font:7pt "Times New Roman""> </span></span></span><span style="font-family:"Arial",sans-serif">Impuls
mit 3s Halten: [ 1451463345203, 1 ], [ 1451463346203, 1 ], [
1451463351203, 1 ], [ 1451463352203, 1 ] > erzeug 2 + 2 = 4 Zähler
(beim Schließen und Öffnen jeweils 2!)</span></li></ul><p>Hier fällt
auf, dass bei einem Impuls immer zwei Datentupel mit exakt 1 Sekunde
Abstand geliefert werden. Der erste Tupel liefert den Wert 2, also 2
Impulse. Meine Erwartungshaltung ist pro Impuls ein Datentupel mit dem
Wert 1. Erhöhe ich debounce_delay auf 1000, wird immer der Wert 1, ausgegeben.<br></p><p>Weitere Tests ergaben, dass bei kurzen Impulsen und bei
Werten von debounce_delay von 0 bis 1000 immer zwei bis drei Datentupel im Abstand
von einer Sekunde erzeugt werden. Bei debounce_delay 2000 oder 4000
erfolgen die Ausgaben im Abstand von 2 bzw. 4 Sekunden.</p><p>Ich habe für dieses Verhalten keine plausible Erklärung.</p><p>Hier meine vzlogger.conf:</p><p>{<br> "retry": 0,<br> "daemon": true,<br> "verbosity": 15,<br> "log": "/var/log/vzlogger.log",<br><br> "local": {<br> "enabled": true,<br> "port": 8080,<br> "index": true,<br> "timeout": 0,<br> "buffer": 120<br> },<br> "meters": [<br> {<br> "enabled": true,<br> "allowskip": false,<br> "interval": -1,<br> "aggtime": -1,<br> "aggfixedinterval": false,<br> "channels": [<br> {<br> "uuid": "120",<br> "identifier": "Impulse",<br> "api": "null",<br> "middleware": "",<br> "secretKey": "",<br> "type": "device",<br> "scaler": 0,<br> "aggmode": "none",<br> "duplicates": 0<br> }<br> ],<br> "protocol": "s0",<br> "device": "",<br> "gpio": 20,<br> "gpio_dir": -1,<br> "configureGPIO": true,<br> "resolution": 1,<br> "send_zero": false,<br> "debounce_delay": 500,<br> "nonblocking_delay": 100000<br> }<br> ]<br>}<br></p></div>