new branch with heatpump and database classes
This commit is contained in:
80
main.py
80
main.py
@@ -1,75 +1,17 @@
|
||||
from pymodbus.client import ModbusTcpClient
|
||||
import pandas as pd
|
||||
import struct
|
||||
import time
|
||||
import csv
|
||||
import os
|
||||
from datetime import datetime
|
||||
from data_base_csv import DataBaseCsv
|
||||
from heat_pump import HeatPump
|
||||
|
||||
# Excel-Datei mit den Input-Registerinformationen
|
||||
excel_path = "data/ModBus TCPIP 1.17(1).xlsx"
|
||||
xls = pd.ExcelFile(excel_path)
|
||||
df_input_registers = xls.parse('04 Input Register')
|
||||
interval = 10 # z.B. alle 10 Sekunden
|
||||
|
||||
# Relevante Spalten bereinigen
|
||||
df_clean = df_input_registers[['MB Adresse', 'Variable', 'Beschreibung', 'Variabel Typ']].dropna()
|
||||
df_clean['MB Adresse'] = df_clean['MB Adresse'].astype(int)
|
||||
db = DataBaseCsv('modbus_log.csv')
|
||||
hp = HeatPump(ip_address='10.0.0.10')
|
||||
|
||||
# Dictionary aus Excel erzeugen
|
||||
registers = {
|
||||
row['MB Adresse']: {
|
||||
'desc': row['Beschreibung'],
|
||||
'type': 'REAL' if row['Variabel Typ'] == 'REAL' else 'INT'
|
||||
}
|
||||
for _, row in df_clean.iterrows()
|
||||
}
|
||||
while True:
|
||||
now = datetime.now()
|
||||
if now.second % interval == 0 and now.microsecond < 100_000:
|
||||
db.store_data(hp.get_data())
|
||||
|
||||
# CSV-Datei vorbereiten
|
||||
csv_filename = "modbus_log.csv"
|
||||
csv_exists = os.path.isfile(csv_filename)
|
||||
time.sleep(0.1)
|
||||
|
||||
# Verbindung zur Wärmepumpe
|
||||
ip = '10.0.0.10'
|
||||
port = 502
|
||||
unit_id = 1
|
||||
|
||||
client = ModbusTcpClient(ip, port=port)
|
||||
|
||||
try:
|
||||
if not client.connect():
|
||||
print("Verbindung zur Wärmepumpe fehlgeschlagen.")
|
||||
exit(1)
|
||||
print("Verbindung zur Wärmepumpe erfolgreich.")
|
||||
|
||||
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)
|
||||
|
||||
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
|
||||
|
||||
if reg_type == 'REAL':
|
||||
value = result.registers[0] / 10.0
|
||||
else:
|
||||
value = result.registers[0]
|
||||
|
||||
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).")
|
||||
finally:
|
||||
client.close()
|
||||
|
||||
Reference in New Issue
Block a user