Neues Modul: ElectricityCalculator

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

Vorheriges Thema - Nächstes Thema

amenomade

Zitat von: uxtuner am 26 November 2019, 10:04:51
der Server wurde nicht neu gestartet ...
Wurde aber heute nicht gestartet, oder? Heute hat ElectricityCalculator kein counter_pc:value:.* bekommen.

Das ist eben nicht egal was gezählt wird, da, wie geschrieben,
ZitatDie Readings werden erst kalkuliert, wenn ein passendes Event (Regex in DEF) erstellt wird.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

uxtuner

ok dann muss ich ein reading auslösen - leider hat das bis jetzt weder mit event-min-interval noch trigger funktioniert.
Viele Grüße
  Uwe

Intel NUC (VDR & FHEM), QNAP TS-453, OneWire (Temp. Sensor, 8-fach Schalter, Hub, Controller), Ebus (Wolf CGW-2, ISM7i), Fibaro (Flood Sensor, Wall Plug, 4 in 1 Sensor), Qubino (Flush 1D), Shelly (Plug S, H&T, 2.5, 1 PM), Tado (Thermostat V3+)

wuast94

hab dazu nur gefunden das es geht aber leider scheint es nirgends beschrieben zu sein.

Ich habe Steckdosen auf die ich dieses Modul gerne anwenden würde, allerdings habe ich keine Impulse sondern nur den Gesamtverbrauch in Wh (oder kWh gerade nicht sicher aber das ist ja nur ne umrechnungs sache).
Kann ich dieses Modul dennoch nutzen ? die werte werden nicht zurückgesetzt sondern dauerhaft weiter gezhählt.
Zigbee  Temp+Luftdruck+Humi Bewegungsmeldern Tür Kontakte, Klingel, TV, Denon, Schaltbare Steckdosen mit leistungsmessung, und weiteres

Homeassistant mit Nodered

breitbanddilettant

Hallo Zusammen,

ich nutze den ElectricityCalculator mit S0 Schnittstelle, um mir die aktuellen Verbrauchswerte meiner Wärmepumpe anzeigen zu lassen. Als Pin nehme ich den Pin15 (GPIO3) des Raspberry Pi 3b.

Das ganze ist so gelöst:


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-update-reading Counter
attr GPIO15 interrupt falling
attr GPIO15 room Electric Energy Counter
attr GPIO15 stateFormat Counter


define WPVerbrauch ElectricityCalculator GPIO15.Counter.*
setuuid WPVerbrauch 5e14a3b8-f33f-9858-d97f-ecbea71227cf39d3
attr WPVerbrauch BasicPricePerAnnum 0
attr WPVerbrauch Currency €;
attr WPVerbrauch ElectricityCounterOffset 0
attr WPVerbrauch ElectricityKwhPerCounts 0.001
attr WPVerbrauch ElectricityPricePerKWh 0.33
attr WPVerbrauch MonthOfAnnualReading 5
attr WPVerbrauch MonthlyPayment 0
attr WPVerbrauch ReadingDestination CalculatorDevice
attr WPVerbrauch SiPrefixPower W
attr WPVerbrauch room Electric Energy Counter


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 einem PWM Signal aussieht...
Ich habe auch ein Bild angehängt.

Eine Lösung wäre von den 1000lmp/s weg zu gehen, aber dann geht der interne Zähler meiner WP nicht mehr richtig.

Gibts ne Möglichkeit so eine Art "moving average" zu nutzen, das dann aus 5 Impulsen oder so das durchschnittliche Delta errechnet?

Bin natürlich auch offen für alternative Ideen :-)

Danke und schöne Grüße

breitbanddilettant

btw: ich habe es mit dieser Mittelwertbildung probiert

https://wiki.fhem.de/wiki/Gleitende_Mittelwerte_berechnen_und_loggen

Das Ergebnis ist eher ernüchternd. Das liegt vielleicht daran, dass die Mittelwertbildung über eine zu definierende Zeit, aber maximal 25 Einträge in einem Array, gemacht wird.

Das schaut dann so aus (grün ist der Mittelwert):

flummy1978

Hallöchen

oh mann fast ne halbe Stunde am Beitrag geschrieben, einmal falsche Taste gedrückt alles weg -.-  :'(

Nachdem mir im unten genannten Beitrag ein wenig im Verständnis geholfen wurde, bin ich dabei die Sachen abzulösen bzw zu überarbeiten.  Nun habe ich das Ganze mit Hilfe von HourCounter (Hauptsystem) Fhem2Fhem und ElectricityCalculator (Testsystem) weitesgehend zum laufen bekommen, aber dennoch sind da einige Fragen offen ( damit es am Ende auch korrekt funktioniert ). Wäre also schön, wenn sich da jemand nochmal die Zeit für nehmen könnte....

Zitat von: amenomade am 24 September 2019, 19:25:16
ElectricityCalculator berechnet den Verbrauch (statistische Werte) und die Kosten.
HourCounter zählt die Impulse.

