Statistics (Stromverbrauch) [gelöst]

Begonnen von Rheingold, 23 Februar 2022, 08:58:02

Vorheriges Thema - Nächstes Thema

Rheingold

Hallo zusammen,

ja noch so einer der ne Frage zum Stromverbrauch in FHEM hat. Sorry... Ich habe schon etliche Stunden gesucht und einiges ausprobiert, aber irgendwie komme ich auf keinen grünen Zweig :(

Mein Szenario: Mit Hilfe von Shelly Plug S möchte ich den Verbrauch von z.B. Waschmaschine/Trockner tracken. Später evtl. auch noch ein Balkonkraftwerk (ist aber noch Zukunftsmusik).

Meine Definitions:

define Shelly_Plug_1 MQTT_DEVICE
attr Shelly_Plug_1 IODev Mosquitto
attr Shelly_Plug_1 event-on-change-reading Temperatur:0.2,Power
attr Shelly_Plug_1 publishSet on off shellies/shellyplug-s-DDB398/relay/0/command
attr Shelly_Plug_1 room Shelly
attr Shelly_Plug_1 subscribeReading_.* shellies/shellyplug-s-DDB398/relay/0
attr Shelly_Plug_1 subscribeReading_Power shellies/shellyplug-s-DDB398/relay/0/power
attr Shelly_Plug_1 subscribeReading_Temperatur shellies/shellyplug-s-DDB398/temperature
attr Shelly_Plug_1 subscribeReading_state shellies/shellyplug-s-DDB398/relay/0/command
define FileLog_Shelly_Plug_1 FileLog ./log/Shelly_Plug_1-%Y.log Shelly_Plug_1
attr FileLog_Shelly_Plug_1 logtype text
attr FileLog_Shelly_Plug_1 room Shelly
define Shelly_Plug_1_Statistik statistics Shelly_Plug_1
attr Shelly_Plug_1_Statistik deltaReadings Power
attr Shelly_Plug_1_Statistik minAvgMaxReadings Shelly_Plug_1:Power
attr Shelly_Plug_1_Statistik room Shelly
attr Shelly_Plug_1_Statistik singularReadings Shelly_Plug_1:Power:Delta:(Hour|Day|Month|Year)


Mein Problem:
Die Statistiken sind nicht richtig. Angeschlossen habe ich zum Testen eine 6W LED und bekomme auch ~6W Momentanverbrauch angezeigt. Die Summe der Statistik kann aber nicht stimmen. Hier die Readings mit eingeschalteter Lampe

statPower Hour: 6.07 Day: 6.07 Month: 6.07 Year: 6.07 (since: 2022-02-23_08:24:28 )
statPowerDay 6.07
statPowerHour 6.07
statPowerMonth 6.07
statPowerYear 6.07


Es bezieht sich immer auf dem Momentanverbrauch gegenüber 0 W Verbrauch. Stelle ich den Verbraucher aus, bekomme ich alle oben genannte Werte mit "0" angezeigt.

Was mache ich falsch? Bin für jeden Tipp dankbar :)
Fhem auf Raspi 3; Jeelink mit 6x TX29DTH; CUL433 mit 9x RCS 1000 N und Somfy-Steuerung; CUL868; MAX-Cube + Thermostate; Philips Hue & Ikea Tradfri; Google Home Assistant; FTUI für Tablet und SmartPhone via Reverse-Proxy

Kohle77

