diff options
Diffstat (limited to 'plot.py')
-rwxr-xr-x | plot.py | 65 |
1 files changed, 59 insertions, 6 deletions
@@ -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 |