Plot für Pelletverbrauch

Begonnen von limats, 13 Dezember 2013, 15:20:48

Vorheriges Thema - Nächstes Thema

limats

Hallo zusammen,

ich habe ein Problem damit, einen schönen Plot für meinen Pelletverbrauch hinzubekommen.
Gemessern wird das Ganze über einen Reedkontakt an der Förderschnecke, den ich über einen Arduino-Eingang in den FHEM bekommen.
Dort werden mit FRM_IN im count-mode rising die Umdrehungen gezählt.
Um den aktuellen Verbrauch zu berechnen, habe ich ein user reading im differential Modus angelegt:
attr myPelletMeter userReadings pellets differential { ReadingsVal("myPelletMeter ","count",0);; }

So. Nun zum Problem:
Immer wenn die Heizung abschaltet, bleibt die Schecke ja stehen, bis die Heizung nach einigen Stunden wieder anspringt. Während dieser Zeit gibt es natürlich keinen Impuls und damit kein Event. Dadurch wird das User Reading erst wieder beim nächsten Einschalten neu berechnet und differenziert dann über die komplette Zeit seit dem letzten Zählimpuls.
Wenn ich einen Plot mit Line daraus baue, bekomme ich deshalb eine schräge Linie während der Heizungsauszeit.
Ich bräuchte also irgendeine Möglichkeit, automatisch ein User reading mit dem Wert 0 zu schreiben, wenn eine bestimmte Zeit lang (z.B. 60 Sek) kein Zählimpuls kam.
Alternativ könnte man natürlich das Userreading nicht über die Differentialfunktion lösen, sondern immer ein festes Zeitfenster lange die Impulse zählen und daraus den Momentanverbrauch ausrechnen. Das wäre aber vermutlich wesentlich ungenauer (Abstände von bis zu 30 Sek. sind durchaus normal. Bei einem Zeitfenster von 60 Sek. wären das ziemlich große Meßfehler).

Oder fällt euch eine andere Lösung dazu ein?

Hoffe, ich konnte das Problem einigermaßen rüberbringen. Ansonsten würde ich noch einen Plot raussuchen und dranhängen.

Gruß
Leo
Fhem auf BBB:
HM-CFG-USB für div. HM-Sensoren, CUL+WMBUS für EnergyCam, Nanocul für IT, Arduino Mega 2560 als 1-wire-Gateway und für div. digitale Ein-/Ausgänge, Volkszähler-USB-IR-Lesekopf mit SMLUSB, Solarsteuerung über VBUS

Puschel74

Hallo,

Zitatautomatisch ein User reading mit dem Wert 0 zu schreiben,
evtl. könnte ja addLog dein Problem lösen.

Siehe Wiki Plotabriss vermeiden.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

limats

Hallo,

vielen Dank für die Antwort.

Zitat von: Puschel74 am 13 Dezember 2013, 15:33:48
evtl. könnte ja addLog dein Problem lösen.

Siehe Wiki Plotabriss vermeiden.

Da bin ich mittlerweile selbst darüber gestolpert. Leider scheint es aber nicht die Lösung für mein Problem zu sein:
Wenn ich ein addLog auf den counter selbst mache, habe ich zwei Probleme:
1. macht er die zusätzlichen Logs auch, wenn die Heizung gerade läuft. Dadurch würde natürlich das Ergebnis verfälscht werden.
Bsp.:

2013-12-14_16:05:12 Pellets reading: off
2013-12-14_16:05:13 Pellets count: 68
2013-12-14_16:05:13 Pellets reading: on
2013-12-14_16:05:13 Pellets pellets: 0.060349833303223
2013-12-14_16:05:37 Pellets reading: off
2013-12-14_16:05:39 Pellets count: 69
2013-12-14_16:05:39 Pellets reading: on
2013-12-14_16:05:39 Pellets pellets: 0.0388500496311852
2013-12-14_16:05:54 Pellets reading: off
2013-12-14_16:05:58 Pellets count: 69   << addLog
2013-12-14_16:06:05 Pellets count: 70
2013-12-14_16:06:05 Pellets reading: on
2013-12-14_16:06:05 Pellets pellets: 0.0388954301858945
2013-12-14_16:06:20 Pellets reading: off
2013-12-14_16:06:21 Pellets count: 71
2013-12-14_16:06:21 Pellets reading: on
2013-12-14_16:06:21 Pellets pellets: 0.0603865249332273