Hallo,
ich benutze einen shelly 1PM.
Die GUI, also die IP im des Shellys im Browser, zeigt 16W an.
Den Wert in FHEM greife ich über shellies/HzTemp/relay/0/power ab und in fhem bekomme ich 16.29.
Das passt also bei mir.
Bekommst du den die richtigen Werte auf dem MQTT übermittelt?
Ich benutze dazu mqtt.fx ( https://www.youtube.com/watch?v=1rjGhCE6Eow )

Gruß
Christian

Kohle77

Ich habe auf https://shelly-api-docs.shelly.cloud/gen1/#shelly-plug-plugs-overview
das gefunden:
ZitatMQTT topics used by Plug / PlugS (where <model> is either shellyplug or shellyplug-s):

    shellies/<model>-<deviceid>/relay/0 to report status: on, off or overpower
    shellies/<model>-<deviceid>/relay/0/power to report instantaneous power consumption rate in Watts
    shellies/<model>-<deviceid>/relay/0/energy to report amount of energy consumed in Watt-minute
    shellies/<model>-<deviceid>/relay/0/overpower_value reports the value in Watts, on which an overpower condition is detected
    shellies/<model>-<deviceid>/relay/0/command accepts on, off or toggle and applies accordingly

Shelly PlugS adds:

    shellies/shellyplug-s-<deviceid>/temperature reports internal device temperature in °C
    shellies/shellyplug-s-<deviceid>/temperature_f reports internal device temperature in °F
    shellies/shellyplug-s-<deviceid>/overtemperature reports 1 when device has overheated, normally 0
Gruß
Christian

Beta-User

Korrekt, es muss "energy" genutzt werden, und das "Format" ist nicht unbedingt "handelsüblich".

Deswegen gibt es für MQTT2_DEVICE diese Zeile:
shellies/DEVNAME/relay/0/energy:.* {'relay_0_kWh' => sprintf("%.2f",$EVENT/60/1000)}
Greift man dann das Ergebnis mit einem "monotonic"-userReadings-Eintrag ab, umgeht man auch das Problem, dass das immer wieder von 0 beginnt, wenn der Strom weg war.

PS: Die Anweisung an den Shelly in "state" zu schreiben erscheint mir auch nicht 100% korrekt...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Kohle77

Beta-User
Ich denke du meinst:
subscribeReading_energy shellies/HzTemp/relay/0/energy:.* {'relay_0_kWh' => sprintf("%.2f",$EVENT/60/1000)}
das ändert aber an meinem Reading nichts?
Zitat2022-02-23 10:14:55   energy          86058

Gruß
Christian

Helmi55

#5
HIer hast du ein Beispielmit Plug S
so messe ich den Verbrauch bei meinem Whirlpool
userReadings
relay_0_energy_kWh:relay_0_energy.* monotonic {ReadingsVal($NAME,"relay_0_energy",0)/60/1000.0}, Kosten:relay_0_energy_kWh.* { sprintf("%.2f",(ReadingsVal($NAME,"relay_0_energy_kWh",0) + 16.0)*.2);;}

Das +16 kannst du weglassen. war nur für mich ein Korrekturwert.
Mal .2 ist der letzte Strompreis (leider glaub ich Vergangenheit :-\)

und hier ein Shelly EM mit statistics für den Ertrag meines  Balkonkraftwerks:

defmod Ertrag_kWh_EM statistics MQTT2_shellyem_98CDAC1F0C40|emeter_0_kWh
attr Ertrag_kWh_EM deltaReadings emeter_0_kWh
attr Ertrag_kWh_EM room PVAnlage
attr Ertrag_kWh_EM singularReadings MQTT2_shellyem_98CDAC1F0C40:emeter_0_kWh:Delta:(Hour|Day|Month|Year)


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);;}



Gruß
Helmut
System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

Beta-User

Zitat von: Kohle77 am 23 Februar 2022, 10:16:46
Beta-User
Ich denke du meinst:
Nein. Das was ich gezeigt hatte, ist für MQTT2_DEVICE, und sowas geht mit MQTT_DEVICE nicht direkt, das muss der TE anpassen (z.B. auf dem Weg, den Helmi55 gezeigt hat).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Rheingold

Wow, vielen Dank für die vielen und schnellen Info! :) Ein paar weitere Fragen habe ich hieraus.

Zitat
shellies/<model>-<deviceid>/relay/0/energy to report amount of energy consumed in Watt-minute
Wenn ich das auslese bekomme ich den kumulierten Verbrauch vom Plug. Wann/wie kann ich den zurück setzen? Muss ich das überhaupt? Kann ich mit dem Statistik-Modul ein Delta darauf setzen?  ???

Zitat von: Helmi55 am 23 Februar 2022, 10:21:41
HIer hast du ein Beispielmit Plug S
so messe ich den Verbrauch bei meinem Whirlpool
userReadings
relay_0_energy_kWh:relay_0_energy.* monotonic {ReadingsVal($NAME,"relay_0_energy",0)/60/1000.0}, Kosten:relay_0_energy_kWh.* { sprintf("%.2f",(ReadingsVal($NAME,"relay_0_energy_kWh",0) + 16.0)*.2);;}

