FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: gestein am 15 Februar 2022, 17:13:59

Titel: Stromverbrauch aggregieren?
Beitrag von: gestein am 15 Februar 2022, 17:13:59
Hallo,

ich weiß, dass das Thema "Verbrauch" schon öfters diskutiert wurde.
Leider habe ich aber noch keine - für mich - wirklich gangbare Lösung gefunden.

Momentan messe ich mit einigen Shelly den Verbrauch meiner Großverbraucher und testweise ein paar Lampen.
Die Shellys sind über MQTT eingebunden und die Readings werden wie folgt befüllt:
shellies/shellyswitch25-xxx/relay/0/energy:.* relay_0_energy
  shellies/shellyswitch25-xxx/relay/0/energy:.* {'relay_0_kWh' => sprintf("%.2f",$EVENT/60/1000)}
  shellies/shellyswitch25-3C6105E5719F/relay/0/power:.* relay_0_power

Zusätzlich gibt es noch das folgenden userreading:
    relay_0_energy_total:relay_0_energy:.* monotonic {ReadingsNum("$name","relay_0_energy",0)}

Dann habe ich mal das Beispiel von Damian genommen:
https://forum.fhem.de/index.php/topic,84969.msg1207068.html#msg1207068 (https://forum.fhem.de/index.php/topic,84969.msg1207068.html#msg1207068)
Damit kann ich Werte pro Shelly für Tag, Monat und Jahr ausrechnen.

Jetzt würde ich natürlich gerne den Gesamtverbrauch je Gruppe (Lichter, Großverbraucher, gesamte Wohnung) ausrechnen.
Wie gehe ich das am besten an?

Einfach ein Dummy definieren, aber zählt man die Werte dann einfach zusammen?
Über ein at oder DOIF jede Stunde (Tag, Monat, Jahr) die Werte aufsummieren?

Wie macht ihr das?

Vielen Dank im Voraus
liebe Grüße
Gerhard
Titel: Antw:Stromverbrauch aggregieren?
Beitrag von: Damian am 15 Februar 2022, 17:24:30
Du kannst die Aggregation mehrerer Werte ebenfalls im DOIF realisieren, siehe: https://fhem.de/commandref_DE.html#DOIF_aggregation
Titel: Antw:Stromverbrauch aggregieren?
Beitrag von: gestein am 15 Februar 2022, 19:30:41
Hallo Damian,

Danke.
Momentan fehlt mir aber noch das Hintergrundwissen.

Was zähle ich eigentlich korrekterweise wie zusammen?

Die Shellys liefern die folgenden Werte:
- ca. jede Minute ein update des Readings "energy", wenn der Verbaucher an ist. Die Einheit ist lt. Doku Wmin:
2022-02-15_18:43:11 MQTT2_shellydimmer2_40F52001B3D1 energy: 48159
2022-02-15_18:44:14 MQTT2_shellydimmer2_40F52001B3D1 energy: 48196
2022-02-15_18:45:16 MQTT2_shellydimmer2_40F52001B3D1 energy: 48233
2022-02-15_18:46:13 MQTT2_shellydimmer2_40F52001B3D1 energy: 48270
2022-02-15_18:47:18 MQTT2_shellydimmer2_40F52001B3D1 energy: 48307
2022-02-15_18:48:19 MQTT2_shellydimmer2_40F52001B3D1 energy: 48343

- wenn der Shelly eingeschalten wird, zeigt das Reading "power" die aktuelle Leistung in Watt.
  In dem Fall hier: 37.37W

In diesem Beispiel steigt "energy" jede Minute um 37Wmin.
D.h., 37Wmin*60/60min = 37W.
Das sollte also stimmen. Ist das richtig gerechnet?

Nun müsste ich das DOIF z.B. jede Stunde laufen lassen und den Anstieg des Readings "energy" in dieser Stunde errechnen.
Soweit ich das verstanden habe, passiert das auch so in Deinem DOIF (zwar nicht jede Stunde, aber für jeden Tag). Richtig?

