Skip to content

Commit 4792850

Browse files
authored
kostal bat: fix modbus datatype (#3091)
1 parent 9b4359b commit 4792850

1 file changed

Lines changed: 8 additions & 3 deletions

File tree

  • packages/modules/devices/kostal/kostal_plenticore

packages/modules/devices/kostal/kostal_plenticore/bat.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#!/usr/bin/env python3
22
import logging
3+
import struct
34
from typing import TypedDict, Any, Optional
45
from pymodbus.constants import Endian
56

@@ -68,13 +69,17 @@ def set_power_limit(self, power_limit: Optional[int]) -> None:
6869
elif power_limit == 0:
6970
# wiederholt auf Stop setzen damit sich Register nicht zurücksetzt
7071
log.debug("Aktive Batteriesteuerung. Batterie wird auf Stop gesetzt und nicht entladen")
71-
self.client.write_registers(1034, [0], data_type=ModbusDataType.FLOAT_32, unit=unit)
72+
packed = struct.pack('>f', 0.0)
73+
registers = [int.from_bytes(packed[0:2], 'big'), int.from_bytes(packed[2:4], 'big')]
74+
self.client.write_registers(1034, registers, data_type=ModbusDataType.FLOAT_32, unit=unit)
7275
elif power_limit < 0:
7376
log.debug(f"Aktive Batteriesteuerung. Batterie wird mit {power_limit} W entladen für den Hausverbrauch")
7477
# Die maximale Entladeleistung begrenzen auf 7000W
75-
power_value = int(min(abs(power_limit), 7000)) * -1
78+
power_value = float(min(abs(power_limit), 7000)) * -1
7679
log.debug(f"Aktive Batteriesteuerung. Batterie wird mit {power_value} W entladen für den Hausverbrauch")
77-
self.client.write_registers(1034, [power_value], data_type=ModbusDataType.FLOAT_32, unit=unit)
80+
packed = struct.pack('>f', power_value)
81+
registers = [int.from_bytes(packed[0:2], 'big'), int.from_bytes(packed[2:4], 'big')]
82+
self.client.write_registers(1034, registers, data_type=ModbusDataType.FLOAT_32, unit=unit)
7883

7984
def power_limit_controllable(self) -> bool:
8085
return True

0 commit comments

Comments
 (0)