Neues Modul: ElectricityCalculator

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

Vorheriges Thema - Nächstes Thema

breitbanddilettant

Hi,

Vielen dank für die schnellen Antworten.
Zur ersten Antwort: das mit dem Hochsetzen auf 10s werde ich mal ausprobieren.

Zur zweiten Antwort: Der Zähler ist ein Drehstromzähler meiner Wärmepumpe. Die nimmt bis zu 6kW auf.

Vom smartphone geschrieben, daher etwas karger Wortlaut  :(

Grüße,
Konstantin

breitbanddilettant

Hi Sailor,

ich hab mal ausprobiert

### Continue with calculations only if time difference is larger than 1 seconds to avoid "Illegal division by zero" and erroneous due to small values for divisor
if ($ElectricityCountReadingTimestampDelta > 1)

mit

### Continue with calculations only if time difference is larger than 1 seconds to avoid "Illegal division by zero" and erroneous due to small values for divisor
if ($ElectricityCountReadingTimestampDelta > 19)

Zu ersetzten. Hats leider noch schlimmer gemacht. Ich glaube, es wäre auch falsch, an dieser Stelle die Mittelung einzuführen. Also alles Rückgängig.

Dann habe ich

### Continue with calculations only if time difference is larger than 1 seconds to avoid "Illegal division by zero" and erroneous due to small values for divisor
if ($ElectricityCountReadingTimestampDelta > 0)

reingeschrieben. Nun werden schonmal Momentanleistungen bis 3.6kW ermittelt. Allerdings reicht das für meine Wärmepumpe immer noch nicht.

Ich habe das Gefühl, dass diese Zeile

### Calculate DW (electric Energy difference) of previous and current value / [kWh]
my $ElectricityCountReadingValueDelta = sprintf('%.3f', ($ElectricityCountReadingValueCurrent)) - sprintf('%.3f', ($ElectricityCountReadingValuePrevious));

kein Delta größer 1 erzeugt. Woran auch immer das liegen mag.

Könntest du das mal checken? Ich finde nicht, woran das liegen kann :(

Danke,
Konstantin

blueberry63

Kann es sein, dass "CounterDay1st" and "CounterDayLast" manchmal nicht aktualisiert werden?

Ich habe bei einem Unterzähler seit 2 Tagen keinen realen Verbrauch, bekomme aber heute (24.01) einen aktuellen Tagesverbrauch angezeigt:

energy_total_CounterCurrent,115.000,2020-01-23 07:16:45
energy_total_CounterDay1st,100.000,2020-01-22 00:02:04
energy_total_CounterDayLast,99.000,2020-01-22 00:02:04
energy_total_EnergyDay,15.000,2020-01-23 07:16:45

Oder habe ich etwa die Logik nicht verstanden?

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

flummy1978

Ich zitiere mich mal selbst, in der Hffnung, dass doch jemand noch drauf eingeht  ;) 8)

Zitat von: flummy1978 am 10 Januar 2020, 17:14:52
...
2. Das ElectricityCounterOffset reagiert auf alle Readings die im Modul sind. Wenn man mehrere Zähler hat, gibt es die Möglichkeit mehrere Offsets einzusetzen ? Oder kann ich den zähler "austricksen" indem ich vom ersten Tag an die countsOverall auf den Zählerstand anpasse ?
3. Muss ich etwas beachten, wenn ich später auf das LiveSystem umziehe, oder sollte alles funktionieren, wenn ich die komplette RAW Definition übernehme ?

Momentan funktioniert es scheinbar sehr gut. Aktueller Testaufbau sind 1x das Modul mit Hauptzähler separat und 1x das Modul mit 3 Nebenzählern, die an bestimmte Geräte / Bereiche geschlossen sind.  Und mit dem 2. Modul hab ich eben so die Probleme die in (2) angemerkt waren:
Wie kann ich denn am einfachsten 3 verschiedene Zählerstände anpassen?
Rein für die Anzeige könnte ich es mit einem UserReading lösen, aber es soll ja schon in den Vebräuchen und Berechnungen mit einfließen....
Wäre schön, wenn da jemand sein Hirnschmalz mit einfließen lassen könnte :)

