Initial commit
This commit is contained in:
commit
4182d49adb
19 changed files with 20537 additions and 0 deletions
2133
Aktuelle_Temperaturwerte.svg
Normal file
2133
Aktuelle_Temperaturwerte.svg
Normal file
File diff suppressed because it is too large
Load diff
|
After Width: | Height: | Size: 79 KiB |
7223
Temperaturverlauf.svg
Normal file
7223
Temperaturverlauf.svg
Normal file
File diff suppressed because it is too large
Load diff
|
After Width: | Height: | Size: 302 KiB |
2151
Temperaturverlauf_Tank2.svg
Normal file
2151
Temperaturverlauf_Tank2.svg
Normal file
File diff suppressed because it is too large
Load diff
|
After Width: | Height: | Size: 80 KiB |
22
change.py
Executable file
22
change.py
Executable file
|
|
@ -0,0 +1,22 @@
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
# SQLite-Datenbankverbindung herstellen
|
||||||
|
conn = sqlite3.connect('temperaturen.db')
|
||||||
|
cursor = conn.cursor()
|
||||||
|
|
||||||
|
# Funktion zum Aktualisieren der Tanknamen in der Datenbank
|
||||||
|
def update_tankname(table_name, old_name, new_name):
|
||||||
|
cursor.execute(f"UPDATE {table_name} SET messstelle = ? WHERE messstelle = ?",
|
||||||
|
(new_name, old_name))
|
||||||
|
conn.commit()
|
||||||
|
|
||||||
|
# Korrektur durchführen (Tabelle "istwert")
|
||||||
|
update_tankname("istwert", "Tank 1", "1")
|
||||||
|
update_tankname("istwert", "Tank 2", "2")
|
||||||
|
|
||||||
|
# Korrektur durchführen (Tabelle "sollwert")
|
||||||
|
update_tankname("sollwert", "Tank 1", "1")
|
||||||
|
update_tankname("sollwert", "Tank 2", "2")
|
||||||
|
|
||||||
|
# Die Datenbankverbindung schließen
|
||||||
|
conn.close()
|
||||||
60
cron_temp.py
Executable file
60
cron_temp.py
Executable file
|
|
@ -0,0 +1,60 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import requests
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
# URL der HTML-Seite, die Sie abrufen möchten
|
||||||
|
url = "http://localhost:5010"
|
||||||
|
|
||||||
|
# HTTP-Anfrage senden und den HTML-Inhalt abrufen
|
||||||
|
response = requests.get(url)
|
||||||
|
html = response.text
|
||||||
|
|
||||||
|
# HTML-Dokument in BeautifulSoup-Objekt umwandeln
|
||||||
|
soup = BeautifulSoup(html, 'html.parser')
|
||||||
|
|
||||||
|
# Die Daten in der Tabelle extrahieren
|
||||||
|
table = soup.find('table')
|
||||||
|
rows = table.find_all('tr')
|
||||||
|
|
||||||
|
# Initialisieren der Tanknummern mit 1 und 2
|
||||||
|
tank1_nummer = 1
|
||||||
|
tank2_nummer = 2
|
||||||
|
|
||||||
|
# SQLite-Datenbankverbindung herstellen
|
||||||
|
db_path = '/home/divers/datenbank/temperaturen.db'
|
||||||
|
conn = sqlite3.connect(db_path)
|
||||||
|
cursor = conn.cursor()
|
||||||
|
|
||||||
|
# Funktion zum Einfügen von Tanknummern und Temperaturwerten in die Datenbank
|
||||||
|
def insert_temperature(table_name, tanknummer, temperatur):
|
||||||
|
cursor.execute(f"INSERT INTO {table_name} (messstelle, temperatur) VALUES (?, ?)",
|
||||||
|
(tanknummer, temperatur))
|
||||||
|
conn.commit()
|
||||||
|
|
||||||
|
# Daten in die Datenbank eintragen (Tabelle "istwert")
|
||||||
|
for row in rows[1:-1]:
|
||||||
|
columns = row.find_all('td')
|
||||||
|
if len(columns) >= 3:
|
||||||
|
tank_name = columns[0].text
|
||||||
|
istwert_text = columns[1].text.strip() # Temperaturwert ohne Leerzeichen am Anfang/Ende
|
||||||
|
if istwert_text: # Nur wenn die Zeichenfolge nicht leer ist
|
||||||
|
istwert = float(istwert_text.split('°')[0]) # Extrahieren des Istwertes und Konvertieren in Float
|
||||||
|
tank_nummer = int(tank_name.split()[-1]) # Extrahieren der Tanknummer aus dem Namen
|
||||||
|
insert_temperature("istwert", tank_nummer, istwert)
|
||||||
|
|
||||||
|
# Daten in die Datenbank eintragen (Tabelle "sollwert")
|
||||||
|
for row in rows[1:-1]:
|
||||||
|
columns = row.find_all('td')
|
||||||
|
if len(columns) >= 3:
|
||||||
|
tank_name = columns[0].text
|
||||||
|
sollwert_text = columns[2].text.strip() # Temperaturwert ohne Leerzeichen am Anfang/Ende
|
||||||
|
if sollwert_text: # Nur wenn die Zeichenfolge nicht leer ist
|
||||||
|
sollwert = float(sollwert_text.split('°')[0]) # Extrahieren des Sollwertes und Konvertieren in Float
|
||||||
|
tank_nummer = int(tank_name.split()[-1]) # Extrahieren der Tanknummer aus dem Namen
|
||||||
|
insert_temperature("sollwert", tank_nummer, sollwert)
|
||||||
|
|
||||||
|
# Die Datenbankverbindung schließen
|
||||||
|
conn.close()
|
||||||
|
|
||||||
168
data.csv
Normal file
168
data.csv
Normal file
|
|
@ -0,0 +1,168 @@
|
||||||
|
id,temperature,Timestamp
|
||||||
|
1,13.25,"2023-09-04 21:52:27"
|
||||||
|
2,13.38,"2023-09-04 21:54:24"
|
||||||
|
3,13.38,"2023-09-04 22:05:01"
|
||||||
|
4,13.5,"2023-09-04 22:07:01"
|
||||||
|
5,13.5,"2023-09-04 22:10:01"
|
||||||
|
6,13.5,"2023-09-04 22:15:02"
|
||||||
|
7,13.63,"2023-09-04 22:20:01"
|
||||||
|
8,13.63,"2023-09-04 22:25:02"
|
||||||
|
9,13.75,"2023-09-04 22:30:01"
|
||||||
|
10,13.75,"2023-09-04 22:35:02"
|
||||||
|
11,13.88,"2023-09-04 22:40:01"
|
||||||
|
12,13.88,"2023-09-04 22:45:01"
|
||||||
|
13,14.0,"2023-09-04 22:50:02"
|
||||||
|
14,14.0,"2023-09-04 22:55:01"
|
||||||
|
15,14.0,"2023-09-04 23:00:02"
|
||||||
|
16,14.13,"2023-09-04 23:05:02"
|
||||||
|
17,14.13,"2023-09-04 23:10:01"
|
||||||
|
18,14.13,"2023-09-04 23:15:02"
|
||||||
|
19,14.13,"2023-09-04 23:20:02"
|
||||||
|
20,14.25,"2023-09-04 23:25:01"
|
||||||
|
21,14.25,"2023-09-04 23:30:02"
|
||||||
|
22,14.25,"2023-09-04 23:35:01"
|
||||||
|
23,14.38,"2023-09-04 23:40:02"
|
||||||
|
24,14.5,"2023-09-04 23:45:02"
|
||||||
|
25,14.38,"2023-09-04 23:50:01"
|
||||||
|
26,14.38,"2023-09-04 23:55:02"
|
||||||
|
27,14.5,"2023-09-05 00:00:01"
|
||||||
|
28,14.5,"2023-09-05 00:05:02"
|
||||||
|
29,14.63,"2023-09-05 00:10:01"
|
||||||
|
30,14.63,"2023-09-05 00:15:01"
|
||||||
|
31,14.63,"2023-09-05 00:20:02"
|
||||||
|
32,14.63,"2023-09-05 00:25:02"
|
||||||
|
33,14.75,"2023-09-05 00:30:01"
|
||||||
|
34,14.63,"2023-09-05 00:35:02"
|
||||||
|
35,14.75,"2023-09-05 00:40:01"
|
||||||
|
36,14.75,"2023-09-05 00:45:01"
|
||||||
|
37,14.75,"2023-09-05 00:50:02"
|
||||||
|
38,14.88,"2023-09-05 00:55:01"
|
||||||
|
39,14.88,"2023-09-05 01:00:02"
|
||||||
|
40,14.88,"2023-09-05 01:05:01"
|
||||||
|
41,14.88,"2023-09-05 01:10:02"
|
||||||
|
42,15.0,"2023-09-05 01:15:02"
|
||||||
|
43,14.88,"2023-09-05 01:20:01"
|
||||||
|
44,15.0,"2023-09-05 01:25:02"
|
||||||
|
45,15.0,"2023-09-05 01:30:02"
|
||||||
|
46,15.0,"2023-09-05 01:35:01"
|
||||||
|
47,15.13,"2023-09-05 01:40:02"
|
||||||
|
48,15.0,"2023-09-05 01:45:02"
|
||||||
|
49,15.13,"2023-09-05 01:50:01"
|
||||||
|
50,15.13,"2023-09-05 01:55:02"
|
||||||
|
51,15.13,"2023-09-05 02:00:01"
|
||||||
|
52,15.13,"2023-09-05 02:05:02"
|
||||||
|
53,15.13,"2023-09-05 02:10:02"
|
||||||
|
54,15.25,"2023-09-05 02:15:01"
|
||||||
|
55,15.25,"2023-09-05 02:20:02"
|
||||||
|
56,15.25,"2023-09-05 02:25:01"
|
||||||
|
57,15.25,"2023-09-05 02:30:02"
|
||||||
|
58,15.25,"2023-09-05 02:35:02"
|
||||||
|
59,15.38,"2023-09-05 02:40:02"
|
||||||
|
60,15.38,"2023-09-05 02:45:01"
|
||||||
|
61,15.38,"2023-09-05 02:50:02"
|
||||||
|
62,15.38,"2023-09-05 02:55:01"
|
||||||
|
63,15.38,"2023-09-05 03:00:02"
|
||||||
|
64,15.5,"2023-09-05 03:05:02"
|
||||||
|
65,15.5,"2023-09-05 03:10:01"
|
||||||
|
66,15.5,"2023-09-05 03:15:02"
|
||||||
|
67,15.63,"2023-09-05 03:20:01"
|
||||||
|
68,15.5,"2023-09-05 03:25:01"
|
||||||
|
69,15.63,"2023-09-05 03:30:02"
|
||||||
|
70,15.63,"2023-09-05 03:35:01"
|
||||||
|
71,15.63,"2023-09-05 03:40:01"
|
||||||
|
72,15.75,"2023-09-05 03:45:01"
|
||||||
|
73,15.75,"2023-09-05 03:50:02"
|
||||||
|
74,15.75,"2023-09-05 03:55:01"
|
||||||
|
75,15.75,"2023-09-05 04:00:02"
|
||||||
|
76,15.75,"2023-09-05 04:05:01"
|
||||||
|
77,15.75,"2023-09-05 04:10:02"
|
||||||
|
78,15.75,"2023-09-05 04:15:02"
|
||||||
|
79,15.75,"2023-09-05 04:20:01"
|
||||||
|
80,15.88,"2023-09-05 04:25:02"
|
||||||
|
81,15.88,"2023-09-05 04:30:01"
|
||||||
|
82,15.88,"2023-09-05 04:35:01"
|
||||||
|
83,15.88,"2023-09-05 04:40:02"
|
||||||
|
84,15.88,"2023-09-05 04:45:02"
|
||||||
|
85,16.0,"2023-09-05 04:50:01"
|
||||||
|
86,15.88,"2023-09-05 04:55:01"
|
||||||
|
87,15.88,"2023-09-05 05:00:02"
|
||||||
|
88,16.0,"2023-09-05 05:05:01"
|
||||||
|
89,16.0,"2023-09-05 05:10:02"
|
||||||
|
90,16.0,"2023-09-05 05:15:02"
|
||||||
|
91,16.0,"2023-09-05 05:20:01"
|
||||||
|
92,16.0,"2023-09-05 05:25:02"
|
||||||
|
93,16.12,"2023-09-05 05:30:01"
|
||||||
|
94,16.12,"2023-09-05 05:35:02"
|
||||||
|
95,16.12,"2023-09-05 05:40:02"
|
||||||
|
96,16.12,"2023-09-05 05:45:01"
|
||||||
|
97,16.12,"2023-09-05 05:50:01"
|
||||||
|
98,16.12,"2023-09-05 05:55:02"
|
||||||
|
99,16.25,"2023-09-05 06:00:02"
|
||||||
|
100,16.12,"2023-09-05 06:05:01"
|
||||||
|
101,16.25,"2023-09-05 06:10:02"
|
||||||
|
102,16.25,"2023-09-05 06:15:02"
|
||||||
|
103,16.25,"2023-09-05 06:20:01"
|
||||||
|
104,16.25,"2023-09-05 06:25:02"
|
||||||
|
105,16.37,"2023-09-05 06:30:02"
|
||||||
|
106,16.37,"2023-09-05 06:35:01"
|
||||||
|
107,16.37,"2023-09-05 06:40:02"
|
||||||
|
108,16.37,"2023-09-05 06:45:01"
|
||||||
|
109,16.5,"2023-09-05 06:50:02"
|
||||||
|
110,16.5,"2023-09-05 06:55:02"
|
||||||
|
111,16.5,"2023-09-05 07:00:01"
|
||||||
|
112,16.5,"2023-09-05 07:05:02"
|
||||||
|
113,16.62,"2023-09-05 07:10:02"
|
||||||
|
114,16.62,"2023-09-05 07:15:01"
|
||||||
|
115,16.62,"2023-09-05 07:20:02"
|
||||||
|
116,16.62,"2023-09-05 07:25:02"
|
||||||
|
117,16.62,"2023-09-05 07:30:02"
|
||||||
|
118,16.62,"2023-09-05 07:35:02"
|
||||||
|
119,16.62,"2023-09-05 07:40:02"
|
||||||
|
120,16.75,"2023-09-05 07:45:02"
|
||||||
|
121,16.75,"2023-09-05 07:50:02"
|
||||||
|
122,16.75,"2023-09-05 07:55:02"
|
||||||
|
123,16.87,"2023-09-05 08:00:01"
|
||||||
|
124,16.75,"2023-09-05 08:05:01"
|
||||||
|
125,16.87,"2023-09-05 08:10:02"
|
||||||
|
126,16.87,"2023-09-05 08:15:02"
|
||||||
|
127,16.87,"2023-09-05 08:20:02"
|
||||||
|
128,16.87,"2023-09-05 08:25:02"
|
||||||
|
129,17.0,"2023-09-05 08:30:02"
|
||||||
|
130,17.0,"2023-09-05 08:37:18"
|
||||||
|
131,17.0,"2023-09-05 08:45:02"
|
||||||
|
132,17.12,"2023-09-05 08:50:01"
|
||||||
|
133,17.12,"2023-09-05 08:55:02"
|
||||||
|
134,17.12,"2023-09-05 09:00:02"
|
||||||
|
135,17.12,"2023-09-05 09:05:02"
|
||||||
|
136,17.12,"2023-09-05 09:10:02"
|
||||||
|
137,17.25,"2023-09-05 09:15:02"
|
||||||
|
138,17.25,"2023-09-05 09:20:02"
|
||||||
|
139,17.25,"2023-09-05 09:25:01"
|
||||||
|
140,17.25,"2023-09-05 09:30:02"
|
||||||
|
141,17.37,"2023-09-05 09:35:02"
|
||||||
|
142,17.37,"2023-09-05 09:40:01"
|
||||||
|
143,17.37,"2023-09-05 09:45:01"
|
||||||
|
144,17.5,"2023-09-05 09:50:02"
|
||||||
|
145,17.37,"2023-09-05 09:55:02"
|
||||||
|
146,17.37,"2023-09-05 10:00:02"
|
||||||
|
147,17.5,"2023-09-05 10:05:02"
|
||||||
|
148,17.5,"2023-09-05 10:10:02"
|
||||||
|
149,17.5,"2023-09-05 10:15:02"
|
||||||
|
150,17.5,"2023-09-05 10:20:02"
|
||||||
|
151,17.5,"2023-09-05 10:25:24"
|
||||||
|
152,17.5,"2023-09-05 10:30:02"
|
||||||
|
153,17.62,"2023-09-05 10:35:02"
|
||||||
|
154,17.62,"2023-09-05 10:40:02"
|
||||||
|
155,17.62,"2023-09-05 10:45:01"
|
||||||
|
156,17.62,"2023-09-05 10:50:01"
|
||||||
|
157,17.75,"2023-09-05 10:55:01"
|
||||||
|
158,17.75,"2023-09-05 11:00:01"
|
||||||
|
159,17.75,"2023-09-05 11:05:02"
|
||||||
|
160,17.75,"2023-09-05 11:10:02"
|
||||||
|
161,17.87,"2023-09-05 11:15:02"
|
||||||
|
162,17.87,"2023-09-05 11:20:02"
|
||||||
|
163,17.87,"2023-09-05 11:25:01"
|
||||||
|
164,17.87,"2023-09-05 11:30:01"
|
||||||
|
165,18.0,"2023-09-05 11:35:02"
|
||||||
|
166,17.87,"2023-09-05 11:40:02"
|
||||||
|
167,18.0,"2023-09-05 11:45:02"
|
||||||
|
31
datenbank.py
Executable file
31
datenbank.py
Executable file
|
|
@ -0,0 +1,31 @@
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
# SQLite-Datenbankverbindung herstellen oder erstellen (temperatursteuerung.db)
|
||||||
|
conn = sqlite3.connect('temperaturen.db')
|
||||||
|
cursor = conn.cursor()
|
||||||
|
|
||||||
|
# Tabelle "istwert" erstellen
|
||||||
|
cursor.execute('''
|
||||||
|
CREATE TABLE IF NOT EXISTS istwert (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
messstelle INTEGER,
|
||||||
|
temperatur REAL,
|
||||||
|
zeitstempel TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||||
|
)
|
||||||
|
''')
|
||||||
|
|
||||||
|
# Tabelle "sollwert" erstellen
|
||||||
|
cursor.execute('''
|
||||||
|
CREATE TABLE IF NOT EXISTS sollwert (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
messstelle INTEGER,
|
||||||
|
temperatur REAL,
|
||||||
|
zeitstempel TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||||
|
)
|
||||||
|
''')
|
||||||
|
|
||||||
|
# Änderungen in der Datenbank speichern
|
||||||
|
conn.commit()
|
||||||
|
|
||||||
|
# Die Datenbankverbindung schließen
|
||||||
|
conn.close()
|
||||||
5499
diagramm.svg
Normal file
5499
diagramm.svg
Normal file
File diff suppressed because it is too large
Load diff
|
After Width: | Height: | Size: 210 KiB |
30
import.py
Normal file
30
import.py
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import sqlite3
|
||||||
|
import csv
|
||||||
|
|
||||||
|
# Pfad zur CSV-Datei
|
||||||
|
csv_file = 'data.csv'
|
||||||
|
|
||||||
|
# Pfad zur SQLite-Datenbank
|
||||||
|
db_path = '/home/divers/datenbank/temperaturen.db'
|
||||||
|
|
||||||
|
# Verbindung zur SQLite-Datenbank herstellen
|
||||||
|
conn = sqlite3.connect(db_path)
|
||||||
|
cursor = conn.cursor()
|
||||||
|
|
||||||
|
# CSV-Datei öffnen und Daten einfügen
|
||||||
|
with open(csv_file, 'r') as file:
|
||||||
|
csv_reader = csv.DictReader(file)
|
||||||
|
for row in csv_reader:
|
||||||
|
temperature = float(row['temperature']) # Temperaturwert aus der CSV-Datei
|
||||||
|
timestamp = row['Timestamp'] # Zeitstempel aus der CSV-Datei
|
||||||
|
|
||||||
|
# SQL-Abfrage zum Einfügen des Datensatzes in die Tabelle "istwert"
|
||||||
|
cursor.execute("INSERT INTO istwert (messstelle, temperatur, zeitstempel) VALUES (?, ?, ?)",
|
||||||
|
(1, temperature, timestamp))
|
||||||
|
|
||||||
|
# Änderungen in der Datenbank speichern
|
||||||
|
conn.commit()
|
||||||
|
|
||||||
|
# Datenbankverbindung schließen
|
||||||
|
conn.close()
|
||||||
1301
istwert_tank1.svg
Normal file
1301
istwert_tank1.svg
Normal file
File diff suppressed because it is too large
Load diff
|
After Width: | Height: | Size: 43 KiB |
50
plotact.py
Executable file
50
plotact.py
Executable file
|
|
@ -0,0 +1,50 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
# Pfad zur Datenbank
|
||||||
|
db_path = '/home/divers/datenbank/temperaturen.db'
|
||||||
|
|
||||||
|
# SQLite-Datenbankverbindung herstellen
|
||||||
|
conn = sqlite3.connect(db_path)
|
||||||
|
cursor = conn.cursor()
|
||||||
|
|
||||||
|
# SQL-Abfrage, um die letzten 10 Istwerte von Tank 1 abzurufen
|
||||||
|
cursor.execute("SELECT zeitstempel, temperatur FROM istwert WHERE messstelle = 1 ORDER BY zeitstempel ASC LIMIT 30")
|
||||||
|
rows_tank1_istwert = cursor.fetchall()
|
||||||
|
datetimes_tank1_istwert = [row[0] for row in rows_tank1_istwert]
|
||||||
|
temperaturen_tank1_istwert = [row[1] for row in rows_tank1_istwert]
|
||||||
|
|
||||||
|
# SQL-Abfrage, um die letzten 10 Istwerte von Tank 2 abzurufen
|
||||||
|
cursor.execute("SELECT zeitstempel, temperatur FROM istwert WHERE messstelle = 2 ORDER BY zeitstempel ASC LIMIT 30")
|
||||||
|
rows_tank2_istwert = cursor.fetchall()
|
||||||
|
datetimes_tank2_istwert = [row[0] for row in rows_tank2_istwert]
|
||||||
|
temperaturen_tank2_istwert = [row[1] for row in rows_tank2_istwert]
|
||||||
|
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
# Grafik erstellen
|
||||||
|
plt.figure(figsize=(12, 8))
|
||||||
|
|
||||||
|
# Plot für Istwert (Tank 1)
|
||||||
|
plt.plot(datetimes_tank1_istwert, temperaturen_tank1_istwert, label='Istwert Tank 1', color='blue')
|
||||||
|
|
||||||
|
# Plot für Istwert (Tank 2)
|
||||||
|
plt.plot(datetimes_tank2_istwert, temperaturen_tank2_istwert, label='Istwert Tank 2', color='green')
|
||||||
|
|
||||||
|
plt.xlabel('Zeitstempel')
|
||||||
|
plt.ylabel('Temperatur (°C)')
|
||||||
|
plt.title('Aktuelle Temperaturwerte von Tank 1 und Tank 2')
|
||||||
|
|
||||||
|
# Vertikale Ausrichtung der x-Achsenbeschriftung
|
||||||
|
plt.xticks(rotation='vertical')
|
||||||
|
|
||||||
|
plt.legend()
|
||||||
|
plt.grid(True)
|
||||||
|
|
||||||
|
# Speichern Sie die Grafik als SVG-Datei
|
||||||
|
plt.savefig('AktuellT1T2.svg', format='svg', bbox_inches='tight')
|
||||||
|
|
||||||
|
# Grafik anzeigen (optional)
|
||||||
|
plt.show()
|
||||||
54
plott1.py
Executable file
54
plott1.py
Executable file
|
|
@ -0,0 +1,54 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
# Pfad zur Datenbank
|
||||||
|
db_path = '/home/divers/datenbank/temperaturen.db'
|
||||||
|
|
||||||
|
# SQLite-Datenbankverbindung herstellen
|
||||||
|
conn = sqlite3.connect(db_path)
|
||||||
|
cursor = conn.cursor()
|
||||||
|
|
||||||
|
# SQL-Abfrage, um die Zeitstempel und Temperaturen zu erhalten (Tabelle "istwert" für Tank 1)
|
||||||
|
cursor.execute("SELECT zeitstempel, temperatur FROM istwert WHERE messstelle = 1")
|
||||||
|
rows_istwert = cursor.fetchall()
|
||||||
|
|
||||||
|
# SQL-Abfrage, um die Zeitstempel und Temperaturen zu erhalten (Tabelle "sollwert" für Tank 1)
|
||||||
|
cursor.execute("SELECT zeitstempel, temperatur FROM sollwert WHERE messstelle = 1")
|
||||||
|
rows_sollwert = cursor.fetchall()
|
||||||
|
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
# Die Zeitstempel und Temperaturen in separate Listen aufteilen (Istwert)
|
||||||
|
datetimes_istwert = [row[0] for row in rows_istwert]
|
||||||
|
temperaturen_istwert = [row[1] for row in rows_istwert]
|
||||||
|
|
||||||
|
# Die Zeitstempel und Temperaturen in separate Listen aufteilen (Sollwert)
|
||||||
|
datetimes_sollwert = [row[0] for row in rows_sollwert]
|
||||||
|
temperaturen_sollwert = [row[1] for row in rows_sollwert]
|
||||||
|
|
||||||
|
# Grafik erstellen
|
||||||
|
plt.figure(figsize=(10, 8)) # Vergrößern Sie die Höhe des Grafikbereichs
|
||||||
|
|
||||||
|
# Plot für Istwert (Tank 1)
|
||||||
|
plt.plot(datetimes_istwert, temperaturen_istwert, label='Istwert Tank 1', color='blue')
|
||||||
|
|
||||||
|
# Plot für Sollwert (Tank 1)
|
||||||
|
plt.plot(datetimes_sollwert, temperaturen_sollwert, label='Sollwert Tank 1', color='red', linestyle='--')
|
||||||
|
|
||||||
|
plt.xlabel('Zeitstempel')
|
||||||
|
plt.ylabel('Temperatur (°C)')
|
||||||
|
plt.title('Temperaturverlauf Tank 1 (Istwert und Sollwert)')
|
||||||
|
|
||||||
|
# Vertikale Ausrichtung der x-Achsenbeschriftung
|
||||||
|
plt.xticks(rotation='vertical')
|
||||||
|
|
||||||
|
plt.legend()
|
||||||
|
plt.grid(True)
|
||||||
|
|
||||||
|
# Speichern Sie die Grafik als SVG-Datei
|
||||||
|
plt.savefig('Temperaturverlauf.svg', format='svg', bbox_inches='tight')
|
||||||
|
|
||||||
|
# Grafik anzeigen (optional)
|
||||||
|
plt.show()
|
||||||
52
plott2.py
Executable file
52
plott2.py
Executable file
|
|
@ -0,0 +1,52 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
# Pfad zur Datenbank
|
||||||
|
db_path = '/home/divers/datenbank/temperaturen.db'
|
||||||
|
|
||||||
|
# SQLite-Datenbankverbindung herstellen
|
||||||
|
conn = sqlite3.connect(db_path)
|
||||||
|
cursor = conn.cursor()
|
||||||
|
|
||||||
|
# SQL-Abfrage, um die Zeitstempel und Temperaturen zu erhalten (Tabelle "istwert" für Tank 2)
|
||||||
|
cursor.execute("SELECT zeitstempel, temperatur FROM istwert WHERE messstelle = 2")
|
||||||
|
rows_istwert_tank2 = cursor.fetchall()
|
||||||
|
|
||||||
|
# SQL-Abfrage, um die Zeitstempel und Temperaturen zu erhalten (Tabelle "sollwert" für Tank 2)
|
||||||
|
cursor.execute("SELECT zeitstempel, temperatur FROM sollwert WHERE messstelle = 2")
|
||||||
|
rows_sollwert_tank2 = cursor.fetchall()
|
||||||
|
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
# Die Zeitstempel und Temperaturen in separate Listen aufteilen (Istwert und Sollwert Tank 2)
|
||||||
|
datetimes_istwert_tank2 = [row[0] for row in rows_istwert_tank2]
|
||||||
|
temperaturen_istwert_tank2 = [row[1] for row in rows_istwert_tank2]
|
||||||
|
datetimes_sollwert_tank2 = [row[0] for row in rows_sollwert_tank2]
|
||||||
|
temperaturen_sollwert_tank2 = [row[1] for row in rows_sollwert_tank2]
|
||||||
|
|
||||||
|
# Grafik erstellen
|
||||||
|
plt.figure(figsize=(10, 8)) # Vergrößern Sie die Höhe des Grafikbereichs
|
||||||
|
|
||||||
|
# Plot für Istwert (Tank 2)
|
||||||
|
plt.plot(datetimes_istwert_tank2, temperaturen_istwert_tank2, label='Istwert Tank 2', color='green')
|
||||||
|
|
||||||
|
# Plot für Sollwert (Tank 2)
|
||||||
|
plt.plot(datetimes_sollwert_tank2, temperaturen_sollwert_tank2, label='Sollwert Tank 2', color='orange', linestyle='--')
|
||||||
|
|
||||||
|
plt.xlabel('Zeitstempel')
|
||||||
|
plt.ylabel('Temperatur (°C)')
|
||||||
|
plt.title('Temperaturverlauf Tank 2 (Istwert und Sollwert)')
|
||||||
|
|
||||||
|
# Vertikale Ausrichtung der x-Achsenbeschriftung
|
||||||
|
plt.xticks(rotation='vertical')
|
||||||
|
|
||||||
|
plt.legend()
|
||||||
|
plt.grid(True)
|
||||||
|
|
||||||
|
# Speichern Sie die Grafik als SVG-Datei
|
||||||
|
plt.savefig('Temperaturverlauf_Tank2.svg', format='svg', bbox_inches='tight')
|
||||||
|
|
||||||
|
# Grafik anzeigen (optional)
|
||||||
|
plt.show()
|
||||||
72
plottemp.py
Executable file
72
plottemp.py
Executable file
|
|
@ -0,0 +1,72 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
# Pfad zur Datenbank
|
||||||
|
db_path = '/home/divers/datenbank/temperaturen.db'
|
||||||
|
|
||||||
|
# SQLite-Datenbankverbindung herstellen
|
||||||
|
conn = sqlite3.connect(db_path)
|
||||||
|
cursor = conn.cursor()
|
||||||
|
|
||||||
|
# SQL-Abfrage, um die Zeitstempel und Temperaturen zu erhalten (Tabelle "istwert" für Tank 1)
|
||||||
|
cursor.execute("SELECT zeitstempel, temperatur FROM istwert WHERE messstelle = 1")
|
||||||
|
rows_istwert_tank1 = cursor.fetchall()
|
||||||
|
|
||||||
|
# SQL-Abfrage, um die Zeitstempel und Temperaturen zu erhalten (Tabelle "sollwert" für Tank 1)
|
||||||
|
cursor.execute("SELECT zeitstempel, temperatur FROM sollwert WHERE messstelle = 1")
|
||||||
|
rows_sollwert_tank1 = cursor.fetchall()
|
||||||
|
|
||||||
|
# SQL-Abfrage, um die Zeitstempel und Temperaturen zu erhalten (Tabelle "istwert" für Tank 2)
|
||||||
|
cursor.execute("SELECT zeitstempel, temperatur FROM istwert WHERE messstelle = 2")
|
||||||
|
rows_istwert_tank2 = cursor.fetchall()
|
||||||
|
|
||||||
|
# SQL-Abfrage, um die Zeitstempel und Temperaturen zu erhalten (Tabelle "sollwert" für Tank 2)
|
||||||
|
cursor.execute("SELECT zeitstempel, temperatur FROM sollwert WHERE messstelle = 2")
|
||||||
|
rows_sollwert_tank2 = cursor.fetchall()
|
||||||
|
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
# Die Zeitstempel und Temperaturen in separate Listen aufteilen (Istwert und Sollwert Tank 1)
|
||||||
|
datetimes_istwert_tank1 = [row[0] for row in rows_istwert_tank1]
|
||||||
|
temperaturen_istwert_tank1 = [row[1] for row in rows_istwert_tank1]
|
||||||
|
datetimes_sollwert_tank1 = [row[0] for row in rows_sollwert_tank1]
|
||||||
|
temperaturen_sollwert_tank1 = [row[1] for row in rows_sollwert_tank1]
|
||||||
|
|
||||||
|
# Die Zeitstempel und Temperaturen in separate Listen aufteilen (Istwert und Sollwert Tank 2)
|
||||||
|
datetimes_istwert_tank2 = [row[0] for row in rows_istwert_tank2]
|
||||||
|
temperaturen_istwert_tank2 = [row[1] for row in rows_istwert_tank2]
|
||||||
|
datetimes_sollwert_tank2 = [row[0] for row in rows_sollwert_tank2]
|
||||||
|
temperaturen_sollwert_tank2 = [row[1] for row in rows_sollwert_tank2]
|
||||||
|
|
||||||
|
# Grafik erstellen
|
||||||
|
plt.figure(figsize=(10, 8)) # Vergrößern Sie die Höhe des Grafikbereichs
|
||||||
|
|
||||||
|
# Plot für Istwert (Tank 1)
|
||||||
|
plt.plot(datetimes_istwert_tank1, temperaturen_istwert_tank1, label='Istwert Tank 1', color='blue')
|
||||||
|
|
||||||
|
# Plot für Sollwert (Tank 1)
|
||||||
|
plt.plot(datetimes_sollwert_tank1, temperaturen_sollwert_tank1, label='Sollwert Tank 1', color='red', linestyle='--')
|
||||||
|
|
||||||
|
# Plot für Istwert (Tank 2)
|
||||||
|
plt.plot(datetimes_istwert_tank2, temperaturen_istwert_tank2, label='Istwert Tank 2', color='green')
|
||||||
|
|
||||||
|
# Plot für Sollwert (Tank 2)
|
||||||
|
plt.plot(datetimes_sollwert_tank2, temperaturen_sollwert_tank2, label='Sollwert Tank 2', color='orange', linestyle='--')
|
||||||
|
|
||||||
|
plt.xlabel('Zeitstempel')
|
||||||
|
plt.ylabel('Temperatur (°C)')
|
||||||
|
plt.title('Temperaturverlauf Tank 1 und Tank 2 (Istwert und Sollwert)')
|
||||||
|
|
||||||
|
# Vertikale Ausrichtung der x-Achsenbeschriftung
|
||||||
|
plt.xticks(rotation='vertical')
|
||||||
|
|
||||||
|
plt.legend()
|
||||||
|
plt.grid(True)
|
||||||
|
|
||||||
|
# Speichern Sie die Grafik als SVG-Datei
|
||||||
|
plt.savefig('Temperaturverlauf.svg', format='svg', bbox_inches='tight')
|
||||||
|
|
||||||
|
# Grafik anzeigen (optional)
|
||||||
|
plt.show()
|
||||||
22
show.py
Executable file
22
show.py
Executable file
|
|
@ -0,0 +1,22 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
# SQLite-Datenbankverbindung herstellen
|
||||||
|
conn = sqlite3.connect('temperaturen.db')
|
||||||
|
cursor = conn.cursor()
|
||||||
|
|
||||||
|
# Funktion zum Auslesen und Ausgeben der Werte
|
||||||
|
def read_and_print_table(table_name):
|
||||||
|
print(f"Auslesen der Tabelle '{table_name}':")
|
||||||
|
cursor.execute(f"SELECT * FROM {table_name}")
|
||||||
|
rows = cursor.fetchall()
|
||||||
|
for row in rows:
|
||||||
|
print(row)
|
||||||
|
|
||||||
|
# Tabellen "istwert" und "sollwert" auslesen und ausgeben
|
||||||
|
read_and_print_table("istwert")
|
||||||
|
read_and_print_table("sollwert")
|
||||||
|
|
||||||
|
# Die Datenbankverbindung schließen
|
||||||
|
conn.close()
|
||||||
24
temp.py
Executable file
24
temp.py
Executable file
|
|
@ -0,0 +1,24 @@
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
# Pfad zur Datenbank
|
||||||
|
db_path = '/home/divers/datenbank/temperaturen.db'
|
||||||
|
|
||||||
|
# SQLite-Datenbankverbindung herstellen
|
||||||
|
conn = sqlite3.connect(db_path)
|
||||||
|
cursor = conn.cursor()
|
||||||
|
|
||||||
|
# SQL-Update-Statement zum Entfernen von "°C" aus der Temperaturspalte
|
||||||
|
update_query = """
|
||||||
|
UPDATE sollwert
|
||||||
|
SET temperatur = REPLACE(temperatur, '°C', '')
|
||||||
|
WHERE temperatur LIKE '%°C'
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Führen Sie das Update-Statement aus
|
||||||
|
cursor.execute(update_query)
|
||||||
|
conn.commit()
|
||||||
|
|
||||||
|
# Die Datenbankverbindung schließen
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
print("°C-Symbole in der Temperaturspalte entfernt.")
|
||||||
BIN
temperaturen.db
Normal file
BIN
temperaturen.db
Normal file
Binary file not shown.
1564
temperaturverlauf.svg
Normal file
1564
temperaturverlauf.svg
Normal file
File diff suppressed because it is too large
Load diff
|
After Width: | Height: | Size: 56 KiB |
81
trend.py
Executable file
81
trend.py
Executable file
|
|
@ -0,0 +1,81 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import cgi
|
||||||
|
import sqlite3
|
||||||
|
import mpld3
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
import csv
|
||||||
|
from io import StringIO
|
||||||
|
|
||||||
|
# Parse the form data
|
||||||
|
form = cgi.FieldStorage()
|
||||||
|
|
||||||
|
# Get the current date and time
|
||||||
|
current_datetime = datetime.now()
|
||||||
|
|
||||||
|
# Calculate one day before and after the current date at 22:22
|
||||||
|
start_datetime_default = current_datetime - timedelta(days=1, hours=current_datetime.hour, minutes=current_datetime.minute, seconds=current_datetime.second)
|
||||||
|
start_datetime_default = start_datetime_default.replace(hour=22, minute=22, second=0)
|
||||||
|
|
||||||
|
end_datetime_default = current_datetime + timedelta(days=1, hours=1, minutes=38) # Assuming you want 24 hours + 1 hour and 38 minutes
|
||||||
|
end_datetime_default = end_datetime_default.replace(hour=22, minute=22, second=0)
|
||||||
|
|
||||||
|
# Get the selected start and end dates with times from the form, or use the defaults
|
||||||
|
start_datetime = form.getvalue("start_datetime", start_datetime_default.strftime("%Y-%m-%dT%H:%M"))
|
||||||
|
end_datetime = form.getvalue("end_datetime", end_datetime_default.strftime("%Y-%m-%dT%H:%M"))
|
||||||
|
|
||||||
|
# Establish a connection to the database (please adjust the database path)
|
||||||
|
conn = sqlite3.connect('/home/divers/datenbank/temperaturen.db')
|
||||||
|
cursor = conn.cursor()
|
||||||
|
|
||||||
|
# Create a function to generate the temperature plot and CSV data
|
||||||
|
def generate_temperature_plot_and_csv(start_datetime, end_datetime):
|
||||||
|
cursor.execute("SELECT zeitstempel, temperatur FROM istwert WHERE messstelle = 1 AND zeitstempel BETWEEN ? AND ?", (start_datetime, end_datetime))
|
||||||
|
rows = cursor.fetchall()
|
||||||
|
|
||||||
|
timestamps = [datetime.strptime(row[0], "%Y-%m-%d %H:%M:%S").strftime("%Y-%m-%d %H:%M:%S") for row in rows]
|
||||||
|
temperaturen = [row[1] for row in rows]
|
||||||
|
|
||||||
|
# Generate CSV data
|
||||||
|
csv_data = "Zeitstempel,Temperatur (°C)\n"
|
||||||
|
csv_data += "\n".join([f"{timestamps[i]},{temperaturen[i]}" for i in range(len(timestamps))])
|
||||||
|
|
||||||
|
plt.figure(figsize=(10, 5))
|
||||||
|
plt.plot(timestamps, temperaturen, marker='o', linestyle='-', color='b')
|
||||||
|
plt.xlabel('Zeitstempel')
|
||||||
|
plt.ylabel('Temperatur (°C)')
|
||||||
|
plt.title('Temperaturverlauf Tank 1')
|
||||||
|
plt.grid(True)
|
||||||
|
|
||||||
|
plot_html = mpld3.fig_to_html(plt.gcf())
|
||||||
|
plt.close()
|
||||||
|
|
||||||
|
return plot_html, csv_data
|
||||||
|
|
||||||
|
# Generate the temperature plot and CSV data
|
||||||
|
temperature_plot, csv_data = generate_temperature_plot_and_csv(start_datetime, end_datetime)
|
||||||
|
|
||||||
|
# Generate the HTML page with the temperature plot and CSV data
|
||||||
|
print("Content-type: text/html\n")
|
||||||
|
print("<html>")
|
||||||
|
print("<head>")
|
||||||
|
print("<title>Temperaturverlauf</title>")
|
||||||
|
print("</head>")
|
||||||
|
print("<body>")
|
||||||
|
print("<h1>Temperaturverlauf Tank 1</h1>")
|
||||||
|
print("<form method='POST'>")
|
||||||
|
print("Startdatum und Uhrzeit: <input type='datetime-local' name='start_datetime' value='{}'><br>".format(start_datetime))
|
||||||
|
print("Enddatum und Uhrzeit: <input type='datetime-local' name='end_datetime' value='{}'><br>".format(end_datetime))
|
||||||
|
print("<input type='submit' value='Anzeigen'>")
|
||||||
|
print("</form>")
|
||||||
|
print(temperature_plot)
|
||||||
|
print("<h2>Dargestellte Werte als CSV</h2>")
|
||||||
|
print("<pre>")
|
||||||
|
print(csv_data)
|
||||||
|
print("</pre>")
|
||||||
|
print("</body>")
|
||||||
|
print("</html>")
|
||||||
|
|
||||||
|
# Close the database connection
|
||||||
|
conn.close()
|
||||||
Loading…
Add table
Add a link
Reference in a new issue