Victron Energie Items Wiederherstellen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Benutzeravatar
PeterA
Beiträge: 1052
Registriert: 8. Feb 2019 12:12
Answers: 13

Victron Energie Items Wiederherstellen

Beitrag von PeterA »

Hallo zusammen und Udo.

Von meinem Victron Multiplus Laderegler kommen zwei Items die leider nach einem Reboot des Victron wieder auf 0 gesetzt werden.
(Gleiches Verhalten wie bei den Shellys)

Code: Alles auswählen

Number    mp2_ac_in1_to_inverter      "AC to Inverter [%.2f kWh]"                        <energy>              (Victron)                       {channel="mqtt:topic:VictronBroker:victron:mp2_ac_in1_to_inverter"}
Number    mp2_inverter_to_ac_in1      "Inverter to AC [%.2f kWh]"                        <energy>              (Victron)                       {channel="mqtt:topic:VictronBroker:victron:mp2_inverter_to_ac_in1"}
Nun möchte ich aber die Werte auch über einen Reboot des Victron hinaus retten.

Für die Shellys hattest Du Udo mal folgende Rule vorgeschlagen die mit den Shellys seither einwandfrei Funktioniert.
Könnte man diese Rule auch auf die Victron Items Anwenden ?

Code: Alles auswählen

rule "Shellies25 kWh aggregation"                         // Berechne den Shelly-kWh-Verbrauch basierend auf den kWh-Werten der Shelly
when
    Member of gShellyConsumption changed                  // Gruppe mit Consumption Member
then
    logInfo("ShellykWh", "Es gibt {} Member in der Consumption Gruppe.", gShellyConsumption.members.size)

    val iSink = gShellykWh.members.filter[i|i.name.split("_").get(1) == triggeringItem.name.split("_").get(1)].head

    val Number nDelta = (triggeringItem.deltaSince(now.minusMinutes(15)).floatValue) / 60000

    logInfo("ShellykWh", "Quelle: {}, Ziel: {}, Delta: {}, before update: {}", triggeringItem.name, iSink.name, nDelta, iSink.state)

    if(nDelta <= 0)                                        // falls nDelta kleiner oder gleich 0
        return;                                            // Abbruch der Rule
    if(!(iSink.state instanceof Number))                   // Falls keine Zahl geliefert wird
        iSink.postUpdate(nDelta)                           // nDelta als Wert setzen
    else                                                   // ansonsten
        iSink.postUpdate((iSink.state as Number) + nDelta) // nDelta zum aktuellen Wert addieren
end
Was ich schon gesehen habe ist das die Umrechnung von Wh in kWh entfallen kann da die Items vom Victron schon als kWh vorliegen.

Gruß Peter
- OpenHab 2.4
#PWRUP

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

Re: Victron Energie Items Wiederherstellen

Beitrag von udo1toni »

Sollte eigentlich genauso funktionieren, solange die Werte persistiert werden.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
PeterA
Beiträge: 1052
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Victron Energie Items Wiederherstellen

Beitrag von PeterA »

Und passen die Namen der Items auch zu dem Gruppenfilter?
- OpenHab 2.4
#PWRUP

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

Re: Victron Energie Items Wiederherstellen

Beitrag von udo1toni »

Na, die Rule selbst musst Du natürlich entsprechend gestalten, so dass Du von dem einen Namen zum anderen Namen kommst.
Alternativ musst Du die Itemnamen passend gestalten ;)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
PeterA
Beiträge: 1052
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Victron Energie Items Wiederherstellen

Beitrag von PeterA »

Ich brauchs mal wieder eher "kleinschrittig" :/

Die ursprüngliche Rule für die Shellys filtert ja so:

Code: Alles auswählen

val iSink = gShellykWh.members.filter[i|i.name.split("_").get(1) == triggeringItem.name.split("_").get(1)].head
Das "Eingangs Item" welches die Daten hat die nach dem Reboot gerettet werden sollen dazu sieht so aus:

Code: Alles auswählen

Shellyswitch25_740A26_energy
Und das "Ausgangs Item" dazu sieht so aus:

Code: Alles auswählen

Shellyswitch25_740A26_kWh
Die "Eingangs Items" vom Victron die über einen Reboot gerettet werden sollen sehen ja wie oben geschrieben so aus:

Code: Alles auswählen

mp2_ac_in1_to_inverter
und

Code: Alles auswählen

mp2_inverter_to_ac_in1
(Umrechnung brauchen wir nicht da schon in kWh)

Wie funktioniert denn der Gruppenfilter genau und wie müsste ich die Eingangsitems und Ausgangsitems (muss ich noch anlegen) benennen ?

Gruß Peter
- OpenHab 2.4
#PWRUP

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

Re: Victron Energie Items Wiederherstellen

Beitrag von udo1toni »

Eigentlich muss die erste Frage lauten: um wie viele Werte geht es denn wirklich? Im Unterschied zu den Shellies wirst Du ja nicht zig Victron haben. Wie viele Werte sollen bei einem Neustart rekonstruiert werden? Weil, wenn es nur um die beiden Werte mp2_ac_ini_to_inverter und mp2_inverter_to_ac_ini geht, brauchst Du ja nur noch zwei weitere Items, welche Du zum akkumulieren verwendest. Da braucht es also gar keine Gruppe und Berechnung der Itemnamen, oder zumindest wird die Rule damit nicht weniger komplex...