Grüße
Andreas

Sailor

Hi Konstantin

Zitat von: breitbanddilettant am 24 Januar 2020, 13:12:34
ich hab mal ausprobiert
Zu ersetzten. Hats leider noch schlimmer gemacht. Ich glaube, es wäre auch falsch, an dieser Stelle die Mittelung einzuführen.

Na klar, du ignorierst alles was Intervalle größer 19s hat.

Du hast mich falsch verstanden... Du sollst nichts am ElectricityCalculator ändern sondern das Abfrageintervall deines Counter - Devices raufsetzen.
Der Electricity-Calculator reagiert nur auf die Events deines Counters.

Du musst an der Schraube des Counters drehen, damit die Zeitabstände der Messung möglichst viele Impulse einfangen.

Hat die Wärmepumpe 3 Phasen?
Mehr als 3680W bekommst du nicht aus einem einphasigen Motor (=16A) raus.

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

breitbanddilettant

#515
Hi Sailor,

Zitat
Du hast mich falsch verstanden... Du sollst nichts am ElectricityCalculator ändern sondern das Abfrageintervall deines Counter - Devices raufsetzen.
Der Electricity-Calculator reagiert nur auf die Events deines Counters.
Der Counter wird doch getriggert über den GPIO vom Raspberry - direkt über S0 angesteuert. Das ist so defeniert:

define GPIO15 RPI_GPIO 22
setuuid GPIO15 5e14a264-f33f-9858-5d71-619724a178c1fe7c
attr GPIO15 active_low no
attr GPIO15 direction input
attr GPIO15 event-on-change-reading .*
attr GPIO15 event-on-update-reading .*
attr GPIO15 interrupt falling
attr GPIO15 room Electric Energy Counter
attr GPIO15 stateFormat Counter

define WPVerbrauch ElectricityCalculator GPIO15.Counter.*

Wie soll ich denn da ein Abfrageintervall hochsetzten? Es wird doch ein event-on-update und event-on-change genutzt

Zitat
Hat die Wärmepumpe 3 Phasen?
Ja.


Danke und schöne Grüße,
Konstantin

Sailor

#516
Hallo Konstantin

Zitat von: breitbanddilettant am 26 Januar 2020, 08:02:08
Der Counter wird doch getriggert über den GPIO vom Raspberry - direkt über S0 angesteuert.
Wie soll ich denn da ein Abfrageintervall hochsetzten? Es wird doch ein event-on-update und event-on-change genutzt

Ich würde mal den Verdacht äußern, indem du das Atrribut "poll_interval" entsprechend hochsetzt.
Siehe https://fhem.de/commandref.html#RPI_GPIO
Habe aber solch einen Counter nicht im Einsatz - Daher Angaben ohne Gewähr.

Ansonsten bleibt dir nur der Umweg ein "at" mit einem Intervall t zu programmieren und den Counter in einen dummy zu schreiben, auf welchen du dann mittels Electricity-Counter zugreifst.

Gruß
    Sailor

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

blueberry63

Hallo,

ich möchte dieses Modul zur Auswertung eines digitalen Stromzählers verwenden. Das REGEXP liefert dabei den aktuellen Zählerstand. Muss ich bei dieser Konstellation etwas beachten (z.Bsp. ReadingDestination)?

Irgendwie stimmen die Tageswerte immer mal wieder nicht: z.Bsp. wenn am Tag bisher keine Zähleränderung stattfand, wird "_EnergyDay" nicht mit "0" angezeigt, sondern enthält den Wert vom Tag vorher(?).

Vielleicht hat ja jemand eine Idee?
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

breitbanddilettant

Zitat von: Sailor am 27 Januar 2020, 09:42:45
Hallo Konstantin

Ich würde mal den Verdacht äußern, indem du das Atrribut "poll_interval" entsprechend hochsetzt.
Siehe https://fhem.de/commandref.html#RPI_GPIO
Habe aber solch einen Counter nicht im Einsatz - Daher Angaben ohne Gewähr.

