storing data in csv added
This commit is contained in:
55
main.py
55
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).")
|
||||
|
||||
Reference in New Issue
Block a user