From f00cde4972f3688ef5bc3950711f7619aa4967e8 Mon Sep 17 00:00:00 2001 From: Blowfly69 Date: Mon, 6 Apr 2026 16:31:21 +0200 Subject: [PATCH] Deye-hybrid-3p: merge LV and HV templates (BC) (#28670) --- .../definition/meter/deye-hybrid-3p.yaml | 113 ++++++- .../definition/meter/deye-hybrid-hp3.yaml | 301 ------------------ 2 files changed, 101 insertions(+), 313 deletions(-) delete mode 100644 templates/definition/meter/deye-hybrid-hp3.yaml diff --git a/templates/definition/meter/deye-hybrid-3p.yaml b/templates/definition/meter/deye-hybrid-3p.yaml index 179daef24..2ffe1f4c9 100644 --- a/templates/definition/meter/deye-hybrid-3p.yaml +++ b/templates/definition/meter/deye-hybrid-3p.yaml @@ -1,5 +1,5 @@ template: deye-hybrid-3p -covers: ["deye-hybrid"] +covers: ["deye-hybrid", "deye-hybrid-hp3"] products: - brand: Deye description: @@ -16,7 +16,21 @@ params: baudrate: 9600 id: 1 - name: maxacpower + - name: storageunit + choice: ["1", "2"] - preset: battery-params + - name: batterytype + choice: ["lv", "hv"] + required: true + default: "lv" + description: + de: Wechselrichter für LV- oder HV-Batterie + en: Inverter for LV or HV batteries + help: + de: | + "hv" für eine Hochvolt-Batterie mit Nennspannung über 60V verwenden + en: | + Choose "hv" if you are using a high voltage battery with a nominal voltage over 60V - name: maxdischargecurrent required: true default: 100 @@ -27,10 +41,10 @@ params: help: en: | Maximum battery discharge current in Amperes (A) for normal mode. Typical range 50-350A depending on battery capacity. - Power calculation: P(W) = Current(A) * Voltage(V). Example with 48V battery: 100A * 48V = 4800W (4.8kW). + Power calculation: P(W) = Current(A) x Voltage(V). Example with 48V battery: 100A x 48V = 4800W (4.8kW). de: | Maximaler Batterieentladestrom in Ampere (A) für Normalmodus. Typischer Bereich 50-350A abhängig von Batteriekapazität. - Leistungsberechnung: P(W) = Strom(A) * Spannung(V). Beispiel mit 48V Batterie: 100A * 48V = 4800W (4,8kW). + Leistungsberechnung: P(W) = Strom(A) x Spannung(V). Beispiel mit 48V Batterie: 100A x 48V = 4800W (4,8kW). - name: gridchargecurrent required: true default: 60 @@ -41,10 +55,32 @@ params: help: en: | Maximum battery charging current in Amperes (A) from grid for charge mode. Typical range 30-350A depending on battery and inverter capacity. - Power calculation: P(W) = Current(A) * Voltage(V). Example with 48V battery: 60A * 48V = 2880W (2.9kW). + Power calculation: P(W) = Current(A) x Voltage(V). Example with 48V battery: 60A x 48V = 2880W (2.9kW). de: | Maximaler Batterieladestrom in Ampere (A) aus dem Netz für Lademodus. Typischer Bereich 30-350A abhängig von Batterie- und Wechselrichterkapazität. - Leistungsberechnung: P(W) = Strom(A) * Spannung(V). Beispiel mit 48V Batterie: 60A * 48V = 2880W (2,9kW). + Leistungsberechnung: P(W) = Strom(A) x Spannung(V). Beispiel mit 48V Batterie: 60A x 48V = 2880W (2,9kW). + - name: includegenport + type: bool + advanced: true + description: + de: GEN-Anschluss als Solar-Eingang verwenden + en: Treat GEN port as solar input + help: + de: | + Wenn aktiviert, wird der GEN-Anschluss des Wechselrichters als zusätzlicher Solar-Eingang behandelt. Dadurch werden die Leistung und Energie, die über den GEN-Port eingespeist werden, zum Gesamt-Solarertrag addiert. + en: | + When enabled, the GEN port of the inverter will be treated as an additional solar input. This will add the power and energy fed in through the GEN port to the total solar yield. + - name: firmware1098 + type: bool + advanced: true + description: + de: Firmware 1098 oder neuer (nur für HV Versionen) + en: Firmware 1098 or newer (only for HV versions) + help: + de: | + Nach einem Firmware-Update für Hochvolt-Wechselrichter haben einige Registerwerte ihren Skalierungsfaktor geändert. Wenn der Wechselrichter die Firmware-Version 1098 oder neuer hat, muss diese Option aktiviert werden, um korrekte Werte zu erhalten. + en: | + After a firmware update of the high voltage inverter, some register values have changed their scaling factor. If your inverter has firmware version 1098 or newer, you need to enable this option to get correct values. render: | type: custom {{- if eq .usage "grid" }} @@ -62,7 +98,9 @@ render: | address: 522 # "Total_GridBuy_Power Wh" type: holding decode: uint32s + {{- if and (eq .batterytype "hv") (not .firmware1098) }} scale: 0.1 + {{- end }} currents: - source: modbus {{- include "modbus" . | indent 4 }} @@ -96,32 +134,69 @@ render: | address: 672 # "PV1 input power" type: holding decode: uint16 + {{- if eq .batterytype "hv" }} + scale: 10 + {{- end }} - source: modbus {{- include "modbus" . | indent 4 }} register: address: 673 # "PV2 input power" type: holding decode: uint16 + {{- if eq .batterytype "hv" }} + scale: 10 + {{- end }} - source: modbus {{- include "modbus" . | indent 4 }} register: address: 674 # "PV3 input power" type: holding decode: uint16 + {{- if eq .batterytype "hv" }} + scale: 10 + {{- end }} - source: modbus {{- include "modbus" . | indent 4 }} register: address: 675 # "PV4 input power" type: holding decode: uint16 + {{- if eq .batterytype "hv" }} + scale: 10 + {{- end }} + {{- if .includegenport }} + - source: modbus + {{- include "modbus" . | indent 4 }} + register: + address: 667 # "low word of input power at GEN-Port" + type: holding + decode: int16 # value is part of a signed 32-bit value; high word is at 671 but non-adjacent + # NOTE: Only the low 16 bits of GEN power are used here. This is sufficient up to ±32 kW, + # which covers existing inverter variants. + {{- end }} energy: - source: modbus - {{- include "modbus" . | indent 2 }} - register: - address: 534 # "Total_PV_Power_Wh" - type: holding - decode: uint32s - scale: 0.1 + source: calc + add: + - source: modbus + {{- include "modbus" . | indent 4 }} + register: + address: 534 # "Total_PV_Power_Wh" + type: holding + decode: uint32s + {{- if and (eq .batterytype "hv") (not .firmware1098) }} + scale: 0.1 + {{- end }} + {{- if .includegenport }} + - source: modbus + {{- include "modbus" . | indent 4 }} + register: + address: 537 # "Total_Gen_Power_Wh" + type: holding + decode: int32s + {{- if and (eq .batterytype "hv") (not .firmware1098) }} + scale: 0.1 + {{- end }} + {{- end }} maxacpower: {{ .maxacpower }} {{- end }} {{- if eq .usage "battery" }} @@ -129,9 +204,17 @@ render: | source: modbus {{- include "modbus" . | indent 2 }} register: + {{- if eq .storageunit "1" }} address: 590 # "Battery output power" + {{- end }} + {{- if eq .storageunit "2" }} + address: 595 # "Battery2 output power" + {{- end }} type: holding decode: int16 + {{- if eq .batterytype "hv" }} + scale: 10 + {{- end }} energy: source: modbus {{- include "modbus" . | indent 2 }} @@ -139,12 +222,18 @@ render: | address: 518 # "Total discharge of the battery (Wh)" type: holding decode: uint32s + {{- if and (eq .batterytype "hv") (not .firmware1098) }} scale: 0.1 + {{- end }} soc: source: modbus {{- include "modbus" . | indent 2 }} register: + {{- if eq .storageunit "1" }} address: 588 # "battery capacity" + {{- else }} + address: 589 # "battery2 capacity" + {{- end }} type: holding decode: uint16 batterymode: diff --git a/templates/definition/meter/deye-hybrid-hp3.yaml b/templates/definition/meter/deye-hybrid-hp3.yaml deleted file mode 100644 index 8ea267279..000000000 --- a/templates/definition/meter/deye-hybrid-hp3.yaml +++ /dev/null @@ -1,301 +0,0 @@ -template: deye-hybrid-hp3 -products: - - brand: Deye - description: - generic: hp3 hybrid inverter - - brand: Sunsynk - description: - generic: hp3 hybrid inverter -capabilities: ["battery-control"] -params: - - name: usage - choice: ["grid", "pv", "battery"] - - name: modbus - choice: ["rs485", "tcpip"] - baudrate: 9600 - id: 1 - - name: maxacpower - - name: storageunit - - preset: battery-params - - name: includegenport - type: bool - advanced: true - description: - de: GEN-Anschluss als Solar-Eingang verwenden - en: Treat GEN port as solar input - - name: firmware1098 - type: bool - advanced: true - description: - de: Firmware 1098 oder neuer - en: Firmware 1098 or newer -render: | - type: custom - {{- if eq .usage "grid" }} - power: - source: modbus - {{- include "modbus" . | indent 2 }} - register: - address: 625 # Grid side total power - type: holding - decode: int16 - energy: - source: modbus - {{- include "modbus" . | indent 2 }} - register: - address: 522 # "Total_GridBuy_Power Wh" - type: holding - decode: uint32s - {{- if ne .firmware1098 "true" }} - scale: 0.1 - {{- end }} - currents: - - source: modbus - {{- include "modbus" . | indent 4 }} - register: - address: 613 # "Out-of-grid - current A" - type: holding - decode: int16 - scale: 0.01 - - source: modbus - {{- include "modbus" . | indent 4 }} - register: - address: 614 # "Out-of-grid - current B" - type: holding - decode: int16 - scale: 0.01 - - source: modbus - {{- include "modbus" . | indent 4 }} - register: - address: 615 # "Out-of-grid - current C" - type: holding - decode: int16 - scale: 0.01 - {{- end }} - {{- if eq .usage "pv" }} - power: - source: calc - add: - - source: modbus - {{- include "modbus" . | indent 4 }} - register: - address: 672 # "PV1 input power" - type: holding - decode: uint16 - scale: 10 - - source: modbus - {{- include "modbus" . | indent 4 }} - register: - address: 673 # "PV2 input power" - type: holding - decode: uint16 - scale: 10 - - source: modbus - {{- include "modbus" . | indent 4 }} - register: - address: 674 # "PV3 input power" - type: holding - decode: uint16 - scale: 10 - - source: modbus - {{- include "modbus" . | indent 4 }} - register: - address: 675 # "PV4 input power" - type: holding - decode: uint16 - scale: 10 - {{- if eq .includegenport "true" }} - - source: modbus - {{- include "modbus" . | indent 4 }} - register: - address: 667 # "low word of input power at GEN-Port" - type: holding - decode: int16 # "value is actually a signed 32 bit value but high word is at reg 671 - scale: 1 - {{- end }} - energy: - source: calc - add: - - source: modbus - {{- include "modbus" . | indent 4 }} - register: - address: 534 # "Total_PV_Power_Wh" - type: holding - decode: uint32s - {{- if ne .firmware1098 "true" }} - scale: 0.1 - {{- end }} - {{- if eq .includegenport "true" }} - - source: modbus - {{- include "modbus" . | indent 4 }} - register: - address: 537 # "Total_Gen_Power_Wh" - type: holding - decode: int32s - {{- if ne .firmware1098 "true" }} - scale: 0.1 - {{- end }} - {{- end }} - maxacpower: {{ .maxacpower }} - {{- end }} - {{- if eq .usage "battery" }} - power: - source: modbus - {{- include "modbus" . | indent 2 }} - register: - {{- if eq .storageunit "1" }} - address: 590 # "Battery output power" - {{- end }} - {{- if eq .storageunit "2" }} - address: 595 # "Battery2 output power" - {{- end }} - type: holding - decode: int16 - scale: 10 - energy: - source: modbus - {{- include "modbus" . | indent 2 }} - register: - address: 518 # "Total discharge of the battery (Wh)" - type: holding - decode: uint32s - {{- if ne .firmware1098 "true" }} - scale: 0.1 - {{- end }} - soc: - source: modbus - {{- include "modbus" . | indent 2 }} - register: - {{- if eq .storageunit "1" }} - address: 588 # "battery capacity" - {{- end }} - {{- if eq .storageunit "2" }} - address: 589 # "battery2 capacity" - {{- end }} - type: holding - decode: uint16 - batterymode: - source: switch - switch: - - case: 1 # normal - set: - source: sequence - set: - - source: const - value: {{ .minsoc }} - set: - source: modbus - {{- include "modbus" . | indent 10 }} - register: - address: 166 - type: writemultiple - decode: int16 - - source: const - value: 0 - set: - source: modbus - {{- include "modbus" . | indent 10 }} - register: - address: 148 - type: writemultiple - decode: int32s - - source: const - value: 2355 - set: - source: modbus - {{- include "modbus" . | indent 10 }} - register: - address: 149 - type: writemultiple - decode: int32s - - source: const - value: 0 - set: - source: modbus - {{- include "modbus" . | indent 10 }} - register: - address: 172 - type: writemultiple - decode: int32s - - case: 2 # hold - set: - source: sequence - set: - - source: const - value: {{ .maxsoc }} - set: - source: modbus - {{- include "modbus" . | indent 10 }} - register: - address: 166 - type: writemultiple - decode: int16 - - source: const - value: 0 - set: - source: modbus - {{- include "modbus" . | indent 10 }} - register: - address: 148 # soc time of use 1 - type: writemultiple - decode: int32s - - source: const - value: 2355 - set: - source: modbus - {{- include "modbus" . | indent 10 }} - register: - address: 149 # soc time of use 1 - type: writemultiple - decode: int32s - - source: const - value: 0 - set: - source: modbus - {{- include "modbus" . | indent 10 }} - register: - address: 172 - type: writemultiple - decode: int32s - - case: 3 # charge - set: - source: sequence - set: - - source: const - value: {{ .maxsoc }} - set: - source: modbus - {{- include "modbus" . | indent 10 }} - register: - address: 166 - type: writemultiple - decode: int16 - - source: const - value: 0 - set: - source: modbus - {{- include "modbus" . | indent 10 }} - register: - address: 148 # soc time of use 1 - type: writemultiple - decode: int32s - - source: const - value: 2355 - set: - source: modbus - {{- include "modbus" . | indent 10 }} - register: - address: 149 # soc time of use 1 - type: writemultiple - decode: int32s - - source: const - value: 1 - set: - source: modbus - {{- include "modbus" . | indent 10 }} - register: - address: 172 - type: writemultiple - decode: int32s - {{- include "battery-params" . }} - {{- end }}