Shelly Verbrauchswerte Speichern

Geflasht oder ungeflasht ...

Moderator: seppy

Antworten
Benutzeravatar
PeterA
Beiträge: 1052
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Shelly Verbrauchswerte Speichern

Beitrag von PeterA »

Anscheinend funktioniert es doch noch nicht Sauber.

Folgendes ist mir im Log aufgefallen:

"Shellyswitch25_E58F7A_energy" ist das Item welchen einen changed Event hatte:

Code: Alles auswählen

2021-12-04 20:18:09.278 [vent.ItemStateChangedEvent] - Shellyswitch25_E58F7A_energy changed from 110757 to 110774
2021-12-04 20:18:09.280 [INFO ] [pse.smarthome.model.script.ShellykWh] - Es gibt 6 Member in der Consumption Gruppe.
2021-12-04 20:18:09.322 [INFO ] [pse.smarthome.model.script.ShellykWh] - Quell member: Shellyswitch25_745118_energy, Ziel member: Shellyswitch25_745118_kWh, Delta: 0.0, before update: 1.6565000001
2021-12-04 20:18:09.346 [INFO ] [pse.smarthome.model.script.ShellykWh] - Quell member: Shellyswitch25_745118_energy, Ziel member: Shellyswitch25_E66E4E_kWh, Delta: 0.0, before update: 0.7056333329
2021-12-04 20:18:09.374 [INFO ] [pse.smarthome.model.script.ShellykWh] - Quell member: Shellyswitch25_745118_energy, Ziel member: Shellyswitch25_740A26_kWh, Delta: 0.0, before update: 1.6715666629
2021-12-04 20:18:09.403 [INFO ] [pse.smarthome.model.script.ShellykWh] - Quell member: Shellyswitch25_745118_energy, Ziel member: Shellyswitch25_00B713_kWh, Delta: 0.0, before update: 1.6767500029
2021-12-04 20:18:09.437 [INFO ] [pse.smarthome.model.script.ShellykWh] - Quell member: Shellyswitch25_745118_energy, Ziel member: Shellyswitch25_E58F7A_kWh, Delta: 0.0, before update: 1.8887500029
2021-12-04 20:18:09.491 [INFO ] [pse.smarthome.model.script.ShellykWh] - Quell member: Shellyswitch25_745118_energy, Ziel member: Shellyswitch25_00B12B_kWh, Delta: 0.0, before update: 0.9716666629
Es wird aber anderes "Quell member" 6 mal aufgeführt. Und das passt natürlich nicht zum Ziel member.

Bei folgenden Logeintrag hat dann tatsächlich das Item "Shellyswitch25_745118_energy" einen changed Event:
Und dann wird die ganze Gruppe durchlaufen aber für alle Items das "Shellyswitch25_745118_energy" Item als Quelle.
Somit wird dann bei allen das Delta des o.g. Items aufaddiert. Das Stimmt ja dann so nicht.

Code: Alles auswählen

2021-12-04 20:23:14.736 [vent.ItemStateChangedEvent] - Shellyswitch25_745118_energy changed from 412 to 551
2021-12-04 20:23:14.748 [INFO ] [pse.smarthome.model.script.ShellykWh] - Es gibt 6 Member in der Consumption Gruppe.
2021-12-04 20:23:14.766 [INFO ] [pse.smarthome.model.script.ShellykWh] - Quell member: Shellyswitch25_745118_energy, Ziel member: Shellyswitch25_745118_kWh, Delta: 0.0046166666, before update: 1.6588000001
2021-12-04 20:23:14.777 [vent.ItemStateChangedEvent] - Shellyswitch25_745118_kWh changed from 1.6588000001 to 1.6634166667
2021-12-04 20:23:14.790 [INFO ] [pse.smarthome.model.script.ShellykWh] - Quell member: Shellyswitch25_745118_energy, Ziel member: Shellyswitch25_E66E4E_kWh, Delta: 0.0046166666, before update: 0.7079333329
2021-12-04 20:23:14.804 [vent.ItemStateChangedEvent] - Shellyswitch25_E66E4E_kWh changed from 0.7079333329 to 0.7125499995
2021-12-04 20:23:14.817 [INFO ] [pse.smarthome.model.script.ShellykWh] - Quell member: Shellyswitch25_745118_energy, Ziel member: Shellyswitch25_740A26_kWh, Delta: 0.0046166666, before update: 1.6738666629
2021-12-04 20:23:14.829 [vent.ItemStateChangedEvent] - Shellyswitch25_740A26_kWh changed from 1.6738666629 to 1.6784833295
2021-12-04 20:23:14.842 [INFO ] [pse.smarthome.model.script.ShellykWh] - Quell member: Shellyswitch25_745118_energy, Ziel member: Shellyswitch25_00B713_kWh, Delta: 0.0046166666, before update: 1.6790500029
2021-12-04 20:23:14.857 [vent.ItemStateChangedEvent] - Shellyswitch25_00B713_kWh changed from 1.6790500029 to 1.6836666695
2021-12-04 20:23:14.890 [INFO ] [pse.smarthome.model.script.ShellykWh] - Quell member: Shellyswitch25_745118_energy, Ziel member: Shellyswitch25_E58F7A_kWh, Delta: 0.0046166666, before update: 1.8910500029
2021-12-04 20:23:14.908 [vent.ItemStateChangedEvent] - Shellyswitch25_E58F7A_kWh changed from 1.8910500029 to 1.8956666695
2021-12-04 20:23:14.912 [INFO ] [pse.smarthome.model.script.ShellykWh] - Quell member: Shellyswitch25_745118_energy, Ziel member: Shellyswitch25_00B12B_kWh, Delta: 0.0046166666, before update: 0.9739666629
2021-12-04 20:23:14.925 [vent.ItemStateChangedEvent] - Shellyswitch25_00B12B_kWh changed from 0.9739666629 to 0.9785833295
Hier auch noch mal die Passenden Items dazu:

