summaryrefslogtreecommitdiff
path: root/plot.py
diff options
context:
space:
mode:
authorRobert Scheibe <rob.scheibe@gmail.com>2024-12-22 15:52:40 +0100
committerRobert Scheibe <rob.scheibe@gmail.com>2024-12-22 15:52:40 +0100
commitbd0a388682dae9da9146a9d37ebfd4d2c2527b6e (patch)
tree6a555b1347dbfab3a956a4b6ede508c1559628b5 /plot.py
parent44a4a65f8c7244244d9b9102193d682ba89d3048 (diff)
added history.html and cpu temperature plotting
Diffstat (limited to 'plot.py')
-rwxr-xr-xplot.py65
1 files changed, 59 insertions, 6 deletions
diff --git a/plot.py b/plot.py
index 55b6ef3..b58cf7a 100755
--- a/plot.py
+++ b/plot.py
@@ -3,11 +3,63 @@ import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
import argparse
+from datetime import datetime, timedelta
+import matplotlib.dates as mdates
+
+import sqlite3
+
+def read_data_from_db(db_name):
+ """
+ Liest alle gespeicherten Temperatur- und Zeitstempeldaten aus der SQLite-Datenbank.
+
+ :param db_name: Name der SQLite-Datenbankdatei
+ :return: Liste von Tupeln mit (timestamp, temperature)
+ """
+ try:
+ # Verbindung zur Datenbank herstellen
+ conn = sqlite3.connect(db_name)
+ cursor = conn.cursor()
+
+ # Abfrage zum Abrufen aller Daten aus der Tabelle
+ cursor.execute("SELECT timestamp, temperature FROM cpu_temperature")
+ data = cursor.fetchall() # Alle Ergebnisse abrufen
+
+ conn.close() # Verbindung schließen
+ return data
+ except sqlite3.Error as e:
+ print(f"Fehler beim Lesen aus der Datenbank: {e}")
+ return []
+
+
# Funktion zum Erstellen des Temperaturdiagramms mit Achsenbeschriftungen und Transparenz
def create_temperature_plot_with_labels(output_filename):
- times = np.arange(0, 24, 0.5) # Zeitpunkte (alle halbe Stunde)
- temperatures = 20 + 10 * np.sin(times / 24 * 2 * np.pi) # Beispielhafte Sinuskurve für Temperaturen
+ db_name = "/var/www/html/cpu_temperature.db"
+ records = read_data_from_db(db_name)
+
+ if records:
+ for timestamp, temperature in records:
+ print(f"Zeit: {timestamp}, Temperatur: {temperature}°C")
+ else:
+ print("Keine Daten gefunden.")
+
+ # Aktuelle Zeit und Filterzeitraum (letzte 24 Stunden)
+ now = datetime.now()
+ last_24_hours = now - timedelta(hours=24)
+
+ # Filtern der Datensätze nach den letzten 24 Stunden
+ filtered_records = [
+ (datetime.strptime(timestamp, "%Y-%m-%d %H:%M:%S"), temperature)
+ for timestamp, temperature in records
+ if datetime.strptime(timestamp, "%Y-%m-%d %H:%M:%S") >= last_24_hours
+ ]
+ if not filtered_records:
+ print("Keine Daten in den letzten 24 Stunden gefunden.")
+ return
+
+ # Extrahieren von Zeitstempeln und Temperaturen aus den gefilterten Datensätzen
+ times = [timestamp for timestamp, _ in filtered_records]
+ temperatures = [temperature for _, temperature in filtered_records]
# Grenzen für die y-Achse basierend auf den Temperaturdaten
min_temp = np.floor(min(temperatures) / 5) * 5 # Abrunden auf das nächste Vielfache von 5
@@ -15,13 +67,14 @@ def create_temperature_plot_with_labels(output_filename):
# Temperaturdiagramm zeichnen
plt.figure(figsize=(8, 2), dpi=100) # Größe des Diagramms: 800x100 Pixel
- plt.plot(times, temperatures, color='yellow', linewidth=5, label='Temperatur')
+ plt.plot(times, temperatures, color='yellow', linewidth=2, label='Temperatur')
plt.ylim(min_temp, max_temp) # Y-Achse auf den Bereich der Daten begrenzen
plt.xlabel('Uhrzeit', color='white') # X-Achsenbeschriftung
- plt.ylabel('Temperatur in °C', color='white') # Y-Achsenbeschriftung
- plt.xticks(np.arange(0, 25, 4), color='white') # X-Achse in 4-Stunden-Schritten beschriften
+ plt.ylabel('CPU Temp in °C', color='white') # Y-Achsenbeschriftung
+ plt.xticks(color='white') # X-Achse beschriften (automatisch), gedreht für bessere Lesbarkeit
plt.yticks(np.arange(min_temp, max_temp + 1, 5), color='white') # Y-Achse in Schritten von 5 beschriften
- plt.grid(color='gray', linestyle='--', linewidth=0.5, alpha=0.7)
+ plt.grid(color='white', linestyle='--', linewidth=0.5, alpha=0.7)
+ plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))
plt.tight_layout()
# Diagramm mit transparentem Hintergrund speichern