Ansonsten bleibt dir nur der Umweg ein "at" mit einem Intervall t zu programmieren und den Counter in einen dummy zu schreiben, auf welchen du dann mittels Electricity-Counter zugreifst.

Gruß
    Sailor

Gruß
    Sailor

Hi Sailor,
ich habe das Poll-Intervall hochgesetzt, hat trotzdem alles nichts gebracht. Würdest du mir den Gefallen tun, und mach nachschauen, ob das ElectricityCalculator Modul, im Zustand der letzten offiziellen Version, sicher auch Werte über 1.8kW messen kann? Irgendwie glaube ich immernoch, dass das Problem was mit folgenden Zeilen zu tun hat:


### Continue with calculations only if time difference is larger than 1 seconds to avoid "Illegal division by zero" and erroneous due to small values for divisor
if ($ElectricityCountReadingTimestampDelta > 1)


Ich bin ja nicht der einzige, bei dem es nicht über 1800W geht. Erst mit >0 komme ich dann auf 3600W. Aber höher schaffe ich einfach nicht.

Danke,
Konstantin

Sailor

Hallo Konstantin

Zitat von: breitbanddilettant am 31 Januar 2020, 15:27:23
Hi Sailor,
ich habe das Poll-Intervall hochgesetzt, hat trotzdem alles nichts gebracht. Würdest du mir den Gefallen tun, und mach nachschauen, ob das ElectricityCalculator Modul, im Zustand der letzten offiziellen Version, sicher auch Werte über 1.8kW messen kann? Irgendwie glaube ich immernoch, dass das Problem was mit folgenden Zeilen zu tun hat:

Gerne - Anbei mein Plot - Man kann erkennen, dass der Wert bis 8000W hochgeht.

Mein HM-ES-TX-WM liefert mir die Werte bei folgenden Parametern:

Abtastrate: 75 Impulse / kWh
Abtasttintervall:  180 Sekunden

Wenn Ihr meine EXCEL - Tabelle mit diesen Daten füttert, dann kommt ihr mit den Leistungsdaten aus dem Bild auf genau diese Fehler-Ausschläge.

Ich habe einen Quercheck gemacht, da ich in der glücklichen Lage bin, dass der HM-ES-TX-WM ebenfalls eine Leistungsmessung durchführt.

Mein GasCalculator Wert ist auf
CH_ElectricityCounter_IEC_01_energyCalc_PowerCurrent 1516.981 2020-02-01 12:42:03

Mein CH_ElectricityCounter_IEC_01 liefert mir unabhängig einen Power Wert von
power 1436  2020-02-01 12:42:04

Dei 80W Unterschied lassen wir mal großzügig unter den Tisch fallen.  ;)

Also entweder zählt euer Zähler-Modul nicht alle Impulse oder bei Euch schlägt der Digitalfehler voll zu.
Dazu muß man versuchen dem GasCalculator nicht so schnell alle Impulse zu übertragen. Der Fehler wird umso kleiner, je größer das Abtastintervall ist. 1 Sekunde ist definitiv zu klein.

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

appi

Hallo
ich benutze das Modul seit geraumer Zeit und es funktioniert sehr gut. Die Daten kommen von einem KNX Zähler  3 Phasen Vorwärts-/Rückwärtszähler.
Unser Stromlieferant hat unterschiedliche Tag und Nachttarife. Bisher habe ich mit einem Mittelwert gerechnet, was auch funktioniert.
Hat jemand schon eine Doppeltarif Berechnung eingebaut oder gibt es sowas schon? Die Suche hat leider nichts ergeben und so möchte ich gerne die Runde fragen.
gruss Remo

R1F800

Zitat von: breitbanddilettant am 08 Januar 2020, 12:29:33
.....


define GPIO15 RPI_GPIO 22
attr GPIO15 active_low no
attr GPIO15 direction Input
attr GPIO15 event-on-change-reading .*
attr GPIO15 event-on-update-reading .*
attr GPIO15 interrupt falling
attr GPIO15 room Electric Energy Counter