Das +16 kannst du weglassen. war nur für mich ein Korrekturwert.
Mal .2 ist der letzte Strompreis (leider glaub ich Vergangenheit :-\)
Wenn ich das folgende mache, bekomme ich jedoch kein Resultat bzw. das userReading wird nicht angezeigt  ::)

define Shelly_Plug_1 MQTT_DEVICE
attr Shelly_Plug_1 IODev Mosquitto
attr Shelly_Plug_1 event-on-change-reading Temperatur:0.2,Power,WattMinuten
attr Shelly_Plug_1 publishSet on off shellies/shellyplug-s-DDB398/relay/0/command
attr Shelly_Plug_1 room Shelly
attr Shelly_Plug_1 subscribeReading_.* shellies/shellyplug-s-DDB398/relay/0
attr Shelly_Plug_1 subscribeReading_Power shellies/shellyplug-s-DDB398/relay/0/power
attr Shelly_Plug_1 subscribeReading_Temperatur shellies/shellyplug-s-DDB398/temperature
attr Shelly_Plug_1 subscribeReading_WattMinuten shellies/shellyplug-s-DDB398/relay/0/energy
attr Shelly_Plug_1 subscribeReading_state shellies/shellyplug-s-DDB398/relay/0/command
attr Shelly_Plug_1 userReadings Shelly_Plug_1_kWh:WattMinuten.* monotonic {ReadingsVal($NAME,"WattMinuten",0)/60/1000.0}}


@Heli55: verstehe ich es richtig, dass du mit "emeter_0_kWh" den "Energy" wert vom Plug ausliest und diesen Wert entsprechend weiter verarbeitest?
Fhem auf Raspi 3; Jeelink mit 6x TX29DTH; CUL433 mit 9x RCS 1000 N und Somfy-Steuerung; CUL868; MAX-Cube + Thermostate; Philips Hue & Ikea Tradfri; Google Home Assistant; FTUI für Tablet und SmartPhone via Reverse-Proxy

Beta-User

Diese beiden Zeilen sind auch "kaputt":attr Shelly_Plug_1 subscribeReading_state shellies/shellyplug-s-DDB398/relay/0/command
attr Shelly_Plug_1 userReadings Shelly_Plug_1_kWh:WattMinuten.* monotonic {ReadingsVal($NAME,"WattMinuten",0)/60/1000.0}}


Den Schaltzustand bekommst du mAn. mit
attr Shelly_Plug_1 subscribeReading_state shellies/shellyplug-s-DDB398/relay/0
Und das userReadings dürfte einen Log-Eintrag erzeugen wegen zu vielen Klammern. Hinten muss was weg...
attr Shelly_Plug_1 userReadings Shelly_Plug_1_kWh:WattMinuten.* monotonic {ReadingsVal($NAME,"WattMinuten",0)/60/1000.0}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Kohle77

Hi,
das mit dem zurück setzen ist eher eine Frage an shelly. FHEM bekommt die Daten ja von dem shelly device. Ich vermute mal das dies geht in dem man das shelly device vom Strom trennt und wieder neu einsteckt.

Gruß
Christian

Helmi55

@Kohle77
ja wenn man in FHEM nicht "Monotonic" verwendet wird der Wert vom Shelly beim Stromlos machen auf 0 gesetzt.

@Rheingold
emeter bezieht sich nicht auf den Plug.
Das ist schon ein Beispiel vom EM für die PV Anlage

Gruß
Helmut
System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

Beta-User

#11
Man kann auch einem "monotonic"-Zähler einen (Initial-) Wert zuweisen per setreading.

Generelle Anmerkungen noch:
- diese "eingedeutschten" oder auf den Device-Namen bezogene Reading-Namen sind "Mist", es wäre zu empfehlen, gewisse "internationalisierte" Standards einzuhalten. Für den Solar-Bereich gibt es dazu afaik Vorschläge, maßgeblich getrieben von ch.eick (?), wenn ich für die "grüne Wiese" was vorschlagen müßte, würde ich in die Richtung "consumption_Wm" und/oder "consumption_kWh" gehen... ("consumption" kenne ich von HUEDevice her, aber da sind es Wh...)