2. Wir durch die zusätzlichen Log-Einträge die Berechnung meines user readings nicht angestoßen. Es wirkt sich somit nicht auf meinen Plot aus.

Und wenn ich addLog auf mein user reading mache, dupliziert er immer nur den letzten Pelletsverbrauch, was natürlich falsch ist.
Bsp.:

2013-12-14_12:37:59 Pellets reading: on
2013-12-14_12:37:59 Pellets pellets: 0.0374390770938442
2013-12-14_12:38:14 Pellets reading: off
2013-12-14_12:38:16 Pellets count: 707
2013-12-14_12:38:16 Pellets reading: on
2013-12-14_12:38:16 Pellets pellets: 0.0579712564678393
2013-12-14_12:38:42 Pellets reading: off
2013-12-14_12:38:43 Pellets count: 708
2013-12-14_12:38:43 Pellets reading: on
2013-12-14_12:38:43 Pellets pellets: 0.0366032010486781
2013-12-14_12:38:59 Pellets reading: off
2013-12-14_12:39:11 Pellets count: 709
2013-12-14_12:39:11 Pellets reading: on
2013-12-14_12:39:11 Pellets pellets: 0.0368459933558505
2013-12-14_12:39:26 Pellets reading: off
2013-12-14_12:39:38 Pellets count: 710
2013-12-14_12:39:38 Pellets reading: on
2013-12-14_12:39:38 Pellets pellets: 0.0362318472511074
2013-12-14_12:39:42 Pellets pellets: 0.0362318472511074   << addLog
2013-12-14_12:41:42 Pellets pellets: 0.0362318472511074   << addLog
2013-12-14_12:43:42 Pellets pellets: 0.0362318472511074   << addLog
2013-12-14_12:45:42 Pellets pellets: 0.0362318472511074   << addLog
2013-12-14_12:47:42 Pellets pellets: 0.0362318472511074   << addLog
2013-12-14_12:49:42 Pellets pellets: 0.0362318472511074   << addLog
2013-12-14_12:51:42 Pellets pellets: 0.0362318472511074   << addLog
2013-12-14_12:53:42 Pellets pellets: 0.0362318472511074   << addLog
2013-12-14_12:55:42 Pellets pellets: 0.0362318472511074   << addLog

Mein Wunsch wäre es, ca. 2 Min. nach dem letzten count nochmal ein Duplikat des letzten count reading und anschließend das berechnete user reading (müsste durch die identischen counts 0 ergeben) ins Log schreiben zu lassen:

2013-12-14_12:39:11 Pellets count: 709
2013-12-14_12:39:11 Pellets reading: on
2013-12-14_12:39:11 Pellets pellets: 0.0368459933558505
2013-12-14_12:39:26 Pellets reading: off
2013-12-14_12:39:38 Pellets count: 710
2013-12-14_12:39:38 Pellets reading: on
2013-12-14_12:39:38 Pellets pellets: 0.0362318472511074
2013-12-14_12:41:38 Pellets count: 710  << programmatisch eingefügt
2013-12-14_12:41:38 Pellets pellets: 0.0 << danach über user reading berechnet


Vielleicht hat ja noch jemand eine Idee?

Grüße
Leo
Fhem auf BBB:
HM-CFG-USB für div. HM-Sensoren, CUL+WMBUS für EnergyCam, Nanocul für IT, Arduino Mega 2560 als 1-wire-Gateway und für div. digitale Ein-/Ausgänge, Volkszähler-USB-IR-Lesekopf mit SMLUSB, Solarsteuerung über VBUS

ollir

#3
Schau mal nach HourCounter, damit kannst du Impulse zählen und auch Pulse-Pause-Zeit berechnen lassen.
Wenn ich dich richtig verstehe reagierst du mit rising nur auf eine Flanke des Impulses.

VG Olaf