Seite 2 von 10
Re: Shelly Verbrauchswerte Speichern
Verfasst: 4. Jul 2021 19:38
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!
Re: Shelly Verbrauchswerte Speichern
Verfasst: 4. Jul 2021 21:20
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.

Re: Shelly Verbrauchswerte Speichern
Verfasst: 5. Jul 2021 18:06
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)
Re: Shelly Verbrauchswerte Speichern
Verfasst: 5. Jul 2021 19:57
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
Re: Shelly Verbrauchswerte Speichern
Verfasst: 5. Jul 2021 20:00
von Rob69
hey!
Zu Quautiputzli bei mir erscheint im Logfile nur der kW/h Wert!
Gruß Rob
Re: Shelly Verbrauchswerte Speichern
Verfasst: 5. Jul 2021 20:02
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.
Re: Shelly Verbrauchswerte Speichern
Verfasst: 5. Jul 2021 20:38
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:
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.
Re: Shelly Verbrauchswerte Speichern
Verfasst: 5. Jul 2021 20:45
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.
Re: Shelly Verbrauchswerte Speichern
Verfasst: 8. Jul 2021 06:30
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
Re: Shelly Verbrauchswerte Speichern
Verfasst: 29. Jul 2021 17:53
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