Files
allmende_ems/main.py
2025-04-17 15:37:09 +02:00

54 lines
1.6 KiB
Python

from pymodbus.client import ModbusTcpClient
import struct
import time
from pymodbus.constants import Endian
from pymodbus.payload import BinaryPayloadDecoder
# Verbindung zur Wärmepumpe
ip = '10.0.0.10'
port = 502
unit_id = 1
# Liste von interessanten Holding-Register-Adressen
registers = {
300: {'desc': 'Außentemperatur in °C', 'type': 'REAL'},
315: {'desc': 'Spannung FU Ausgang in V', 'type': 'REAL'},
}
client = ModbusTcpClient(ip, port=port)
try:
if not client.connect():
print("Verbindung zur Wärmepumpe fehlgeschlagen.")
exit(1)
print("Verbindung zur Wärmepumpe erfolgreich.")
while True:
print(f"\n--- Neue Abfrage --- {time.strftime('%Y-%m-%d %H:%M:%S')} ---")
for address, info in registers.items():
reg_type = info['type']
result = client.read_input_registers(address, count=2 if reg_type == 'REAL' else 1)#, unit=unit_id)
if result.isError():
print(f"Fehler beim Lesen von Adresse {address}: {result}")
continue
if reg_type == 'REAL':
decoder = BinaryPayloadDecoder.fromRegisters(
result.registers,
byteorder=Endian.BIG,
wordorder=Endian.LITTLE # ← Das ist der Trick!
)
value = decoder.decode_32bit_float()
else:
value = result.registers[0]
print(f"Adresse {address} - {info['desc']}: {value}")
time.sleep(10)
except KeyboardInterrupt:
print("Beendet durch Benutzer (Ctrl+C).")
finally:
client.close()