47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
from pymodbus.client import ModbusTcpClient
|
|
import struct
|
|
import time
|
|
|
|
# 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 = struct.pack('>HH', result.registers[0], result.registers[1])
|
|
value = struct.unpack('>f', decoder)[0]
|
|
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()
|