Shelly Verbrauchswerte Speichern

Geflasht oder ungeflasht ...

Moderator: seppy

Rob69
Beiträge: 55
Registriert: 26. Feb 2021 07:38

Re: Shelly Verbrauchswerte Speichern

Beitrag von Rob69 »

Hallo, an Kellerkind und Udo

deine Regel ist super, aber wenn ich die Werte des Shelly`s mit den Werten der Regel vergleiche ,dann hat die Regel mehr!

Werte Regel: 1,7 kW/h
Wert Shelly: 1,1 kW/h

bei einem Waschvorgang unserer Waschmaschine!

Gruß Rob

PS: Würdet ihr alle Energieregeln in einer Datei zusammen fassen oder jede seperat!

Benutzeravatar
KellerK1nd
Beiträge: 432
Registriert: 17. Jun 2019 16:45
Answers: 1
Wohnort: Griesheim

Re: Shelly Verbrauchswerte Speichern

Beitrag von KellerK1nd »

Eventuell wird die Regel zu oft getriggered, dadurch addiert sich dann etwas zu sehr auf.

Meine Regel läuft nur auf dem Change von dem Shelly, das heißt du brauchst für jedes Item eine Regel. Eventuell kann man das aber noch ändern indem man eine Regel schreibt die nur aller 15 Minuten läuft und somit das Delta der letzten 15 Minuten schreibt. Ich kann mich die Woche mal dransetzen, oder Udo ist schneller. :mrgreen:
Betriebssystem: Proxmox 7.3-4
openHAB Container: debian11 LXC
openHAB Version: 3.4
Hardware: HomeServer Eigenbau mit einem Intel i5 9600K
Smarthome-Equipment:
- Rasperrymatic
- deConz
- HUE
- Shellys
- Mosquitto
- AVM Fritz!Box

Quautiputzli
Beiträge: 317
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: Shelly Verbrauchswerte Speichern

Beitrag von Quautiputzli »

Hallo,
ich wollte bei mir auch diese Rule umsetzten. Leider funktioniert es nicht so richtig. Der von der Rule berechnete Wert steigt exponentiell an. Es wird wohl immer wieder der kWh-Wert aufaddiert.

Ich hab mir deshalb ein logging in meine rule gebaut:

Code: Alles auswählen

val String logPrefix = "Shelly Verbrauch - "

rule "Shelly Plug 1 umrechnen"
when
    Item C_Plug_1_shellyplug1_energy changed
then
    var Number currentkwh = 0
    if(C_Plug_1_shellyplug1_energy.state instanceof Number)
        currentkwh = (C_Plug_1_shellyplug1_energy.state as Number).floatValue
    var Number previouskwh = 0
    if(C_Plug_1_shellyplug1_energy.previousState.state instanceof Number)
        previouskwh = (C_Plug_1_shellyplug1_energy.previousState.state as Number).floatValue
    var Number energy = 0
    logInfo("rules", logPrefix + "currentkwh ({}) previouskwh ({}) ", currentkwh, previouskwh)
    if(C_Plug_1_shellyplug1_energykwh.state instanceof Number)
        energy = (C_Plug_1_shellyplug1_energykwh.state as Number).floatValue
    energy = energy + currentkwh
    if((currentkwh - previouskwh) > 0)  //Wenn das Delta größer 0 ist
        energy = energy - previouskwh
    C_Plug_1_shellyplug1_energykwh.postUpdate(energy)
end


Man sieht dann, dass currentkwh und previouskwh immer gleich sind, woran kann das liegen?

Code: Alles auswählen

2021-07-05 18:02:18.066 [INFO ] [org.openhab.core.model.script.rules ] - Shelly Verbrauch - currentkwh (0.6857833) previouskwh (0.6857833) 
2021-07-05 18:03:15.180 [INFO ] [org.openhab.core.model.script.rules ] - Shelly Verbrauch - currentkwh (0.6858) previouskwh (0.6858) 
2021-07-05 18:04:00.370 [INFO ] [org.openhab.core.model.script.rules ] - Shelly Verbrauch - currentkwh (0.68583333) previouskwh (0.68583333) 
Servus

Rob69
Beiträge: 55
Registriert: 26. Feb 2021 07:38

Re: Shelly Verbrauchswerte Speichern

Beitrag von Rob69 »

Hallo,

Nur eine pauschale Frage .

Würdet ihr mehre Rules in eine Datei schreiben,
oder immer pro Rules eine Datei anlegen!
Hätte dann halt viele Dateien und so nur eine Datei in der viele einzelne Rules hinterlegt sind !


Gruß Rob

Rob69
Beiträge: 55
Registriert: 26. Feb 2021 07:38

Re: Shelly Verbrauchswerte Speichern

Beitrag von Rob69 »

hey!

Zu Quautiputzli bei mir erscheint im Logfile nur der kW/h Wert!



Gruß Rob

Benutzeravatar
KellerK1nd
Beiträge: 432
Registriert: 17. Jun 2019 16:45
Answers: 1
Wohnort: Griesheim

Re: Shelly Verbrauchswerte Speichern

Beitrag von KellerK1nd »

Ich habs jetzt mal schnell umgeschrieben:

Code: Alles auswählen

rule "alle 15 Minuten"
when
    Time cron "0 0/15 * 1/1 * ? *"
then
    var Number Shelly10 = (Shelly10Energy.deltaSince(now.minusMinutes(15)).floatValue) /60000
    var Number Shelly11 = (Shelly11Energy.deltaSince(now.minusMinutes(15)).floatValue) /60000
    var Number Shelly13 = (Server_Consumption.deltaSince(now.minusMinutes(15)).floatValue) /60000
    var Number Shelly14 = (GamingServer_Consumption.deltaSince(now.minusMinutes(15)).floatValue) /60000
    var Number Shelly15 = (Shelly15Consumption.deltaSince(now.minusMinutes(15)).floatValue) /60000
    var Number Shelly19 = (Shelly19Consumption.deltaSince(now.minusMinutes(15)).floatValue) /60000

    Shelly10EnergykWh.postUpdate(Shelly10EnergykWh.state as Number + Shelly10)
    Shelly11EnergykWh.postUpdate(Shelly11EnergykWh.state as Number + Shelly11)
    Server_Consumption_kWh.postUpdate(Server_Consumption_kWh.state as Number + Shelly13)
    GamingServer_Consumption_kWh.postUpdate(GamingServer_Consumption_kWh.state as Number + Shelly14)
    Shelly15Gesamtverbrauch.postUpdate(Shelly15Gesamtverbrauch.state as Number + Shelly15)
    Shelly19Gesamtverbrauch.postUpdate(Shelly19Gesamtverbrauch.state as Number + Shelly19)
end
Aller 15 Minuten wird die Regel getriggert und das Delta der ltzten 15 Minuten für den Shelly ermittelt, anschließend wird dann das Delta plus der alte Wer addiert und im neuen Wert geschrieben. Ist im Grunde das selbe, vielleicht sogar etwas ressourcenschonender da es nicht mit jedem ändern des Wertes getriggered wird und man kann alle Shellies in eine Regel schreiben.
Betriebssystem: Proxmox 7.3-4
openHAB Container: debian11 LXC
openHAB Version: 3.4
Hardware: HomeServer Eigenbau mit einem Intel i5 9600K
Smarthome-Equipment:
- Rasperrymatic
- deConz
- HUE
- Shellys
- Mosquitto
- AVM Fritz!Box

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

Re: Shelly Verbrauchswerte Speichern

Beitrag von udo1toni »

Bitte .state as Number grundsätzlich klammern. Also nicht

Code: Alles auswählen

Shelly10EnergykWh.postUpdate(Shelly10EnergykWh.state as Number + Shelly10)
sondern

Code: Alles auswählen

Shelly10EnergykWh.postUpdate((Shelly10EnergykWh.state as Number) + Shelly10)
Diese Rule wird so funktionieren, ist aber nicht sonderlich elegant. Besser: zwei Group Items anlegen:

Code: Alles auswählen

Group gShellyConsumption
Group gShellykWh
Weiterhin die Itemnamen so gestalten, dass sich die Items voneinander ableiten lassen:

Code: Alles auswählen

Number:Energy Shelly10_Consumption     "label..." (gShellyConsumption)
Number:Energy Shelly11_Consumption     "label..." (gShellyConsumption)
Number:Energy Server_Consumption       "label..." (gShellyConsumption)
Number:Energy GamingServer_Consumption "label..." (gShellyConsumption)
Number:Energy Shelly15_Consumption     "label..." (gShellyConsumption)
Number:Energy Shelly19_Consumption     "label..." (gShellyConsumption)

Number Shelly10_kWh     "label..." (gShellykWh)
Number Shelly11_kWh     "label..." (gShellykWh)
Number Server_kWh       "label..." (gShellykWh)
Number GamingServer_kWh "label..." (gShellykWh)
Number Shelly15_kWh     "label..." (gShellykWh)
Number Shelly19_kWh     "label..." (gShellykWh)
Es gibt nun also für jeden Shelly zwei Items, die zueinander gehören und die sich jeweils in einer Gruppe befinden. Nun kann die Rule so aussehen:

Code: Alles auswählen

rule "alle 15 Minuten"
when
    Time cron "0 0/15 * * * ?" // alle Viertelstunde
then
    gShellykWh.members.forEach[i|
        val iSource = gShellyConsumption.members.filter[j|j.name.split("_").get(0) == i.name.split("_").get(0)].head
        val Number nDelta = iSource.deltaSince(now.minusMinutes(15)).floatValue) / 60000
        i.postUpdate((i.state as Number) + nDelta)
    ]
end
Für jedes Item in der Gruppe gShellykWh wird das passende Item aus der Gruppe gShellyConsumption herausgesucht.
Anschließend werden die gleichen Schritte durchgeführt wie in der ursprünglichen Rule.

Wenn Du nun auf die Idee kommst, noch weitere Shelly zu verbauen, musst Du nur darauf achten, die Namenskonventionen einzuhalten und die Items in die passenden Gruppen zu packen. Die Rule kann sich um ein Item genausogut kümmern wie um 5 oder auch 1000, es spielt keine Rolle wieviele Itempaare genutzt werden.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

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

Re: Shelly Verbrauchswerte Speichern

Beitrag von udo1toni »

Rob69 hat geschrieben: 5. Jul 2021 19:57 Würdet ihr mehre Rules in eine Datei schreiben,
oder immer pro Rules eine Datei anlegen!
Hätte dann halt viele Dateien und so nur eine Datei in der viele einzelne Rules hinterlegt sind !
Ich habe fast alle Rules in einer Datei. Letztlich ist es Geschmackssache, bis auf ein paar Punkte:

1. globale Variablen können nur innerhalb der Rules verwendet werden, die in der gleichen Datei liegen.
2. je größer die Datei wird, desto länger dauert ein Reload.
3. je größer die Datei wird, desto länger braucht der Server, um die Datei zu checken,

Man wird also in der Praxis insbesondere beim Entwickeln einer Rule evtl. diese Rule zunächst in einer eigenen Datei pflegen, sobald die Rule aber "produktiv" geht, wird sie mit anderen Rules zusammen in eine Datei gepackt. Ab einer bestimmten Größe wird man Rules in mehrere Dateien aufteilen, wobei wobei zusammengehörige Rules natürlich in einer Datei bleiben.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Quautiputzli
Beiträge: 317
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: Shelly Verbrauchswerte Speichern

Beitrag von Quautiputzli »

Nach dem das mit currentkwh und previouskwh bei mir nicht hinhaut hab ich nun auch auf die "Viertel Studen Rule" umgestellt. Das scheint nun zu funktionieren. Ab und zu gibt es leichte Unterschiede. Der Fehler scheint aber nicht größer zu werden. Ich werde beobachten.
Bild_2021-07-08_063041.png
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Servus

Rob69
Beiträge: 55
Registriert: 26. Feb 2021 07:38

Re: Shelly Verbrauchswerte Speichern

Beitrag von Rob69 »

Hallo,

Ich überlege gerade ob es nicht die Möglichkeit gibt die letzten Werte vor dem Reset zuspeichern und zu addieren,
so das ich nur die werte des letzten Werte des Shellys immer addiere !

Gruß Rob69

Antworten