Seite 1 von 1

automatisches Ladelog für Wallbox

Verfasst: 29. Dez 2020 13:29
von Chaosmax
hoffe ich bin in diesem Unterforum richtig?!

Ich beschäftige mich erst seit kurzen mit openhab und habe nun ein Problem mit welchem ich nicht weiterkomme.

Ich möchte ein automatisches Ladelog realisieren, dass mir am ersten eines Monats die Ladevorgänge des Vormonats per Mail zu schickt.
Da die Wallbox noch nicht installiert ist übe ich im Moment mit dem Stromverbrauch den ich mir von meiner E3DC Anlage ziehe.

Im Moment gelingt es mir eine Mail nach jedem "Ladevorgang" mit der geladenen Menge auszulösen. Außerdem kann ich eine Mail am ersten eines Monats mit der Summe der geladenen Menge schicken.

Ich hätte aber gerne eine Mail, in der die Ladevorgänge einzeln und die Gesamtsumme aufgeführt werden.
Was ich nicht herausbekomme, ist wie ich mehrer Werte eines Items (zu unterschiedlichen Zeitpunkten) in Variablen bekomme. Ich vermute, dass dies mit einem "while loop" funktioniert. Ich habe daher einen Counter Item, dass die Anzahl der Ladevorgänge im Monat zählt und nach dem Versand der Mail auf 0 zurückgesetzt werden muss.

so etwa würde ich mir die Rule vorstellen:

"Rule Ladelog"

Var Number i = 1
var Number z = item_Counter.state as Number
var Number geladene_Menge

when time "erster des Monats"
while i<(z+1)
then geladene_Menge(i) = item_geladene_Menge.state"(???("Influxdb") as Number
end
end

Ich finde aber nicht heraus, ob dies 1. überhaupt der richtige Ansatz ist. 2. wie ich die Verknüpfung hin bekomme. Es scheint keine "abstract instance" zu geben mit der ich hier weiter komme?

Als Alternative fällt mir nur ein, genügend Dummy-Items anzulegen und diese dann nach und nach mit "when changed" zu befüllen. Wobei ich noch nicht weiss, ob das so dynamisch geht.

Vielleicht kann mich jemand in die richtige Richtung schubsen? Danke.

Re: automatisches Ladelog für Wallbox

Verfasst: 29. Dez 2020 21:55
von udo1toni
Also, mal abgesehen davon, dass Deine Rule von vorne bis hinten fehlerhaft ist ;)

wäre der korrekte Ansatz vermutlich eher sowas:

Code: Alles auswählen

rule "Ladelog"
when
    Time cron "1 0 0 1 * ?" // am 1. des Monats um 0:00:01 Uhr
then
    val strText = new StringBuilder()
    val Number nDoM = now.minusSeconds(2).MonthDay - 1
    var Number nSum = 0
    var Number nValue = 0

    (0..30).forEach[i|
        if(i <= nDoM) {
            nValue = ladeMenge.historicState(now.minusSeconds(2).minusDays(i),"influxdb").state as Number
            nSum = nSum + nValue
            strText.append(i.toString + ": " + nValue.toString + " \r")
        }
    ]
    strText.append("\r" + nSum.toString)
    logInfo("ladelog","gebildeter Text: {}",strText.toString)
end
Kleiner Schönheitsfehler: die Werte werden absteigend ausgegeben (also vom Monatsletzten zum Monatsersten).

Die Rule ist ungetestet. Aber die Idee dahinter: Die Rule triggert eine Sekunde nach Mitternacht zum Monatsersten (Time cron...)
Nachdem die Konstanten und Variablen definiert sind, wird der Zahlenbereich 0 bis 30 durchlaufen und jeweils im Lambda eingesetzt. Im Lambda wird zunächst geprüft, ob bereits der Monatserste des Vormonats erreicht wurde. Ist das nicht der Fall, so wird der jeweilige Wert ausgelesen, aufsummiert und als String an den vorhandenen String strText angehängt. Zum Schluss wird noch die Summe als String angehängt. Der vollständige String wird anschließend ins Log geschrieben (könnte man aber natürlich auch mailen).

Vermutlich wird der Ansatz so nicht fehlerfrei funktionieren (z.B. die Umstellung auf Sommerzeit bzw. Winterzeit könnte Probleme bereiten) und die Persistence des Items muss sicher in der Sekunde vor Mitternacht die Tagessumme enthalten.

Re: automatisches Ladelog für Wallbox

Verfasst: 30. Dez 2020 11:49
von Chaosmax
danke für den Input. Die Rule war erstmal nur so hingeschrieben um meinen Gedanken besser ausdruck zu verleihen.

Ich hatte mich dann gestern erstmal meinem "Plan B" weiterverfolgt und die Ladevorgänge per if Funktion in extra items geschrieben.
Das funktioniert auch ganz gut. Die Mail dazu ist auch fertig und das Ergebnis ist auch so, wie ich es mir vorstelle. Außer die Datumsangabe, aber die Formatierung bekomme ich im Moment nicht in. (falls jemand ein Tipp für openhab 3 hat ?) Die Daten sind momentan noch der stündliche Stromverbrauch. Zwischendrin gibt es noch zwei Hickups, einmal wurde der Pi neugestartet und einmal hatte ich in der "Rule" gepfuscht.

Was mir nicht gefällt, das meine Lösung sehr statisch ist und in meiner Mail auch die angezeigt werden, die nicht benutzt wurden.
Da müsste ich nochmal tiefer einsteigen und sehen wie das über Gruppenfilter zu lösen wären.

Ich werde mich daher nochmal mit deinem Ansatz beschäftigen und sehen wie ich da weiter komme. Leider erstmal wieder sehr kryptisch.