Zunächst die Lists:
HourCounter (einer davon)
Internals:
   CFGFN     
   DEF        MQTT_wemoszaehler:zaehler:.1
   FUUID      5e17c4cc-f33f-8d79-42fa-fc1a1b43c780cabb
   NAME       wemoszaehler
   NR         4457
   NTFY_ORDER 50-wemoszaehler
   STATE      664
   TYPE       HourCounter
   VERSION    1.0.1.2 - 24.12.2014
   .attraggr:
   .attrminint:
   READINGS:
     2020-01-10 16:28:13   countsOverall   664
     2020-01-10 16:28:13   countsPerDay    664
     2020-01-10 16:28:13   state           664
     2020-01-10 16:28:13   tickChanged     664
     2020-01-10 01:27:07   tickDay         0
     2020-01-10 16:00:00   tickHour        15
     2020-01-10 01:27:07   tickMonth       0
     2020-01-10 16:28:13   tickUpdated     679
     2020-01-10 01:27:07   tickWeek        0
     2020-01-10 01:27:07   tickYear        0
     2020-01-10 16:28:13   value           1
   helper:
     OFF_Regexp
     ON_Regexp  MQTT_wemoszaehler:zaehler:.1
     calledByEvent
     changedTimestamp 2020-01-10 16:28:13
     forceClear
     forceDayChange
     forceHourChange
     forceMonthChange
     forceWeekChange
     forceYearChange
     isFirstRun
     sdRoundHourLast 1578668400
     value      1
     cmdQueue:
Attributes:
   DbLogExclude .*
   room       Keller


und das Device vom Modul:
Internals:
   DEF        (KG_haupt_zaehler|wemoszaehler):countsOverall:..*
   FUUID      5d878be9-f33f-8d79-5a40-e4e9972cc9d2b7e5
   NAME       Hauptzaehler
   NR         25
   NTFY_ORDER 10-Hauptzaehler
   REGEXP     (KG_haupt_zaehler|wemoszaehler):countsOverall:..*
   STATE      S7-Aktuell:         61.7 kwh
