Shelly Verbrauchswerte Speichern

Geflasht oder ungeflasht ...

Moderator: seppy

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

Re: Shelly Verbrauchswerte Speichern

Beitrag von KellerK1nd »

Dein Problem ist, du definierst die Variable mit 0 wenn der Wert der ankommt nicht eine Zahl ist. Lass jetzt mal aus irgendeinem Grund den einkommenden Wert UNDEF oder irgendwas anderes sein, schon wird deine Variable wieder 0, jetzt kommt wieder ein gültiger Zahlenwert und plötzlich hast du die Differenz. Die dann natürlich aufaddiert wird.
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

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

Re: Shelly Verbrauchswerte Speichern

Beitrag von danielm83 »

Ja das kam mir auch komisch vor aber ich dachte es wird schon so stimmen.

Dann lass ich diese Zeilen einfach weg, dann sollte das passen. ICh teste das mal.

Danke
LG

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

Re: Shelly Verbrauchswerte Speichern

Beitrag von udo1toni »

Nein, das "einfach weg lassen" ist nicht der richtige Weg.

Du musst sicherstellen, dass gültige Werte anliegen.

Kann es sein, dass Shelly_Hauptstromzaehler_energy bei Dir nicht mit der persistence Strategy everyChange,everyMinunte,restoreOnStartup versehen ist? everyMinute muss zwingend nur gesetzt sein, wenn man rrd4j verwendet und Graphen zeichnen lassen will, die beiden anderen Parameter sind aber wichtig, da es sonst bei einem Neustart zu einem ungültigen Wert im Zähler kommt.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

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

Re: Shelly Verbrauchswerte Speichern

Beitrag von danielm83 »

Hallo und nochmal danke für die Hilfe

Also meine Items sehen so aus:

Code: Alles auswählen

Number    Shelly_Hauptstromzaehler_energy       "Hauptstromzähler Energie [%.1f kWh]"        (gDB_influx, rrd4j_ec)                         {channel="shelly:shellyem3:c82b961167d7:device#accumulatedWTotal"}
Number    Shelly_Hauptstromzaehler_energy_sum   "Hauptstromzähler Energie Summe [%.1f kWh]"  (gDB_influx, rrd4j_ec)    //                     {channel="shelly:shellyem3:c82b961167d7:device#accumulatedWTotal"}
Beide sind in der Group rrd4j_ec - die Strategie dieser Gruppe wie folgt:

Code: Alles auswählen

Strategies {
    
    everyMinute : "0 * * * * ?"
    everyHour   : "0 0 * * * ?"
    everyDay    : "0 0 0 * * ?"

    default = everyMinute

}

Items {

    rrd4j_ec* : strategy = everyMinute, everyChange, restoreOnStartup
    rrd4j_eh* : strategy = everyMinute, everyHour
}
Aber das restore on Startup habe ich erst jetzt hinzugefügt - aber es kam ja zu keinem Sturtup in der Zeit, aber sicher so richtig.

und meine Rule so:

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_sum.state instanceof Number)
        energy = (Shelly_Hauptstromzaehler_energy_sum.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
Udo warum ist in deiner Regel aber das kleiner 0 nicht nötig? Ich habs leider nicht ganz verstanden.

Größer 0 sollte ja der Standard sein oder nicht?

Zudem frage ich mich was energy = energy + currentkwh macht --> das bildet doch dann immer die Summe aus dem Aufsummierten Zähler und dem aktuellen Zählerstand - kann das der Grund des exponentiellen Wachstums sein?

Danke nochmal

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

Re: Shelly Verbrauchswerte Speichern

Beitrag von udo1toni »

Der Punkt der Formel ist, dass sich der Verbrauch vom Zeitpunkt der letzten Messung zur aktuellen Messung aus der Differenz von currentkwh und previouskwh ergibt, es sei denn, currentkwh ist kleiner als previouskwh, dann gab es ein Rücksetzen des Zählers. Dann jedoch muss currentkwh als Ganzes addiert werden. In beiden Fällen ((currentkwh - previouskwh) > 0 und currentkwh - previouskwh) < 0) wird also currentkwh addiert, aber nur, wenn previouskwh kleiner currentkwh ist, wird previouskwh abgezogen. Für den Fall, dass currentkwh gleich previouskwh ist, dürfte sich der Wert des Items nicht geändert haben, somit dürfte die Rule nicht getriggert haben. Falls allerdings zwischendurch kein gültiger Wert im Item steht und anschließend wieder der gleiche Wert, so wird dies auch als Changed erkannt. In diesem Fall wäre currentkwh gleich previouskwh und es gäbe einen Rechenfehler... Entsprechend fehlt also ein =, die Bedingung muss

Code: Alles auswählen

