volkszaehler / vzlogger

Logging utility for various meters & sensors
http://wiki.volkszaehler.org/software/controller/vzlogger
GNU General Public License v3.0
145 stars 124 forks source link

Neuer Zähler vom Typ Frequenz #178

Closed bgewehr closed 9 years ago

bgewehr commented 9 years ago

Hallo,

seht Ihr eine Chance, VZLogger das Frequenzzählen am GPIO als Zählertyp beizubringen? Das soll bis 500kHz gehen, wenn man auf die Interrupts verzichtet...

http://codeandlife.com/2012/07/03/benchmarking-raspberry-pi-gpio-speed/

http://abyz.co.uk/rpi/pigpio/examples.html#C_code

andig commented 9 years ago

@bgewehr Was ist Dein Einsatzszenario? M.E. Können wir das schon, wenn auch nicht auf hohe Frequenz optimiert. Was konkret dehlt Dir also?

OT: Middlewareseitig wäre der Frequenzmesser einfach ein Impulszähler analos S0.

bgewehr commented 9 years ago

Es gibt Sensoren, die Messwerte in lineare Frequenz umwandeln wie diese hier: http://www.adafruit.com/products/828ö https://www.sparkfun.com/products/9768

Wenn die Frequenz zu hoch wird, taugen aber - je nach Plattform - die Interrupts nicht mehr für die zuverlässige Impulsverarbeitung, daher meine Frage...

mbehr1 commented 9 years ago

Das sind eigentlich normale S0/Impuls Zähler (nur mit hoher Frequenz). Wie in dem anderen Thread beschrieben, müsste die Implementierung unseres S0 Zählers ein wenig optimiert werden. Dann geht bestimmt bis paar kHz (aber nicht bis 25 MHz).

Am 07.07.2015 um 15:29 schrieb Bernd Gewehr notifications@github.com:

Es gibt Sensoren, die Messwerte in lineare Frequenz umwandeln wie diese hier: http://www.adafruit.com/products/828ö http://www.adafruit.com/products/828%C3%B6 https://www.sparkfun.com/products/9768 https://www.sparkfun.com/products/9768 Wenn die Frequenz zu hoch wird, taugen aber - je nach Plattform - die Interrupts nicht mehr für die zuverlässige Impulsverarbeitung, daher meine Frage...

— Reply to this email directly or view it on GitHub https://github.com/volkszaehler/vzlogger/issues/178#issuecomment-119202721.

Gruß

Matthias

bgewehr commented 9 years ago

Naja, paar KiloHertz wäre ja top! Ich kann leider überhaupt kein C, also wie kann ich helfen?

UdoSchake commented 9 years ago

http://codeandlife.com/2012/07/03/benchmarking-raspberry-pi-gpio-speed/ Dieser Artikel beschreibt wie man die GPIOs des Raspi per Programm als Ausgang schalten kann. Nix mit Frequenz zählen.

http://abyz.co.uk/rpi/pigpio/examples.html#C_code Das kommt schon eher hin.

Gruß Udo

andig commented 9 years ago

http://abyz.co.uk/rpi/pigpio/examples.html#C_code Das kommt schon eher hin.

Insbesondere http://abyz.co.uk/rpi/pigpio/cif.html#gpioSetGetSamplesFunc

bgewehr commented 9 years ago

Ich habe mir mal mit python geholfen, wäre aber weiterhin an einer "sauberen" Lösung mit vzlogger interessiert, weil mir immer alle Pulse verloren gehen, die während meiner http calls auftreten. https://github.com/bgewehr/flow-meter-hall-sensor-frequency-counter-for-volkszaehler.org

mbehr1 commented 9 years ago

