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

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

Re: SPH 4600 Growatt Modbus 485 -> openHAB

Beitrag von udo1toni »

Warum machst Du dafür keinen neuen Thread auf? Das Problem hat ja nichts mit Modbus zu tun...

Wie dem auch sei :) Du kannst Dein openHAB3.4.4 Backup nicht so ohne weiteres in openHAB4 einspielen, weil die Konvertierungsscripte dabei nicht automatisch tätig werden
Und es gibt durchaus einiges anzupassen :)

Die Fehlermeldung deutet darauf hin, dass das Binding nicht installiert ist. ACHTUNG: Es gibt kein JS Transformation Binding mehr. Stattdessen musst Du JavaScript Scripting installieren, welches zusätzlich auch die Transformation abdeckt.
Dafür kann man nun aber auch DSL Code für Transformations nutzen (wenn man weiß, wie das ganze funktioniert...)

Ich bin noch nicht umgestiegen, ich brauche ein paar Tage Ruhe dafür :)
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 »

Da hast du recht, aber es ist erstmal zum testen. Zumal ich dachte das das mit dem JS ein Problem mit meiner Things datei ist.
Die Karte mit dem openHAB 3 habe ich hier noch liegen.

Das mit dem Backup einspielen hat super funktioniert.
Binding wurden auch soweit übernommen, Okay JS nicht...

rule und alles funktionieren bis jetzt.

Aber wie gesagt, nur testen.
Gruss mad-mike

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

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

Re: SPH 4600 Growatt Modbus 485 -> openHAB

Beitrag von udo1toni »

mad-mike hat geschrieben: 26. Jul 2023 18:20 Binding wurden auch soweit übernommen, Okay JS nicht...
Was ja nun daran liegt, dass es das Binding nicht mehr gibt, weil ein völlig anderes (auch vorher schon existentes!) seine Funktion mit übernommen hat.
Natürlich hätte man auch dafür eine Automatik integrieren können (falls JS Transformation oder JavaScript Scripting installiert, installiere JavaScript Scripting), aber ich denke, die Bindings wurden noch nie in dieser Form betrachtet. Entweder sie sind in addons.config gelistet, dann muss der Eintrag manuell angepasst werden (wie jegliche Textkonfiguration manuell angepasst werden muss), oder sie wurden über die UI installiert, dann wird der Eintrag 1:1 aus der json Datei übernommen, nicht mehr vorhandene Bindings werden dabei entfernt, es gibt ja keinen Installationskandidaten.
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 »

Moin,

Ich musste mal etwas die Poller Time anpassen, da m.M.n. nicht alle werte im 2,5 Sekunden Takt abgefragt werden müssen. Für die Überschuss Nutzung wäre es ja Wichtig werte exakt zu erhalten, aber andere Werte ist es Egal, wenn man hier erst nach 5 minuten oder so ein update bekommt...

Code: Alles auswählen

