Shelly Verbrauchswerte Speichern

Geflasht oder ungeflasht ...

Moderator: seppy

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

Re: Shelly Verbrauchswerte Speichern

Beitrag von Boby »

Guten Abend,
ich hätte die Rule von oben 1:1 übernommen - bekomme aber nur einen Fehler ohne näheren Details:

Code: Alles auswählen

2021-10-20 22:20:00.253 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'ShellykWh' failed:     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(5)).floatValue) / 60000
        i.postUpdate((i.state as Number) + nDelta)
    ]
Hat jemand eine Idee, wie ich dem Problem auf die Schliche kommen könnte?
Bei mir läuft OH 3.2

Danke!

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

Re: Shelly Verbrauchswerte Speichern

Beitrag von udo1toni »

Hast Du die Items entsprechend angelegt? WIE hast Du die Rule übernommen? Es gibt verschiedene Wege dafür, und das hat entscheidenden Einfluss darauf, ob die Rule unverändert oder angepasst übernommen werden muss.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

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

Re: Shelly Verbrauchswerte Speichern

Beitrag von Boby »

Hier ein Beispiel (hatte nämlich schon viele Items angelegt; daher mal der Versuch es mit den bestehenden Items zu machen):

Aktueller Stromverbrauch (Watt):
Shelly3DDrucker_Verbrauchaktuell

Stromverbrauch kumuliert (kWh):
Shelly3DDrucker_Verbrauchkummuliert

Rule:

Code: Alles auswählen

configuration: {}
triggers:
  - id: "1"
    configuration:
      cronExpression: 0 0/5 * * * ? *
    type: timer.GenericCronTrigger
conditions: []
actions:
  - inputs: {}
    id: "2"
    configuration:
      type: application/vnd.openhab.dsl.rule
      script: >-2
            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(5)).floatValue) / 60000
                i.postUpdate((i.state as Number) + nDelta)
            ]
    type: script.ScriptAction
Wo liegt mein Denkfehler? Die Gruppen heißen gShellykWh und gShellyConsumption.

Vielen Dank!

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

Re: Shelly Verbrauchswerte Speichern

Beitrag von udo1toni »

Und das Quellitem Shelly3DDrucker_Verbrauchaktuell ist in der default Persistence drin?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

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

Re: Shelly Verbrauchswerte Speichern

Beitrag von Boby »

udo1toni hat geschrieben: 20. Okt 2021 23:41 Und das Quellitem Shelly3DDrucker_Verbrauchaktuell ist in der default Persistence drin?
Also ich habe keine spezielle .persist-Datei, was soviel heißt dass ich mit den Default-Einstellungen fahre. Ist mir bisher nicht abgegangen.
Sollte das das Problem sein: Was genau müsste ich wo eintragen?

Danke & LG,
Boby

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

Re: Shelly Verbrauchswerte Speichern

Beitrag von Boby »

Hab' den Fehler jetzt mal eingekesselt - bin aber nun auf eine Grundsätzliche Frage gestoßen:

Wenn ich die Watt-Anzahl eines Verbrauchers nur zu bestimmten Zeitpunkten ablese (z.B. unser Fernseher, der je nach Bild (hell/dunkel) mehr oder weniger Strom braucht [zwischen 80 und 200W]), dann muss die Messung ja ziemlich ungenau sein, wenn ich alle 15 Minuten nur die aktuellen Watt zur Berechnung des Gesamtstromverbrauches heranziehe.

Oder muss ich das Item "everySecond" persistieren, damit das einigermaßen passt? Und wäre sumsince nicht die bessere Wahl statt deltasince?

Danke!

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

Re: Shelly Verbrauchswerte Speichern

Beitrag von KellerK1nd »

Boby hat geschrieben: 1. Nov 2021 23:09 Hab' den Fehler jetzt mal eingekesselt - bin aber nun auf eine Grundsätzliche Frage gestoßen:

Wenn ich die Watt-Anzahl eines Verbrauchers nur zu bestimmten Zeitpunkten ablese (z.B. unser Fernseher, der je nach Bild (hell/dunkel) mehr oder weniger Strom braucht [zwischen 80 und 200W]), dann muss die Messung ja ziemlich ungenau sein, wenn ich alle 15 Minuten nur die aktuellen Watt zur Berechnung des Gesamtstromverbrauches heranziehe.

Oder muss ich das Item "everySecond" persistieren, damit das einigermaßen passt? Und wäre sumsince nicht die bessere Wahl statt deltasince?

Danke!
Es wird nicht alle 15 Minuten die Watt für die Berechnung genommen, sondern das delta der kwh. Das heißt die Veränderung der letzten 15 Minuten wird ermittelt. Man kann die Zeit noch weiter verkürzen, aber wozu? Eine geringere Zeitspanne bedeutet mehr Zeit für Berechnungen, und das ganze um statt 0,02 kwh dann 0,0003 kwh zu ermitteln, halte ich für Übertrieben.

Ein "everyChange" bei der Persistenz reicht doch vollkommen zu, man braucht doch nur die Veränderung zu speichern. Ich hab am Anfang auch mit everUpdate gearbeitet, das braucht aber unheimlich CPU Zeit und der Zugriff auf deinen Speicher ist auch weit mehr. Du kannst ja mal spaßeshalber den logger für die Persistenzen einschalten und mal schauen wann er was schreibt, wenn du everySecond einstellt wirst du feststellen das deine CPU Auslastung ansteigen sowie dein Fesplattenzugriff ansteigen wird. Und das ganze wofür? Nur um den Wert 1000 mal statt nur einmal zu schreiben, jetzt stell dir vor das ganze passiert dann für 100 oder 1000 Items wie das sich summiert.
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

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

Re: Shelly Verbrauchswerte Speichern

Beitrag von Boby »

Danke, dann habe ich das wohl falsch verstanden!

Jetzt aber noch eine Frage: Die Shellys haben ja die ungute Eigenschaft, dass sie nach einem FW-Update die kWh‘s verlieren und auf Null zurückgehen, wenn man MQTT verwendet.

D.h.:
kWh-Wert vor 15 Minuten = 75
kWh-Wert jetzt = 0 (nach FW-Upgrade)

Das „deltasince“ wäre dann -75 und würde mir meine Statistik wieder zusammenhauen, oder? Sprich: Ich müsste noch ein IF einbauen, ob das Delta negativ ist - und es nur im positiven Fall berücksichtigen…oder habe ich da wieder was falsch verstanden?

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

Re: Shelly Verbrauchswerte Speichern

Beitrag von KellerK1nd »

Richtig. Im Grunde ist das ganze eben dadurch geboren. Verstehe auch nicht warum die die Werte verlieren. Rein technisch ergibt das keinen Sinn. Ich bin bis jetzt noch zu faul gewesen diesen Fall des Reboots zu mathematisch zu ermitteln. Man kann bestimmt sich eine Formel zusammenbauen die auch da greift und auch da ein delta rausziehen. Aber eigentlich ist im Fall des Reboots der neue Wert 0, richtig ist, das Delta nach 15 Minuten wäre in dem Fall ein Minuswert. Man müsste jetzt quasi den Fall abgreifen wenn der neue Wert 0 ist und bis dahin das delta ermitteln, danach kann man dann ja wieder von 0 ausgehen. Aber wie gesagt, da hab ich noch keine Muse gehabt.
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

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

Re: Shelly Verbrauchswerte Speichern

Beitrag von Boby »

Passt, Dankeschön - ich werd‘s mir ansehen und die Lösung dann hier posten.

Antworten