<br>
Schnitt(Max) : 37.1 (86.4) kwh
<br>
Zählerstand: 50103.500
<br><br>
WEMOS-Aktuell:         50.8 kwh
<br>
Schnitt(Max) : 37.4 (86.4) kwh
<br>
Zählerstand: 50088.840
   TYPE       ElectricityCalculator
   OLDREADINGS:
   READINGS:
     2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_CounterCurrent 50103.500
     2020-01-10 15:12:50   KG_haupt_zaehler_countsOverall_CounterDay1st 50081
     2020-01-10 15:13:15   KG_haupt_zaehler_countsOverall_CounterMeter1st 50102.06
     2020-01-10 15:13:15   KG_haupt_zaehler_countsOverall_CounterMeterLast 50102.050
     2020-01-10 15:14:40   KG_haupt_zaehler_countsOverall_CounterMonth1st 49912
     2020-01-10 15:13:15   KG_haupt_zaehler_countsOverall_CounterMonthLast 50102.050
     2020-01-10 15:13:43   KG_haupt_zaehler_countsOverall_CounterYear1st 49452
     2020-01-10 15:13:15   KG_haupt_zaehler_countsOverall_CounterYearLast 50102.050
     2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_EnergyCostDay 6.536
     2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_EnergyCostMeter 0.418
     2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_EnergyCostMonth 55.631
     2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_EnergyCostYear 189.261
     2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_EnergyDay 22.500
     2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_EnergyMeter 1.440
     2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_EnergyMonth 191.500
     2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_EnergyYear 651.500
     2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_FinanceReserve 235.332
     2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_MonthMeterReading 2
     2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_PowerCurrent 2571.429
     2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_PowerDayAver 1547.205
     2020-01-10 15:44:58   KG_haupt_zaehler_countsOverall_PowerDayMax 3600.000
     2020-01-10 16:41:18   kwh_aver        37.1
     2020-01-10 16:41:18   kwh_current     61.7
     2020-01-10 16:41:18   kwh_max         86.4
     2020-01-10 16:41:18   wemos_kwh_aver  37.4
     2020-01-10 16:41:18   wemos_kwh_current 50.8
     2020-01-10 16:41:18   wemos_kwh_max   86.4
     2020-01-10 16:41:18   wemoszaehler_countsOverall_CounterCurrent 50088.840
     2020-01-10 15:13:09   wemoszaehler_countsOverall_CounterDay1st 50081
     2020-01-10 15:13:01   wemoszaehler_countsOverall_CounterDayLast 50087.330
     2020-01-10 15:13:02   wemoszaehler_countsOverall_CounterMeter1st 50087.34
     2020-01-10 15:13:02   wemoszaehler_countsOverall_CounterMeterLast 50087.330
     2020-01-10 15:15:00   wemoszaehler_countsOverall_CounterMonth1st 49912
     2020-01-10 15:13:02   wemoszaehler_countsOverall_CounterMonthLast 50087.330
     2020-01-10 15:14:03   wemoszaehler_countsOverall_CounterYear1st 49980
     2020-01-10 15:13:02   wemoszaehler_countsOverall_CounterYearLast 50087.330
     2020-01-10 16:41:18   wemoszaehler_countsOverall_EnergyCostDay 2.278
     2020-01-10 16:41:18   wemoszaehler_countsOverall_EnergyCostMeter 0.436
     2020-01-10 16:41:18   wemoszaehler_countsOverall_EnergyCostMonth 51.372
     2020-01-10 16:41:18   wemoszaehler_countsOverall_EnergyCostYear 31.618
     2020-01-10 16:41:18   wemoszaehler_countsOverall_EnergyDay 7.840
     2020-01-10 16:41:18   wemoszaehler_countsOverall_EnergyMeter 1.500
     2020-01-10 16:41:18   wemoszaehler_countsOverall_EnergyMonth 176.840
     2020-01-10 16:41:18   wemoszaehler_countsOverall_EnergyYear 108.840
     2020-01-10 16:41:18   wemoszaehler_countsOverall_FinanceReserve 235.314
     2020-01-10 16:41:18   wemoszaehler_countsOverall_MonthMeterReading 2
     2020-01-10 16:41:18   wemoszaehler_countsOverall_PowerCurrent 2117.647
     2020-01-10 16:41:18   wemoszaehler_countsOverall_PowerDayAver 1559.346
     2020-01-10 15:45:12   wemoszaehler_countsOverall_PowerDayMax 3600.000
     2020-01-10 15:13:01   wemoszaehler_countsOverall_PowerDayMin 0
   helper:
     gets:
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_CounterCurrent 50103.500
       2020-01-10 15:12:50   KG_haupt_zaehler_countsOverall_CounterDay1st 50081
       2020-01-10 15:13:15   KG_haupt_zaehler_countsOverall_CounterMeter1st 50102.06
       2020-01-10 15:13:15   KG_haupt_zaehler_countsOverall_CounterMeterLast 50102.050
       2020-01-10 15:14:40   KG_haupt_zaehler_countsOverall_CounterMonth1st 49912
       2020-01-10 15:13:15   KG_haupt_zaehler_countsOverall_CounterMonthLast 50102.050
       2020-01-10 15:13:43   KG_haupt_zaehler_countsOverall_CounterYear1st 49452
       2020-01-10 15:13:15   KG_haupt_zaehler_countsOverall_CounterYearLast 50102.050
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_EnergyCostDay 6.536
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_EnergyCostMeter 0.418
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_EnergyCostMonth 55.631
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_EnergyCostYear 189.261
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_EnergyDay 22.500
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_EnergyMeter 1.440
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_EnergyMonth 191.500
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_EnergyYear 651.500
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_FinanceReserve 235.332
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_MonthMeterReading 2
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_PowerCurrent 2571.429
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_PowerDayAver 1547.205
       2020-01-10 15:44:58   KG_haupt_zaehler_countsOverall_PowerDayMax 3600.000
       2020-01-10 16:41:18   kwh_aver        37.1
       2020-01-10 16:41:18   kwh_current     61.7
       2020-01-10 16:41:18   kwh_max         86.4
       2020-01-10 16:41:18   wemos_kwh_aver  37.4
       2020-01-10 16:41:18   wemos_kwh_current 50.8
       2020-01-10 16:41:18   wemos_kwh_max   86.4
       2020-01-10 16:41:18   wemoszaehler_countsOverall_CounterCurrent 50088.840
       2020-01-10 15:13:09   wemoszaehler_countsOverall_CounterDay1st 50081
       2020-01-10 15:13:01   wemoszaehler_countsOverall_CounterDayLast 50087.330
       2020-01-10 15:13:02   wemoszaehler_countsOverall_CounterMeter1st 50087.34
       2020-01-10 15:13:02   wemoszaehler_countsOverall_CounterMeterLast 50087.330
       2020-01-10 15:15:00   wemoszaehler_countsOverall_CounterMonth1st 49912
       2020-01-10 15:13:02   wemoszaehler_countsOverall_CounterMonthLast 50087.330
       2020-01-10 15:14:03   wemoszaehler_countsOverall_CounterYear1st 49980
       2020-01-10 15:13:02   wemoszaehler_countsOverall_CounterYearLast 50087.330
       2020-01-10 16:41:18   wemoszaehler_countsOverall_EnergyCostDay 2.278
       2020-01-10 16:41:18   wemoszaehler_countsOverall_EnergyCostMeter 0.436
       2020-01-10 16:41:18   wemoszaehler_countsOverall_EnergyCostMonth 51.372
       2020-01-10 16:41:18   wemoszaehler_countsOverall_EnergyCostYear 31.618
       2020-01-10 16:41:18   wemoszaehler_countsOverall_EnergyDay 7.840
       2020-01-10 16:41:18   wemoszaehler_countsOverall_EnergyMeter 1.500
       2020-01-10 16:41:18   wemoszaehler_countsOverall_EnergyMonth 176.840
       2020-01-10 16:41:18   wemoszaehler_countsOverall_EnergyYear 108.840
       2020-01-10 16:41:18   wemoszaehler_countsOverall_FinanceReserve 235.314
       2020-01-10 16:41:18   wemoszaehler_countsOverall_MonthMeterReading 2
       2020-01-10 16:41:18   wemoszaehler_countsOverall_PowerCurrent 2117.647
       2020-01-10 16:41:18   wemoszaehler_countsOverall_PowerDayAver 1559.346
       2020-01-10 15:45:12   wemoszaehler_countsOverall_PowerDayMax 3600.000
       2020-01-10 15:13:01   wemoszaehler_countsOverall_PowerDayMin 0
     sets:
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_CounterCurrent 50103.500
       2020-01-10 15:12:50   KG_haupt_zaehler_countsOverall_CounterDay1st 50081
       2020-01-10 15:13:15   KG_haupt_zaehler_countsOverall_CounterMeter1st 50102.06
       2020-01-10 15:13:15   KG_haupt_zaehler_countsOverall_CounterMeterLast 50102.050
       2020-01-10 15:14:40   KG_haupt_zaehler_countsOverall_CounterMonth1st 49912
       2020-01-10 15:13:15   KG_haupt_zaehler_countsOverall_CounterMonthLast 50102.050
       2020-01-10 15:13:43   KG_haupt_zaehler_countsOverall_CounterYear1st 49452
       2020-01-10 15:13:15   KG_haupt_zaehler_countsOverall_CounterYearLast 50102.050
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_EnergyCostDay 6.536
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_EnergyCostMeter 0.418
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_EnergyCostMonth 55.631
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_EnergyCostYear 189.261
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_EnergyDay 22.500
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_EnergyMeter 1.440
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_EnergyMonth 191.500
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_EnergyYear 651.500
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_FinanceReserve 235.332
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_MonthMeterReading 2
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_PowerCurrent 2571.429
       2020-01-10 16:41:12   KG_haupt_zaehler_countsOverall_PowerDayAver 1547.205
       2020-01-10 15:44:58   KG_haupt_zaehler_countsOverall_PowerDayMax 3600.000
       2020-01-10 16:41:18   kwh_aver        37.1
       2020-01-10 16:41:18   kwh_current     61.7
       2020-01-10 16:41:18   kwh_max         86.4
       2020-01-10 16:41:18   wemos_kwh_aver  37.4
       2020-01-10 16:41:18   wemos_kwh_current 50.8
       2020-01-10 16:41:18   wemos_kwh_max   86.4
       2020-01-10 16:41:18   wemoszaehler_countsOverall_CounterCurrent 50088.840
       2020-01-10 15:13:09   wemoszaehler_countsOverall_CounterDay1st 50081
       2020-01-10 15:13:01   wemoszaehler_countsOverall_CounterDayLast 50087.330
       2020-01-10 15:13:02   wemoszaehler_countsOverall_CounterMeter1st 50087.34
       2020-01-10 15:13:02   wemoszaehler_countsOverall_CounterMeterLast 50087.330
       2020-01-10 15:15:00   wemoszaehler_countsOverall_CounterMonth1st 49912
       2020-01-10 15:13:02   wemoszaehler_countsOverall_CounterMonthLast 50087.330
       2020-01-10 15:14:03   wemoszaehler_countsOverall_CounterYear1st 49980
       2020-01-10 15:13:02   wemoszaehler_countsOverall_CounterYearLast 50087.330
       2020-01-10 16:41:18   wemoszaehler_countsOverall_EnergyCostDay 2.278
       2020-01-10 16:41:18   wemoszaehler_countsOverall_EnergyCostMeter 0.436
       2020-01-10 16:41:18   wemoszaehler_countsOverall_EnergyCostMonth 51.372
       2020-01-10 16:41:18   wemoszaehler_countsOverall_EnergyCostYear 31.618
       2020-01-10 16:41:18   wemoszaehler_countsOverall_EnergyDay 7.840
       2020-01-10 16:41:18   wemoszaehler_countsOverall_EnergyMeter 1.500
       2020-01-10 16:41:18   wemoszaehler_countsOverall_EnergyMonth 176.840
       2020-01-10 16:41:18   wemoszaehler_countsOverall_EnergyYear 108.840
       2020-01-10 16:41:18   wemoszaehler_countsOverall_FinanceReserve 235.314
       2020-01-10 16:41:18   wemoszaehler_countsOverall_MonthMeterReading 2
       2020-01-10 16:41:18   wemoszaehler_countsOverall_PowerCurrent 2117.647
       2020-01-10 16:41:18   wemoszaehler_countsOverall_PowerDayAver 1559.346
       2020-01-10 15:45:12   wemoszaehler_countsOverall_PowerDayMax 3600.000
       2020-01-10 15:13:01   wemoszaehler_countsOverall_PowerDayMin 0
   system:
     SiPrefixPowerFactor 1
Attributes:
   BasicPricePerAnnum 145.50
   Currency   €
   ElectricityCounterOffset 50082
   ElectricityKwhPerCounts 0.01
   ElectricityPricePerKWh 0.2905
   MonthOfAnnualReading 12
   MonthlyPayment 130
   ReadingDestination CalculatorDevice
   SiPrefixPower W
   devStateStyle style="text-align:left;;"
   event-on-change-reading .*
   icon       measure_power
   room       Stromzaehler
   stateFormat S7-Aktuell:         kwh_current kwh
<br>
Schnitt(Max) : kwh_aver (kwh_max) kwh
<br>
Zählerstand: KG_haupt_zaehler_countsOverall_CounterCurrent
<br><br>
WEMOS-Aktuell:         wemos_kwh_current kwh
<br>
Schnitt(Max) : wemos_kwh_aver (wemos_kwh_max) kwh
<br>
Zählerstand: wemoszaehler_countsOverall_CounterCurrent
   userReadings kwh_current { sprintf("%.1f", (ReadingsNum($name,"KG_haupt_zaehler_countsOverall_PowerCurrent",0)*24/1000 ))},
kwh_aver { sprintf("%.1f", (ReadingsNum($name,"KG_haupt_zaehler_countsOverall_PowerDayAver",0)*24/1000 ))},
kwh_max { sprintf("%.1f", (ReadingsNum($name,"KG_haupt_zaehler_countsOverall_PowerDayMax",0)*24/1000 ))},
wemos_kwh_current { sprintf("%.1f", (ReadingsNum($name,"wemoszaehler_countsOverall_PowerCurrent",0)*24/1000 ))},
wemos_kwh_aver { sprintf("%.1f", (ReadingsNum($name,"wemoszaehler_countsOverall_PowerDayAver",0)*24/1000 ))},
wemos_kwh_max { sprintf("%.1f", (ReadingsNum($name,"wemoszaehler_countsOverall_PowerDayMax",0)*24/1000 ))}


