storing data in csv added

This commit is contained in:
Nils Reiners
2025-04-17 16:11:28 +02:00
parent b92ec543f1
commit a97b9e1ee9

55
main.py
View File

@@ -2,6 +2,8 @@ from pymodbus.client import ModbusTcpClient
import pandas as pd import pandas as pd
import struct import struct
import time import time
import csv
import os
# Excel-Datei mit den Input-Registerinformationen # Excel-Datei mit den Input-Registerinformationen
excel_path = "data/ModBus TCPIP 1.17(1).xlsx" excel_path = "data/ModBus TCPIP 1.17(1).xlsx"
@@ -20,20 +22,16 @@ registers = {
} }
for _, row in df_clean.iterrows() for _, row in df_clean.iterrows()
} }
# CSV-Datei vorbereiten
csv_filename = "modbus_log.csv"
csv_exists = os.path.isfile(csv_filename)
# Verbindung zur Wärmepumpe # Verbindung zur Wärmepumpe
ip = '10.0.0.10' ip = '10.0.0.10'
port = 502 port = 502
unit_id = 1 unit_id = 1
# # Liste von interessanten Holding-Register-Adressen
# registers = {
# 210: {'desc': 'Puffertemperatur Kühlen in °C', 'type': 'REAL'},
# 300: {'desc': 'Außentemperatur in °C', 'type': 'REAL'},
# 170: {'desc': 'Puffertemperatur Heizung in °C', 'type': 'REAL'},
# 160: {'desc': 'Trinkwarmwasserspiecher 2 oben (Ein) in °C', 'type': 'REAL'},
# 161: {'desc': 'Trinkwarmwasserspiecher 2 unten (Aus) in °C', 'type': 'REAL'},
#}
client = ModbusTcpClient(ip, port=port) client = ModbusTcpClient(ip, port=port)
try: try:
@@ -42,23 +40,34 @@ try:
exit(1) exit(1)
print("Verbindung zur Wärmepumpe erfolgreich.") print("Verbindung zur Wärmepumpe erfolgreich.")
while True: with open(csv_filename, mode='a', newline='') as file:
print(f"\n--- Neue Abfrage --- {time.strftime('%Y-%m-%d %H:%M:%S')} ---") writer = csv.writer(file)
for address, info in registers.items(): if not csv_exists:
reg_type = info['type'] header = ['Zeit'] + [f"{address} - {info['desc']}" for address, info in registers.items()]
result = client.read_input_registers(address, count=2 if reg_type == 'REAL' else 1)#, unit=unit_id) writer.writerow(header)
if result.isError():
print(f"Fehler beim Lesen von Adresse {address}: {result}")
continue
if reg_type == 'REAL': while True:
value = result.registers[0] / 10.0 print(f"\n--- Neue Abfrage --- {time.strftime('%Y-%m-%d %H:%M:%S')} ---")
else: row = [time.strftime('%Y-%m-%d %H:%M:%S')]
value = result.registers[0] for address, info in registers.items():
reg_type = info['type']
result = client.read_input_registers(address, count=2 if reg_type == 'REAL' else 1)
if result.isError():
print(f"Fehler beim Lesen von Adresse {address}: {result}")
row.append('Fehler')
continue
print(f"Adresse {address} - {info['desc']}: {value}") if reg_type == 'REAL':
value = result.registers[0] / 10.0
else:
value = result.registers[0]
time.sleep(10) print(f"Adresse {address} - {info['desc']}: {value}")
row.append(value)
writer.writerow(row)
file.flush()
time.sleep(10)
except KeyboardInterrupt: except KeyboardInterrupt:
print("Beendet durch Benutzer (Ctrl+C).") print("Beendet durch Benutzer (Ctrl+C).")