Macht man das so, ist z.B. das regex-Gebilde in "statistics" deutlich einfacher zu handhaben...

- Angaben, die man nicht extrapolieren muss, kann man auch in einfache Quotes packen, das ist etwas schneller in der Ausführung...

Zusammengefasst also etwa so:

attr Shelly_Plug_1 subscribeReading_consumption_Wm shellies/shellyplug-s-DDB398/relay/0/energy
attr Shelly_Plug_1 userReadings consumption_kWh:consumption_Wm.* monotonic {ReadingsVal($NAME,'consumption_Wm',0)/60/1000}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Helmi55

Hallo Beta-User
ich bedanke mich für die ausführliche Erklärung und Vorschläge.
Finde ich sehr gut.

Jetzt noch eine blöde Frage von mir. Habe schon gesucht bin aber nicht fündig geworden.
)/60/1000.0}
.0 oder auch .1 oder .2  - was bedeutet das. Hier handelt es sich sicher nicht um Nachkommastellen?
Die werden ja mit Sprint%f dargestellt.
Wahrscheinlich blamiere ich mich mal wieder aber........
Sorry fürs O.T.

Gruß
Helmut
System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

Beta-User

Danke für die Rückmeldung. Das ".0" ist mir durchgerutscht ::) , das braucht man m.E. für die mathematische Operation in der Tat wirklich nicht.
Wird oben korrigiert.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Rheingold

Vielen Dank für die Hilfe und Anstöße. Ich habe es nun wie folgt gelöst:


define Shelly_Plug_1 MQTT_DEVICE
attr Shelly_Plug_1 IODev Mosquitto
attr Shelly_Plug_1 event-on-change-reading Temperatur:0.2,Power,WattMinuten
attr Shelly_Plug_1 publishSet on off shellies/shellyplug-s-DDB398/relay/0/command
attr Shelly_Plug_1 room Shelly
attr Shelly_Plug_1 subscribeReading_.* shellies/shellyplug-s-DDB398/relay/0
attr Shelly_Plug_1 subscribeReading_Power shellies/shellyplug-s-DDB398/relay/0/power
attr Shelly_Plug_1 subscribeReading_Temperatur shellies/shellyplug-s-DDB398/temperature
attr Shelly_Plug_1 subscribeReading_WattMinuten shellies/shellyplug-s-DDB398/relay/0/energy
attr Shelly_Plug_1 subscribeReading_state shellies/shellyplug-s-DDB398/relay/0
attr Shelly_Plug_1 userReadings Shelly_Plug_1_kWh:WattMinuten.* monotonic {ReadingsVal($NAME,"WattMinuten",0)/60/1000},\
VerbrauchGerundet_kWhDay { sprintf("%.2f",ReadingsVal("Shelly_Plug_1","statShelly_Plug_1_kWhDay",0)) }

define Shelly_Plug_1_Statistik statistics Shelly_Plug_1
attr Shelly_Plug_1_Statistik deltaReadings Shelly_Plug_1_kWh
attr Shelly_Plug_1_Statistik minAvgMaxReadings Shelly_Plug_1:Shelly_Plug_1_kWh
attr Shelly_Plug_1_Statistik room Shelly
attr Shelly_Plug_1_Statistik singularReadings Shelly_Plug_1:Shelly_Plug_1_kWh:Delta:(Hour|Day|Month|Year)


Da bei mir die Statistiken abartig viele Nachkommastellen haben, runde ich die für mich relevanten Werte in einem neuen Reading (hier "VerbrauchGerundet_kWhDay "). Bin soweit ganz glücklich mit der Lösung. Vielen Dank!
Fhem auf Raspi 3; Jeelink mit 6x TX29DTH; CUL433 mit 9x RCS 1000 N und Somfy-Steuerung; CUL868; MAX-Cube + Thermostate; Philips Hue & Ikea Tradfri; Google Home Assistant; FTUI für Tablet und SmartPhone via Reverse-Proxy