Code: Alles auswählen

Number          Shellyswitch25_745118_energy        "Shelly2501energy [%.0f W*min]"                                         (gShellyConsumption)    {channel="mqtt:topic:3448a27a:de07756d:Shellyswitch25_745118_energy"}
Number          Shellyswitch25_745118_kWh           "Shelly2501energy [%.2f kWh]"                                           (gShellykWh)
Number          Shellyswitch25_E66E4E_energy        "Shelly2502energy [%.0f W*min]"                                         (gShellyConsumption)    {channel="mqtt:topic:3448a27a:de07756d:Shellyswitch25_E66E4E_energy"}
Number          Shellyswitch25_E66E4E_kWh           "Shelly2502energy [%.2f kWh]"                                           (gShellykWh)
Number          Shellyswitch25_740A26_energy        "Shelly2504energy [%.0f W*min]"                                         (gShellyConsumption)    {channel="mqtt:topic:3448a27a:de07756d:Shellyswitch25_740A26_energy"}
Number          Shellyswitch25_740A26_kWh           "Shelly2504energy [%.2f kWh]"                                           (gShellykWh)
Number          Shellyswitch25_00B713_energy        "Shelly2505energy [%.0f W*min]"                                         (gShellyConsumption)    {channel="mqtt:topic:3448a27a:de07756d:Shellyswitch25_00B713_energy"}
Number          Shellyswitch25_00B713_kWh           "Shelly2505energy [%.2f kWh]"                                           (gShellykWh)
Number          Shellyswitch25_E58F7A_energy        "Shelly2506energy [%.0f W*min]"                                         (gShellyConsumption)    {channel="mqtt:topic:3448a27a:de07756d:Shellyswitch25_E58F7A_energy"}
Number          Shellyswitch25_E58F7A_kWh           "Shelly2506energy [%.2f kWh]"                                           (gShellykWh)
Number          Shellyswitch25_00B12B_energy        "Shelly2507energy [%.0f W*min]"                                         (gShellyConsumption)    {channel="mqtt:topic:3448a27a:de07756d:Shellyswitch25_00B12B_energy"}
Number          Shellyswitch25_00B12B_kWh           "Shelly2507energy [%.2f kWh]"                                           (gShellykWh)      
Wo ist denn hier der Fehler ? Passen die Bezeichnungen der Items nicht zum Filter der Gruppe ?

Gruß
Peter
- OpenHab 2.4
#PWRUP

Boby
Beiträge: 14
Registriert: 20. Okt 2021 22:22

Re: Shelly Verbrauchswerte Speichern

Beitrag von Boby »

Hallo Peter,
meine Items haben nur ein „_“, evtl. liegt’s daran.
Den Filter mit dem Split habe ich nur 1:1 übernommen - vielleicht kann der ursprüngliche Autor dazu etwas sagen?

Liebe Grüße,
Boby

Benutzeravatar
udo1toni
Beiträge: 13854
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Shelly Verbrauchswerte Speichern

Beitrag von udo1toni »

Der Fehler liegt darin, dass Du den ersten Teil der Itmnamen matchst. Der Unterschied ist aber im zweiten Teil des Namens.
Deine Rule tut außerdem zu viel.

Wenn eine Rule auf Member of triggert, so gibt es eine implizite Variable triggeringItem, welches direkt das Item zur Verfügung stellt, welches getriggert hat. Die Rule kannst Du dann also auch so schreiben:

Code: Alles auswählen