Bridge modbus:tcp:tcpBridge "PV Gateway"  [ host="192.168.178.198", port=502, id=1,   reconnectAfterMillis=1000 ] {

    Bridge poller inputPoller2 "PV Poller2"               [ start=0, length=100, refresh=7500, type="input", cacheMillis=100] {
        Thing data PV_total "PV_total"                    [ readStart="2", readValueType="uint16", readTransform="JS:komma.js"]      
        Thing data PV1_Volt "PV1_Volt"                    [ readStart="3", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data PV_String1 "PV_String1"                [ readStart="6", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data PV2_Volt "PV2_Volt"                    [ readStart="7", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data PV_String2 "PV_String2"                [ readStart="10", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data WR_out_AC "WR_out_AC"                  [ readStart="36", readValueType="uint16", readTransform="JS:komma.js"]
    }

    Bridge poller inputPoller "PV Poller"                 [ start=1000, length=100, refresh=7500, type="input", cacheMillis=100] {
        Thing data Akku_watt "Akku"                       [ readStart="1010", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data Akku_load "Akku_load"                  [ readStart="1012", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data Akku_Volt "Akku_Volt"                  [ readStart="1013", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data PV_SOC    "SOC"                        [ readStart="1014", readValueType="uint16"]
    }
    
    Bridge poller inputPoller4 "PV Poller4"               [ start=1000, length=100, refresh=1500, type="input", cacheMillis=100] {        
        Thing data von_netz  "von Netz"                   [ readStart="1022", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data ins_netz  "ins Netz"                   [ readStart="1030", readValueType="uint16", readTransform="JS:komma.js"]
    }
    
    Bridge poller inputPoller3 "PV Poller3"               [ start=1000, length=100, refresh=120000, type="input", cacheMillis=100] {
        Thing data E_to_user "E_to_user_tot"              [ readStart="1045", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_to_user_tot "E_to_user_tot"          [ readStart="1047", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_to_grid "E_to_grid"                  [ readStart="1049", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_to_grid_tot "E_to_grid_tot"          [ readStart="1051", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_discharge "E_discharge"              [ readStart="1053", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_discharge_tot " E_discharge_tot"     [ readStart="1055", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_charge "E_charge"                    [ readStart="1057", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_charge_tot " E_charge_tot"           [ readStart="1059", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_local_load "E_local_load"            [ readStart="1061", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_local_load_tot " E_local_load_tot"   [ readStart="1063", readValueType="uint16", readTransform="JS:komma.js"]  
    }
}

Code: Alles auswählen

// Growatt SPH

Group gGrowatt <solarplant> 

// Poller 1

Number Akku_watt "Akku Watt [%.1f W]" <flow> (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller:Akku_watt:number"}
Number SOC "Akku SOC [%d %%]" <batterylevel> (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller:PV_SOC:number"}
Number Akku_laden "Akku_laden [%.1f W]" <energy> (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller:Akku_load:number"}
Number Akku_Volt "Akku Volt [%.1f V]" <energy> (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller:Akku_Volt:number"}

// Poller 3

Number E_to_user "Ohne PV [%.1f kWh]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller3:E_to_user:number"}
Number E_to_user_tot "Ohne PV ges. [%.1f kWh]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller3:E_to_user_tot:number"}
Number E_to_grid "Einspeisen [%.1f kWh]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller3:E_to_grid:number"}
Number E_to_grid_tot "Einspeisen ges. [%.1f kWh]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller3:E_to_grid_tot:number"}
Number E_discharge "Aus dem Akku [%.1f kWh]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller3:E_discharge:number"}
Number E_discharge_tot "Aus dem Akku ges. [%.1f kWh]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller3:E_discharge_tot:number"}
Number E_charge "In den Akku [%.1f kWh]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller3:E_charge:number"}
Number E_charge_tot "In den Akku ges. [%.1f kWh]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller3:E_charge_tot:number"}
Number E_local_load "Stromverbrauch [%.1f kWh]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller3:E_local_load:number"}
Number E_local_load_tot "Stromverbrauch ges. [%.1f kWh]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller3:E_local_load_tot:number"}

// Poller 2

Number PV_total "PV total [%.1f W]" <solarplant> (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller2:PV_total:number"}
Number PV_String1 "String 1 [%.1f W]" <solarplant> (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller2:PV_String1:number"}
Number PV_String2 "String 2 [%.1f W]" <solarplant> (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller2:PV_String2:number"}
Number PV1_Volt "PV1 Volt [%.1f V]" <energy> (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller2:PV1_Volt:number"}
Number PV2_Volt "PV2 Volt [%.1f V]" <energy> (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller2:PV2_Volt:number"}
Number WR_out_AC "WR_out_AC [%.1f W]" <energy> (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller2:WR_out_AC:number"}

// Poller 4

Number Netz_Bezug "Netz Bezug [%.1f W]" <returnpipe> (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller4:von_netz:number"}
Number Netz_Einspeisung "Netz Einspeisung [%.1f W]" <flowpipe> (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller4:ins_netz:number"}

hier mal ein zwischen update.
Gruss mad-mike

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

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,

Ich habe mal wieder ein Update, dabei kann ich nun auch mal was in Richtung Growatt senden: Die untere Begrenzung vom AKKU. Bei mir steht der untere Wert auf 15%. Habe aber auch gelesen, das man diesen in den Weniger Sonnen reichen Monaten etwas anheben sollte...

So kann man dies nun bequem über oH machen, vielleicht sogar per Rule.

Code: Alles auswählen

Bridge modbus:tcp:tcpBridge "PV Gateway"  [ host="192.168.178.198", port=502, id=1,   reconnectAfterMillis=1000 ] {

    Bridge poller inputPoller2 "PV Poller2"               [ start=0, length=100, refresh=7500, type="input", cacheMillis=100] {
        Thing data PV_total "PV_total"                    [ readStart="2", readValueType="uint16", readTransform="JS:komma.js"]      
        Thing data PV1_Volt "PV1_Volt"                    [ readStart="3", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data PV_String1 "PV_String1"                [ readStart="6", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data PV2_Volt "PV2_Volt"                    [ readStart="7", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data PV_String2 "PV_String2"                [ readStart="10", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data WR_out_AC "WR_out_AC"                  [ readStart="36", readValueType="uint16", readTransform="JS:komma.js"]
    }

    Bridge poller inputPoller "PV Poller"                 [ start=1000, length=100, refresh=5000, type="input", cacheMillis=100] {
        Thing data Akku_watt "Akku"                       [ readStart="1010", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data Akku_load "Akku_load"                  [ readStart="1012", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data Akku_Volt "Akku_Volt"                  [ readStart="1013", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data PV_SOC    "SOC"                        [ readStart="1014", readValueType="uint16"]
    }
    
    Bridge poller inputPoller4 "PV Poller4"               [ start=1000, length=100, refresh=1500, type="input", cacheMillis=100] {        
        Thing data von_netz  "von Netz"                   [ readStart="1022", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data ins_netz  "ins Netz"                   [ readStart="1030", readValueType="uint16", readTransform="JS:komma.js"]
    }
    
    Bridge poller inputPoller3 "PV Poller3"               [ start=1000, length=100, refresh=300000, type="input", cacheMillis=100] {
        Thing data E_to_user "E_to_user_tot"              [ readStart="1045", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_to_user_tot "E_to_user_tot"          [ readStart="1047", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_to_grid "E_to_grid"                  [ readStart="1049", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_to_grid_tot "E_to_grid_tot"          [ readStart="1051", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_discharge "E_discharge"              [ readStart="1053", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_discharge_tot " E_discharge_tot"     [ readStart="1055", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_charge "E_charge"                    [ readStart="1057", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_charge_tot " E_charge_tot"           [ readStart="1059", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_local_load "E_local_load"            [ readStart="1061", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_local_load_tot " E_local_load_tot"   [ readStart="1063", readValueType="uint16", readTransform="JS:komma.js"]  
    }
    
    Bridge poller inputPoller5 "PV Poller5"               [ start=600, length=10, refresh=5000, type="holding"] {
        Thing data SOC_set "SOC_set" [ readStart="608", readValueType="uint16", writeStart="608", writeValueType="int16", writeType="holding" ]
    }
}

Code: Alles auswählen

// Growatt SPH

Group gGrowatt <solarplant> 

// Poller 1

Number Akku_watt "Akku Watt [%.1f W]" <flow> (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller:Akku_watt:number"}
Number SOC "Akku SOC [%d %%]" <batterylevel> (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller:PV_SOC:number"}
Number Akku_laden "Akku_laden [%.1f W]" <energy> (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller:Akku_load:number"}
Number Akku_Volt "Akku Volt [%.1f V]" <energy> (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller:Akku_Volt:number"}

// Poller 3

Number E_to_user "Ohne PV [%.1f kWh]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller3:E_to_user:number"}
Number E_to_user_tot "Ohne PV ges. [%.1f kWh]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller3:E_to_user_tot:number"}
Number E_to_grid "Einspeisen [%.1f kWh]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller3:E_to_grid:number"}
Number E_to_grid_tot "Einspeisen ges. [%.1f kWh]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller3:E_to_grid_tot:number"}
Number E_discharge "Aus dem Akku [%.1f kWh]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller3:E_discharge:number"}
Number E_discharge_tot "Aus dem Akku ges. [%.1f kWh]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller3:E_discharge_tot:number"}
Number E_charge "In den Akku [%.1f kWh]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller3:E_charge:number"}
Number E_charge_tot "In den Akku ges. [%.1f kWh]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller3:E_charge_tot:number"}
Number E_local_load "Stromverbrauch [%.1f kWh]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller3:E_local_load:number"}
Number E_local_load_tot "Stromverbrauch ges. [%.1f kWh]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller3:E_local_load_tot:number"}

// Poller 2

Number PV_total "PV total [%.1f W]" <solarplant> (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller2:PV_total:number"}
Number PV_String1 "String 1 [%.1f W]" <solarplant> (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller2:PV_String1:number"}
Number PV_String2 "String 2 [%.1f W]" <solarplant> (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller2:PV_String2:number"}
Number PV1_Volt "PV1 Volt [%.1f V]" <energy> (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller2:PV1_Volt:number"}
Number PV2_Volt "PV2 Volt [%.1f V]" <energy> (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller2:PV2_Volt:number"}
Number WR_out_AC "WR_out_AC [%.1f W]" <energy> (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller2:WR_out_AC:number"}

// Poller 4

Number Netz_Bezug "Netz Bezug [%.1f W]" <returnpipe> (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller4:von_netz:number"}
Number Netz_Einspeisung "Netz Einspeisung [%.1f W]" <flowpipe> (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller4:ins_netz:number"}

// Poller 5

Number SOC_set "SOC_set [%]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller5:SOC_set:number"}
Leider sind die Growatt listen so unvollständig, oder fehlerhaft, das das sehr mühselig ist, weitere Parameter zu finden.

Ich denke da immer noch an den Dry contakt.
Gruss mad-mike

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

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 zusammen...

Bin an anderer Stelle auf die Standby funktion gestoßen, welche ich nun über das Astro Binding steuere.

Anscheind ist es so, das das BMS doch einige Watt über AC zieht mit der Folge das der Akku um bis zu 5 % Steigt.

Mit der Standby funktion:
Die ersten 2tage hatte der akku dann eine Entladung von etwa 8-9 %, was seit dem 3ten Tag sich auf 2% eingestellt hat... (Warum auch immer)

Info:
Sobald der SPH vom Standby in den Aktiv modus wechselt, und der MIN-SOC wert unterschritten ist, lädt er über AC auf. Könnte man aber auch mit einer Rule unterbinden, in dem Man den SOC anpasst.


Ich habe versucht einen Switch mit dem Stand-by modus zu verbinden, aber irgendwie hat das rumgezickt in der Rule. Aktuell sende 0 oder 1, das Funktioniert problemlos.

aktuell:

Code: Alles auswählen

Bridge modbus:tcp:tcpBridge "PV Gateway"  [ host="192.168.178.198", port=502, id=1,   reconnectAfterMillis=1000 ] {

    Bridge poller inputPoller2 "PV Poller2"               [ start=0, length=100, refresh=7500, type="input", cacheMillis=100] {
        Thing data PV_total "PV_total"                    [ readStart="2", readValueType="uint16", readTransform="JS:komma.js"]      
        Thing data PV1_Volt "PV1_Volt"                    [ readStart="3", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data PV_String1 "PV_String1"                [ readStart="6", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data PV2_Volt "PV2_Volt"                    [ readStart="7", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data PV_String2 "PV_String2"                [ readStart="10", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data WR_out_AC "WR_out_AC"                  [ readStart="36", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data Temp1 "Temp1"                          [ readStart="93", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data Temp2 "Temp2"                          [ readStart="94", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data Temp3 "Temp3"                          [ readStart="95", readValueType="uint16", readTransform="JS:komma.js"]
    }

    Bridge poller inputPoller "PV Poller"                 [ start=1000, length=100, refresh=5000, type="input", cacheMillis=100] {
        Thing data Akku_watt "Akku"                       [ readStart="1010", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data Akku_load "Akku_load"                  [ readStart="1012", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data Akku_Volt "Akku_Volt"                  [ readStart="1013", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data PV_SOC    "SOC"                        [ readStart="1014", readValueType="uint16"]

    }
    
    Bridge poller inputPoller4 "PV Poller4"               [ start=1000, length=100, refresh=1500, type="input", cacheMillis=100] {  
//        Thing data only "only"                            [ readStart="1016", readValueType="uint16", readTransform="JS:komma.js"]      
        Thing data von_netz  "von Netz"                   [ readStart="1022", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data ins_netz  "ins Netz"                   [ readStart="1030", readValueType="uint16", readTransform="JS:komma.js"]

    }
    
    Bridge poller inputPoller3 "PV Poller3"               [ start=1000, length=100, refresh=300000, type="input", cacheMillis=100] {
        Thing data E_to_user "E_to_user_tot"              [ readStart="1045", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_to_user_tot "E_to_user_tot"          [ readStart="1047", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_to_grid "E_to_grid"                  [ readStart="1049", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_to_grid_tot "E_to_grid_tot"          [ readStart="1051", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_discharge "E_discharge"              [ readStart="1053", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_discharge_tot " E_discharge_tot"     [ readStart="1055", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_charge "E_charge"                    [ readStart="1057", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_charge_tot " E_charge_tot"           [ readStart="1059", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_local_load "E_local_load"            [ readStart="1061", readValueType="uint16", readTransform="JS:komma.js"]
        Thing data E_local_load_tot " E_local_load_tot"   [ readStart="1063", readValueType="uint16", readTransform="JS:komma.js"]  
    }
    
    Bridge poller inputPoller5 "PV Poller5"               [ start=600, length=10, refresh=5000, type="holding"] {
        Thing data SOC_set "SOC_set" [ readStart="608", readValueType="uint16", writeStart="608", writeValueType="int16", writeType="holding" ]
    }
    
    Bridge poller inputPoller6 "PV Poller6"               [ start=0, length=10, refresh=5000, type="holding"] {
        Thing data Standby "Standby" [ readStart="0", readValueType="uint16", writeStart="0", writeValueType="int16", writeType="holding" ]
    }
}

Ich habe auch gelesen, das man die Ladeleistung AC definieren kann...

Weiss nur noch nicht wie. Ich beabsichtige zu Tibber zu wechseln, so könnte man einen Leeren Akku mal für günstigen Kurs Aufladen oder so. aber bei Werkseinstellung von 300 Watt.... Naja :D
Gruss mad-mike

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

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

Re: SPH 4600 Growatt Modbus 485 -> openHAB

Beitrag von mad-mike »

Heute mit einigen versuchen das Laden vom AKKU über Netz realisiert.

Dazu habe stellt man den Wechselrichter auf ""BAT-First"" und aktiviert das AC laden... so kann der Akku mit knapp 3kw über Netz geladen werden...

die 3 KW lassen sich auch einstellen, aber soweit bin ich noch nicht...

Jedenfalls mal ein zwischen stand:

Things

Code: Alles auswählen

    Bridge poller inputPoller7 "PV Poller7"               [ start=1090, length=15, refresh=5000, type="holding"] {
         Thing data 1092 "1092" [ readStart="1092", readValueType="int16", writeStart="1092", writeValueType="int16", writeType="holding" ]
         Thing data 1100 "1100" [ readStart="1100", readValueType="int16", writeStart="1100", writeValueType="int16", writeType="holding" ]
         Thing data 1101 "1101" [ readStart="1101", readValueType="int16", writeStart="1101", writeValueType="int16", writeType="holding" ]
         Thing data 1102 "1102" [ readStart="1102", readValueType="int16", writeStart="1102", writeValueType="int16", writeType="holding" ]
    
    }
Item

Code: Alles auswählen

// Poller 7
Number start_ac "start_ac [%.0f]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller7:1092:number"}
Number bat_start "bat_start [%.0f]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller7:1100:number"}
Number bat_stop "bat_stop [%.0f]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller7:1101:number"}
Number ac_load "ac_load [%.0f]" (gGrowatt) {channel="modbus:data:tcpBridge:inputPoller7:1102:number"}
Switch Netz_laden "Netz_laden" (gGrowatt)
Rule manuelles schalten...

Code: Alles auswählen

rule "AC_Laden"
when
    Item Netz_laden changed  
then
    if((Netz_laden.state != OFF)){                                                
        bat_start.sendCommand(0)
        Thread::sleep(500)
        bat_stop.sendCommand(5947)
        Thread::sleep(500)
        ac_load.sendCommand(1)
        Thread::sleep(500)
        start_ac.sendCommand(1)
    }
    else 
    {
        bat_start.sendCommand(0)
        Thread::sleep(500)
        bat_stop.sendCommand(0)
        Thread::sleep(500)
        ac_load.sendCommand(0)
        Thread::sleep(500)
        start_ac.sendCommand(0)
    }
end

funktioniert...

sobald dies aktiviert wird, lädt der Akku, mit 3kw... deaktiviert man den Schalter regelt der Akku wieder im Hausbetrieb nach bedarf.
5947 ist eine Zeitangabe welche 23.59 uhr entspricht. dies kann man auch beeinflussen, habe aber die logik noch nicht verstanden...
Gruss mad-mike

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

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

Re: SPH 4600 Growatt Modbus 485 -> openHAB

Beitrag von udo1toni »

Wilde Vermutung zur 5947: es handelt sich um einen HEX-Wert, daraus ergäbe sich
24 Stunden * 60 Minuten * 16 = 23040 -> 0x5A00. Der höchste Wert wäre dann 0x59FF.
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 »

Moin.

Also es ist aufgeschlüsselt:

Stunden x 256 + Minuten.

So in etwa zumindest

... Das ist mir viel zu kompliziert. :mrgreen:
Gruss mad-mike

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

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

Re: SPH 4600 Growatt Modbus 485 -> openHAB

Beitrag von udo1toni »

Ja, auch eine Variante... es handelt sich also um zwei Byte, das höherwertige Byte gibt die Stunden an, das niederwertige Byte die Minuten.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten