Hallo,
ich berechne die aktuell verbrauchte Leistung aus dem Zählerstand.
Ich habe dazu drei verschiedene Varianten im Einsatz:
Jetzt ist aber komisch, dass die drei Varianten zu unterschiedlichen Ergebnissen kommen:
Beim der 1min Variante stimmt also etwas nicht....
sh.Allgemein.Stromzaehler.Zaehlerstand() gibt ja den aktuellen Zählerstand.
sh.Allgemein.Stromzaehler.Zaehlerstand.db('min', '1i') sollte doch den niedrigsten Wert zwischen jetzt und vor einer Minute geben, oder?
Somit sollte die Differenz den Verbrauch der letzten Minute ergeben, oder?
Das scheint aber nicht ganz hin zu kommen. Der Fehler ist aber auch nicht ein Faktor zwei (so dass ich zwei Minuten erwischt hätte).
Was mich auch wundert:
Sollte das nicht 0 ergeben?
Gruß,
Hendrik
ich berechne die aktuell verbrauchte Leistung aus dem Zählerstand.
Ich habe dazu drei verschiedene Varianten im Einsatz:
- ([Zählerstand]-[Zählerstand vor 10 min])*3600/60/10
- ([Zählerstand]-[Zählerstand vor 1 min]) *3600/60
- (3600/800*1000Ws)/[Zeit seit dem letzten Impuls]
(1Impuls =3600*1000/800 Ws, da 800 Impulse pro kWh)
Code:
[[[Zaehlerstand]]]
name = Zaehlerstand
type = num
sqlite = yes
knx_dpt = 14
eval = sh.Allgemein.Stromzaehler.Counter()/800.0+65535*sh.Allgemein.Stromzaehler.Faktor()+97597.7-14.64
eval_trigger = Allgemein.Stromzaehler.Counter
[[[Momentanleistung_1min]]]
type = num
sqlite = yes
eval = (sh.Allgemein.Stromzaehler.Zaehlerstand()- sh.Allgemein.Stromzaehler.Zaehlerstand.db('min', '1i'))*60.0*1000.0
eval_trigger=Allgemein.Stromzaehler.Counter
[[[Momentanleistung_10min]]]
type = num
sqlite = yes
eval = (sh.Allgemein.Stromzaehler.Zaehlerstand()- sh.Allgemein.Stromzaehler.Zaehlerstand.db('min', '10i'))*60.0*1000.0/10.0
eval_trigger=Allgemein.Stromzaehler.Counter
[[[Momentanleistung_freq]]]
type = num
sqlite = yes
#Frequenzzaehler: Jeder Counter=1/800kWh=3600/800kws=3600/800*1000Ws; Zeit zwischen zwei Impulsen messen und dadurch teilen --> W
eval = 4500/sh.Allgemein.Stromzaehler.Counter.prev_age()
eval_trigger=Allgemein.Stromzaehler.Counter
enforce_updates=yes
Code:
>>> sh.Allgemein.Stromzaehler.Momentanleistung_1min.db('avg', '15h', '14h')
689.08
>>> sh.Allgemein.Stromzaehler.Momentanleistung_freq.db('avg', '15h', '14h')
437.61
>>> sh.Allgemein.Stromzaehler.Momentanleistung_10min.db('avg', '15h', '14h')
454.55
Code:
(sh.Allgemein.Stromzaehler.Zaehlerstand()- sh.Allgemein.Stromzaehler.Zaehlerstand.db('min', '1i'))
sh.Allgemein.Stromzaehler.Zaehlerstand.db('min', '1i') sollte doch den niedrigsten Wert zwischen jetzt und vor einer Minute geben, oder?
Somit sollte die Differenz den Verbrauch der letzten Minute ergeben, oder?
Das scheint aber nicht ganz hin zu kommen. Der Fehler ist aber auch nicht ein Faktor zwei (so dass ich zwei Minuten erwischt hätte).
Was mich auch wundert:
Code:
sh.Allgemein.Stromzaehler.Zaehlerstand.db('max', '1i')- sh.Allgemein.Stromzaehler.Zaehlerstand()
-0.0012500000302679837
Gruß,
Hendrik


- besorg Dir nen eHZ den man auslesen kann und der die Leistung ausgibt. Für Zählerstände funktioniert das mit den Impulsen hinreichend genau, für eine Leistungsmessung wird das (so einfach) nix aussagekräftiges. Selbst ich lese ja nur die Leistung zu exakt einer Sekunde ab, in der nächsten kann schon der Geschirrspüler laufen ...
Kommentar