From f0bc3e4ddf221d2e40e8331f3e65978446d87c09 Mon Sep 17 00:00:00 2001 From: andig Date: Sat, 4 Jul 2026 18:08:03 +0200 Subject: [PATCH] Sungrow iHM: add returnEnergy and feed-in curtailment (#31415) --- templates/definition/meter/sungrow-ihm.yaml | 55 +++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/templates/definition/meter/sungrow-ihm.yaml b/templates/definition/meter/sungrow-ihm.yaml index d58e1f131..99722b5c2 100644 --- a/templates/definition/meter/sungrow-ihm.yaml +++ b/templates/definition/meter/sungrow-ihm.yaml @@ -3,6 +3,7 @@ products: - brand: Sungrow description: generic: iHomeManager (iHM) +capabilities: ["curtail"] params: - name: usage choice: ["grid", "pv", "battery"] @@ -12,6 +13,9 @@ params: comset: "8N1" id: 247 port: 502 + - name: maxacpower + usages: ["pv"] + service: modbus/read?address=8144&type=input&encoding=uint32&scale=100&{modbus} # Register 8145 (Total rated active power, 0.1kW) - preset: battery-params render: | {{- if eq .usage "grid" }} @@ -32,6 +36,14 @@ render: | type: input decode: uint32s scale: 0.1 + returnenergy: + source: modbus + {{- include "modbus" . | indent 2 }} + register: + address: 8177 # Register 8178 (Export energy at the grid meter) + type: input + decode: uint32s + scale: 0.1 voltages: - source: modbus {{- include "modbus" . | indent 2 }} @@ -84,6 +96,49 @@ render: | type: input decode: int32s scale: 10 + maxacpower: {{ .maxacpower }} # W + curtail: + source: sequence + set: + # allowed feed-in power as percent of nominal (0-100 % -> 0-1000 = 0.1%) + - source: modbus + {{- include "modbus" . | indent 4 }} + register: + address: 8030 # Register 8031 (Feed-in limitation ratio, 0-1000 = 0.1%) + type: writesingle + decode: int16 + scale: 10 + # feed-in limitation: disabled at 100% (unlimited), enabled while curtailed + - source: switch + switch: + - case: 100 # uncurtailed + set: + source: const + value: 0 # Disable feed-in limitation + set: + source: modbus + {{- include "modbus" . | indent 12 }} + register: + address: 8027 # Register 8028 (Feed-in limitation) + type: writesingle + decode: uint16 + default: + source: const + value: 1 # Enable feed-in limitation + set: + source: modbus + {{- include "modbus" . | indent 8 }} + register: + address: 8027 # Register 8028 (Feed-in limitation) + type: writesingle + decode: uint16 + curtailed: + source: modbus + {{- include "modbus" . | indent 2 }} + register: + address: 8027 # Register 8028 (Feed-in limitation, 1=on) + type: holding + decode: uint16 {{- end }} {{- if eq .usage "battery" }} type: custom