Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
6233312
Change word order to Big Endian in counter.py
seaspotter Aug 19, 2026
4363b81
Refactor power calculations in inverter.py
seaspotter Aug 19, 2026
497c490
Refactor power calculations and remove POWER_GAIN
seaspotter Aug 19, 2026
bfb72bb
Change word order to Big Endian in counter.py
seaspotter Aug 19, 2026
18d2d8a
Change word order to Big Endian for power readings
seaspotter Aug 19, 2026
b738875
Change word order in power reading to Big Endian
seaspotter Aug 19, 2026
2375777
Fix register address for currents in update method
seaspotter Aug 20, 2026
dd04dc9
Add newline at end of counter.py
seaspotter Aug 20, 2026
d3bfc4d
Refactor power value calculation and logging
seaspotter Aug 20, 2026
d664ed6
Refactor power limit handling in bat.py
seaspotter Aug 20, 2026
9edbe3f
Delete packages/modules/devices/anker/solarbank_max_ac/counter.py
seaspotter Aug 20, 2026
a282a9c
Remove AnkerCounterConfiguration and Setup classes
seaspotter Aug 20, 2026
dec7653
Remove counter component from device.py
seaspotter Aug 20, 2026
7188192
Refactor power calculation and add logging
seaspotter Aug 20, 2026
feffa7e
Add logging for current and power debugging
seaspotter Aug 20, 2026
92edb2b
Delete packages/modules/devices/anker/solarbank_max_ac/__init__.py
seaspotter Aug 20, 2026
23d42e0
Delete packages/modules/devices/anker/solarbank_max_ac/bat.py
seaspotter Aug 20, 2026
9b5fb85
Delete packages/modules/devices/anker/solarbank_max_ac/config.py
seaspotter Aug 20, 2026
7f3e09b
Delete packages/modules/devices/anker/solarbank_max_ac/device.py
seaspotter Aug 20, 2026
e696f32
Delete packages/modules/devices/anker/solarbank_max_ac/inverter.py
seaspotter Aug 20, 2026
9d090c0
Update Anker class name and type attributes
seaspotter Aug 20, 2026
8d12a8d
Refactor import paths for Anker device module
seaspotter Aug 20, 2026
534c063
Move bat.py to new solarbank directory
seaspotter Aug 20, 2026
c7d9d05
Move inverter.py to new solarbank directory
seaspotter Aug 20, 2026
182b7a9
Delete packages/modules/devices/anker/solarbank_4_e5000/__init__.py
seaspotter Aug 20, 2026
aee1abf
Add files via upload
seaspotter Aug 20, 2026
6f9d2f5
Remove debug logging from counter.py
seaspotter Aug 20, 2026
31f9af0
Update update_config.py
seaspotter Aug 20, 2026
c79153a
Remove dc_power from inverter state
seaspotter Aug 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 27 additions & 1 deletion packages/helpermodules/update_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@

class UpdateConfig:

DATASTORE_VERSION = 138
DATASTORE_VERSION = 139

valid_topic = [
"^openWB/bat/config/bat_control_activated$",
Expand Down Expand Up @@ -3500,3 +3500,29 @@ def upgrade(topic: str, payload) -> Optional[dict]:
return {topic: payload_device}
self._loop_all_received_topics(upgrade)
self._append_datastore_version(138)

def upgrade_datastore_139(self) -> None:
def upgrade(topic: str, payload) -> Optional[dict]:
if re.search("^openWB/system/device/[0-9]+/config$", topic) is not None:
payload_device = decode_payload(payload)
if payload_device.get("type") in ("solarbank_4_e5000", "solarbank_max_ac"):
old_type = payload_device["type"]
payload_device["type"] = "solarbank"
if old_type == "solarbank_max_ac":
index = get_index(topic)
for topic_component, payload_component in self.all_received_topics.items():
if re.search(f"^openWB/system/device/{index}/component/[0-9]+/config$",
topic_component) is not None:
payload_component = decode_payload(payload_component)
if payload_component.get("type") == ComponentType.COUNTER.value:
pub_system_message(
payload_device,
"Die Solarbank Max AC unterstuetzt den Zaehler nicht mehr als eigene "
"Komponente. Bitte lege den Anker SOLIX Smart Meter Gen 2 als "
"eigenstaendiges Geraet mit eigener IP-Adresse an und entferne die "
"bisherige Zaehler-Komponente unter Einstellungen -> Konfiguration -> "
"Geraete manuell.", MessageType.WARNING)
break
return {topic: payload_device}
self._loop_all_received_topics(upgrade)
self._append_datastore_version(139)
15 changes: 9 additions & 6 deletions packages/modules/devices/anker/smartmeter_gen2/counter.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,19 @@ def update(self):
unit = self.device_config.configuration.modbus_id

power = self.client.read_input_registers(10644, ModbusDataType.INT_32,
wordorder=Endian.Little, unit=unit) * -1
wordorder=Endian.Big, unit=unit)
powers = self.client.read_input_registers(10638, [ModbusDataType.INT_32] * 3,
wordorder=Endian.Little, unit=unit)
wordorder=Endian.Big, unit=unit)
voltages = self.client.read_input_registers(10632, [ModbusDataType.UINT_16] * 3,
wordorder=Endian.Little, unit=unit)
currents = self.client.read_input_registers(10666, [ModbusDataType.INT_16] * 3,
wordorder=Endian.Little, unit=unit)
wordorder=Endian.Big, unit=unit)
currents = self.client.read_input_registers(10635, [ModbusDataType.INT_16] * 3,
wordorder=Endian.Big, unit=unit)

