From a97b9e1ee9caddb3e0c8ce7251b624fcf0a283cf Mon Sep 17 00:00:00 2001 From: Nils Reiners Date: Thu, 17 Apr 2025 16:11:28 +0200 Subject: [PATCH] storing data in csv added --- main.py | 55 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 32 insertions(+), 23 deletions(-) diff --git a/main.py b/main.py index caf067e..70b3c1c 100644 --- a/main.py +++ b/main.py @@ -2,6 +2,8 @@ from pymodbus.client import ModbusTcpClient import pandas as pd import struct import time +import csv +import os # Excel-Datei mit den Input-Registerinformationen excel_path = "data/ModBus TCPIP 1.17(1).xlsx" @@ -20,20 +22,16 @@ registers = { } 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 ip = '10.0.0.10' port = 502 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) try: @@ -42,23 +40,34 @@ try: 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 + with open(csv_filename, mode='a', newline='') as file: + writer = csv.writer(file) + if not csv_exists: + header = ['Zeit'] + [f"{address} - {info['desc']}" for address, info in registers.items()] + writer.writerow(header) - if reg_type == 'REAL': - value = result.registers[0] / 10.0 - else: - value = result.registers[0] + while True: + print(f"\n--- Neue Abfrage --- {time.strftime('%Y-%m-%d %H:%M:%S')} ---") + row = [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) + 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: print("Beendet durch Benutzer (Ctrl+C).")