diff --git a/packages/modules/devices/kostal/kostal_plenticore/bat.py b/packages/modules/devices/kostal/kostal_plenticore/bat.py index b7c9f59d9d..cbbe359f9e 100644 --- a/packages/modules/devices/kostal/kostal_plenticore/bat.py +++ b/packages/modules/devices/kostal/kostal_plenticore/bat.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 import logging +import struct from typing import TypedDict, Any, Optional from pymodbus.constants import Endian @@ -68,13 +69,17 @@ def set_power_limit(self, power_limit: Optional[int]) -> None: elif power_limit == 0: # wiederholt auf Stop setzen damit sich Register nicht zurücksetzt log.debug("Aktive Batteriesteuerung. Batterie wird auf Stop gesetzt und nicht entladen") - self.client.write_registers(1034, [0], data_type=ModbusDataType.FLOAT_32, unit=unit) + packed = struct.pack('>f', 0.0) + registers = [int.from_bytes(packed[0:2], 'big'), int.from_bytes(packed[2:4], 'big')] + self.client.write_registers(1034, registers, data_type=ModbusDataType.FLOAT_32, unit=unit) elif power_limit < 0: log.debug(f"Aktive Batteriesteuerung. Batterie wird mit {power_limit} W entladen für den Hausverbrauch") # Die maximale Entladeleistung begrenzen auf 7000W - power_value = int(min(abs(power_limit), 7000)) * -1 + power_value = float(min(abs(power_limit), 7000)) * -1 log.debug(f"Aktive Batteriesteuerung. Batterie wird mit {power_value} W entladen für den Hausverbrauch") - self.client.write_registers(1034, [power_value], data_type=ModbusDataType.FLOAT_32, unit=unit) + packed = struct.pack('>f', power_value) + registers = [int.from_bytes(packed[0:2], 'big'), int.from_bytes(packed[2:4], 'big')] + self.client.write_registers(1034, registers, data_type=ModbusDataType.FLOAT_32, unit=unit) def power_limit_controllable(self) -> bool: return True