evcc-io/templates/definition/meter/sungrow-hybrid.yaml
2025-12-02 17:47:13 +01:00

288 lines
7.8 KiB
YAML

template: sungrow-hybrid
covers: ["sungrow"]
products:
- brand: Sungrow
description:
generic: SH Series Hybrid Inverter
capabilities: ["battery-control"]
requirements:
description:
de: Verbindungen über das WiNet-S-Dongle (WiFi oder LAN) funktionieren nur mit aktueller Firmware. Ältere Versionen liefern nicht alle benötigten Daten (Leistung, Ladestand).
en: Connections via the WiNet-S dongle (WiFi or LAN) only work with the latest firmware. Older versions do not provide all required data (power, state of charge).
params:
- name: usage
choice: ["grid", "pv", "battery"]
allinone: true
- name: modbus
choice: ["rs485", "tcpip"]
baudrate: 9600
- name: timeout
- name: capacity
- name: maxacpower
- name: minsoc
advanced: true
- name: maxsoc
advanced: true
- name: maxchargepower
default: 5000
advanced: true
required: true
- name: maxdischargepower
default: 5000
advanced: true
render: |
type: custom
{{- if eq .usage "grid" }}
power:
source: modbus
{{- include "modbus" . | indent 2 }}
timeout: {{ .timeout }}
register:
type: input
address: 13009 # Export power
decode: int32s
scale: -1
energy:
source: modbus
{{- include "modbus" . | indent 2 }}
register:
address: 13036 # Total Import Energy, 0.1kWh
type: input
decode: uint32s
scale: 0.1
currents:
- source: calc
div:
- source: modbus
{{- include "modbus" . | indent 4 }}
register:
type: input
address: 5602 # Meter Phase A Active Power, 1W
decode: int32s
- source: modbus
{{- include "modbus" . | indent 4 }}
register:
type: input
address: 5018 # Phase A voltage, 0.1V
decode: uint16
scale: 0.1
- source: calc
div:
- source: modbus
{{- include "modbus" . | indent 4 }}
register:
type: input
address: 5604 # Meter Phase B Active Power, 1W
decode: int32s
- source: modbus
{{- include "modbus" . | indent 4 }}
register:
type: input
address: 5019 # Phase b voltage, 0.1V
decode: uint16
scale: 0.1
- source: calc
div:
- source: modbus
{{- include "modbus" . | indent 4 }}
register:
type: input
address: 5606 # Meter Phase C Active Power, 1W
decode: int32s
- source: modbus
{{- include "modbus" . | indent 4 }}
register:
type: input
address: 5020 # Phase C voltage, 0.1V
decode: uint16
scale: 0.1
{{- end }}
{{- if eq .usage "pv" }}
power:
source: modbus
{{- include "modbus" . | indent 2 }}
timeout: {{ .timeout }}
register:
address: 5016 # Total DC power
type: input
decode: uint32s
energy:
source: modbus
{{- include "modbus" . | indent 2 }}
register:
address: 13002 # Total PV Generation, 0.1kWh
type: input
decode: uint32s
scale: 0.1
maxacpower: {{ .maxacpower }} # W
{{- end }}
{{- if eq .usage "battery" }}
power:
source: go # handling old and new firmware
script: |
res := float64(bp)
if (brs&0x2 > 0 || bc < 0) && bp >= 0 {
res = float64(-bp)
}
res
in:
- name: brs
type: int
config:
source: modbus
{{- include "modbus" . | indent 6 }}
register:
type: input
address: 13000 # Battery running state
decode: uint16
- name: bc
type: int
config:
source: modbus
{{- include "modbus" . | indent 6 }}
register:
type: input
address: 13020 # Battery current
decode: int16
- name: bp
type: int
config:
source: modbus
{{- include "modbus" . | indent 6 }}
register:
type: input
address: 13021 # Battery power
decode: int16
energy:
source: modbus
{{- include "modbus" . | indent 2 }}
register:
address: 13026 # Total battery discharge energy, 0.1kWh
type: input
decode: uint32s
scale: 0.1
soc:
source: modbus
{{- include "modbus" . | indent 2 }}
register:
address: 13022 # Battery level
type: input
decode: int16
scale: 0.1
batterymode:
source: switch
switch:
- case: 1 # normal
set:
source: sequence
set:
- source: const
value: 0xCC # Stop (Default)
set:
source: modbus
{{- include "modbus" . | indent 10 }}
register:
address: 13050 # Charge/discharge command
type: writesingle
decode: uint16
# Reset max battery discharge power, set equal to max battery charge power
- source: go
script: power
in:
- name: power
type: int
config:
source: modbus
{{- include "modbus" . | indent 12 }}
register:
address: 33046 # Battery max charge power
type: holding
decode: uint16
out:
- name: power
type: int
config:
source: modbus
{{- include "modbus" . | indent 12 }}
register:
address: 33047 # Battery max discharge power
type: writesingle
decode: uint16
- source: const
value: 0 # Self-consumption mode (Default)
set:
source: modbus
{{- include "modbus" . | indent 10 }}
register:
address: 13049 # EMS mode selection
type: writesingle
decode: uint16
- case: 2 # hold
set:
source: sequence
set:
- source: const
value: 0 # Self-consumption mode (Default)
set:
source: modbus
{{- include "modbus" . | indent 10 }}
register:
address: 13049 # EMS mode selection
type: writesingle
decode: uint16
- source: const
value: 0xCC # Stop (Default)
set:
source: modbus
{{- include "modbus" . | indent 10 }}
register:
address: 13050 # Charge/discharge command
type: writesingle
decode: uint16
# Set max battery discharge power, effectively stops discharging
- source: const
value: 1 # 0.01kW, min allowed value for register
set:
source: modbus
{{- include "modbus" . | indent 10 }}
register:
address: 33047 # Battery max discharge power
type: writesingle
decode: uint16
- case: 3 # charge
set:
source: sequence
set:
- source: const
value: 2 # Forced mode (charge/discharge/stop)
set:
source: modbus
{{- include "modbus" . | indent 10 }}
register:
address: 13049 # EMS mode
type: writesingle
decode: uint16
- source: const
value: 0xAA # Charge
set:
source: modbus
{{- include "modbus" . | indent 10 }}
register:
address: 13050 # Charge/discharge command
type: writesingle
decode: uint16
- source: const
value: {{ .maxchargepower }}
set:
source: modbus
{{- include "modbus" . | indent 10 }}
register:
address: 13051 # Battery max forced (dis)charge power
type: writesingle
decode: uint16
capacity: {{ .capacity }} # kWh
maxchargepower: {{ .maxchargepower }} # W
maxdischargepower: {{ .maxdischargepower }} # W
minsoc: {{ .minsoc }} # %
maxsoc: {{ .maxsoc }} # %
{{- end }}