define WPVerbrauch ElectricityCalculator GPIO22.*




Nun habe ich das Problem, dass bei schnellen S0 Pulsen das Delta dazwischen nicht genau genug aufgelöst wird und daher das reading "GPIO15_Counter_PowerCurrent" eher nach

Ich habe mal meine funktionierende Konfiguration oben hingeschrieben ...
Der GPIO ist bei mir auch ein counter, das siehst du aber nicht im define ...

FunkOdyssey

#522
Diese Frage gab es hier schon öfters, aber ich muss mich dennoch erkundigen.

Ich berechne mit dem EC-Modul den Energieverbrauch und die Kosten bei mehreren Einzelgeräten.
Gewisse Geräte sind aber nicht täglich eingeschaltet und somit sind die Werte in _EnergyCostDay und _EnergyDay natürlich nicht korrekt.
Das Modul kann nichts für diesen Umstand, aber weiß jemand was ich nach dem Tageswechsel für einen Befehl absetzen kann, damit das EC-Modul den Tageswechsel mitbekommt? Ich dachte, ich könnte mich am addLog-Skript orientieren, aber das ist leider wirkungslos.

trigger device counterreading <alterWert>

Ich habe auch bewusst kein event-on-change-reading bzw. event-on-update-reading gesetzt.




Ich stelle gerade beim Schreiben fest, dass es wie folgt funktioniert:

setreading device counterreading <alterWert>

Merkwürdig. Ich dachte, dass ich das schon ausprobiert hatte.

Kann man den Wechsel der Readings (Tageswechsel) nicht auch irgendwie ins Modul einbauen?




Mir fällt leider auch auf, dass beim manuellen setreading (des gleichen Values) die Werte negativ werden:

EnergyDay: -0.000
EnergyCostDay: -0.000





Nachtrag: Ich hätte vielleicht vorher ein wenig lesen können. Hier im Thread wird ja quasi regelmäßig danach gefragt bzw. im Wiki erwähnt. Man sollte scheinbar zyklisch die Werte schreiben, um auch die PowerCurrent-Werte anzugleichen.
Im Thread ist auch oft von addLog die Rede. Aber hat dies jemand ans laufen bekommen? Auf Fragen dazu kamen leider kaum Antworten. Das EC-Modul scheint die Events dann zu ignorieren. Ist das normal?

@Sailor: Wie hat es dein Modul bei inveränderten Counter-Werten am liebsten?
setreading oder trigger?

FunkOdyssey

Zitat von: uxtuner am 11 November 2019, 08:53:13
habs  :)

{
return "%.2f" if( $READING =~ m/_value_CounterCurrent/ );
return "%.2f&nbsp€" if( $READING =~ m/_value_EnergyCost/ );
return "%.2f&nbspkWh" if( $READING =~ m/_value_Energy(Day|Month|Year)/ );
return "%.2f&nbsp€" if( $READING =~ m/_value_FinanceReserve/ )
}



Gerade gefunden. Sollte das nicht eigentlich &nbsp; heißen? Es fehlt also das Semikolon.

weckinghausencustoms

Kompatibilität von ElectricityCalculator mit ELTAKO Stromzähler

Die Hutschienen Stromzähler von Eltako mit S0-Ausgang haben "leider" 2000 Counts pro kW/h. Leider heisst soviel wie, es ist genauer, doppelte Readings, aber leider unterstützt die 73_ElectricityCalculator.pm diese Genauigkeit nicht, da die Werte druch die 4. Nachkommstelle bei dem Wert für ElectricityKwhPerCounts durch die Rundung auf nur 3 Stellen verloren geht

Dadurch schankt der PowerCurrent Wert für eine 60W Glühbirne ständig zwischen 0 und 120W! Das PowerDayAver Reading stimmt dann wieder

Wenn man manuell in der .pm Datei die "sprintf('%.3f'..." Rundung durch .4f ersetzt ist das Problem gelöst. Aber nur bis zum nächsten Update...

Vielleicht lässt sich dieser Fehler von den Administratoren ja beheben?

VG