Seite 3 von 10

Re: Shelly Verbrauchswerte Speichern

Verfasst: 20. Okt 2021 22:27
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!

Re: Shelly Verbrauchswerte Speichern

Verfasst: 20. Okt 2021 22:55
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.

Re: Shelly Verbrauchswerte Speichern

Verfasst: 20. Okt 2021 23:01
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!

Re: Shelly Verbrauchswerte Speichern

Verfasst: 20. Okt 2021 23:41
von udo1toni
Und das Quellitem Shelly3DDrucker_Verbrauchaktuell ist in der default Persistence drin?

Re: Shelly Verbrauchswerte Speichern

Verfasst: 1. Nov 2021 20:59
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

Re: Shelly Verbrauchswerte Speichern

Verfasst: 1. Nov 2021 23:09
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!

Re: Shelly Verbrauchswerte Speichern

Verfasst: 2. Nov 2021 07:35
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.

Re: Shelly Verbrauchswerte Speichern

Verfasst: 2. Nov 2021 09:52
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?

Re: Shelly Verbrauchswerte Speichern

Verfasst: 2. Nov 2021 12:02
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.

Re: Shelly Verbrauchswerte Speichern

Verfasst: 2. Nov 2021 14:18
von Boby
Passt, Dankeschön - ich werd‘s mir ansehen und die Lösung dann hier posten.