Seite 9 von 10

Re: Shelly Verbrauchswerte Speichern

Verfasst: 8. Aug 2022 23:41
von danielm83
Hallo Udo

auf den ersten Blick scheint es zu funktionieren. Vielen Dank dafür.

Was mir aber aufgefallen ist: müsste das letzte postUpdate nicht (newSum) sein, anstelle von (sum)?
Ich habs jetzt mal geändert weil es mir plausible schien.

Danke
Daniel

Re: Shelly Verbrauchswerte Speichern

Verfasst: 9. Aug 2022 01:31
von udo1toni
Sehr gut, Test bestanden!

(Spaß, ich hatte es ursprünglich nur mit sum geschrieben, wollte aber dann unbedingt noch die Log-Zeile ausgeben... und an dieser Stelle habe ich natürlich den Variablennamen nicht angepasst gehabt...)

Re: Shelly Verbrauchswerte Speichern

Verfasst: 9. Aug 2022 23:32
von danielm83
:lol:

Ich dachte mir schon, dass das ein Test ist.

Jedenfalls funktioniert es immer noch und ist sicher besser als die 1/4 Stunden Rule die ich hatte.
Was bei einem Neustart oder so passiert wird sich zeigen.

Ich hab jetzt mal eine mapDB angelegt und alle items drin und bei der rrd4j das restoreonstartup raus genommen.

Danke
Daniel

Re: Shelly Verbrauchswerte Speichern

Verfasst: 10. Aug 2022 12:31
von udo1toni
Schau mal über die Items, welche den Status aktiv holen.
Z.B. habe ich knx im Einsatz. Und da ich das korrekt konfiguriert habe ;) sehe ich beim Systemstart eine lange Liste von Read Requests mit entsprechender Antwort. Meine Schalter, Dimmer, Temperatursensoren usw. zeigen ab Programmstart den korrekten Wert an, weil frisch vom Bus gezogen, auch wenn ich während einer Downtime Lichter schalte. Ein aktiv gezogener Zustand ist besser als ein wiederhergestellter Wert.

Verschiedentlich ist auch ein nicht initialisierter Wert besser als ein inaktueller Wert, weil man dann vielleicht gezielt Maßnahmen einleiten kann. Ein "restoreAll" ist also nicht unbedingt zielführend, wobei es im Einzelfall natürlich schon passen kann.

Re: Shelly Verbrauchswerte Speichern

Verfasst: 1. Okt 2022 12:52
von nw378
Hallo Udo,

wie immer genial. Ich habe hierzu noch eine Verständnisfrage.
Nachdem ich die Regel implementiert habe, will ich auch die bisherige Summe ergänzen.
Beispiel: zu ergänzendes Delta 100.
dazu habe ich temporär in der Regel

Code: Alles auswählen

        newSum = sum + diff +100
ergänzt.

Beim ersten Durchlauf klappt's, Ausgabe:

Code: Alles auswählen

 Messwert Alt: 2.264 Neu: 2.269 Differenz: 0.0050001144
 Summe alt: 2.269 Summe neu: 102.274 
Dann lösche ich die +100 wieder in der Regel, (Shelly_KWL_energy_sum ist ja per postUpdate aktualisiert).

Beim nächsten Durchlauf kommt dann:

Code: Alles auswählen

Messwert Alt: 2.269 Neu: 2.274 Differenz: 0.004999876
Summe alt: 2.274 Summe neu: 2.2789998
"sum" müsste doch den neuen Wert von Shelly_KWL_energy_sum angenommen haben.

Ich krieg Kopfschmerzen...

Re: Shelly Verbrauchswerte Speichern

Verfasst: 1. Okt 2022 13:12
von udo1toni
Hast Du openHAB zwischendurch angehalten? Lässt Du das Item für die Summe persistieren? Lässt Du den Wert beim Start von openHAB wiederherstellen?

Re: Shelly Verbrauchswerte Speichern

Verfasst: 1. Okt 2022 13:15
von nw378
openhab läuft weiter, das Summen-Item (bei mir heiss es PVtotal) wird über influx persistiert:

Code: Alles auswählen

PVtotal               : strategy = everyMinute,everyChange, restoreOnStartup

Re: Shelly Verbrauchswerte Speichern

Verfasst: 1. Okt 2022 14:01
von udo1toni
Das ist seltsam. Wie sieht Deine Rule aus?

Re: Shelly Verbrauchswerte Speichern

Verfasst: 1. Okt 2022 15:58
von nw378
Eigentlich copy&paste, nur die Items ausgetauscht:

Code: Alles auswählen

rule "Gesamtverbrauch PV Kraftwerk"
when
    Item PVAnlage_Ertrag changed 
then
    val oldVal = if(!(previousState instanceof Number)) 0 else (previousState as Number).floatValue
    val newVal = if(!(newState instanceof Number))      0 else (newState as Number).floatValue
    val diff = newVal - oldVal

    logInfo("consumption", "Messwert Alt: {} Neu: {} Differenz: {}",oldVal,newVal,diff)

    if(!(PVtotal.state instanceof Number))
        return;

    val sum = (PVtotal.state as Number).floatValue 
    var newSum = 1.5
    if(diff >= 0)
        newSum = sum + diff 
    else
        newSum = sum + newVal

    logInfo("consumption","Summe alt: {} Summe neu: {}",sum,newSum)
    PVtotal.postUpdate(newSum)
end

Re: Shelly Verbrauchswerte Speichern

Verfasst: 2. Okt 2022 15:02
von udo1toni
Das kann eigentlich nicht sein... Du kannst ja im Code sehen, dass die Variable sum (die wird in der zweiten Meldung ausgegeben) direkt aus dem Item entnommen wird.
Also kann PVTotal nicht mit newSum gefüllt worden sein.