|
1 | 1 | #!/usr/bin/env python3 |
2 | 2 | import logging |
| 3 | +import struct |
3 | 4 | from typing import TypedDict, Any, Optional |
4 | 5 | from pymodbus.constants import Endian |
5 | 6 |
|
@@ -68,13 +69,17 @@ def set_power_limit(self, power_limit: Optional[int]) -> None: |
68 | 69 | elif power_limit == 0: |
69 | 70 | # wiederholt auf Stop setzen damit sich Register nicht zurücksetzt |
70 | 71 | 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) |
72 | 75 | elif power_limit < 0: |
73 | 76 | log.debug(f"Aktive Batteriesteuerung. Batterie wird mit {power_limit} W entladen für den Hausverbrauch") |
74 | 77 | # 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 |
76 | 79 | 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) |
78 | 83 |
|
79 | 84 | def power_limit_controllable(self) -> bool: |
80 | 85 | return True |
|
0 commit comments