import json import os import serverrequests as serverrequests import JsonHandling import energymeter import energyproducer import energyuser import datetime class JsonHandling: @staticmethod def check_config_has_changed(json_data): data = json.loads(json_data) return data["metadata"]["config_has_changed"] == "1" class DataCollector: def __init__(self): self.data = {} self.now = datetime.datetime.now() def collect_and_store_data(self, producer_values, meter_values, user_values, last_data=None): # Überprüfe, ob die Minute gleich geblieben ist, um Daten zu sammeln if self.now.minute == datetime.datetime.now().minute: return self.now = datetime.datetime.now() # Aktuellen Zeitstempel holen timestamp = self.now.strftime("%Y-%m-%d %H:%M") self.data[timestamp] = { "producer_values": {}, "meter_values": {}, "user_values": {} } # Alle Werte in ein einzelnes Dictionary zusammenführen all_values = {"producer_values": producer_values, "meter_values": meter_values, "user_values": user_values} # Alle Werte aktualisieren for key, values in all_values.items(): self.update_values(self.data[timestamp][key], values) # Filtere Werte basierend auf dem letzten mitgegebenen Zeitstempel if last_data: # Konvertiere den letzten Zeitstempel in ein datetime-Objekt last_data = datetime.datetime.strptime(last_data, "%Y-%m-%d %H:%M") # Entferne alle Einträge in self.data, die vor dem letzten Zeitstempel liegen self.data = {ts: values for ts, values in self.data.items() if datetime.datetime.strptime(ts, "%Y-%m-%d %H:%M") > last_data} # Begrenze die Daten auf die letzten 24 Stunden (1440 Minuten) timestamps_sorted = sorted(self.data.keys(), reverse=True) if len(timestamps_sorted) > 1440: timestamps_to_remove = timestamps_sorted[1440:] for timestamp_to_remove in timestamps_to_remove: del self.data[timestamp_to_remove] # Daten als JSON speichern with open("data.json", "w") as file: json.dump(self.data, file) def update_values(self, current_values, new_values): for key, value in new_values.items(): if key not in current_values: current_values[key] = value else: # Überprüfen, ob der Wert bereits eine Liste ist if not isinstance(current_values[key], list): # Wenn nicht, konvertieren Sie ihn in eine Liste current_values[key] = [current_values[key]] # Füge den neuen Wert der Liste hinzu current_values[key].append(value)