rule "Shellies25 kWh aggregation"                         // Berechne den Shelly-kWh-Verbrauch basierend auf den kWh-Werten der Shelly
when
    Member of gShellyConsumption changed                  // Gruppe mit Consumption Member
then
    logInfo("ShellykWh", "Es gibt {} Member in der Consumption Gruppe.", gShellyConsumption.members.size)

    val iSink = gShellykWh.members.filter[i|i.name.split("_").get(1) == triggeringItem.name.split("_").get(1)].head

    val Number nDelta = (triggeringItem.deltaSince(now.minusMinutes(15)).floatValue) / 60000

    logInfo("ShellykWh", "Quelle: {}, Ziel: {}, Delta: {}, before update: {}", triggeringItem.name, iSink.name, nDelta, iSink.state)

    if(nDelta <= 0)                                        // falls nDelta kleiner oder gleich 0
        return;                                            // Abbruch der Rule
    if(!(iSink.state instanceof Number))                   // Falls keine Zahl geliefert wird
        iSink.postUpdate(nDelta)                           // nDelta als Wert setzen
    else                                                   // ansonsten
        iSink.postUpdate((iSink.state as Number) + nDelta) // nDelta zum aktuellen Wert addieren
end
Das Objekt iSink enthält das Item aus der Gruppe gShellykWh, dessen Name im zweiten Teil mit dem Item matcht, welches die Rule getriggert hat.
Statt geschachtelte if-Anweisungen, habe ich hier die umgekehrte Logik als Abbruchbedingung genutzt.
Weiterhin ist die Prüfung auf NULL zwar wichtig, aber leider nicht hinreichend. Außerdem ist die Wahrscheinlichkeit groß, dass die anschließende Wertzuweisung in diesem Fall schief geht, weil postUpdate noch gar nicht fertig ist, das Item also immer noch NULL enthält. Besser ist es also, auf eine gültige Zahl zu testen (instanceof Number) und gegebenenfalls direkt das Delta zu schreiben.

Es sind bestimmt irgendwo Tippfehler drin, wie immer... ;)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
PeterA
Beiträge: 1052
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Shelly Verbrauchswerte Speichern

Beitrag von PeterA »

Hallo Udo,

da lag ich mit dem Namen der Items ja richtig.
Dein Vorschlag der Rule scheint zu Funktionieren!
Wie immer MERCI!

Auszug aus dem Log: (Das Changed auf 0 kommt vom Reboot des Shelly)

Code: Alles auswählen

2021-12-04 22:21:06.799 [vent.ItemStateChangedEvent] - Shellyswitch25_745118_energy changed from 551 to 0
2021-12-04 22:21:10.310 [INFO ] [pse.smarthome.model.script.ShellykWh] - Es gibt 6 Member in der Consumption Gruppe.
2021-12-04 22:21:10.344 [INFO ] [pse.smarthome.model.script.ShellykWh] - Quelle: Shellyswitch25_745118_energy, Ziel: Shellyswitch25_745118_kWh, Delta: -0.009183333, before update: 1.6634166667
- OpenHab 2.4
#PWRUP

Benutzeravatar
PeterA
Beiträge: 1052
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Shelly Verbrauchswerte Speichern

Beitrag von PeterA »

Hallo Udo,

Hier nochmal ein Auszug aus dem Log:
Das funktioniert. Aber weshalb wird das Delta so "7.3333335E-4" im Log ausgegeben ?

Code: Alles auswählen

2021-12-05 11:34:05.491 [vent.ItemStateChangedEvent] - Shellyswitch25_E58F7A_energy changed from 110857 to 110866
2021-12-05 11:34:05.506 [INFO ] [pse.smarthome.model.script.ShellykWh] - Es gibt 6 Member in der Consumption Gruppe.
2021-12-05 11:34:05.609 [INFO ] [pse.smarthome.model.script.ShellykWh] - Quelle: Shellyswitch25_E58F7A_energy, Ziel: Shellyswitch25_E58F7A_kWh, Delta: 7.3333335E-4, before update: 1.8976000028
2021-12-05 11:34:05.619 [vent.ItemStateChangedEvent] - Shellyswitch25_E58F7A_kWh changed from 1.8976000028 to 1.89833333615
Gruß Peter
- OpenHab 2.4
#PWRUP

Benutzeravatar
udo1toni
Beiträge: 13854
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Shelly Verbrauchswerte Speichern

Beitrag von udo1toni »

Warum? "7.3333335E-4" bedeutet 0.0007333335
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
PeterA
Beiträge: 1052
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Shelly Verbrauchswerte Speichern

Beitrag von PeterA »

Auweia
Solche Zahlen haben wir in der Schule im Odenwald nicht gehabt
- OpenHab 2.4
#PWRUP

