Neues Modul: ElectricityCalculator

Begonnen von Sailor, 26 August 2016, 21:05:35

Vorheriges Thema - Nächstes Thema

R1F800

Zitat von: nanocosmos am 03 April 2020, 13:44:02
Vielen Dank für das tolle Modul.
Ich würde gerne den Stromverbrauch jede Stunde wissen, damit ich ihn in meine Datenbank schreiben. könnte.
Könnte man das Modul dahingehend erweitern?

Im Prinzip müsste man den aktuellen total_consumption mit dem Wert von vor einer Stunde verrechnen. Leider stehe ich bei der Umsetzung auf dem Schlauch.. [emoji1]

Beste Grüße
Daniel
Kann man nicht jede h ein LOGEintrag generieren um den Wert (TotalConsumption - Counter_CounterDayLast) dann hast Du das doch ...
Ich denke das ist eine Spezialanforderung und das dann generell in so ein Modul zu packen halte ich nicht für sinnvoll ... jmo

Maui

Moin zusammen,

ich habe mir _PowerCurrent mal genauer angesehen.
Der Wert (im Code) $ElectricityCountReadingValuePrevious wird aus dem Reading gezogen. Dieses wird allerdings nach 3 NK-Stellen abgeschnitten. Dadurch kommt es zu einer (unnötigen) Ungenauigkeit.
Zum besseren Verständnis mal 2 Schnipsel aus dem Log.

2020.05.05 08:17:52 5:  stromCalc : ElectricityCalculator - Reading Name                                     : countsOverall
2020.05.05 08:17:52 5:  stromCalc : ElectricityCalculator - Previous Reading Value                           : 2020-05-05 08:17:37
2020.05.05 08:17:52 5:  stromCalc : ElectricityCalculator - Current Reading Value                            : 2020-05-05 08:17:52
2020.05.05 08:17:52 5:  stromCalc : ElectricityCalculator - Previous Reading Value                           : 32070.471
2020.05.05 08:17:52 5:  stromCalc : ElectricityCalculator - Current Reading Value                            : 32070.48126857
2020.05.05 08:17:52 5:  stromCalc : ElectricityCalculator - ElectricityCountReadingTimestampDelta            : 15 s
2020.05.05 08:17:52 5:  stromCalc : ElectricityCalculator - ElectricityCountReadingValueDelta                : 0.00999999999839929
.......
2020.05.05 08:18:08 5:  stromCalc : ElectricityCalculator - Previous Reading Value                           : 2020-05-05 08:17:52
2020.05.05 08:18:08 5:  stromCalc : ElectricityCalculator - Current Reading Value                            : 2020-05-05 08:18:08
2020.05.05 08:18:08 5:  stromCalc : ElectricityCalculator - Previous Reading Value                           : 32070.481
2020.05.05 08:18:08 5:  stromCalc : ElectricityCalculator - Current Reading Value                            : 32070.49168524
2020.05.05 08:18:08 5:  stromCalc : ElectricityCalculator - ElectricityCountReadingTimestampDelta            : 16 s
2020.05.05 08:18:08 5:  stromCalc : ElectricityCalculator - ElectricityCountReadingValueDelta                : 0.010999999998603

Die 32070.48126857 werden im nächsten Step per ReadingsVal eingelesen, sind dann aber hart abgeschnitten nur noch 32070.481.
Verbessert mich gerne, aber das ElectricityCountReadingValueDelta sollte doch immer exakt ElectricityKwhPerCounts entsprechen zur Berechnung von PowerCurrent, oder?

Gruß

R1F800

Ist das nur so im OUTPUT oder hast Du das Modul mal debugged?
Kannst Du das fixen oder muss da der Modulauthor ran?

Maui

Ich hab mir beides angesehen.
Ich würde da ungern bei Sailor dazwischen grätschen. Der ist ja noch aktiv und ich denke mir, er hat sich vielleicht was dabei gedacht.
Ich werde aber trotzdem mal bei mir lokal  einen Fix basteln und mir das Verhalten anschauen.

Sailor

Hi Maui
Zitat von: Maui am 05 Mai 2020, 09:03:04
Ich würde da ungern bei Sailor dazwischen grätschen. Der ist ja noch aktiv und ich denke mir, er hat sich vielleicht was dabei gedacht.