Also müsste ich den Anstieg in allen relevanten Shellys in dieser Stunde addieren. Und den Wert kann ich dann in kWh umrechnen.
Damit hätte ich den Verbrauch in dieser Stunde.

Ähnliches mache ich mit den Werten für den Tag, das Monat und das Jahr.

Stimmt die Vorgehensweise so?

Danke im Voraus
lg, Gerhard
Titel: Antw:Stromverbrauch aggregieren?
Beitrag von: Damian am 15 Februar 2022, 20:14:34
Meine Beispieldefinition bezieht sich auf Zähler, die aufsteigend die Energie z. B. in kWh zählen. Diese Zählerstände werden am Tagesanfang, Monatsanfang und Jahresanfang festgehalten, so dass man über Differenzbildung festhalten kann, wieviel am Tag, Monat, Jahr Energie verbraucht worden ist.

Dein Shelly liefert aktuelle Leistung. Um daraus Energie zu bestimmen musst du Leistung*Zeit rechnen. Besser ist es, wenn es das Device selbst macht, denn innerhalb einer Minute können starke Schwankungen aufgetreten, die man nicht mitbekommt, die das Ergebnis erheblich verfälschen können. Im Grunde ist es ein Intergral der Leistung über die Zeit.

Ich meine, dass ein Shelly neben der Leistung auch die Energie errechnet, siehe Reading: relay_0_energy. Die sollte man statt relay_0_power  für den Verbrauch nutzen.

Wenn du in deinem DOIF die einzelnen Zimmer dann im last_day festgehalten hast, dann kannst du für alle Readings, die mit last_day enden, die Summe des Tages um 00:01 Uhr berechnen.

