NEWS
Momentanverbrauch auf 0 setzen nach 1 min
-
Ich habe einen Meßwert "Gasverbrauch in m3". Davon möchte ich den Momentanverbrauch m3/min berechnen, das klappt auch:
const idGasMenge = 'esphome.0.C8C9A35E048A.Sensor.3240261304.state'; const idGasVerbrauch = '0_userdata.0.gas_durchfluss'; on(idGasMenge, async function(dp) { var verbrauch = 60000 * (dp.state.val - dp.oldState.val) / (dp.state.lc - dp.oldState.lc); // m3/min setState(idGasVerbrauch, verbrauch, true); });
Das Diagram geht aber nicht auf 0, wenn die Therme steht (grüne Kurve):
wie kann ich einen 0-Wert schreiben, wenn der Verbrauch in m3 sich z.B. eine Minute nicht ändert?
-
@jschmied sagte: wie kann ich einen 0-Wert schreiben, wenn der Verbrauch in m3 sich z.B. eine Minute nicht ändert?
const idGasMenge = 'esphome.0.C8C9A35E048A.Sensor.3240261304.state'; const idGasVerbrauch = '0_userdata.0.gas_durchfluss'; var timer = null; on(idGasMenge, async function(dp) { var verbrauch = 60000 * (dp.state.val - dp.oldState.val) / (dp.state.lc - dp.oldState.lc); // m3/min setState(idGasVerbrauch, verbrauch, true); clearTimeout(timer); timer = setTimeout(function() { setState(idGasVerbrauch, 0, true); }, 120000); // 2 Minuten });
-
@jschmied sagte in Momentanverbrauch auf 0 setzen nach 1 min:
wenn der Verbrauch in m3 sich z.B. eine Minute nicht ändert?
wie oft wird denn der Zählerstand aktualisiert oder (unter Verbrauch) geändert.
dann entweder auf Aktualisierung triggern, oder bei Änderung ein timeout das länger als das übliche Intervall ist, erst stoppen, dann starten und bei Ausführung des Timeouts eine 0 schreiben
-
@homoran wenn die therme läuft, gibts pro 0,01 m3 ein Impuls, also bei 100% Leistung alle 25 Sekunden. Sie kann bis auf 30% runter glaub ich. Ich starte mal mit 2 Minuten Timer.
-
Der Wert in der Betriebspause muss auf alle Fälle auf 0...
-
@jschmied
Naja, falsch ist das was ich sehe im Zusammenhang mit "Verbrauch" ja nicht. Da wird halt der Gesamtverbrauch aggregiert.Was passiert z.B. wenn Du ein Vollbad einlässt und die Therme 5 Minuten lang Warmwasser produziert?
Oder wenn allgemein in einem Zeitraum x die Therme konstant über 0% Leistung betrieben wird?
Ich befürchte, der Timer alleine ist noch nicht der Weisheit letzter Schluss.
Könnte vielleicht im Zusammenhang mit einer Änderung auf 0 funktionieren: Wenn eine gewisse Zeit x kein Verbrauch ermittelt wurde, dann den Verbrauchszähler auf 0 zurücksetzen.
Also: Auf Änderung triggern. Wenn Wert > 0 und (Zeitstempel - vorheriger Zeitstempel) > x ==> 0 schreiben.Aber warum eigentlich nicht einfach bei Last = 0 die 0 in den DP schreiben?
-
@codierknecht Naja, eigentlich sind das vom Gas-Zähler ja Impulse. Der Verbrauch in m3 ist schon ein Counter, der pro Impuls 0.01 addiert.
Wahrscheinlich sollte man besser diesen Zähler alle Minute per Timer auslesen und die Differenz zum Vorwert bilden.
-
@jschmied
Ich zähle ebenfalls am Gaszähler die Impulse.
Mich interessiert allerdings nur der Tagesverbrauch.
Bei mir ist ein Impuls = 0,1 m³. Die addiere ich in einem DP für den Tagesverbrauch und in einem für den Gesamtzählerstand.
Nachts schreibe ich den aufgelaufenen Tagesverbrauch in einen dritten DP, der mit dem SQL-Adapter historisiert wird und setze den Tagesverbrauch wieder auf 0.
Funktioniert top.
-
@jschmied sagte: Der Wert in der Betriebspause muss auf alle Fälle auf 0...
Passiert das nicht mit dem 2-Minuten-Timeout? Wobei 2 Minuten wahrscheinlich zu kurz sind.
-
@jschmied Ich mache etwas ähnliches mit dem Stromverbrauch. Da wird auch der aktuelle Zählerstand genommen. Immer wenn sich der ändert, nehme ich den aktuellen Wert und ziehe den Vorigen Zählerstand ab. Dann hole ich mir den Zeitstamp der letzten Änderung des vorigen Wertes und ziehe den von dem Timestamp des aktuellen Wertes ab. Dann speichere ich den aktuellen Wert als vorigen Wert. Mit den beiden Differenzwerten habe ich den "Momentan"-Verbrauch.
Bei dieser Art der Berechnung hast du immer das Problem, dass du nur in die Vergangenheit schauen kannst, d.h. den Zustand "kein Verbrauch" kannst du nicht zuverlässig feststellen.
Ich glaube ich würde an deiner Stelle das Script für den m³ counter so ändern, das nach einer gewissen Zeit der Wert auf jeden Fall aktualisiert wird. Dann kannst du oberes Shema verwenden um den Momentanverbrauch zu errechnen. Schlägt der Timer zu und der Wert hat sich nicht geändert ist die Differenz 0 und der Momentanverbrauch dann auch. Doof ist dann nur, das beim nächsten mal hochzählen wahrscheinlich ein zu hoher Momentanverbrauch angezeigt wird. Da musst du wahrscheinlich ein bisschen mit den Zeiten spielen.