Feature: Goodwe GW10KN-ET Support via goodwe UDP/8899
- goodwe_client.py: GoodweReader wraps goodwe library (asyncio → sync) - inverters.py: GW10KN_ET mit 37 ET-Sensoren, protocol=goodwe_udp - main.py: poll-loop verzweigt auf GoodweReader bei goodwe_udp-Geräten; AGG_SENSOR_IDS um Goodwe-Keys erweitert (ppv, soc, e_total, e_total_imp/exp, …) - requirements.txt: goodwe==0.4.10 hinzugefügt Goodwe-Stick (WIFILAN_2.0 v2.4.41) hat eFuse-gesperrten ROM-Download; Kommunikation erfolgt über WiFi-Stick-IP + UDP-Port 8899. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -24,6 +24,8 @@ class Inverter:
|
||||
sensors: List[Sensor]
|
||||
# Register ranges to batch-read as (start, length) tuples (FC04 input registers)
|
||||
read_ranges: List[tuple]
|
||||
protocol: str = "modbus" # "modbus" | "goodwe_udp"
|
||||
goodwe_family: str = "" # ET / ES / DT — nur für goodwe_udp
|
||||
|
||||
|
||||
def _mic_sensors() -> List[Sensor]:
|
||||
@@ -96,6 +98,53 @@ def _mod_sensors() -> List[Sensor]:
|
||||
]
|
||||
|
||||
|
||||
def _goodwe_et_sensors() -> List[Sensor]:
|
||||
return [
|
||||
# PV
|
||||
Sensor("vpv1", "PV1 Spannung", 0, 1, 1.0, "V", "voltage", "measurement", "mdi:solar-panel"),
|
||||
Sensor("ipv1", "PV1 Strom", 0, 1, 1.0, "A", "current", "measurement", "mdi:solar-panel"),
|
||||
Sensor("ppv1", "PV1 Leistung", 0, 1, 1.0, "W", "power", "measurement", "mdi:solar-panel"),
|
||||
Sensor("vpv2", "PV2 Spannung", 0, 1, 1.0, "V", "voltage", "measurement", "mdi:solar-panel"),
|
||||
Sensor("ipv2", "PV2 Strom", 0, 1, 1.0, "A", "current", "measurement", "mdi:solar-panel"),
|
||||
Sensor("ppv2", "PV2 Leistung", 0, 1, 1.0, "W", "power", "measurement", "mdi:solar-panel"),
|
||||
Sensor("ppv", "PV Gesamtleistung", 0, 1, 1.0, "W", "power", "measurement", "mdi:solar-power"),
|
||||
# Grid
|
||||
Sensor("vgrid", "Netz-Spannung L1", 0, 1, 1.0, "V", "voltage", "measurement", "mdi:flash"),
|
||||
Sensor("igrid", "Netz-Strom L1", 0, 1, 1.0, "A", "current", "measurement", "mdi:flash"),
|
||||
Sensor("fgrid", "Netz-Frequenz", 0, 1, 1.0, "Hz", "frequency", "measurement", "mdi:sine-wave"),
|
||||
Sensor("pgrid", "Netz-Leistung L1", 0, 1, 1.0, "W", "power", "measurement", "mdi:flash"),
|
||||
Sensor("vgrid2", "Netz-Spannung L2", 0, 1, 1.0, "V", "voltage", "measurement", "mdi:flash"),
|
||||
Sensor("igrid2", "Netz-Strom L2", 0, 1, 1.0, "A", "current", "measurement", "mdi:flash"),
|
||||
Sensor("pgrid2", "Netz-Leistung L2", 0, 1, 1.0, "W", "power", "measurement", "mdi:flash"),
|
||||
Sensor("vgrid3", "Netz-Spannung L3", 0, 1, 1.0, "V", "voltage", "measurement", "mdi:flash"),
|
||||
Sensor("igrid3", "Netz-Strom L3", 0, 1, 1.0, "A", "current", "measurement", "mdi:flash"),
|
||||
Sensor("pgrid3", "Netz-Leistung L3", 0, 1, 1.0, "W", "power", "measurement", "mdi:flash"),
|
||||
# Leistung
|
||||
Sensor("total_inverter_power","Wechselrichter Gesamtleist.",0, 1, 1.0, "W", "power", "measurement", "mdi:flash"),
|
||||
Sensor("active_power", "Wirkleistung (Grid)", 0, 1, 1.0, "W", "power", "measurement", "mdi:transmission-tower"),
|
||||
Sensor("house_consumption", "Hausverbrauch", 0, 1, 1.0, "W", "power", "measurement", "mdi:home"),
|
||||
# Batterie
|
||||
Sensor("vbattery1", "Batterie Spannung", 0, 1, 1.0, "V", "voltage", "measurement", "mdi:battery"),
|
||||
Sensor("ibattery1", "Batterie Strom", 0, 1, 1.0, "A", "current", "measurement", "mdi:battery"),
|
||||
Sensor("pbattery1", "Batterie Leistung", 0, 1, 1.0, "W", "power", "measurement", "mdi:battery"),
|
||||
Sensor("bat_charge_power", "Batterie Ladeleistung", 0, 1, 1.0, "W", "power", "measurement", "mdi:battery-plus"),
|
||||
Sensor("bat_discharge_power", "Batterie Entladeleistung", 0, 1, 1.0, "W", "power", "measurement", "mdi:battery-minus"),
|
||||
Sensor("soc", "Batterie Ladezustand", 0, 1, 1.0, "%", "battery", "measurement", "mdi:battery"),
|
||||
Sensor("temperature", "Wechselrichter Temperatur", 0, 1, 1.0, "°C", "temperature", "measurement", "mdi:thermometer"),
|
||||
# Energie
|
||||
Sensor("e_day", "PV Energie Heute", 0, 1, 1.0, "kWh", "energy", "total_increasing", "mdi:solar-power"),
|
||||
Sensor("e_total", "PV Energie Gesamt", 0, 1, 1.0, "kWh", "energy", "total_increasing", "mdi:solar-power"),
|
||||
Sensor("e_day_exp", "Einspeisung Heute", 0, 1, 1.0, "kWh", "energy", "total_increasing", "mdi:transmission-tower-export"),
|
||||
Sensor("e_total_exp", "Einspeisung Gesamt", 0, 1, 1.0, "kWh", "energy", "total_increasing", "mdi:transmission-tower-export"),
|
||||
Sensor("e_day_imp", "Netzbezug Heute", 0, 1, 1.0, "kWh", "energy", "total_increasing", "mdi:transmission-tower-import"),
|
||||
Sensor("e_total_imp", "Netzbezug Gesamt", 0, 1, 1.0, "kWh", "energy", "total_increasing", "mdi:transmission-tower-import"),
|
||||
Sensor("e_bat_charge_day", "Batterie Ladung Heute", 0, 1, 1.0, "kWh", "energy", "total_increasing", "mdi:battery-plus"),
|
||||
Sensor("e_bat_charge_total", "Batterie Ladung Gesamt", 0, 1, 1.0, "kWh", "energy", "total_increasing", "mdi:battery-plus"),
|
||||
Sensor("e_bat_discharge_day", "Batterie Entladung Heute", 0, 1, 1.0, "kWh", "energy", "total_increasing", "mdi:battery-minus"),
|
||||
Sensor("e_bat_discharge_total","Batterie Entladung Gesamt",0, 1, 1.0, "kWh", "energy", "total_increasing", "mdi:battery-minus"),
|
||||
]
|
||||
|
||||
|
||||
def _sdm630_sensors() -> List[Sensor]:
|
||||
f = "float32"
|
||||
return [
|
||||
@@ -152,6 +201,15 @@ INVERTERS = {
|
||||
name="Eastron SDM-630",
|
||||
manufacturer="Eastron",
|
||||
sensors=_sdm630_sensors(),
|
||||
read_ranges=[(0, 76)], # regs 0-75, alle 16 Sensoren
|
||||
read_ranges=[(0, 76)],
|
||||
),
|
||||
"GW10KN_ET": Inverter(
|
||||
id="GW10KN_ET",
|
||||
name="Goodwe GW10KN-ET",
|
||||
manufacturer="Goodwe",
|
||||
sensors=_goodwe_et_sensors(),
|
||||
read_ranges=[],
|
||||
protocol="goodwe_udp",
|
||||
goodwe_family="ET",
|
||||
),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user