So ist es!.
Diesen Abschnitt haben wir erst vor Kurzem eingebracht, weil wir feststellen mussten, dass die Vielzahl der Nachkommastellen ein Event hervorbrachte, ohne dass überhaupt eine signifikante Änderung seitens des Counters vorlag. Siehe diesen Forumsbeitrag weiter oben.
Das Reading, aus welchem er sich den Previous Value holt lautet übrigens ".._PrevRead" und ist ein verstecktes Reading (Mit "." vorweg).
Diese sind mit so vielen Nachkommastellen abgelegt, wie ihr das im Attribut "DecimalPlaces" definiert.

Zitat von: Maui am 05 Mai 2020, 09:03:04
Ich werde aber trotzdem mal bei mir lokal  einen Fix basteln und mir das Verhalten anschauen.
Versuchs mal mit dem Attribut "DecimalPlace".  ;)

Gruss
    Sailor
******************************
Man wird immer besser...

Maui

Okay, den Teil verstehe ich. Aber was mir noch nicht einleuchtet ist, warum man es sich an der Stelle überhaupt so kompliziert macht?
PowerCurrent ist im Prinzip ja nix anderes als der zeitliche Abstand zwischen 2 Drehungen (bei Ferraris).
Als Formel PC = 3600*1000 / (Delta_s * ElectricityKwhPerCounts).
Das Ergebnis zwischen Current und PreviousValue kann ja dementsprechend nie etwas anderes sein als ElectricityKwhPerCounts.
Natürlich könnte ich DecimalPlaces größer wählen, aber damit würde ich ja unnötig im numerischen Schmutz wühlen und nie genauer sein können als ElectricityKwhPerCounts.
Wohl gemerkt rede ich nur von PowerCurrent, für andere Bereiche ist diese Sichtweise sicher zu kurz geraten.

Gruß
Maui

R1F800

Zitat von: Sailor am 05 Mai 2020, 09:28:49

Diese sind mit so vielen Nachkommastellen abgelegt, wie ihr das im Attribut "DecimalPlaces" definiert.
Versuchs mal mit dem Attribut "DecimalPlace".  ;)

Gruss
    Sailor

dass hatte ich bisher immer auf Standard ... nun ja bei 8000 kWh / annum für die WP sind glaube ich Rundungstoleranzen verkraftbar.

Maui

#562
Zitat von: R1F800 am 05 Mai 2020, 09:56:05
dass hatte ich bisher immer auf Standard ... nun ja bei 8000 kWh / annum für die WP sind glaube ich Rundungstoleranzen verkraftbar.
Das hängt immer von dem ab, was einen interessiert. Beim Jahresverbrauch sind die Dezimalstellen völlig ausreichend.
Wenn einen aber der aktuelle Verbrauch interessiert und dieser statt zb. 250W dann 270W ist, dann macht das schon einen Unterschied.
Dezimalstellen geändert-->20W gespart. :) Muss ich nur noch meinem Netzbetreiber verkaufen.  ::)

Edit: Was mir sonst noch aufgefallen ist, ist die Berechnung von _PowerDayAver.
Dort wird lediglich die Summe aller PowerCurrent-Messungen durch die Anzahl der Messungen des Tages geteilt.
Dies führt aber nicht zum erwarteten Durchschnitt, da dort die Zeit gar keine Rolle spielt.
Läuft ein Herd für 10 Min, so dreht sich/zählt der Zähler sehr schnell. Diese 10 Minuten haben also bei der aktuellen Avg Berechnung ein sehr hohes Gewicht, obwohl sie zeitlich nur einen marginalen Anteil ausmachen.
Klar, man kann statistics oder Average nehmen, aber ich würde das _PowerDayAver dann entweder aus dem Modul nehmen oder umschreiben.  ;)

Sailor

Moin Maui

Zitat von: Maui am 05 Mai 2020, 10:06:35
Das hängt immer von dem ab, was einen interessiert. Beim Jahresverbrauch sind die Dezimalstellen völlig ausreichend.
Wenn einen aber der aktuelle Verbrauch interessiert und dieser statt zb. 250W dann 270W ist, dann macht das schon einen Unterschied.
Dezimalstellen geändert-->20W gespart. :) Muss ich nur noch meinem Netzbetreiber verkaufen.  ::)

Hierzu hatte ich schon mal etwas geschrieben: Siehe https://forum.fhem.de/index.php/topic,57106.msg1015526.html#msg1015526
Die Genauigkeit kommt extrem auf die Anzahl und Häufigkeit der Messungen an.
Der Power - Wert aus Verbrauchsdaten ist und kann nur ein grobes Schätzeisen sein und wird ungenauer, je kleiner die Werte werden.
Füttere mal die Tabelle mit deinen Daten und schau dir die Werte an.

