evcc-io/templates/definition/meter/sofarsolar-g3.yaml
2025-06-26 16:32:22 +02:00

288 lines
8.2 KiB
YAML

template: sofarsolar-g3
products:
- brand: SofarSolar
description:
generic: HYD 5…20K-3PH
- brand: SofarSolar
description:
generic: HYD 3…6K-EP
- brand: SofarSolar
description:
generic: SOFAR 80…136KTL
- brand: SofarSolar
description:
generic: SOFAR 5…24KTL-G3
requirements:
description:
de: Zu den Details wie man den Wechselrichter verbindet siehe die [Sofar Solar Installations Anleitung von homeassistant-solax-modbus](https://homeassistant-solax-modbus.readthedocs.io/en/latest/sofar-installation/).
en: For more details on how to establish a connection to the inverter see the [Sofar Solar installation doc of homeassistant-solax-modbus](https://homeassistant-solax-modbus.readthedocs.io/en/latest/sofar-installation/).
capabilities: ["battery-control"]
params:
- name: usage
choice: ["grid", "pv", "battery"]
- name: modbus
choice: ["tcpip", "rs485"]
port: 8899
id: 1
- name: delay
deprecated: true
- name: storageunit
help:
de: Im Fall eines BTS Speichers nicht die Adresse eines BTS 5K Batteriemodules, sondern der Speicherturm (BTS 5K-BDU Steuerungseinheit mit 1-4 BTS 5K Modulen).
en: In case of a BTS storage not the address of a BTS 5K battery module, but the storage tower (BTS 5K-BDU control unit with 1-4 BTS 5K modules).
type: int
default: 1
advanced: true
- name: capacity
advanced: true
- name: maxacpower
- name: defaultmode
help:
de: Gültige Werte sind 0 (Eigenbedarfsmodus), 1 (Nutzungszeitmodus), 2 (Zeitmodus), 4 (Peak-shaving Modus)
en: Valid values are 0 (self use), 1 (time of use), 2 (timing mode), 4 (peak-shaving mode)
default: 0 # self use
advanced: true
# battery control
- name: minsoc
type: int
advanced: true
deprecated: true
- name: maxsoc
type: int
advanced: true
deprecated: true
render: |
type: custom
{{- if eq .usage "grid" }}
power:
source: modbus
{{- include "modbus" . | indent 2 }}
register:
address: 0x0488 # ActivePower_PCC_Total
type: holding
decode: int16
scale: -10
currents:
- source: modbus
{{- include "modbus" . | indent 2 }}
register:
address: 0x0492 # Current_PCC_R
type: holding
decode: uint16
scale: 0.01
- source: modbus
{{- include "modbus" . | indent 2 }}
register:
address: 0x049D # Current_PCC_S
type: holding
decode: uint16
scale: 0.01
- source: modbus
{{- include "modbus" . | indent 2 }}
register:
address: 0x04A8 # Current_PCC_T
type: holding
decode: uint16
scale: 0.01
powers:
- source: modbus
{{- include "modbus" . | indent 2 }}
register:
address: 0x0493 # ActivePower_PCC_R
type: holding
decode: int16
scale: -10
- source: modbus
{{- include "modbus" . | indent 2 }}
register:
address: 0x049E # ActivePower_PCC_S
type: holding
decode: int16
scale: -10
- source: modbus
{{- include "modbus" . | indent 2 }}
register:
address: 0x04A9 # ActivePower_PCC_T
type: holding
decode: int16
scale: -10
energy:
source: modbus
{{- include "modbus" . | indent 2 }}
register:
address: 0x068E # Energy_Purchase_Total
type: holding
decode: uint32
scale: 0.1
{{- end }}
{{- if eq .usage "pv" }}
power:
source: calc
add:
- source: modbus
{{- include "modbus" . | indent 6 }}
register:
address: 0x586 #Power_PV1
type: holding
decode: uint16
scale: 10
- source: modbus
{{- include "modbus" . | indent 6 }}
register:
address: 0x589 #Power_PV2
type: holding
decode: uint16
scale: 10
- source: modbus
{{- include "modbus" . | indent 6 }}
register:
address: 0x58C #Power_PV3
type: holding
decode: uint16
scale: 10
- source: modbus
{{- include "modbus" . | indent 6 }}
register:
address: 0x58E #Power_PV4
type: holding
decode: uint16
scale: 10
energy:
source: modbus
{{- include "modbus" . | indent 2 }}
register:
address: 0x0686 # PV_Generation_Total
type: holding
decode: uint32
scale: 0.1
maxacpower: {{ .maxacpower }}
{{- end }}
{{- if eq .usage "battery" }}
power:
source: modbus
{{- include "modbus" . | indent 2 }}
register:
{{- if eq .storageunit "1" }}
address: 0x0606 # Power_Bat1
{{- else if eq .storageunit "2" }}
address: 0x060D # Power_Bat2
{{- else if eq .storageunit "3" }}
address: 0x0614 # Power_Bat3
{{- else if eq .storageunit "4" }}
address: 0x061B # Power_Bat4
{{- else if eq .storageunit "5" }}
address: 0x0622 # Power_Bat5
{{- else if eq .storageunit "6" }}
address: 0x0629 # Power_Bat6
{{- else if eq .storageunit "7" }}
address: 0x0630 # Power_Bat7
{{- else if eq .storageunit "8" }}
address: 0x0637 # Power_Bat8
{{- end }}
type: holding
decode: int16
scale: -10
soc:
source: modbus
{{- include "modbus" . | indent 2 }}
register:
{{- if eq .storageunit "1" }}
address: 0x0608 # SOC_Bat1
{{- else if eq .storageunit "2" }}
address: 0x060F # SOC_Bat2
{{- else if eq .storageunit "3" }}
address: 0x0616 # SOC_Bat3
{{- else if eq .storageunit "4" }}
address: 0x061D # SOC_Bat4
{{- else if eq .storageunit "5" }}
address: 0x0624 # SOC_Bat5
{{- else if eq .storageunit "6" }}
address: 0x062B # SOC_Bat6
{{- else if eq .storageunit "7" }}
address: 0x0632 # SOC_Bat7
{{- else if eq .storageunit "8" }}
address: 0x0639 # SOC_Bat8
{{- end }}
type: holding
decode: uint16
batterymode:
source: switch
switch:
- case: 1 # normal
set:
source: const
value: {{ .defaultmode }} # set back to default energy storage mode
set:
source: ignore
error: "modbus: response data size '18' does not match count '4'"
set:
source: modbus
{{- include "modbus" . | indent 10 }}
register:
address: 0x1110
type: writemultiple
decode: int16
- case: 2 # hold
set:
source: sequence
set:
- source: const
value: 3 # passive
set:
source: ignore
error: "modbus: response data size '18' does not match count '4'"
set:
source: modbus
{{- include "modbus" . | indent 12 }}
register:
address: 0x1110
type: writemultiple
decode: int16
- source: convert
convert: int2bytes
set:
source: const
value: '0x00000000_00000000_7FFFFFFF'
set:
source: ignore
error: "modbus: response data size '18' does not match count '4'"
set:
source: modbus
{{- include "modbus" . | indent 14 }}
register:
address: 0x1187
type: writemultiple
decode: bytes
- case: 3 # charge
set:
source: sequence
set:
- source: const
value: 3 # passive
set:
source: ignore
error: "modbus: response data size '18' does not match count '4'"
set:
source: modbus
{{- include "modbus" . | indent 12 }}
register:
address: 0x1110
type: writemultiple
decode: int16
- source: convert
convert: int2bytes
set:
source: const
value: '0x00000000_7FFFFFFF_7FFFFFFF'
set:
source: ignore
error: "modbus: response data size '18' does not match count '4'"
set:
source: modbus
{{- include "modbus" . | indent 14 }}
register:
address: 0x1187
type: writemultiple
decode: bytes
capacity: {{ .capacity }} # kWh
{{- end }}