Der Zähler der vom HourCounter gefüttert wird ist ein Wemos D1 Mini das die S0 10 Impulse zählt und dann ein Impuls an Fhem schickt. Im ElectricityCalculator ist dann wiederum  ElectricityKwhPerCounts 0.01 eingestellt. Hier sind bereits zwei Zähler drin um es auf später und mehrere Zähler vorzubereiten.

1. Nun habe ich vom HourCounter das Reading countsOverall als Impuls für den ElectricityCalculator genommen -> Ist das korrekt ?
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 ?

4... Fällt mir sicher wieder ein, wenn ich am Basteln bin  ::)

Vielen Dank schon im Vorraus

Grüße
Andreas

breitbanddilettant

#501
Hallo Zusammen,

ich habe es jetzt mit dem event-aggregator geschafft, mir einen sinnvollen Mittelwert der aktuell aufgenommenen Leistung bilden zu lassen. Allerdings habe auch ich das Problem, dass die aktuelle Leistungsaufnahme nur bis 1800W reicht.

Bei 1000lmp/kWh käme das ja exakt einem Impuls alle zwei Sekunden gleich. Das erscheint mir ein sehr runder Wert zu sein...

Woran kann das liegen?

Danke und schöne Grüße

breitbanddilettant

#502
Hallo nochmal,

ich weiß nicht, ob ich hier code posten darf, aber ich glaube es liegt an zeile 688 bis 694. Nur wenn die Zeit zwischen zwei Pulse größer 1s gehts in die if Schleife. >=1 würde dann schonmal 3.6kW erlauben. Aber dann wären wir auch an der maximalen zeitlichen Auflösung, die die Funktion ReadingsTimestamp erlaubt (eine Sekunde ist kleinste Einheit). Oder sehe ich da was falsch?

Das würde dann auch erklären, warum bei große Leistungsaufnahmen (im kW Bereich) die Granularität schlecht wird.

Wenn das so stimmt dann sähe das für verschiedene Delta-t so aus:
2s=1.8kW, 3s=1.2kW, 4s=0.9kW

Zur Veranschaulichung habe ich mal einen Plot von heute angehängt.

Kann man mit einer anderen Funktion den timestamp genauer auflösen? Und wenn ja, könnte man das dann einbauen? Ich bin leider überhaupt nicht firm in Perl :-(

Schöne Grüße

flummy1978

Hallo Herr Dilettant  ;D

leider scheint sich aktuell niemand mit dem Modul befassen (zu wollen) oder die Leute antworten nur noch in anderen Beiträgen, die ich auch noch nicht entdeckt hab.... Wie dem auch sei, ich warte ja auch noch auf Antworten (wobei ich da nicht mehr sehr viel Hoffnung habe, wenn jetzt noch mehr Beiträge dazu kommen)... Aber dennoch kann ich mal versuchen zu helfen:

Ich weiss nicht wie Du das aufgebaut hast, aber ist das der Hauptzähler? Wenn ja, wäre ich froh, wenn ich mit 3000 Watt (Sprich 3 KW/ Tag) Maximalverbrauch auskommen würde -.-   ::) Wie überträgst Du die Daten an Fhem bzw das betreffende Reading? Du musst das Ganze ein wenig "entkräften". Um mit dem Zitat zu arbeiten, das mir dabei selbst geholfen hat:
Zitat von: amenomade am 24 September 2019, 19:25:16
ElectricityCalculator berechnet den Verbrauch (statistische Werte) und die Kosten.
HourCounter zählt die Impulse.