Code: Alles auswählen

rule "Victron aggregation"
when
    Item mp2_ac_ini_to_inverter changed or
    Item mp2_inverter_to_ac_ini changed
then
    val Number nDeltaIn  = (mp2_ac_ini_to_inverter.deltaSince(now.minusMinutes(15)).floatValue) / 60000
    val Number nDeltaOut = (mp2_inverter_to_ac_ini.deltaSince(now.minusMinutes(15)).floatValue) / 60000

    logInfo("victron", "mp2_ac_ini_to_inverter, Delta: {}, before update: {}", nDeltaIn,  mp2_ac_ini_to_inverter_aggregation.state)
    logInfo("victron", "mp2_inverter_to_ac_ini, Delta: {}, before update: {}", nDeltaOut, mp2_inverter_to_ac_ini_aggregation.state)
    if(nDeltaIn > 0) {
        if(!(mp2_ac_ini_to_inverter_aggregation.state instanceof Number))
            mp2_ac_ini_to_inverter_aggregation.postUpdate(nDeltaIn)
        else
            mp2_ac_ini_to_inverter_aggregation.postUpdate(nDeltaIn + (mp2_ac_ini_to_inverter_aggregation.state as Number))
    }
    if(nDeltaOut > 0) {
        if(!(mp2_inverter_to_ac_ini_aggregation.state instanceof Number))
            mp2_inverter_to_ac_ini_aggregation.postUpdate(nDeltaOut)
        else
            mp2_inverter_to_ac_ini_aggregation.postUpdate(nDeltaOut + (mp2_inverter_to_ac_ini_aggregation.state as Number))
    }
end
Notfalls könnte man auch beide Werte mit zwei Rules speichern, also die Rule in zwei Rules aufteilen, eine für ac_ini2inverter, eine für inverter2ac_ini
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
PeterA
Beiträge: 1052
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Victron Energie Items Wiederherstellen

Beitrag von PeterA »

Hallo Udo jetzt hab ichs doch mit der Gruppen Rule hinbekommen.
Ich musste erst mal lernen das dieses

Code: Alles auswählen

get(1)
den zweiten Teil im Itemnamen Filtert. Da hab ICH gehangen :)
Es sind tatsächlich zur Zeit nur zwei Items vom Victron aber ich finde die Rule über die Gruppen Filterung etwas schlanker.

Hier noch mal der Vollständigkeit halber:

Items:

Code: Alles auswählen

Number    mp2_ac_in1_to_inverter_energy    "AC to Inverter [%.2f kWh]"                        <energy>              (Victron,gVictronConsumption)    {channel="mqtt:topic:VictronBroker:victron:mp2_ac_in1_to_inverter"}
Number    mp2_ac_in1_to_inverter_kWh       "AC to Inverter [%.2f kWh]"                        <energy>              (Victron,gVictronkWh)
Number    mp2_inverter_to_ac_in1_energy    "Inverter to AC [%.2f kWh]"                        <energy>              (Victron,gVictronConsumption)    {channel="mqtt:topic:VictronBroker:victron:mp2_inverter_to_ac_in1"}
Number    mp2_inverter_to_ac_in1_kWh       "Inverter to AC [%.2f kWh]"                        <energy>              (Victron,gVictronkWh)
rule:

Code: Alles auswählen

rule "Victron kWh Values safe after reboot of Victron"     // Sichere die verbrauchs Werte des Victron nach einem Reboot des Victron
when
    Member of gVictronConsumption changed                  // Gruppe mit Consumption Members des Victron (mp2_ac_in1_to_inverter_energy & mp2_inverter_to_ac_in1_energy)
then
    logInfo("VictronkWh", "Es gibt {} Member in der Consumption Gruppe.", gVictronConsumption.members.size)

    val iSink = gVictronkWh.members.filter[i|i.name.split("_").get(1) == triggeringItem.name.split("_").get(1)].head // Gruppe mit Members (mp2_ac_in1_to_inverter_kWh & mp2_inverter_to_ac_in1_kWh)

    val Number nDelta = (triggeringItem.deltaSince(now.minusMinutes(1)).floatValue)

    logInfo("VictronkWh", "Quelle: {}, Ziel: {}, Delta: {}, before update: {}", triggeringItem.name, iSink.name, nDelta, iSink.state)

    if(nDelta <= 0)                                        // falls nDelta kleiner oder gleich 0
        return;                                            // Abbruch der Rule
    if(!(iSink.state instanceof Number))                   // Falls keine Zahl geliefert wird
        iSink.postUpdate(nDelta)                           // nDelta als Wert setzen
    else                                                   // ansonsten
        iSink.postUpdate((iSink.state as Number) + nDelta) // nDelta zum aktuellen Wert addieren
end
Gruß Peter

ps. @Udo: Victron Multiplus 2 GX und der Pylontech 3,5kWh Akku verrichten Einwandfrei ihren Dienst.
- OpenHab 2.4
#PWRUP

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

Re: Victron Energie Items Wiederherstellen

Beitrag von udo1toni »

Sehr schön!
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten