From f0aeb9ba3a986e83b9f85e5c09eadce9180928c1 Mon Sep 17 00:00:00 2001 From: premultiply <4681172+premultiply@users.noreply.github.com> Date: Mon, 25 Nov 2024 09:07:49 +0100 Subject: [PATCH] SMA: fix battery control (#17393) --- templates/definition/meter/sma-hybrid.yaml | 164 +++++++++++++-- .../meter/sma-sbs-15-25-modbus.yaml | 60 +++--- .../definition/meter/sma-sbs-modbus.yaml | 195 +++++++++++++++--- templates/definition/meter/sma-si-modbus.yaml | 8 +- 4 files changed, 353 insertions(+), 74 deletions(-) diff --git a/templates/definition/meter/sma-hybrid.yaml b/templates/definition/meter/sma-hybrid.yaml index 7431fbc7be..3443c11267 100644 --- a/templates/definition/meter/sma-hybrid.yaml +++ b/templates/definition/meter/sma-hybrid.yaml @@ -21,14 +21,15 @@ params: - name: maxacpower - name: watchdog type: duration - default: 30s + default: 60s advanced: true + usages: ["battery"] - name: chargepower - default: 100000 # 100kW, inverter will use it's maximum by default + default: 4200 # W advanced: true help: - de: Ladeleistung für Netzladen in W - en: Charging power for grid charging in W + de: Maximale Ladeleistung für erzwungenes Laden des Speichers in Watt + en: Maximum charging power for forced charging of the battery in Watt usages: ["battery"] render: | type: custom @@ -138,35 +139,118 @@ render: | switch: - case: 1 # normal set: - source: const - value: 803 # inaktiv (Ina) + source: sequence set: - source: modbus - {{- include "modbus" . | indent 10 }} - register: - address: 40151 # SMA Modbus Profile: Inverter.WModCfg.WCtlComCfg.WCtlComAct - type: writemultiple - decode: uint32 + - source: const + value: 2424 # Voreinstellung (Dft) + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40236 # CmpBMS.OpMod - Betriebsart des BMS + type: writemultiple + decode: uint32 + - source: const + value: 0 + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40793 # CmpBMS.BatChaMinW - Minimale Batterieladeleistung + type: writemultiple + decode: uint32 + - source: const + value: {{ .chargepower }} + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40795 # CmpBMS.BatChaMaxW - Maximale Batterieladeleistung + type: writemultiple + decode: uint32 + - source: const + value: 0 + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40797 # CmpBMS.BatDschMinW - Minimale Batterieentladeleistung + type: writemultiple + decode: uint32 + - source: const + value: {{ .chargepower }} + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40799 # CmpBMS.BatDschMaxW - Maximale Batterieentladeleistung + type: writemultiple + decode: uint32 + - source: const + value: 0 + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40801 # CmpBMS.GridWSpt - Sollwert der Netzaustauschleistung + type: writemultiple + decode: uint32 - case: 2 # hold set: source: sequence set: - source: const - value: 0 # Wirkleistungsvorgabe + value: 2424 # Voreinstellung (Dft) + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40236 # CmpBMS.OpMod - Betriebsart des BMS + type: writemultiple + decode: uint32 + - source: const + value: 0 set: source: modbus {{- include "modbus" . | indent 12 }} register: - address: 40149 # SMA Modbus Profile: Inverter.WModCfg.WCtlComCfg.WSpt + address: 40793 # CmpBMS.BatChaMinW - Minimale Batterieladeleistung type: writemultiple - decode: int32 + decode: uint32 + - source: const + value: {{ .chargepower }} + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40795 # CmpBMS.BatChaMaxW - Maximale Batterieladeleistung + type: writemultiple + decode: uint32 + - source: const + value: 0 + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40797 # CmpBMS.BatDschMinW - Minimale Batterieentladeleistung + type: writemultiple + decode: uint32 - source: const - value: 802 # aktiv (Act) + value: 0 set: source: modbus {{- include "modbus" . | indent 12 }} register: - address: 40151 # SMA Modbus Profile: Inverter.WModCfg.WCtlComCfg.WCtlComAct + address: 40799 # CmpBMS.BatDschMaxW - Maximale Batterieentladeleistung + type: writemultiple + decode: uint32 + - source: const + value: 0 + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40801 # CmpBMS.GridWSpt - Sollwert der Netzaustauschleistung type: writemultiple decode: uint32 - case: 3 # charge @@ -174,21 +258,57 @@ render: | source: sequence set: - source: const - value: -{{ .chargepower }} # Wirkleistungsvorgabe + value: 2289 # Batterie laden (BatChaMod) set: source: modbus {{- include "modbus" . | indent 12 }} register: - address: 40149 # SMA Modbus Profile: Inverter.WModCfg.WCtlComCfg.WSpt + address: 40236 # CmpBMS.OpMod - Betriebsart des BMS type: writemultiple - decode: int32 + decode: uint32 + - source: const + value: {{ .chargepower }} + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40793 # CmpBMS.BatChaMinW - Minimale Batterieladeleistung + type: writemultiple + decode: uint32 + - source: const + value: {{ .chargepower }} + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40795 # CmpBMS.BatChaMaxW - Maximale Batterieladeleistung + type: writemultiple + decode: uint32 + - source: const + value: 0 + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40797 # CmpBMS.BatDschMinW - Minimale Batterieentladeleistung + type: writemultiple + decode: uint32 + - source: const + value: 0 + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40799 # CmpBMS.BatDschMaxW - Maximale Batterieentladeleistung + type: writemultiple + decode: uint32 - source: const - value: 802 # aktiv (Act) + value: 0 set: source: modbus {{- include "modbus" . | indent 12 }} register: - address: 40151 # SMA Modbus Profile: Inverter.WModCfg.WCtlComCfg.WCtlComAct + address: 40801 # CmpBMS.GridWSpt - Sollwert der Netzaustauschleistung type: writemultiple decode: uint32 capacity: {{ .capacity }} # kWh diff --git a/templates/definition/meter/sma-sbs-15-25-modbus.yaml b/templates/definition/meter/sma-sbs-15-25-modbus.yaml index 326218fda0..0cbcbdb994 100644 --- a/templates/definition/meter/sma-sbs-15-25-modbus.yaml +++ b/templates/definition/meter/sma-sbs-15-25-modbus.yaml @@ -20,6 +20,12 @@ params: type: duration default: 60s advanced: true + - name: chargepower + default: 4200 # W + advanced: true + help: + de: Maximale Ladeleistung für erzwungenes Laden des Speichers in Watt + en: Maximum charging power for forced charging of the battery in Watt render: | type: custom power: @@ -56,12 +62,12 @@ render: | source: sequence set: - source: const - value: 2424 + value: 2424 # Voreinstellung (Dft) set: source: modbus {{- include "modbus" . | indent 12 }} register: - address: 40236 + address: 40236 # CmpBMS.OpMod - Betriebsart des BMS type: writemultiple decode: uint32 - source: const @@ -70,16 +76,16 @@ render: | source: modbus {{- include "modbus" . | indent 12 }} register: - address: 40793 + address: 40793 # CmpBMS.BatChaMinW - Minimale Batterieladeleistung type: writemultiple decode: uint32 - source: const - value: 2500 + value: {{ .chargepower }} set: source: modbus {{- include "modbus" . | indent 12 }} register: - address: 40795 + address: 40795 # CmpBMS.BatChaMaxW - Maximale Batterieladeleistung type: writemultiple decode: uint32 - source: const @@ -88,16 +94,16 @@ render: | source: modbus {{- include "modbus" . | indent 12 }} register: - address: 40797 + address: 40797 # CmpBMS.BatDschMinW - Minimale Batterieentladeleistung type: writemultiple decode: uint32 - source: const - value: 2650 + value: {{ .chargepower }} set: source: modbus {{- include "modbus" . | indent 12 }} register: - address: 40799 + address: 40799 # CmpBMS.BatDschMaxW - Maximale Batterieentladeleistung type: writemultiple decode: uint32 - source: const @@ -106,7 +112,7 @@ render: | source: modbus {{- include "modbus" . | indent 12 }} register: - address: 40801 + address: 40801 # CmpBMS.GridWSpt - Sollwert der Netzaustauschleistung type: writemultiple decode: uint32 - case: 2 # hold @@ -114,12 +120,12 @@ render: | source: sequence set: - source: const - value: 2424 + value: 2424 # Voreinstellung (Dft) set: source: modbus {{- include "modbus" . | indent 12 }} register: - address: 40236 + address: 40236 # CmpBMS.OpMod - Betriebsart des BMS type: writemultiple decode: uint32 - source: const @@ -128,16 +134,16 @@ render: | source: modbus {{- include "modbus" . | indent 12 }} register: - address: 40793 + address: 40793 # CmpBMS.BatChaMinW - Minimale Batterieladeleistung type: writemultiple decode: uint32 - source: const - value: 0 + value: {{ .chargepower }} set: source: modbus {{- include "modbus" . | indent 12 }} register: - address: 40795 + address: 40795 # CmpBMS.BatChaMaxW - Maximale Batterieladeleistung type: writemultiple decode: uint32 - source: const @@ -146,7 +152,7 @@ render: | source: modbus {{- include "modbus" . | indent 12 }} register: - address: 40797 + address: 40797 # CmpBMS.BatDschMinW - Minimale Batterieentladeleistung type: writemultiple decode: uint32 - source: const @@ -155,7 +161,7 @@ render: | source: modbus {{- include "modbus" . | indent 12 }} register: - address: 40799 + address: 40799 # CmpBMS.BatDschMaxW - Maximale Batterieentladeleistung type: writemultiple decode: uint32 - source: const @@ -164,7 +170,7 @@ render: | source: modbus {{- include "modbus" . | indent 12 }} register: - address: 40801 + address: 40801 # CmpBMS.GridWSpt - Sollwert der Netzaustauschleistung type: writemultiple decode: uint32 - case: 3 # charge @@ -172,30 +178,30 @@ render: | source: sequence set: - source: const - value: 2289 + value: 2289 # Batterie laden (BatChaMod) set: source: modbus {{- include "modbus" . | indent 12 }} register: - address: 40236 + address: 40236 # CmpBMS.OpMod - Betriebsart des BMS type: writemultiple decode: uint32 - source: const - value: 2500 + value: {{ .chargepower }} set: source: modbus {{- include "modbus" . | indent 12 }} register: - address: 40793 + address: 40793 # CmpBMS.BatChaMinW - Minimale Batterieladeleistung type: writemultiple decode: uint32 - source: const - value: 2500 + value: {{ .chargepower }} set: source: modbus {{- include "modbus" . | indent 12 }} register: - address: 40795 + address: 40795 # CmpBMS.BatChaMaxW - Maximale Batterieladeleistung type: writemultiple decode: uint32 - source: const @@ -204,16 +210,16 @@ render: | source: modbus {{- include "modbus" . | indent 12 }} register: - address: 40797 + address: 40797 # CmpBMS.BatDschMinW - Minimale Batterieentladeleistung type: writemultiple decode: uint32 - source: const - value: 2650 + value: 0 set: source: modbus {{- include "modbus" . | indent 12 }} register: - address: 40799 + address: 40799 # CmpBMS.BatDschMaxW - Maximale Batterieentladeleistung type: writemultiple decode: uint32 - source: const @@ -222,7 +228,7 @@ render: | source: modbus {{- include "modbus" . | indent 12 }} register: - address: 40801 + address: 40801 # CmpBMS.GridWSpt - Sollwert der Netzaustauschleistung type: writemultiple decode: uint32 capacity: {{ .capacity }} # kWh diff --git a/templates/definition/meter/sma-sbs-modbus.yaml b/templates/definition/meter/sma-sbs-modbus.yaml index e7fb103dcc..23b7d470a0 100644 --- a/templates/definition/meter/sma-sbs-modbus.yaml +++ b/templates/definition/meter/sma-sbs-modbus.yaml @@ -20,6 +20,12 @@ params: type: duration default: 60s advanced: true + - name: chargepower + default: 4200 # W + advanced: true + help: + de: Maximale Ladeleistung für erzwungenes Laden des Speichers in Watt + en: Maximum charging power for forced charging of the battery in Watt render: | type: custom power: @@ -53,35 +59,176 @@ render: | switch: - case: 1 # normal set: - source: const - value: 10000 # Maximale Wirkleistung 100.00% + source: sequence set: - source: modbus - {{- include "modbus" . | indent 10 }} - register: - address: 44039 # SMA Modbus Profile: Inverter.WModCfg.WCtlComCfg.WSptMaxNom - type: writemultiple - decode: int32 + - source: const + value: 2424 # Voreinstellung (Dft) + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40236 # CmpBMS.OpMod - Betriebsart des BMS + type: writemultiple + decode: uint32 + - source: const + value: 0 + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40793 # CmpBMS.BatChaMinW - Minimale Batterieladeleistung + type: writemultiple + decode: uint32 + - source: const + value: {{ .chargepower }} + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40795 # CmpBMS.BatChaMaxW - Maximale Batterieladeleistung + type: writemultiple + decode: uint32 + - source: const + value: 0 + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40797 # CmpBMS.BatDschMinW - Minimale Batterieentladeleistung + type: writemultiple + decode: uint32 + - source: const + value: {{ .chargepower }} + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40799 # CmpBMS.BatDschMaxW - Maximale Batterieentladeleistung + type: writemultiple + decode: uint32 + - source: const + value: 0 + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40801 # CmpBMS.GridWSpt - Sollwert der Netzaustauschleistung + type: writemultiple + decode: uint32 - case: 2 # hold set: - source: const - value: 0 # Maximale Wirkleistung 0.00% + source: sequence set: - source: modbus - {{- include "modbus" . | indent 10 }} - register: - address: 44039 # SMA Modbus Profile: Inverter.WModCfg.WCtlComCfg.WSptMaxNom - type: writemultiple - decode: int32 + - source: const + value: 2424 # Voreinstellung (Dft) + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40236 # CmpBMS.OpMod - Betriebsart des BMS + type: writemultiple + decode: uint32 + - source: const + value: 0 + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40793 # CmpBMS.BatChaMinW - Minimale Batterieladeleistung + type: writemultiple + decode: uint32 + - source: const + value: {{ .chargepower }} + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40795 # CmpBMS.BatChaMaxW - Maximale Batterieladeleistung + type: writemultiple + decode: uint32 + - source: const + value: 0 + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40797 # CmpBMS.BatDschMinW - Minimale Batterieentladeleistung + type: writemultiple + decode: uint32 + - source: const + value: 0 + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40799 # CmpBMS.BatDschMaxW - Maximale Batterieentladeleistung + type: writemultiple + decode: uint32 + - source: const + value: 0 + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40801 # CmpBMS.GridWSpt - Sollwert der Netzaustauschleistung + type: writemultiple + decode: uint32 - case: 3 # charge set: - source: const - value: -10000 # Maximale Wirkleistung -100.00% + source: sequence set: - source: modbus - {{- include "modbus" . | indent 10 }} - register: - address: 44039 # SMA Modbus Profile: Inverter.WModCfg.WCtlComCfg.WSptMaxNom - type: writemultiple - decode: int32 + - source: const + value: 2289 # Batterie laden (BatChaMod) + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40236 # CmpBMS.OpMod - Betriebsart des BMS + type: writemultiple + decode: uint32 + - source: const + value: {{ .chargepower }} + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40793 # CmpBMS.BatChaMinW - Minimale Batterieladeleistung + type: writemultiple + decode: uint32 + - source: const + value: {{ .chargepower }} + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40795 # CmpBMS.BatChaMaxW - Maximale Batterieladeleistung + type: writemultiple + decode: uint32 + - source: const + value: 0 + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40797 # CmpBMS.BatDschMinW - Minimale Batterieentladeleistung + type: writemultiple + decode: uint32 + - source: const + value: 0 + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40799 # CmpBMS.BatDschMaxW - Maximale Batterieentladeleistung + type: writemultiple + decode: uint32 + - source: const + value: 0 + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 40801 # CmpBMS.GridWSpt - Sollwert der Netzaustauschleistung + type: writemultiple + decode: uint32 capacity: {{ .capacity }} # kWh diff --git a/templates/definition/meter/sma-si-modbus.yaml b/templates/definition/meter/sma-si-modbus.yaml index df2d684bfe..c9496837a9 100644 --- a/templates/definition/meter/sma-si-modbus.yaml +++ b/templates/definition/meter/sma-si-modbus.yaml @@ -20,6 +20,12 @@ params: type: duration default: 60s advanced: true + - name: chargepower + default: 4200 # W + advanced: true + help: + de: Maximale Ladeleistung für erzwungenes Laden des Speichers in Watt + en: Maximum charging power for forced charging of the battery in Watt render: | type: custom power: @@ -89,7 +95,7 @@ render: | source: sequence set: - source: const - value: -2147483647 # Wirkleistungsvorgabe + value: -{{ .chargepower }} # Wirkleistungsvorgabe set: source: modbus {{- include "modbus" . | indent 12 }}