Das bedeutet, dass irgendwas anderes zählen muss und dieses Modul hier nur noch die Statistischen Aufgaben übernimmt. Ich habe es auf die Weise gelöst, dass meine Zähler (alle funktionieren mit 1000Imp / kwh) den S0 Kontakt an einem ESP Chip übertragen. Dort werden sie gezählt und wenn 10 Impulse zusammen sind, dann wird ein entsprechendes Reading auf den Wert 1 gesetzt -> der interne bis 10 zähler resetet und das Reading wieder auf 0 gesetzt -> Dann gehts wieder von vorn los. Dazu musste ich natürlich im ElectricityCalculator den Wert ElectricityKwhPerCounts auf 0.01 setzen. Es ist zwar noch der Testaufbau, aber im Eventmonitor sieht das Ganze dann so aus:

2020-01-21 02:14:30.275 MQTT2_DEVICE MQTT_wemoszaehler zaehler: 1
2020-01-21 02:14:30.650 MQTT2_DEVICE MQTT_wemoszaehler zaehler: 0
2020-01-21 02:15:31.515 HourCounter wemoszaehler countsOverall: 16071
2020-01-21 02:15:31.519 MQTT2_DEVICE MQTT_wemoszaehler zaehler: 1
2020-01-21 02:15:31.943 MQTT2_DEVICE MQTT_wemoszaehler zaehler: 0
2020-01-21 02:16:30.938 HourCounter wemoszaehler countsOverall: 16072
2020-01-21 02:16:30.941 MQTT2_DEVICE MQTT_wemoszaehler zaehler: 1
2020-01-21 02:16:31.349 MQTT2_DEVICE MQTT_wemoszaehler zaehler: 0
...usw

Jeder 10 Impuls ist dann auch bei meinem Megaverbrauch so, dass er schön entprellt werden kann und sicher nicht doppelt zählt. Jede Kontrolle von dem Testzähler bestätigt mich dass es perfekt läuft.
Nachteil ist lediglich, wenn die Verbindung mal hakt (egal in welcher Form) hakt auch der Zähler. Aber das ist bei jeder nicht drahtgebundenen Variante so.

Wenn Du Fragen hast, her damit, vielleicht kann ich ja auch helfen. Ansonsten kannst Du Dir auch meine Lists oben anschauen, vielleicht helfen sie Dir auch weiter.

Grüße
Andreas

breitbanddilettant

#504
Hallo Andreas,

vielen Dank für deine Rückmeldung  :)

Vielleicht eine Info zu dem gezeigten Plot: Es wird die momentane Leistungsaufnahme meiner Wärmepumpe getracked.

Meine Konfiguration ist soweit ziemlich straightforward:

Stromzähler mit 1000lmp/kWh S0 Ausgang -> GPIO Pin am Raspberry PI -> Einen Counter für diesen GPIO eingerichtet -> dessen Counts werden an den ElectricityCalculator weitergegeben

Habe alles so gemacht, wie hier beschrieben: https://wiki.fhem.de/wiki/ElectricityCalculator
Einen HourCounter brauche ich meiner Meinung also nicht.

Nun zurück zu meinem vorherigen Post.
So wie ich das sehe, berechnet der ElectricityCalculator die momentane Leistungsaufnahme anhand der zeitlichen Differenz zweier Pulse (das ist grundsätzlich auch die sauberste Methode, da nicht gemittelt werden muss), dann ist die Auflösung durch die Genauigkeit der Timestamps eben dieser Pulse (und natürlich auch die Geschwindigkeit der GPIOs) limitiert. Wenn diese Timestamps aber nur in Sekundenschritten ermittelt werden, dann schlägt meine obige Annahme zu, dass bei hohen Leistungsaufnahmen mit vielen Pulsen die Auflösung schlecht wird.

Angenommen, der ElectricityCalculator kann nur delta-t in Sekundenzeitschritten auflösen, dann kann ja per Definition bei 1000lmp/kWh nicht mehr als 3600W ermittelt werden. Wenn dann noch die Bedingung gesetzt wird, dass delta-t größer 1 sein muss, dann gehen nicht mehr als 1800W. Und das ist das, was schon ein Vorredner wie auch ich bei unserem Zähler sehen - dieser steigt nämlich nicht über 1800.

Ich verbleibe mit der Hoffnung auf eine rege Diskussion  :)

Schöne Grüße,
Konstantin

flummy1978

Moinsen,

Zitat von: breitbanddilettant am 21 Januar 2020, 09:37:18
Stromzähler mit 1000lmp/kWh S0 Ausgang -> GPIO Pin am Raspberry PI -> Einen Counter für diesen GPIO eingerichtet -> dessen Counts werden an den ElectricityCalculator weitergegeben

Habe alles so gemacht, wie hier beschrieben: https://wiki.fhem.de/wiki/ElectricityCalculator
Einen HourCounter brauche ich meiner Meinung also nicht.

mal angenommen ich habe das was mir geholfen hat, richtig verstanden, dann brauchst Du in der Tat ein Zähler Modul:

Das ElectricityModul ignoriert Signale, die <1s ankommen (wohl auch um das sogg. Prellen und Fehlmessungen eindämmen zu können). Der HourCounter hingegen kommt auch mit mehren Impulsen in der Sekunde klar.  Angenommen Du hast 5 Impulse in einer Sekunde, dann kommt der ElectricityCalculator damit nicht klar, der HourCounter hingegen schon. DANN fragt der ElectricityCalculator den Wert ab ob das dann nach 1 5 oder 10 sek geschieht ist ja dann egal, weil die Anzahl abgefragt wird und nicht der Impuls.

Natürlich hast Du Recht, es wird dann zwischen den Werten gemittelt, aber ich denke die Ausschläge sind dann ignorierbar (mal abgesehen davon dass eine Wärmepumpe wie sie in Deinem Fall ist - Ganz sicher keine 0-100-0% Ausschläge haben sollte)

Hoffe das hilft (so habe ich es zumindest verstanden, als amenomade geschrieben hat:

    ElectricityCalculator berechnet den Verbrauch (statistische Werte) und die Kosten.
    HourCounter zählt die Impulse.

Grüße
Andreas

breitbanddilettant

#506
Tach,

das würde dann heißen, dass ich - sagen wir mal ab mehr als 15 Impulsen pro minute - mit dem HourCounter EINEN Count erzeuge, der dann vom ElectricityCalculator genutzt wird.
In anderen Worten: Ab einer bestimmten S0 Impulsrate müsste ich den direkten GPIO Counter mit dem "runtergeteilten" HourCounter ersetzten. Des Weiteren muss ich dann natürlich auch die Anzahl der lmp/kWh dementsprechend anpassen.

Richtig?

Sailor

#507
Hallo Konstantin, Andreas

danke, dass Ihr diesen Umstand mal zur Sprache bringt.
Anbei meine Anmerkungen als Modul-Author dazu.

Zitat von: breitbanddilettant am 21 Januar 2020, 09:37:18
So wie ich das sehe, berechnet der ElectricityCalculator die momentane Leistungsaufnahme anhand der zeitlichen Differenz zweier Pulse (das ist grundsätzlich auch die sauberste Methode, da nicht gemittelt werden muss), dann ist die Auflösung durch die Genauigkeit der Timestamps eben dieser Pulse (und natürlich auch die Geschwindigkeit der GPIOs) limitiert. Wenn diese Timestamps aber nur in Sekundenschritten ermittelt werden, dann schlägt meine obige Annahme zu, dass bei hohen Leistungsaufnahmen mit vielen Pulsen die Auflösung schlecht wird.

Angenommen, der ElectricityCalculator kann nur delta-t in Sekundenzeitschritten auflösen, dann kann ja per Definition bei 1000lmp/kWh nicht mehr als 3600W ermittelt werden. Wenn dann noch die Bedingung gesetzt wird, dass delta-t größer 1 sein muss, dann gehen nicht mehr als 1800W. Und das ist das, was schon ein Vorredner wie auch ich bei unserem Zähler sehen - dieser steigt nämlich nicht über 1800.

Fast richtig.

Je höher die Abtastrate des dt ist, je scheinbar genauer ist die momentane Leistungsanzeige.
Dies ist allerdings ein Trugschluss, da sobald die Anzahl der Impulse für kleine Leistungen kleiner werden fängt die Anzeige an zu springen und der momentane Fehler wird größer.
Dies liegt an der Tatsache, das der Einfluss des Fehlers der kleinsten anzuzeigenden Wertes bei kleiner werdenden dt prozentual immer größer wird.

Beispiel 1:
Leistungsaufnahme: P = 1kW (konstant)
Abtastrate               n = 1000/kWh
Messintervall           dt= 1s
Impulsetheor   k = P * t * n = 1kW * (1s / 3600s/h) * 1000/kWh = 0,2778 Impulse

Da aber nur ganzzahlige Impulse angezeigt werden können, ergibt sich folgendes Messbild:


t /s"Impulse Theoretisch""Count Impulse Real""Delta Impulse"PCal/kWPreal /kW
010,28   000   1
020,56   000   1
030,83   000   1
041,11   113,6   1
051,39   100   1
061,67   100   1
071,94   100   1
082,22   213,6   1
092,50   200   1
102,78   200   1
113,06   313,6   1
123,33   300   1
133,61   300   1
143,89   300   1
154,17   413,6   1
164,44   400   1
174,72   400   1
185,00   513,6   1
195,28   500   1
205,56   500   1
215,83   500   1
226,11   613,6   1

Es ist somit ersichtlich, das mit kleiner werdenden Leistungen dass das Messintervall oder die Abtastrate erhöht werden müssen, um den Fehler klein zu halten.

Ich hoffe das erklärt es ein wenig.

Nachtrag

Ich habe eine EXCEL Tabelle angehängt, die das Spiel ein wenig verdeutlichen sollen.
Bitte hierzu nur die 3 oberen grünen Felder verändern.

Gruß
    Sailor

******************************
Man wird immer besser...

breitbanddilettant

#508
Hallo Sailor,

vielen Dank für die Erklärung. Mit konstanter Abtastrate, so wie du es beschrieben hast, gibt das auch Sinn. Ich hatte übersehen, dass du in deinem Code nicht danach schaust, wann sich der Counter um 1 ändert. Statt dessen gehst du so ran, dass du praktisch schaust, um wieviel sich der Count geändert hat UND um wieviel sich der Timestamp geändert hat:

### Calculate Current Power P = DW/Dt[kWh/s] * 3600[s/h] * 1000 [1/k] / SiPrefixPowerFactor
my $ElectricityCalcPowerCurrent    = ($ElectricityCountReadingValueDelta / $ElectricityCountReadingTimestampDelta) * 3600 * 1000 / $ElectricityCalcDev->{system}{SiPrefixPowerFactor};


Daher sieht man auch diese deterministischen Sprünge im ElectricityCalcPowerCurrent. Denn die minimale zeitlich Auflösung ist 1s und minimale Count Auflösung ist 1 -> 1s & 1Count = 3.6kWh; 1s & 2Counts 7.2kWh; 2s & 1Count = 1.8kWh; ...
Da kommt also eine Art Mischung aus Puls-Weiten-Modulation und wertdiskrete Amplitudenmodulation raus.

Jetzt stellen sich mir noch zwei Fragen:
- das bedingt ja, dass der ElectricityCalcPowerCurrent stark springt und eigentlich tiefpass gefiltert werden müsste. Wäre es sinnvoll eine Mittelung zu integrieren, oder empfiehlst du hierfür den even-aggregator? Den nehme ich gerade zum Mitteln und bin nicht wirklich zufrieden.
- und noch wichtiger: woran kann es dann liegen, dass ElectricityCalcPowerCurrent bei mir trotzdem nicht über 1800W kommt? Habe wieder ein Bild angehängt. Ab 8:54Uhr ist die aktuelle Leistungsaufnahme genau bei 1.8kW/h und ändert sich auch kein Stück (Überschwinger sind Plot-technisch bedingt). Das glaube ich so nicht...

ah - eine dritte Frage noch: Das reading xxx_EnergyDay sollte doch gleich dem reading xxx_PowerDayAver * "Anzahl vergangener Tagesstunden" sein, oder? Irgendwie ist das bei mir nicht der Fall... die liegen einen Faktor 1.33 auseinander.

Vielen Dank für deinen Support  ;)

