Skip to content

Commit 8bd7944

Browse files
seaspotterLKuemmel
andauthored
Sungrow different modules (#3118)
* Create __init__.py * Delete packages/modules/devices/sungrow/sungrow_ihm/__init__.py * Add SungrowIHMCounter * Add device.py for Sungrow SG * Add files via upload * Add config.py * Add counter.py * Add inverter.py * Delete packages/modules/devices/sungrow/sungrow/modbus.md * Move to SungrowSH bat.py * Add files via upload * Move to SungrowSH version.py * Move to SungrowSH registers.py * Move to SungrowSH inverter.py * Move to SungrowSH counter.py * Move to SungrowSH config.py * Move to SungrowSH device.py * Delete packages/modules/devices/sungrow/sungrow/__init__.py * Remove unused parameter Removed pv_power parameter from update method. * Remove unused parameter Removed pv_power parameter from update method. * Refactor SungrowIHM counter.py * Add files via upload * Add Sungrow IHM config.py * Update configuration types in Sungrow classes * Add Sungrow IHM device.py * Add Sungrow IHM inverter.py * Add Sungrow IHM bat.py * Add charging for SH bat.py * Implement Sungrow Micro Inverter * Add files via upload * Implement Sungrow Micro device configuration * Add SungrowMicro and configuration classes * Update inverter.py * Remove version import from inverter.py * Reorder import statements in counter.py * Reorder import statements in counter.py * Reorder import statements in counter.py * Update config.py * Flake8 * Flake8 * Flake8 * Flake8 * Flake8 * Flake8 * Flake8 * Flake8 * Flake8 * Flake8 * Flake8 * Flake8 * Flake8 * Flake8 * Flake8 * Flake8 * Flake8 * Flake8 * Update update_config.py * Refactor write_registers to write_register calls * Refactor write_registers calls to write_register * Flake8 * Flake8 * flake8 * Change upgrade_datastore version to 110 * Update datastore version from 108 to 110 * Update update_config.py * Update update_config.py * Update update_config.py * Update update_config.py * Update packages/helpermodules/update_config.py Co-authored-by: LKuemmel <76958050+LKuemmel@users.noreply.github.com> --------- Co-authored-by: LKuemmel <76958050+LKuemmel@users.noreply.github.com>
1 parent e408f5f commit 8bd7944

28 files changed

Lines changed: 994 additions & 287 deletions

packages/helpermodules/update_config.py

Lines changed: 102 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
from control.optional_data import OcppConfig
4545
from modules.common.abstract_vehicle import GeneralVehicleConfig
4646
from modules.common.component_type import ComponentType
47-
from modules.devices.sungrow.sungrow.version import Version
47+
from modules.devices.sungrow.sungrow_sh.version import Version
4848
from modules.display_themes.cards.config import CardsDisplayTheme
4949
from modules.io_actions.controllable_consumers.ripple_control_receiver.config import RippleControlReceiverSetup
5050
from modules.web_themes.koala.config import KoalaWebTheme
@@ -57,7 +57,7 @@
5757

5858
class UpdateConfig:
5959

60-
DATASTORE_VERSION = 112
60+
DATASTORE_VERSION = 113
6161

6262
valid_topic = [
6363
"^openWB/bat/config/bat_control_permitted$",
@@ -2858,3 +2858,103 @@ def upgrade(topic: str, payload) -> Optional[dict]:
28582858
run_command(['pip', 'uninstall', 'bimmer_connected', '-y'], process_exception=True)
28592859
self._loop_all_received_topics(upgrade)
28602860
self._append_datastore_version(112)
2861+
2862+
def upgrade_datastore_113(self) -> None:
2863+
"""
2864+
Migrate old single 'sungrow' devices into new modules:
2865+
- 'sungrow_sg' for SG family (no version field)
2866+
- 'sungrow_sh' for SH family (keeps numeric version 0 or 1)
2867+
2868+
Old version mapping:
2869+
* 0 -> sungrow_sh, version 0
2870+
* 1 -> sungrow_sg (remove version)
2871+
* 2 -> sungrow_sg (remove version)
2872+
* 3 -> sungrow_sh, version 1
2873+
Default for missing/unknown old version: sungrow_sg (no version).
2874+
"""
2875+
def upgrade(topic: str, payload) -> None:
2876+
if re.search(r"^openWB/system/device/[0-9]+/config$", topic) is not None:
2877+
device = decode_payload(payload)
2878+
if device.get("type") == "sungrow":
2879+
# inline normalization: handle Version enum, ints, numeric strings
2880+
old_raw = device.get("configuration", {}).get("version")
2881+
old_version = None
2882+
if old_raw is None:
2883+
old_version = None
2884+
else:
2885+
try:
2886+
# Version enum -> int
2887+
if isinstance(old_raw, Version):
2888+
old_version = int(old_raw)
2889+
else:
2890+
# numeric-like: int or numeric string
2891+
old_version = int(old_raw)
2892+
except Exception:
2893+
old_version = None
2894+
2895+
new_type = "sungrow_sg"
2896+
new_version = None
2897+
2898+
if old_version == 0:
2899+
new_type = "sungrow_sh"
2900+
new_version = 0
2901+
elif old_version in (1, 2):
2902+
new_type = "sungrow_sg"
2903+
new_version = None
2904+
elif old_version == 3:
2905+
new_type = "sungrow_sh"
2906+
new_version = 1
2907+
else:
2908+
new_type = "sungrow_sg"
2909+
new_version = None
2910+
2911+
changed = False
2912+
2913+
if device.get("type") != new_type:
2914+
device["type"] = new_type
2915+
changed = True
2916+
2917+
if "configuration" not in device or device["configuration"] is None:
2918+
device["configuration"] = {}
2919+
2920+
if new_version is None:
2921+
if "version" in device["configuration"]:
2922+
device["configuration"].pop("version", None)
2923+
changed = True
2924+
else:
2925+
if device["configuration"].get("version") != new_version:
2926+
device["configuration"]["version"] = new_version
2927+
changed = True
2928+
2929+
if changed:
2930+
device_name = device.get("name")
2931+
device_id = device.get("id")
2932+
log.info(
2933+
f"Upgrading sungrow device {device_name!r} (id={device_id}) -> "
2934+
f"type='{new_type}'"
2935+
+ (f", version={new_version}" if new_version is not None else ", no version")
2936+
)
2937+
Pub().pub(topic, device)
2938+
2939+
if new_version is not None:
2940+
try:
2941+
version_name = Version(new_version).name
2942+
except Exception:
2943+
version_name = str(new_version)
2944+
pub_system_message(
2945+
device,
2946+
(f"Die Konfiguration von '{device_name}' wurde aktualisiert. "
2947+
f"Bitte in den Geräteeinstellungen sicherstellen, dass Version "
2948+
f"'{version_name}' korrekt ist"),
2949+
MessageType.INFO,
2950+
)
2951+
else:
2952+
pub_system_message(
2953+
device,
2954+
(f"Die Sungrow-Geräte-Konfiguration wurde aktualisiert: Gerät "
2955+
f"'{device_name}' auf Typ '{new_type}'."),
2956+
MessageType.INFO,
2957+
)
2958+
2959+
self._loop_all_received_topics(upgrade)
2960+
self._append_datastore_version(113)

packages/modules/devices/sungrow/sungrow/config.py

Lines changed: 0 additions & 72 deletions
This file was deleted.

packages/modules/devices/sungrow/sungrow/device.py

Lines changed: 0 additions & 61 deletions
This file was deleted.

packages/modules/devices/sungrow/sungrow/inverter.py

Lines changed: 0 additions & 66 deletions
This file was deleted.

packages/modules/devices/sungrow/sungrow/modbus.md

Lines changed: 0 additions & 44 deletions
This file was deleted.

packages/modules/devices/sungrow/sungrow/__init__.py renamed to packages/modules/devices/sungrow/sungrow_ihm/__init__.py

File renamed without changes.

0 commit comments

Comments
 (0)