FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Rheingold am 23 Februar 2022, 08:58:02

Titel: Statistics (Stromverbrauch) [gelöst]
Beitrag von: Rheingold am 23 Februar 2022, 08:58:02
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 :)
Titel: Antw:Statistics (Stromverbrauch)
Beitrag von: Kohle77 am 23 Februar 2022, 09:26:20
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 (https://www.youtube.com/watch?v=1rjGhCE6Eow) )

Gruß
Christian
Titel: Antw:Statistics (Stromverbrauch)
Beitrag von: Kohle77 am 23 Februar 2022, 09:34:33
Ich habe auf https://shelly-api-docs.shelly.cloud/gen1/#shelly-plug-plugs-overview (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
Titel: Antw:Statistics (Stromverbrauch)
Beitrag von: Beta-User am 23 Februar 2022, 09:48:16
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...
Titel: Antw:Statistics (Stromverbrauch)
Beitrag von: Kohle77 am 23 Februar 2022, 10:16:46
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
Titel: Antw:Statistics (Stromverbrauch)
Beitrag 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 :-\)

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
Titel: Antw:Statistics (Stromverbrauch)
Beitrag von: Beta-User am 23 Februar 2022, 10:24:35
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).
Titel: Antw:Statistics (Stromverbrauch)
Beitrag von: Rheingold am 23 Februar 2022, 10:49:55
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?
Titel: Antw:Statistics (Stromverbrauch)
Beitrag von: Beta-User am 23 Februar 2022, 10:58:09
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}
Titel: Antw:Statistics (Stromverbrauch)
Beitrag von: Kohle77 am 23 Februar 2022, 11:00:14
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
Titel: Antw:Statistics (Stromverbrauch)
Beitrag von: Helmi55 am 23 Februar 2022, 11:05:44
@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
Titel: Antw:Statistics (Stromverbrauch)
Beitrag von: Beta-User am 23 Februar 2022, 11:23:54
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}
Titel: Antw:Statistics (Stromverbrauch)
Beitrag von: Helmi55 am 23 Februar 2022, 12:56:40
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
Titel: Antw:Statistics (Stromverbrauch)
Beitrag von: Beta-User am 23 Februar 2022, 13:02:02
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.
Titel: Antw:Statistics (Stromverbrauch)
Beitrag von: Rheingold am 24 Februar 2022, 06:34:19
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!
Titel: Antw:Statistics (Stromverbrauch) [gelöst]
Beitrag von: Beta-User am 24 Februar 2022, 06:39:47
*Kopfschüttel*
Titel: Antw:Statistics (Stromverbrauch) [gelöst]
Beitrag von: Rheingold am 24 Februar 2022, 07:18:04
Bezieht sich dein Kopfschüttel auf meine eingedeutschten Readings?

Nun, das ist bei mir aus Unwissenheit zu den gewissen Standards entstanden (hatte tatsächlich deinen Post hierzu nicht mitbekommen :( ). Generell stimme ich dir da zu, dass Standards gut und einzuhalten sind. Jedoch möchte ich anmerken, dass ich FHEM bei mir Zuhause nutze und nicht irgendwo kommerziell einsetze wo evtl. andere Parteien/Firmen mit dran arbeiten. Daher kann ich aktuell mit meinen Readings ganz gut leben :)

Würde ich ein Smart Home bei mir von Grund auf neu aufsetzen (müssen), würde ich heute auch vieles anders machen und auch evtl. andere Lösungen als FHEM austesten. Aber warum soll ich das tun? Es läuft doch (fast) alles wunderbar :)
Titel: Antw:Statistics (Stromverbrauch) [gelöst]
Beitrag von: Beta-User am 24 Februar 2022, 09:28:03
Zitat von: Rheingold am 24 Februar 2022, 07:18:04
Bezieht sich dein Kopfschüttel auf meine eingedeutschten Readings?
Nicht nur, eigentlich ist das eher der kleinste Teil. Es stellen sich ein paar weitere Fragen bei deiner Lösung:
- Wann und wie oft wird dein zusätzliches userReading evaluiert?
- Gibt es dabei verdeckte Abhängigkeiten? Sind die alle korrekt aufgelöst?
- Welche Folgewirkungen hat jede Evaluierung des zusätzlichen userReadings?
- Wofür wird der gerundete Wert benötigt? Gibt es andere Lösungen, um das angestrebte Ziel zu erreichen (insbes.: stateFormat)

Zum Rest:
Zitat
Generell stimme ich dir da zu, dass Standards gut und einzuhalten sind. Jedoch möchte ich anmerken, dass ich FHEM bei mir Zuhause nutze und nicht irgendwo kommerziell einsetze wo evtl. andere Parteien/Firmen mit dran arbeiten. Daher kann ich aktuell mit meinen Readings ganz gut leben :)
Das kann schon so sein, aber zum einen fängst du grade damit an, so dass jetzt eigentlich der richtige Zeitpunkt wäre, um es gleich "passend" (standardisiert) zu machen. Es gibt dazu aber leider (noch?) keine Standards, siehe z.B. auch DevelopmentGuidelinesReadings - weitere Vorschläge für künftige Module (https://forum.fhem.de/index.php/topic,117933.0.html).

Das Problem mit den "eigenen" Reading-Namen ist halt, dass du dann jedes Mal deine eigenen Sonderlocken nachpflegen mußt, wenn jemand eine Lösung für "die Allgemeinheit" bereitstellt (z.B. für die Visualisierung von Solarerträgen etc.). Klar: Es ist dein Mehraufwand, kannst du gerne so entscheiden, und ich habe auch gesehen, dass du den Post ja überlesen hattest und über den Punkt daher noch nicht intensiver nachgedacht...

Zitat
Würde ich ein Smart Home bei mir von Grund auf neu aufsetzen (müssen), würde ich heute auch vieles anders machen und auch evtl. andere Lösungen als FHEM austesten. Aber warum soll ich das tun? Es läuft doch (fast) alles wunderbar :)
Vielleicht...

Ich würde vermutlich auch erst "das ganze Internet" durchforsten und mich ggf. auch von (teilweise nachweislich falschen!) Argumenten von irgendwelchen Videobloggern in die Irre leiten lassen und was auch immer ausprobieren, weil es "moderner" aussieht. Am Ende kochen aber alle Lösungen nur mit Wasser, und FHEM ist nach wie vor vermutlich die "stabilste" Lösung (auch, was das update-Verhalten über der Zeit angeht).
Man kann immer auch jemanden in seiner Muttersprache fragen, warum etwas nicht klappt, und solche "Kleinigkeiten" an inneren Abhängigkeiten und "Regeln", wie wir sie hier besprechen, gibt es mit Sicherheit auch in anderen Lösungen - nur kenne ich die nicht...

Daher versuche ich grade auch, nach und nach meine copy/paste-Lösungen zu hinterfragen und manches ggf. einfach aufzuräumen.