Grüße,
Konstantin

Sailor

Hallo Konstantin

Zitat von: breitbanddilettant am 21 Januar 2020, 20:22:38
- das bedingt ja, dass der ElectricityCalcPowerCurrent stark springt und eigentlich tiefpass gefiltert werden müsste. Wäre es sinnvoll eine Mittelung zu integrieren, oder empfiehlst du hierfür den even-aggregator? Den nehme ich gerade zum Mitteln und bin nicht wirklich zufrieden.
Ich könnte durchaus ein Attribut "PowerMeanOverCount" mit dem man die Mittelwertbreite angeben kann.
Im zweiten Schritt könnte man dann eine Art Automatik einbinden, welcher den Mittelwert nach PowerßWert und Abtastrate flexibel bestimmt.

Als Sofortmassnahme könntest du aber einfach von 1s auf 10s hochgehen.  ;)

Zitat von: breitbanddilettant am 21 Januar 2020, 20:22:38
- und noch wichtiger: woran kann es dann liegen, dass ElectricityCalcPowerCurrent bei mir trotzdem nicht über 1800W kommt? Habe wieder ein Bild angehängt. Ab 8:54Uhr ist die aktuelle Leistungsaufnahme genau bei 1.8kW/h und ändert sich auch kein Stück (Überschwinger sind Plot-technisch bedingt). Das glaube ich so nicht...
Hängt der Calculator an einem SteckdosenßMessgerät oder am Hauszähler?
1800W bei 230V sind immerhin schon die Hälfte einer Sicherung.

Zitat von: breitbanddilettant am 21 Januar 2020, 20:22:38
ah - eine dritte Frage noch: Das reading xxx_EnergyDay sollte doch gleich dem reading xxx_PowerDayAver * "Anzahl vergangener Tagesstunden" sein, oder? Irgendwie ist das bei mir nicht der Fall... die liegen einen Faktor 1.33 auseinander.
Hmm sagt mir nix. Muss ich mal genauer reinschauen.

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