if((currentkwh - previouskwh) >= 0)
heißen. Falls beide Werte identisch sind, wird nach dem Aufaddieren von currentkwh previouskwh gleich wieder abgezogen...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

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

Re: Shelly Verbrauchswerte Speichern

Beitrag von danielm83 »

Ich bin scheinbar echt zu blöd um es zu kapieren. Jedenfalls sieht der Graph nun wie folgt aus.
Screenshot 2022-01-23 160015.png
Mir kommt vor dass die Rule nicht immer vom Change getriggert wird und selbst wenn, dann kommt zwar die log Info, aber es erfolgt keine Berechnung.

An den UOM oder so kann es nicht liegen? Und dass die Werte bei fehlenden Werten auf 0 gesetzt werden ist richtig oder?

Danke
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 »

Ich glaube das Problem ist, dass nicht immer ein Delta erkannt wird

Code: Alles auswählen

2022-01-24 23:38:04.761 [INFO ] [.script.ShellyEM rotex LWP PowerLoss] - get delta prev LwpTotalKWH
2022-01-24 23:38:04.764 [INFO ] [.script.ShellyEM rotex LWP PowerLoss] - current 1086.9550 prev: 1086.9550
2022-01-24 23:38:04.768 [INFO ] [.script.ShellyEM rotex LWP PowerLoss] - delta: 0.0000
2022-01-24 23:38:04.770 [INFO ] [.script.ShellyEM rotex LWP PowerLoss] - normal RotexHPSULwp-totalKWH  1086.955 persist o
2022-01-24 23:38:04.773 [INFO ] [.script.ShellyEM rotex LWP PowerLoss] - persist new: 100.015015
der previous State war hier definitiv nicht 1086.9550. Und wenn ich previusState(true) setze bekomme ich eine Fehlermeldung dass das in rrd4j nicht möglich ist da diese ein Beginnzeitpunkt benötigt.

Grüße
Daniel

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

Re: Shelly Verbrauchswerte Speichern

Beitrag von KellerK1nd »

Ich bin immer noch der Meinung, das man die Verbrauchswerte der Shelly nicht auf changed triggern lassen sollte, sondern über die time cron. So das z.Bsp. alle 5 Minuten das Delta ermittelt wird und dann zur Berechnung herangezogen wird. Bei den Shellies kommen schon sehr häufig Änderungen, so dass es zu Problemen bei mir kam. Darum ermittel ich aller 15 Minuten das Delta und das funktioniert zuverlässig.
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: 13858
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Shelly Verbrauchswerte Speichern

Beitrag von udo1toni »

Es ist natürlich möglich, dass das Probleme macht, aber in der Theorie sollten selbst Wertänderungen im Sekundentakt locker zuverlässig verarbeitet werden.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

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

Re: Shelly Verbrauchswerte Speichern

Beitrag von danielm83 »

ich habs jetzt auch auf cron gelegt und jetzt scheint es zu passen mit ganz kleinen Abweichungen. Bei mir schaut es jetzt so aus, aber ich denke ich werde das auch noch auf 15 Minuten anpassen.

Code: Alles auswählen

rule "Gesamtverbrauch Variante 24"
when
    //Item Shelly_Hauptstromzaehler_energy
    Time cron "0 0/5 * * * ? *" 
then
    logInfo("Summe Rechner 2", "Summe Hauptstromzaehler berechnet Variante 3")
    var currentkwh = (Shelly_Hauptstromzaehler_energy.state as Number).floatValue	// aktueller Wert vom Shelly umgerechnet in kwh
   var delta = (Shelly_Hauptstromzaehler_energy.deltaSince(now.minusMinutes(5)) as Number).floatValue		//vorhergehender Wert des Shelly umgerechnet in kwh
logInfo("Gesamtverbrauch Variante 24", "Das delta seit fünf MInuten ist  " + (delta.toString) )
    if((delta) >= 0){		//Wenn das Delta größer 0 ist
        Shelly_Hauptstromzaehler_energy_sum2.postUpdate(Shelly_Hauptstromzaehler_energy_sum2.state as Number + (delta))		//Gesamtverbrauch aus dem Delta in Item schreiben
    }
    else if((delta) < 0){		//Wenn das Delta kleiner 0 ist (nach einem Reset des Shellies)
        Shelly_Hauptstromzaehler_energy_sum2.postUpdate(Shelly_Hauptstromzaehler_energy_sum2.state as Number + currentkwh)		//Gesamtverbauch nur des aktuellen Wertes nach einem Reset schreiben
    }
end
Obs dann wirklich funktioniert werde ich erst rausfinden, wenn der Shelly das nächste Mal resettet, aber vorerst scheint es zu funktionieren.

Bin mal gespannt

Antworten