SPH 4600 Growatt Modbus 485 -> openHAB

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

mad-mike
Beiträge: 403
Registriert: 6. Jan 2021 18:05
Answers: 2

Re: SPH 4600 Growatt Modbus 485 -> openHAB

Beitrag von mad-mike »

Moin,

Bin einfach blind und finde den Fehler nicht, entweder Schaltet der Growatt bei jedem changed oder Garnicht....

Code: Alles auswählen

rule "Growatt OFF"

when
    Item SOC changed  
then
//    if(!(newState instanceof Number)) 
//        logWarn("SOC","Ungültige Wert ({})! Abbruch.",newState)
//        return;
        if(day.state  == ON)                                                    // Item daylight  
        return;
        if(Standby_PVnr.state  == 0)                                            // Abfrage Growatt Standby  
        return;
        if(SOC_set.state <= SOC.state)
        return;
        
    Standby_PVnr.sendCommand(0)                                                 // Standby ON
    Status_Akku.postUpdate("Standby")                                           // TAB meldung
    sendBroadcastNotification("Growatt OFF")                                    // Nachricht

end

Also ziel ist:

Wenn der Akku leer ist, den Growatt in den Standby zu schicken. Das soll nur Passieren wenn daylight End ist. Hier habe ich ein Item erstellt, ON und OFF ist...


kann jemand Helfen??

Danke und schönes Wochenende
Gruss mad-mike

openHABian 4.1.1 auf Raspberry Pi 4 Mod. b (8GB) ;)

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

Re: SPH 4600 Growatt Modbus 485 -> openHAB

Beitrag von udo1toni »

Ich denke mal, Du musst hier explizit nach Number casten, deshalb sauber so:

Code: Alles auswählen

rule "Growatt OFF"
when
    Item SOC changed  
then
    if(!(newState instanceof Number)) {
        logWarn("growatt","SOC liefert keine Zahl ({})! Abbruch.", newState)
        return;
    }
    if(!(SOC_set.state instanceof Number)) {
        logWarn("growatt","SOC liefert keine Zahl ({})! Abbruch.", SOC_set.state)
        return;
    }
    val nMin = SOC_set.state as Number

    if(day.state == ON)                                                           // Item daylight  
        return;

    if(Standby_PVnr.state == 0)                                                   // Abfrage Growatt Standby
        return;

    if(nMin <= (newState as Number))
        return;

    Standby_PVnr.sendCommand(0)                                                   // Standby ON
    Status_Akku.postUpdate("Standby")                                             // TAB meldung
    sendBroadcastNotification("Growatt OFF")                                      // Nachricht
end
Die Überprüfung auf Number ist schon wichtig, aber wenn Du dann eine Meldung ausgeben willst, musst Du natürlich den bedingten Block in {} setzen, sonst wird das return; immer ausgeführt...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

mad-mike
Beiträge: 403
Registriert: 6. Jan 2021 18:05
Answers: 2

Re: SPH 4600 Growatt Modbus 485 -> openHAB

Beitrag von mad-mike »

Danke dir, Also ich komme einfach nicht dahinter, was ich falsch mache... :cry:

Ich habe dem Vergleich noch ein -1 ergänzt.

So hat der Growatt heute das erste mal abeschalten:

Code: Alles auswählen

rule "Growatt OFF"
when
    Item SOC changed  
then
    if(!(newState instanceof Number)) {
        logWarn("growatt","SOC liefert keine Zahl ({})! Abbruch.", newState)
        return;
    }
    if(!(SOC_set.state instanceof Number)) {
        logWarn("growatt","SOC liefert keine Zahl ({})! Abbruch.", SOC_set.state)
        return;
    }
    val nSOC_set = (SOC_set.state as Number).intValue
    val nSOC = (SOC.state as Number).intValue

    if(day.state == ON)                                                           // Item daylight  
        return;

    if(Standby_PVnr.state == 0)                                                   // Abfrage Growatt Standby
        return;

    if((nSOC - 1) >= nSOC_set)
        return;

    Standby_PVnr.sendCommand(0)                                                   // Standby ON
    Status_Akku.postUpdate("Standby")                                             // TAB meldung
    sendBroadcastNotification("Growatt OFF")                                      // Nachricht
end
Gruss mad-mike

openHABian 4.1.1 auf Raspberry Pi 4 Mod. b (8GB) ;)

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

Re: SPH 4600 Growatt Modbus 485 -> openHAB

Beitrag von udo1toni »

Wir hatten es ja in einem anderen Thread davon.... Du könntest spaßeshalber die Variablen explizit als Number oder Integer definieren.
Standby_PVnr.state könnte man (da es sich ja um einen einzelnen fixen Wert handelt) vielleicht auch als String überprüfen:

Code: Alles auswählen

if(Standby_PVnr.state.toString == "0")
Und natürlich könnte man zur besseren Abgrenzung, welche der Abbruchbedingungen nun dazu geführt hat, dass nicht abgeschaltet wurde, diese ebenfalls mit logs versehen, vielleicht in der Form

Code: Alles auswählen

logDebug("growatt","<Grund für Abbruch>. Abbruch.")
Dann kannst Du, wenn mal alles exakt so läuft wie vorgesehen, einfach das Log Level auf WARN oder INFO erhöhen und die Meldungen kommen nicht mehr, zum Testen setzt Du das Log Level aber auf DEBUG und siehst jedes Detail.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten