Frontend weiterarbeit, Client Server datenaustausch und sync, fertiggestellt.

This commit is contained in:
2024-04-19 16:48:23 +02:00
parent 04ad35a91f
commit cd2f302eb1
11 changed files with 228 additions and 112 deletions
+39 -45
View File
@@ -15,65 +15,59 @@ class JsonHandling:
return data["metadata"]["config_has_changed"] == "1"
class DataCollector:
def __init__(self):
self.data = {"timestamps": []}
self.data = {}
self.now = datetime.datetime.now()
def collect_and_store_data(self, producer_values, meter_values, user_values):
print("a")
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:
print("b")
return
self.now = datetime.datetime.now()
print("cccccccc")
# Aktuellen Zeitstempel holen
timestamp = self.now.strftime("%Y-%m-%d %H:%M")
self.data["timestamps"].append(timestamp)
# Werte für Produzenten hinzufügen
for producer_id, values in producer_values.items():
if producer_id not in self.data:
self.data[producer_id] = {}
self.data[producer_id]["values"] = self.update_values(self.data[producer_id].get("values", {}), values)
# Werte für Meter hinzufügen
for meter_id, values in meter_values.items():
if meter_id not in self.data:
self.data[meter_id] = {}
self.data[meter_id]["values"] = self.update_values(self.data[meter_id].get("values", {}), values)
# Werte für Benutzer hinzufügen
for user_id, values in user_values.items():
if user_id not in self.data:
self.data[user_id] = {}
self.data[user_id]["values"] = self.update_values(self.data[user_id].get("values", {}), values)
# Begrenzung der Daten auf die letzten 24 Stunden (1440 Minuten)
if len(self.data["timestamps"]) > 1440:
self.data["timestamps"].pop(0)
for key in self.data.keys():
if key != "timestamps":
for value_key in self.data[key]["values"]:
self.data[key]["values"][value_key].pop(0)
self.data[timestamp] = {
"producer_values": {},
"meter_values": {},
"user_values": {}
}
if os.path.exists("data.json"):
with open("data.json", "r") as file:
existing_data = json.load(file)
existing_data.update(self.data)
self.data = existing_data
# 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] = []
current_values[key].append(value)
return 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)