danielm83
Beiträge: 23
Registriert: 14. Dez 2021 20:51

Re: Shelly Verbrauchswerte Speichern

Beitrag von danielm83 »

Hallo und danke an alle User des Forums

Ihr habt mir schon oft geholfen. Ich habe im Grunde das gleiche Problem wie ihr mit den Shellys, nur dass ich schon direkt kWh bekommen vom SolarEdge binding. Die Täglichen Werte werden jedoch immer zwischen 00:00 und 01:00 auf "0" gesetzt bzw kann der erste Wert danach den man bekommt, schon wieder >0 sein, da nur alle Stunde ein neuer wert kommt. Ich habe eure Rule 1:1 übernommen, außer die division durch 6000 da ich ja schon auf kWh Ebene bin und nicht die Leistung umrechnen will (Hab sogar extra die Items dafür so beannant und mit den Channels verlinkt), aber es addiert sich auf und fängt dann um Mitternacht doch wieder bei fast 0 an.

Bei den Shellies könnte man doch auf von der Energie und nicht von der Leistung weg rechnen (Die stören mich nämlich auch)

Code: Alles auswählen

rule "Poolpumpe Gesamtverbrauch umrechnen"
when
    Item Garten_Steckdose1CurrentWatts changed
then
    var Number currentkwh = 0
    if(Garten_Steckdose1CurrentWatts.state instanceof Number)
        currentkwh = (Garten_Steckdose1CurrentWatts.state as Number).floatValue
    var Number previouskwh = 0
    if(Garten_Steckdose1CurrentWatts.previousState.state instanceof Number)
        previouskwh = (Garten_Steckdose1CurrentWatts.previousState.state as Number).floatValue
    var Number energy = 0
    if(PoolpumpeEnergy.state instanceof Number)
        energy = (PoolpumpeEnergy.state as Number).floatValue
    energy = energy + currentkwh
    if((currentkwh - previouskwh) > 0)  //Wenn das Delta größer 0 ist
        energy = energy - previouskwh

    PoolpumpeEnergy.postUpdate(energy)
end
Ich weiß das ist bestimmt sehr einfach aber ich komme einfach nicht drauf.
Danke
Daniel
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

danielm83
Beiträge: 23
Registriert: 14. Dez 2021 20:51

Re: Shelly Verbrauchswerte Speichern

Beitrag von danielm83 »

niemand einen Tip?

Danke und guten Start ins Jahr 2022

Daniel

danielm83
Beiträge: 23
Registriert: 14. Dez 2021 20:51

Re: Shelly Verbrauchswerte Speichern

Beitrag von danielm83 »

Hallo Zusammen

Ich habe es nun nochmal mit dieser Rule versucht - und für mehrere Stunden hat die Sache auch gut ausgesehen.
Dann plötzlich ist der Wert um den eigentlichen Zählerstand nach oben gesprungen um dann wieder die Differenzen zu addieren.

Code: Alles auswählen

rule "Summe Rechner 2"
when
    Item Shelly_Hauptstromzaehler_energy changed
then
    //logInfo("Summe Rechner 2", "Summe Hauptstromzaehler berechnet")
    var Number currentkwh = 0
    if(Shelly_Hauptstromzaehler_energy.state instanceof Number)
        currentkwh = (Shelly_Hauptstromzaehler_energy.state as Number).floatValue
    var Number previouskwh = 0
    if(Shelly_Hauptstromzaehler_energy.previousState.state instanceof Number)
        previouskwh = (Shelly_Hauptstromzaehler_energy.previousState.state as Number).floatValue
    var Number energy = 0
    if(Shelly_Hauptstromzaehler_energy.state instanceof Number)
        energy = (Shelly_Hauptstromzaehler_energy.state as Number).floatValue
    energy = energy + currentkwh
    if((currentkwh - previouskwh) > 0)  //Wenn das Delta größer 0 ist
        energy = energy - previouskwh

    Shelly_Hauptstromzaehler_energy_sum.postUpdate(energy)
end
Im Anhang seht ihr den Graphen dazu.
Screenshot 2022-01-20 215623.png
Und hier noch das Log genau zu dieser Zeit

Code: Alles auswählen

2022-01-19 10:09:00.835 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Shelly_Hauptstromzaehler_energy' changed from 841.742 to 841.775
2022-01-19 10:09:00.836 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Shelly_Hauptstromzaehler_power_L1_L2_L3' changed from 9478.00 to 9478.53
2022-01-19 10:09:00.852 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Shelly_Hauptstromzaehler_energy_sum' changed from 13.736978 to 855.511978
Vielleicht könnt ihr doch nochmal kurz drauf schauen und mir sagen wo der Fehler liegen

Danke
Daniel
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Antworten