Wer es genauer will, kommt um eine direkte Strom-Spannungs bzw. Leistungsmessung nicht herum.
Da sind die letzten Exemplare der intelligenten Zähler unschlagbar, da sie diese Werte direkt ausgeben.

Den "_PowerDayAver" könnte man tatsächlich umschreiben, indem man den gesamten Tages Energieverbrauch durch 24h teilt.
Genauer geht es dann wirklich nicht.

Gruß
    Sailor
******************************
Man wird immer besser...

R1F800

Zitat von: Sailor am 05 Mai 2020, 21:02:47

Wer es genauer will, kommt um eine direkte Strom-Spannungs bzw. Leistungsmessung nicht herum.
Da sind die letzten Exemplare der intelligenten Zähler unschlagbar, da sie diese Werte direkt ausgeben.


Noch genauer als dann Die Impulszählung ein S0 Bus des DSZ?
Oder verRstehe ich was nicht?

Sailor

Zitat von: R1F800 am 05 Mai 2020, 21:55:57
Noch genauer als dann Die Impulszählung ein S0 Bus des DSZ?
Oder verRstehe ich was nicht?

DSZ mit S0 ist doch schon mal ein Fortschritt gegenüber meiner analogen Strommühle!
Aber spukt dir dein DSZ den P-Wert (Leistung) direkt aus oder bekommst du nur den augenblicklichen W-Wert (Energieverbrauch)?

Gruß
    Sailor
******************************
Man wird immer besser...

R1F800

Also er gibt nur den Leistungswert nach außen -- Impulse / kWh

Sailor

Hallo R1F800

Zitat von: R1F800 am 06 Mai 2020, 08:01:54
Also er gibt nur den Leistungswert nach außen -- Impulse / kWh

Das ist nicht der augenblickliche Leistungswert in Watt sondern der bisher geleistete Arbeitswert (Zählerstand) in aufsummierten Impulsen pro kWh.

Wenn man daraus die augenblickliche Leistung zurückrechnet, kommt es zu den oben genannten Ungenauigkeiten.

Gruß
   Sailor
******************************
Man wird immer besser...

R1F800

Nun es sind genau 1000 Impulse / (1000 Watt h )

Maui

Zitat von: Sailor am 05 Mai 2020, 21:02:47
Moin Maui

Hierzu hatte ich schon mal etwas geschrieben: Siehe https://forum.fhem.de/index.php/topic,57106.msg1015526.html#msg1015526
Die Genauigkeit kommt extrem auf die Anzahl und Häufigkeit der Messungen an.
Der Power - Wert aus Verbrauchsdaten ist und kann nur ein grobes Schätzeisen sein und wird ungenauer, je kleiner die Werte werden.
Füttere mal die Tabelle mit deinen Daten und schau dir die Werte an.

Wer es genauer will, kommt um eine direkte Strom-Spannungs bzw. Leistungsmessung nicht herum.
Da sind die letzten Exemplare der intelligenten Zähler unschlagbar, da sie diese Werte direkt ausgeben.
Ich glaube wir reden immer noch ein wenig aneinander vorbei. Mir geht es nicht um die Genauigkeit der Messung ansich, dass hier nur ein gemittelter Wert des aktuellen Verbrauches herauskommt, ist mir bewusst.
Ich versuche es mal mit Code, vielleicht macht es das einfacher (Zeile 795)
Alt

my $ElectricityCalcPowerCurrent    = ($ElectricityCountReadingValueDelta / $ElectricityCountReadingTimestampDelta) * 3600 * 1000 / $ElectricityCalcDev->{system}{SiPrefixPowerFactor};

Neu

my $ElectricityCalcPowerCurrent    = ($attr{$ElectricityCalcName}{ElectricityKwhPerCounts} / $ElectricityCountReadingTimestampDelta) * 3600 * 1000 / $ElectricityCalcDev->{system}{SiPrefixPowerFactor};

In meinen Augen ist das zwingend dasselbe, nur ohne den Umweg über die Readings zu gehen. Über DecimalPlaces braucht man sich da dann auch keine Gedanken machen und auch nicht um Geister-Events.

Zitat von: Sailor am 05 Mai 2020, 21:02:47
Den "_PowerDayAver" könnte man tatsächlich umschreiben, indem man den gesamten Tages Energieverbrauch durch 24h teilt.
Genauer geht es dann wirklich nicht.
Dann würde man aber im Tagesverlauf die Info verlieren, das ginge dann nur am nächsten Tag für den vorigen. Oder man macht es halt stundenweise, also um 6 das Delta des Zählers von 0-6 geteilt durch 6h.

Gruß