Folgende Änderungen schlage ich am S0 GPIO Meter vor: a) Einführen eines sep. Counterthreads, der immer läuft, sobald der S0 Meter gestartet wurde und für Echtzeitfähigkeit mit anderer Scheduling-Klasse/Prio versehen werden kann. b) Umstellen des "read" Calls, so dass nicht mehr auf einen Impuls gewartet wird, sondern die Impulse pro Sekunde (min. aber 1 Impuls für die von @andig geforderte Rückwärtskompatibilität) geliefert wird (das ist defacto dann eine Frequenzmessung) c) Mit dem akt. sysfs-Linux generischem Ansatz werden damit vermutlich paar kHz gehen. Für schnellere Lösungen könnte eine zusätzliche Raspberry-Pi spezifische Lösung (pigpio oder einfach direkt memory-mapped gpio auslesen) implementiert werden. Der Counterthread ist dann lediglich CPU begrenzt (bei 100% min. >40 MHz Sampling Rate. Ich würde hier ein künstliches Limit von z.B. 100kHz einbauen, damit die CPU Last verträglich bleibt (bei rpi2 könnte man vermutlich problemlos auf 250kHz gehen). Vorteil wäre dann auch, dass die CPU Last immer konstant bleibt und nicht mit steigender Frequenz steigt, wie die akt. Implementierung. Das Debouncing muss dann auf noch feingranularer einstellbar geändert werden (1ms Granularität ergibt ja max 1kHz).

Was meint ihr?

mbehr1 commented 9 years ago

Grad noch mit @andig eine weitere Änderung besprochen: d) Parameter "sendZero" (senden von 0/keinem Impuls): Falls aktiv, würde der S0 Meter zum wirklichen Frequenzzähler, der auch 0 Hz zurückliefert. Die Datenrate kann dann per "aggregation" z.B. auf einen Summenwert alle 5 Min reduziert werden. Falls nicht aktiv, ist das Verhalten wie heute und ohne Impuls wird auch kein Wert an die Middleware/Datenbank gemeldet.

bgewehr commented 9 years ago

Klingt wie ein perfekter Plan!

mbehr1 commented 9 years ago

see #185 for a first implementation of a, b and d). Untested! Tests welcome!

UdoSchake commented 9 years ago

185 getestet.

Testaufbau: Raspberry Pi 2 Frequenzgenerator direkt an GPIO4. Rechteckimpuls, Tastverhältnis 50%, Amplitude 0v-3,3V. Frequenzbereich 1 Hz bis 100kHz.

Ergebnisse: Bei 10kHz CPU-Last: vzlogger bei 21%, kworker bei 22%, Apache bei 3% Bei 50kHz CPU-Last: vzlogger bei 59%, kworker bei 68%, Apache bei 6% Bei 100kHz CPU-Last vzlogger bei 68%, kworker bei 89%, Apache bei 7%

Bis 50kHz halten sich die Ausreißer im Frontend im Rahmen. Siehe: https://www.dropbox.com/s/axcvjponh3k1axw/test_vzlogger.PNG?dl=0 https://www.dropbox.com/s/2qpbao48zpsqjju/test_vzlogger1.PNG?dl=0

Gruß Udo

bgewehr commented 9 years ago

Super! Das ist ja besser als erwartet!

andig commented 9 years ago

Moin Udo,

Das ist ja überraschend. Was hast Du für aggtime eingestellt? Middleware auf dem gleichen Pi? Mit oder ohne Push?

UdoSchake commented 9 years ago

Moin Andi,

keine agg.. Alles auf dem Pi, ohne Push.

andig commented 9 years ago

keine agg.. Alles auf dem Pi, ohne Push.

Aber mit Speicherung? Das klingt doch ziemlich gut!

UdoSchake commented 9 years ago

ja, mit Speicherung.

Gruß Udo

mbehr1 commented 9 years ago

Hi. Please see update in #185. @UdoSchake can you test it again?

mbehr1 commented 9 years ago

Implementiert mit Merge von #185. Kann Issue geschlossen werden?

bgewehr commented 9 years ago

Wo finde ich die Anleitungen für die vzlogger.conf, um diese Funktionen zu testen?

mbehr1 commented 9 years ago

Ein paar Erklärungen hat der Conf Editor: http://volkszaehler.github.io/vzlogger/ http://volkszaehler.github.io/vzlogger/

Am 01.08.2015 um 08:05 schrieb Bernd Gewehr notifications@github.com:

Wo finde ich die Anleitungen für die vzlogger.conf, um diese Funktionen zu testen?

— Reply to this email directly or view it on GitHub https://github.com/volkszaehler/vzlogger/issues/178#issuecomment-126868915.

Gruß

Matthias

bgewehr commented 9 years ago

Also, ich habe grade den aktuellen vzlogger mit den vier water-flow-metern in Betrieb genommen und muss sagen, dass alles super funktioniert. Also vielen Dank!

mbehr1 commented 9 years ago

Super. Danke fürs Feedback.

Gruß Matthias

Sent from a mobile device.

Am 14.08.2015 um 18:34 schrieb Bernd Gewehr notifications@github.com:

Also, ich habe grade den aktuellen vzlogger mit den vier water-flow-metern in Betrieb genommen und muss sagen, dass alles super funktioniert. Also vielen Dank!

— Reply to this email directly or view it on GitHub.