From 1b0c59c0a302dcee200a60daf320f05f9a67fef8 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Tue, 16 Jun 2026 10:55:07 +0200 Subject: [PATCH 1/2] add additional device descriptor fields --- packages/modules/common/abstract_device.py | 11 ++++++++++- .../modules/devices/alpha_ess/alpha_ess/device.py | 7 ++++++- packages/modules/devices/batterx/batterx/device.py | 4 +++- packages/modules/devices/deye/deye/device.py | 5 ++++- packages/modules/devices/good_we/good_we/device.py | 5 ++++- packages/modules/devices/growatt/growatt/device.py | 5 ++++- packages/modules/devices/huawei/huawei/device.py | 5 ++++- .../modules/devices/sigenergy/sigenergy/device.py | 4 +++- packages/modules/devices/sofar/sofar/device.py | 5 ++++- packages/modules/devices/solarmax/solarmax/device.py | 5 ++++- packages/modules/devices/solis/solis/device.py | 5 ++++- packages/modules/devices/sungrow/sungrow_sg/device.py | 3 ++- packages/modules/devices/sungrow/sungrow_sh/device.py | 3 ++- packages/modules/devices/tesla/tesla/device.py | 6 +++++- 14 files changed, 59 insertions(+), 14 deletions(-) diff --git a/packages/modules/common/abstract_device.py b/packages/modules/common/abstract_device.py index 15fa1a1ac5..7262d2df05 100644 --- a/packages/modules/common/abstract_device.py +++ b/packages/modules/common/abstract_device.py @@ -75,5 +75,14 @@ def set_power_limit(self, power_limit: float) -> None: class DeviceDescriptor: - def __init__(self, configuration_factory: Type): + def __init__(self, + configuration_factory: Type, + compatibility_bat_active: bool = False, + compatibility_bat_note: Optional[str] = None, + compatibility_device_note: Optional[str] = None, + special_icon: Optional[str] = None): self.configuration_factory = configuration_factory + self.compatibility_bat_active = compatibility_bat_active + self.compatibility_bat_note = compatibility_bat_note + self.compatibility_device_note = compatibility_device_note + self.special_icon = special_icon diff --git a/packages/modules/devices/alpha_ess/alpha_ess/device.py b/packages/modules/devices/alpha_ess/alpha_ess/device.py index e8d5f59dc0..46791a43a0 100644 --- a/packages/modules/devices/alpha_ess/alpha_ess/device.py +++ b/packages/modules/devices/alpha_ess/alpha_ess/device.py @@ -81,4 +81,9 @@ def error_handler(): ) -device_descriptor = DeviceDescriptor(configuration_factory=AlphaEss) +device_descriptor = DeviceDescriptor( + configuration_factory=AlphaEss, + compatibility_bat_active=True, + compatibility_bat_note="Kann Entladung nur komplett sperren. Über Webinterface oder App müssen einmalig Zeiten für das Netzladen definiert werden. (Einstellungen - Funktionseinstellungen - Netzladen/Entladen). Hier einen durchgängigen Zeitraum eintragen (Ladezeit_1: 00:00-23:00, Ladezeit_2: 23:00-00:00). Den Schalter 'Netzladen' deaktivieren!", + compatibility_device_note="Für den Alpha Smile (ohne HI) wird ein Alpha Kit benötigt" +) diff --git a/packages/modules/devices/batterx/batterx/device.py b/packages/modules/devices/batterx/batterx/device.py index adde58e310..29de144105 100644 --- a/packages/modules/devices/batterx/batterx/device.py +++ b/packages/modules/devices/batterx/batterx/device.py @@ -119,4 +119,6 @@ def main(argv: List[str]) -> None: run_using_positional_cli_args(read_legacy, argv) -device_descriptor = DeviceDescriptor(configuration_factory=BatterX) +device_descriptor = DeviceDescriptor(configuration_factory=BatterX, + compatibility_bat_active=True, + compatibility_bat_note="Kann Entladung nur komplett sperren.") diff --git a/packages/modules/devices/deye/deye/device.py b/packages/modules/devices/deye/deye/device.py index cf401a4aca..0da9f50783 100644 --- a/packages/modules/devices/deye/deye/device.py +++ b/packages/modules/devices/deye/deye/device.py @@ -88,4 +88,7 @@ def main(argv: List[str]): run_using_positional_cli_args(read_legacy, argv) -device_descriptor = DeviceDescriptor(configuration_factory=Deye) +device_descriptor = DeviceDescriptor( + configuration_factory=Deye, + compatibility_device_note="Einige Versionen des LSE3 Dongles sind kompatibel. Die Auslesung über den LSW3 ist nicht möglich!\nBei Inkompatibilität kann unser Netzwerk Modbus Adapter v2 eingesetzt werden." +) diff --git a/packages/modules/devices/good_we/good_we/device.py b/packages/modules/devices/good_we/good_we/device.py index 3c7e9b4e63..25985b7994 100644 --- a/packages/modules/devices/good_we/good_we/device.py +++ b/packages/modules/devices/good_we/good_we/device.py @@ -68,4 +68,7 @@ def initializer(): ) -device_descriptor = DeviceDescriptor(configuration_factory=GoodWe) +device_descriptor = DeviceDescriptor( + configuration_factory=GoodWe, + compatibility_device_note="Der Lan-Dongle ist nicht ausreichend. Benötigt wird das Wifi-LAN-Kit, welches in 2 Versionen vorliegt.\nBei Unklarheiten kann der GoodWe Support das zum Wechselrichter kompatible Kit nennen." +) diff --git a/packages/modules/devices/growatt/growatt/device.py b/packages/modules/devices/growatt/growatt/device.py index bcc91b8c9b..076c8865db 100644 --- a/packages/modules/devices/growatt/growatt/device.py +++ b/packages/modules/devices/growatt/growatt/device.py @@ -69,4 +69,7 @@ def error_handler(): ) -device_descriptor = DeviceDescriptor(configuration_factory=Growatt) +device_descriptor = DeviceDescriptor( + configuration_factory=Growatt, + compatibility_device_note="Einige Versionen des LSE3 Dongles sind kompatibel. Die Auslesung über den LSW3 ist nicht möglich!\nBei Inkompatibilität kann unser Netzwerk Modbus Adapter v2 eingesetzt werden." +) diff --git a/packages/modules/devices/huawei/huawei/device.py b/packages/modules/devices/huawei/huawei/device.py index b8a9f68b27..b06cf674f8 100644 --- a/packages/modules/devices/huawei/huawei/device.py +++ b/packages/modules/devices/huawei/huawei/device.py @@ -83,4 +83,7 @@ def error_handler(): ) -device_descriptor = DeviceDescriptor(configuration_factory=Huawei) +device_descriptor = DeviceDescriptor( + configuration_factory=Huawei, + compatibility_device_note="Die Auslesung über den Huawei SDongle hängt von der verwendeten Dongle-Version und Firmware ab.\nIm Falle von Inkompatibilität kann eine Auslesung über unseren Netzwerk Modbus Adapter v2 erfolgen." +) diff --git a/packages/modules/devices/sigenergy/sigenergy/device.py b/packages/modules/devices/sigenergy/sigenergy/device.py index 4667401cec..f19e269896 100644 --- a/packages/modules/devices/sigenergy/sigenergy/device.py +++ b/packages/modules/devices/sigenergy/sigenergy/device.py @@ -57,4 +57,6 @@ def initializer(): ) -device_descriptor = DeviceDescriptor(configuration_factory=Sigenergy) +device_descriptor = DeviceDescriptor(configuration_factory=Sigenergy, + compatibility_bat_active=True, + compatibility_bat_note="Kann Entladung nur komplett sperren.") diff --git a/packages/modules/devices/sofar/sofar/device.py b/packages/modules/devices/sofar/sofar/device.py index 3ab2b80c69..1d47554c35 100644 --- a/packages/modules/devices/sofar/sofar/device.py +++ b/packages/modules/devices/sofar/sofar/device.py @@ -52,4 +52,7 @@ def initializer(): ) -device_descriptor = DeviceDescriptor(configuration_factory=Sofar) +device_descriptor = DeviceDescriptor( + configuration_factory=Sofar, + compatibility_device_note="Einige Versionen des LSE3 Dongles sind kompatibel. Die Auslesung über den LSW3 ist nicht möglich!\nBei Inkompatibilität kann unser Netzwerk Modbus Adapter v2 eingesetzt werden." +) diff --git a/packages/modules/devices/solarmax/solarmax/device.py b/packages/modules/devices/solarmax/solarmax/device.py index 75181d9f23..8ca5334d2f 100644 --- a/packages/modules/devices/solarmax/solarmax/device.py +++ b/packages/modules/devices/solarmax/solarmax/device.py @@ -90,4 +90,7 @@ def main(argv: List[str]): run_using_positional_cli_args(read_legacy, argv) -device_descriptor = DeviceDescriptor(configuration_factory=Solarmax) +device_descriptor = DeviceDescriptor( + configuration_factory=Solarmax, + compatibility_device_note="Kann nicht aktiv laden. Steuerbar ab Solarmax Firmware 3.4.4. Zur Nutzung muss die " + "Funktion 'Connectivity+' durch den Solarmax Support freigeschaltet werden.") diff --git a/packages/modules/devices/solis/solis/device.py b/packages/modules/devices/solis/solis/device.py index 969c325b58..d89cb38289 100644 --- a/packages/modules/devices/solis/solis/device.py +++ b/packages/modules/devices/solis/solis/device.py @@ -58,4 +58,7 @@ def initializer(): ) -device_descriptor = DeviceDescriptor(configuration_factory=Solis) +device_descriptor = DeviceDescriptor( + configuration_factory=Solis, + compatibility_device_note="Benötigt einen Solis Datalogger, der auch Modbus TCP-fähig ist.\nWelcher Datalogger für einen speziellen Wechselrichtertyp benötigt wird, kann der Solis Support beantworten." +) diff --git a/packages/modules/devices/sungrow/sungrow_sg/device.py b/packages/modules/devices/sungrow/sungrow_sg/device.py index 7bdf4c44ad..f8af199e6d 100644 --- a/packages/modules/devices/sungrow/sungrow_sg/device.py +++ b/packages/modules/devices/sungrow/sungrow_sg/device.py @@ -45,4 +45,5 @@ def initializer(): ) -device_descriptor = DeviceDescriptor(configuration_factory=SungrowSG) +device_descriptor = DeviceDescriptor(configuration_factory=SungrowSG, + compatibility_device_note="Ältere Modelle verfügen über einen nativen LAN-Port, neue Modelle benötigen den Winet-S oder Winet-S2 Dongle.") diff --git a/packages/modules/devices/sungrow/sungrow_sh/device.py b/packages/modules/devices/sungrow/sungrow_sh/device.py index e5d6c47a78..3586a05d3f 100644 --- a/packages/modules/devices/sungrow/sungrow_sh/device.py +++ b/packages/modules/devices/sungrow/sungrow_sh/device.py @@ -52,4 +52,5 @@ def initializer(): ) -device_descriptor = DeviceDescriptor(configuration_factory=SungrowSH) +device_descriptor = DeviceDescriptor(configuration_factory=SungrowSH, + compatibility_device_note="Ältere Modelle verfügen über einen nativen LAN-Port, neue Modelle benötigen den Winet-S oder Winet-S2 Dongle.") diff --git a/packages/modules/devices/tesla/tesla/device.py b/packages/modules/devices/tesla/tesla/device.py index 1bc1703084..5584dd9220 100644 --- a/packages/modules/devices/tesla/tesla/device.py +++ b/packages/modules/devices/tesla/tesla/device.py @@ -91,4 +91,8 @@ def initializer(): ) -device_descriptor = DeviceDescriptor(configuration_factory=Tesla) +device_descriptor = DeviceDescriptor( + configuration_factory=Tesla, + compatibility_device_note="Tesla hat die lokale API Anfang 2025 mittels Firmwareupdate abgeschaltet.\nFür Neuanlagen muss aktuell auf unsere Zählerkits zurückgegriffen werden.", + special_icon="ℹ️" +) From d19d10dafbc9ccaa7e688ffdd15349bbe396af10 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Tue, 16 Jun 2026 11:04:11 +0200 Subject: [PATCH 2/2] flake8 --- packages/modules/devices/alpha_ess/alpha_ess/device.py | 5 ++++- packages/modules/devices/deye/deye/device.py | 3 ++- packages/modules/devices/good_we/good_we/device.py | 3 ++- packages/modules/devices/growatt/growatt/device.py | 3 ++- packages/modules/devices/huawei/huawei/device.py | 3 ++- packages/modules/devices/sofar/sofar/device.py | 3 ++- packages/modules/devices/solis/solis/device.py | 3 ++- packages/modules/devices/sungrow/sungrow_sg/device.py | 6 ++++-- packages/modules/devices/sungrow/sungrow_sh/device.py | 6 ++++-- packages/modules/devices/tesla/tesla/device.py | 3 ++- 10 files changed, 26 insertions(+), 12 deletions(-) diff --git a/packages/modules/devices/alpha_ess/alpha_ess/device.py b/packages/modules/devices/alpha_ess/alpha_ess/device.py index 46791a43a0..304cab2909 100644 --- a/packages/modules/devices/alpha_ess/alpha_ess/device.py +++ b/packages/modules/devices/alpha_ess/alpha_ess/device.py @@ -84,6 +84,9 @@ def error_handler(): device_descriptor = DeviceDescriptor( configuration_factory=AlphaEss, compatibility_bat_active=True, - compatibility_bat_note="Kann Entladung nur komplett sperren. Über Webinterface oder App müssen einmalig Zeiten für das Netzladen definiert werden. (Einstellungen - Funktionseinstellungen - Netzladen/Entladen). Hier einen durchgängigen Zeitraum eintragen (Ladezeit_1: 00:00-23:00, Ladezeit_2: 23:00-00:00). Den Schalter 'Netzladen' deaktivieren!", + compatibility_bat_note="Kann Entladung nur komplett sperren. Über Webinterface oder App müssen einmalig Zeiten " + "für das Netzladen definiert werden. (Einstellungen - Funktionseinstellungen - Netzladen/Entladen). Hier einen " + "durchgängigen Zeitraum eintragen (Ladezeit_1: 00:00-23:00, Ladezeit_2: 23:00-00:00). Den Schalter 'Netzladen' " + "deaktivieren!", compatibility_device_note="Für den Alpha Smile (ohne HI) wird ein Alpha Kit benötigt" ) diff --git a/packages/modules/devices/deye/deye/device.py b/packages/modules/devices/deye/deye/device.py index 0da9f50783..486e6fe217 100644 --- a/packages/modules/devices/deye/deye/device.py +++ b/packages/modules/devices/deye/deye/device.py @@ -90,5 +90,6 @@ def main(argv: List[str]): device_descriptor = DeviceDescriptor( configuration_factory=Deye, - compatibility_device_note="Einige Versionen des LSE3 Dongles sind kompatibel. Die Auslesung über den LSW3 ist nicht möglich!\nBei Inkompatibilität kann unser Netzwerk Modbus Adapter v2 eingesetzt werden." + compatibility_device_note="Einige Versionen des LSE3 Dongles sind kompatibel. Die Auslesung über den LSW3 ist " + "nicht möglich!\nBei Inkompatibilität kann unser Netzwerk Modbus Adapter v2 eingesetzt werden." ) diff --git a/packages/modules/devices/good_we/good_we/device.py b/packages/modules/devices/good_we/good_we/device.py index 25985b7994..bcfbcc65ad 100644 --- a/packages/modules/devices/good_we/good_we/device.py +++ b/packages/modules/devices/good_we/good_we/device.py @@ -70,5 +70,6 @@ def initializer(): device_descriptor = DeviceDescriptor( configuration_factory=GoodWe, - compatibility_device_note="Der Lan-Dongle ist nicht ausreichend. Benötigt wird das Wifi-LAN-Kit, welches in 2 Versionen vorliegt.\nBei Unklarheiten kann der GoodWe Support das zum Wechselrichter kompatible Kit nennen." + compatibility_device_note="Der Lan-Dongle ist nicht ausreichend. Benötigt wird das Wifi-LAN-Kit, welches " + "in 2 Versionen vorliegt.\nBei Unklarheiten kann der GoodWe Support das zum Wechselrichter kompatible Kit nennen." ) diff --git a/packages/modules/devices/growatt/growatt/device.py b/packages/modules/devices/growatt/growatt/device.py index 076c8865db..cc4764173a 100644 --- a/packages/modules/devices/growatt/growatt/device.py +++ b/packages/modules/devices/growatt/growatt/device.py @@ -71,5 +71,6 @@ def error_handler(): device_descriptor = DeviceDescriptor( configuration_factory=Growatt, - compatibility_device_note="Einige Versionen des LSE3 Dongles sind kompatibel. Die Auslesung über den LSW3 ist nicht möglich!\nBei Inkompatibilität kann unser Netzwerk Modbus Adapter v2 eingesetzt werden." + compatibility_device_note="Einige Versionen des LSE3 Dongles sind kompatibel. Die Auslesung über den LSW3 ist " + "nicht möglich!\nBei Inkompatibilität kann unser Netzwerk Modbus Adapter v2 eingesetzt werden." ) diff --git a/packages/modules/devices/huawei/huawei/device.py b/packages/modules/devices/huawei/huawei/device.py index b06cf674f8..500aa524a4 100644 --- a/packages/modules/devices/huawei/huawei/device.py +++ b/packages/modules/devices/huawei/huawei/device.py @@ -85,5 +85,6 @@ def error_handler(): device_descriptor = DeviceDescriptor( configuration_factory=Huawei, - compatibility_device_note="Die Auslesung über den Huawei SDongle hängt von der verwendeten Dongle-Version und Firmware ab.\nIm Falle von Inkompatibilität kann eine Auslesung über unseren Netzwerk Modbus Adapter v2 erfolgen." + compatibility_device_note="Die Auslesung über den Huawei SDongle hängt von der verwendeten Dongle-Version und " + "Firmware ab.\nIm Falle von Inkompatibilität kann eine Auslesung über unseren Netzwerk Modbus Adapter v2 erfolgen." ) diff --git a/packages/modules/devices/sofar/sofar/device.py b/packages/modules/devices/sofar/sofar/device.py index 1d47554c35..8112ed1373 100644 --- a/packages/modules/devices/sofar/sofar/device.py +++ b/packages/modules/devices/sofar/sofar/device.py @@ -54,5 +54,6 @@ def initializer(): device_descriptor = DeviceDescriptor( configuration_factory=Sofar, - compatibility_device_note="Einige Versionen des LSE3 Dongles sind kompatibel. Die Auslesung über den LSW3 ist nicht möglich!\nBei Inkompatibilität kann unser Netzwerk Modbus Adapter v2 eingesetzt werden." + compatibility_device_note="Einige Versionen des LSE3 Dongles sind kompatibel. Die Auslesung über den LSW3 ist " + "nicht möglich!\nBei Inkompatibilität kann unser Netzwerk Modbus Adapter v2 eingesetzt werden." ) diff --git a/packages/modules/devices/solis/solis/device.py b/packages/modules/devices/solis/solis/device.py index d89cb38289..9f0feb97f6 100644 --- a/packages/modules/devices/solis/solis/device.py +++ b/packages/modules/devices/solis/solis/device.py @@ -60,5 +60,6 @@ def initializer(): device_descriptor = DeviceDescriptor( configuration_factory=Solis, - compatibility_device_note="Benötigt einen Solis Datalogger, der auch Modbus TCP-fähig ist.\nWelcher Datalogger für einen speziellen Wechselrichtertyp benötigt wird, kann der Solis Support beantworten." + compatibility_device_note="Benötigt einen Solis Datalogger, der auch Modbus TCP-fähig ist.\nWelcher Datalogger " + "für einen speziellen Wechselrichtertyp benötigt wird, kann der Solis Support beantworten." ) diff --git a/packages/modules/devices/sungrow/sungrow_sg/device.py b/packages/modules/devices/sungrow/sungrow_sg/device.py index f8af199e6d..07ea25873e 100644 --- a/packages/modules/devices/sungrow/sungrow_sg/device.py +++ b/packages/modules/devices/sungrow/sungrow_sg/device.py @@ -45,5 +45,7 @@ def initializer(): ) -device_descriptor = DeviceDescriptor(configuration_factory=SungrowSG, - compatibility_device_note="Ältere Modelle verfügen über einen nativen LAN-Port, neue Modelle benötigen den Winet-S oder Winet-S2 Dongle.") +device_descriptor = DeviceDescriptor( + configuration_factory=SungrowSG, + compatibility_device_note="Ältere Modelle verfügen über einen nativen LAN-Port, neue Modelle benötigen den " + "Winet-S oder Winet-S2 Dongle.") diff --git a/packages/modules/devices/sungrow/sungrow_sh/device.py b/packages/modules/devices/sungrow/sungrow_sh/device.py index 3586a05d3f..080686f2a4 100644 --- a/packages/modules/devices/sungrow/sungrow_sh/device.py +++ b/packages/modules/devices/sungrow/sungrow_sh/device.py @@ -52,5 +52,7 @@ def initializer(): ) -device_descriptor = DeviceDescriptor(configuration_factory=SungrowSH, - compatibility_device_note="Ältere Modelle verfügen über einen nativen LAN-Port, neue Modelle benötigen den Winet-S oder Winet-S2 Dongle.") +device_descriptor = DeviceDescriptor( + configuration_factory=SungrowSH, + compatibility_device_note="Ältere Modelle verfügen über einen nativen LAN-Port, neue Modelle benötigen den " + "Winet-S oder Winet-S2 Dongle.") diff --git a/packages/modules/devices/tesla/tesla/device.py b/packages/modules/devices/tesla/tesla/device.py index 5584dd9220..58f0589f2d 100644 --- a/packages/modules/devices/tesla/tesla/device.py +++ b/packages/modules/devices/tesla/tesla/device.py @@ -93,6 +93,7 @@ def initializer(): device_descriptor = DeviceDescriptor( configuration_factory=Tesla, - compatibility_device_note="Tesla hat die lokale API Anfang 2025 mittels Firmwareupdate abgeschaltet.\nFür Neuanlagen muss aktuell auf unsere Zählerkits zurückgegriffen werden.", + compatibility_device_note="Tesla hat die lokale API Anfang 2025 mittels Firmwareupdate abgeschaltet.\nFür " + "Neuanlagen muss aktuell auf unsere Zählerkits zurückgegriffen werden.", special_icon="ℹ️" )