# Currents hat keine eigene Vorzeichen (getestet), daher kommen die Vorzeichen aus
# den powers-Werten

voltages = [value / 10 for value in voltages]
currents = [value / -100 for value in currents]
currents = [abs(c) / 100 * (1 if p >= 0 else -1) for c, p in zip(currents, powers)]

self.peak_filter.check_values(power)
imported, exported = self.sim_counter.sim_count(power)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from modules.common.modbus import ModbusDataType, Endian, ModbusTcpClient_
from modules.common.simcount import SimCounter
from modules.common.store import get_component_value_store
from modules.devices.anker.solarbank_max_ac.config import Anker, AnkerBatSetup
from modules.devices.anker.solarbank.config import Anker, AnkerBatSetup
from modules.common.utils.peak_filter import PeakFilter
from modules.common.component_type import ComponentType

Expand Down Expand Up @@ -39,7 +39,7 @@ def update(self) -> None:
unit = self.device_config.configuration.modbus_id

power = self.client.read_input_registers(10008, ModbusDataType.INT_32,
wordorder=Endian.Little, unit=unit) * -1
wordorder=Endian.Big, unit=unit) * -1
soc = self.client.read_input_registers(10014, ModbusDataType.UINT_16, unit=unit)

self.peak_filter.check_values(power)
Expand All @@ -65,9 +65,6 @@ def set_power_limit(self, power_limit: Optional[int]) -> None:
self.client.write_register(10064, 3, data_type=ModbusDataType.UINT_16, unit=unit)
self.last_mode = 'limited'

# Berechne power value: 0 = stop, != 0 = multipliziere mit -1
# Laut Doku ist der min Wert 100W, ggf. noch Anpassung für power_limit=0 notwendig

power_value = 0 if power_limit == 0 else int(power_limit) * -1
self.client.write_register(10071, power_value, data_type=ModbusDataType.INT_32, unit=unit)
log.debug("Aktive Batteriesteuerung angefordert, angeforderte Leistung: {power_value} W")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ def __init__(self,

class Anker:
def __init__(self,
name: str = "Anker SOLIX Solarbank 4 E5000 Pro",
type: str = "solarbank_4_e5000",
name: str = "Anker SOLIX Solarbank",
type: str = "solarbank",
id: int = 0,
configuration: AnkerConfiguration = None) -> None:
self.name = name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
from modules.common.component_context import SingleComponentUpdateContext
from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater
from modules.common.modbus import ModbusTcpClient_
from modules.devices.anker.solarbank_4_e5000.bat import AnkerBat
from modules.devices.anker.solarbank_4_e5000.config import Anker, AnkerBatSetup, AnkerInverterSetup
from modules.devices.anker.solarbank_4_e5000.inverter import AnkerInverter
from modules.devices.anker.solarbank.bat import AnkerBat
from modules.devices.anker.solarbank.config import Anker, AnkerBatSetup, AnkerInverterSetup
from modules.devices.anker.solarbank.inverter import AnkerInverter

log = logging.getLogger(__name__)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from modules.common.modbus import ModbusDataType, Endian, ModbusTcpClient_
from modules.common.simcount import SimCounter
from modules.common.store import get_component_value_store
from modules.devices.anker.solarbank_max_ac.config import Anker, AnkerInverterSetup
from modules.devices.anker.solarbank.config import Anker, AnkerInverterSetup
from modules.common.utils.peak_filter import PeakFilter
from modules.common.component_type import ComponentType

Expand All @@ -34,18 +34,13 @@ def initialize(self) -> None:
def update(self) -> None:
unit = self.device_config.configuration.modbus_id

# Register 10002 ist die PV_power also die DC Leistung
# Register 10010 ist "Load_power" unklar ob dies wirklich die AC Leistung des Inverters ist
power = self.client.read_input_registers(10010, ModbusDataType.INT_32,
wordorder=Endian.Little, unit=unit) * -1
dc_power = self.client.read_input_registers(10002, ModbusDataType.INT_32,
wordorder=Endian.Little, unit=unit) * -1
power = self.client.read_input_registers(10002, ModbusDataType.INT_32,
wordorder=Endian.Big, unit=unit) * -1

self.peak_filter.check_values(power)
imported, exported = self.sim_counter.sim_count(power)
inverter_state = InverterState(
power=power,
dc_power=dc_power,
imported=imported,
exported=exported
)
Expand Down
85 changes: 0 additions & 85 deletions packages/modules/devices/anker/solarbank_4_e5000/bat.py

This file was deleted.

58 changes: 0 additions & 58 deletions packages/modules/devices/anker/solarbank_4_e5000/inverter.py

This file was deleted.

Empty file.
69 changes: 0 additions & 69 deletions packages/modules/devices/anker/solarbank_max_ac/config.py

This file was deleted.

Loading