set_Reading("sum_last_day",[?#sum:"^$SELF$":"last_day$"])
Titel: Antw:Stromverbrauch aggregieren?
Beitrag von: Helmi55 am 17 Februar 2022, 09:55:38
Ich hoffe ich habe die Frage richtig verstanden?
Ich rechne bei meiner BalkonPV Anlage mit statistics
So habe ich die "Ernte" pro Tag, Monat und Jahr
defmod Ertrag_kWh_EM statistics MQTT2_shellyem_xyz|emeter_0_kWh
attr Ertrag_kWh_EM deltaReadings emeter_0_kWh
attr Ertrag_kWh_EM room PVAnlage
attr Ertrag_kWh_EM singularReadings MQTT2_shellyem_xyz:emeter_0_kWh:Delta:(Hour|Day|Month|Year)


User readings vom Shelly
attr MQTT2_shellyem_xyz userReadings emeter_0_energy_total:emeter_0_energy:.* monotonic {ReadingsNum($name,'emeter_0_energy',0)}, emeter_1_energy_total:emeter_1_energy:.* monotonic {ReadingsNum($name,'emeter_1_energy',0)},\
Ertrag_Tag:statEmeter_0_kWhDay.* { sprintf("%.2f",(ReadingsVal($NAME,"statEmeter_0_kWhDay",0) - 0.0)*.2);;;;},\
Ertrag_Monat:statEmeter_0_kWhMonth.* { sprintf("%.2f",(ReadingsVal($NAME,"statEmeter_0_kWhMonth",0) - 0.0)*.2);;;;},\
Ertrag_Jahr:statEmeter_0_kWhYear.* { sprintf("%.2f",(ReadingsVal($NAME,"statEmeter_0_kWhYear",0) - 0.0)*.2);;;;}


Dann eine rg
defmod rg_PVErtrag_neu readingsGroup <>,<kWh>,<€>,<Zeit>\
MQTT2_shellyem_.*:fs_free,statEmeter_0_kWhDay,Ertrag_Tag,<{ReadingsTimestamp($DEVICE,"statEmeter_0_kWhDay","")}>\
MQTT2_shellyem_.*:fs_size,statEmeter_0_kWhMonth,Ertrag_Monat,<{ReadingsTimestamp($DEVICE,"statEmeter_0_kWhMonth","")}>\
MQTT2_shellyem_.*:fw_ver,statEmeter_0_kWhYear,Ertrag_Jahr,<{ReadingsTimestamp($DEVICE,"statEmeter_0_kWhYear","")}>
attr rg_PVErtrag_neu alias Ernte PV Anlage kWh und €
attr rg_PVErtrag_neu nonames 1
attr rg_PVErtrag_neu room PVAnlage
attr rg_PVErtrag_neu valueFormat {\
  if ($READING eq "fs_free") {\
    return 'Tag';;\
  } elsif ($READING eq "fs_size") {\
    return 'Monat';;\
  } elsif ($READING eq "fw_ver") {\
    return 'Jahr';;\
  } else {\
    return $VALUE;;\
  }\
}



und sieht dann so aus:

Geht dann auch noch mit einem schönen täglichen Balkendiagram
Ist natürlich nicht alles auf meinem Mist gewachsen. War sehr viel Hilfe vom Forum dabei - Danke

Gruß
Helmut
Titel: Antw:Stromverbrauch aggregieren?
Beitrag von: Damian am 17 Februar 2022, 11:23:28
Die Frage bezog sich eher auf die Summation über verschiedene Devices.

Die Funktionalität von statistics wurde bereits über DOIF geregelt, siehe erster Link.

Hier wird sowohl pro Device Tag/Monat/Jahr gesammelt, als auch für mehrere Devices summiert:

https://forum.fhem.de/index.php/topic,84969.msg1208710.html#msg1208710
Titel: Antw:Stromverbrauch aggregieren?
Beitrag von: Guybrush am 17 Februar 2022, 11:38:40
wenn die Werte immer alle gleichzeitig aktualisiert werden und du den jeweiligen IST Verbrauch wissen willst, dann kannst du auch ein dummy device anlegen und ein notify auf ein deiner shelly devices legen und darin dann den Gesamtverbrauch über


{fhem "set <dummy> ".(ReadingsNum(<device1>,'state',0)+ReadingsNum(<device2>,'state',0)+ReadingsNum(<device3>,'state',0)+...);}


errechnen und in das dummy device schreiben. so mache ich das, um beispielsweise meinen IST Verbrauch zu messen, der sich aus dem Bezug der Wirkleistung aus dem Stromnetz & Erzeugung meiner PV Anlage ergibt. Ohne Dummydevice kannst du das sonst alternativ auch über stateFormat so machen, dann aber nur mit dem Teil ab ReadingsNum
Titel: Antw:Stromverbrauch aggregieren?
Beitrag von: Damian am 17 Februar 2022, 12:03:22
Zitat von: Guybrush am 17 Februar 2022, 11:38:40

{fhem "set <dummy> ".(ReadingsNum(<device1>,'state',0)+ReadingsNum(<device2>,'state',0)+ReadingsNum(<device3>,'state',0)+...);}


Es ist aber weniger flexibel die Readings explizit anzugeben, als die Summierung dynamisch vorzunehmen:

set_Reading("last_day_sum",[?#sum:"^$SELF$":"last_day$"])

Das funktioniert mit beliebig vielen Readings, auch wenn später welche dazukommen oder verschwinden.


Titel: Antw:Stromverbrauch aggregieren?
Beitrag von: Helmi55 am 17 Februar 2022, 12:04:01
@Damian
Danke und sorry - war dann wohl Thema verfehlt  :) :'(

Aber Danke für den Link - das muss ich mir dann genauer ansehen denn ich will vom Shelly Pro4PM Kanal 1 und 2 (Poolpumpe und Solarpumpe) summieren und meinem kleinen Kraftwerk
gegenüberstellen und auch im Graphen drüberlegen

Gruß
Helmut