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: maxacpower - 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). - 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 - name: externalpower type: bool description: de: Externe Quelle einschließen en: Include external power help: de: Bezieht alle angeschlossenen externen Quellen, wie die Leistung von kaskadierten Wechselrichter, in die PV-Leistungsberechnung mit ein. en: Includes all connected external sources, like the power generation of cascaded inverters, into the PV power calculation. advanced: true usages: ["pv"] - preset: battery-params 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 {{- if eq .externalpower "true" }} - source: modbus {{- include "modbus" . | indent 6 }} register: address: 0x4AE #ActivePower_PV_Ext type: holding decode: uint16 scale: 10 {{- end }} 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 {{- include "battery-params" . }} {{- end }}