Frontend weiterarbeit, Client Server datenaustausch und sync, fertiggestellt.
This commit is contained in:
@@ -15,65 +15,59 @@ class JsonHandling:
|
|||||||
return data["metadata"]["config_has_changed"] == "1"
|
return data["metadata"]["config_has_changed"] == "1"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class DataCollector:
|
class DataCollector:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.data = {"timestamps": []}
|
self.data = {}
|
||||||
self.now = datetime.datetime.now()
|
self.now = datetime.datetime.now()
|
||||||
|
|
||||||
|
def collect_and_store_data(self, producer_values, meter_values, user_values, last_data=None):
|
||||||
def collect_and_store_data(self, producer_values, meter_values, user_values):
|
# Überprüfe, ob die Minute gleich geblieben ist, um Daten zu sammeln
|
||||||
|
|
||||||
print("a")
|
|
||||||
if self.now.minute == datetime.datetime.now().minute:
|
if self.now.minute == datetime.datetime.now().minute:
|
||||||
print("b")
|
|
||||||
|
|
||||||
return
|
return
|
||||||
self.now = datetime.datetime.now()
|
self.now = datetime.datetime.now()
|
||||||
print("cccccccc")
|
|
||||||
|
|
||||||
|
# Aktuellen Zeitstempel holen
|
||||||
timestamp = self.now.strftime("%Y-%m-%d %H:%M")
|
timestamp = self.now.strftime("%Y-%m-%d %H:%M")
|
||||||
self.data["timestamps"].append(timestamp)
|
self.data[timestamp] = {
|
||||||
# Werte für Produzenten hinzufügen
|
"producer_values": {},
|
||||||
for producer_id, values in producer_values.items():
|
"meter_values": {},
|
||||||
if producer_id not in self.data:
|
"user_values": {}
|
||||||
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)
|
|
||||||
|
|
||||||
|
|
||||||
if os.path.exists("data.json"):
|
# Alle Werte in ein einzelnes Dictionary zusammenführen
|
||||||
with open("data.json", "r") as file:
|
all_values = {"producer_values": producer_values, "meter_values": meter_values, "user_values": user_values}
|
||||||
existing_data = json.load(file)
|
|
||||||
existing_data.update(self.data)
|
# Alle Werte aktualisieren
|
||||||
self.data = existing_data
|
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
|
# Daten als JSON speichern
|
||||||
with open("data.json", "w") as file:
|
with open("data.json", "w") as file:
|
||||||
json.dump(self.data, file)
|
json.dump(self.data, file)
|
||||||
|
|
||||||
|
|
||||||
def update_values(self, current_values, new_values):
|
def update_values(self, current_values, new_values):
|
||||||
for key, value in new_values.items():
|
for key, value in new_values.items():
|
||||||
if key not in current_values:
|
if key not in current_values:
|
||||||
current_values[key] = []
|
current_values[key] = value
|
||||||
current_values[key].append(value)
|
else:
|
||||||
return current_values
|
# Ü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)
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
|||||||
{"timestamps": ["2024-04-18 17:18", "2024-04-18 17:19", "2024-04-18 17:20", "2024-04-18 17:21", "2024-04-18 17:22", "2024-04-18 17:23", "2024-04-18 17:24"], "Producer_sum": {"values": {"success": [true, true, true, true, true, true, true], "day_energy": [35718, 35866, 35991, 36109, 36236, 36329, 36438], "pac": [7995, 8083, 7758, 7083, 6439, 6084, 5755], "total_energy": [59811200, 59811300, 59811400, 59811604, 59811604, 59811804, 59811902], "year_energy": [8725390, 8725539, 8725663, 8725781, 8725906, 8725999, 8726110]}}, "Fronius_15kW": {"values": {"success": [true, true, true, true, true, true, true], "day_energy": [17347, 17409, 17461, 17512, 17564, 17603, 17649], "pac": [3359, 3388, 3251, 2959, 2688, 2538, 2393], "total_energy": [31330000, 31330100, 31330100, 31330202, 31330202, 31330302, 31330302], "year_energy": [3532817, 3532880, 3532932, 3532982, 3533033, 3533072, 3533119]}}, "Fronius_20kW": {"values": {"success": [true, true, true, true, true, true, true], "day_energy": [18371, 18457, 18530, 18597, 18672, 18726, 18789], "pac": [4636, 4695, 4507, 4124, 3751, 3546, 3362], "total_energy": [28481200, 28481200, 28481300, 28481402, 28481402, 28481502, 28481600], "year_energy": [5192573, 5192659, 5192731, 5192799, 5192873, 5192927, 5192991]}}, "Meter_Sum": {"values": {"success": [true, true, true, true, true, true, true], "Current_AC_Phase_1": [5, 4.45, 6.4, 7.25, 11.2, 6.3, 9], "Current_AC_Phase_2": [5.75, 5.45, 6.5, 7.5, 7.5, 2.714, 2.175], "Current_AC_Phase_3": [-4.55, -4.6, -4.3, -3.9, 7.55, 4.4, 4.7], "PowerReal_P_Sum": [443, 200.8, 1714.5, 1879.3, 5569.2, 2260.1, 3062.9]}}, "Meter_Fronius": {"values": {"success": [true, true, true, true, true, true, true], "Current_AC_Phase_1": [5, 4.45, 6.4, 7.25, 11.2, 6.3, 9], "Current_AC_Phase_2": [5.75, 5.45, 6.5, 7.5, 7.5, 2.714, 2.175], "Current_AC_Phase_3": [-4.55, -4.6, -4.3, -3.9, 7.55, 4.4, 4.7], "PowerReal_P_Sum": [443, 200.8, 1714.5, 1879.3, 5569.2, 2260.1, 3062.9]}}, "User_data": {"values": {"Current_Power": [0, 0, 0, 0, 0, 0, 0], "Used_Energy": [0, 0, 0, 0, 0, 0, 0], "Current_Prio": [0, 0, 0, 0, 0, 0, 0], "Current_deltaPower": [0, 0, 0, 0, 0, 0, 0], "measured_Temp": [0, 0, 0, 0, 0, 0, 0]}}, "Umod1": {"values": {"Current_Power": [0, 0, 0, 0, 0, 0, 0], "Used_Energy": [6, 6, 6, 6, 6, 6, 6], "Current_Prio": [1, 1, 1, 1, 1, 1, 1], "Current_deltaPower": [0, 0, 0, 0, 0, 0, 0], "measured_Temp": [0, 0, 0, 0, 0, 0, 0]}}, "Umod3": {"values": {"Current_Power": [0, 0, 0, 0, 0, 0, 0], "Used_Energy": [6, 6, 6, 6, 6, 6, 6], "Current_Prio": [3, 3, 3, 3, 3, 3, 3], "Current_deltaPower": [0, 0, 0, 0, 0, 0, 0], "measured_Temp": [0, 0, 0, 0, 0, 0, 0]}}, "Umod2.0": {"values": {"Current_Power": [0, 0, 0, 0, 0, 0, 0], "Used_Energy": [6, 6, 6, 6, 6, 6, 6], "Current_Prio": [2, 2, 2, 2, 2, 2, 2], "Current_deltaPower": [0, 0, 0, 0, 0, 0, 0], "measured_Temp": [0, 0, 0, 0, 0, 0, 0]}}, "Umod2.1": {"values": {"Current_Power": [0, 0, 0, 0, 0, 0, 0], "Used_Energy": [6, 6, 6, 6, 6, 6, 6], "Current_Prio": [2, 2, 2, 2, 2, 2, 2], "Current_deltaPower": [0, 0, 0, 0, 0, 0, 0], "measured_Temp": [0, 0, 0, 0, 0, 0, 0]}}, "Umod2.2": {"values": {"Current_Power": [0, 0, 0, 0, 0, 0, 0], "Used_Energy": [6, 6, 6, 6, 6, 6, 6], "Current_Prio": [2, 2, 2, 2, 2, 2, 2], "Current_deltaPower": [0, 0, 0, 0, 0, 0, 0], "measured_Temp": [0, 0, 0, 0, 0, 0, 0]}}, "Umod2.3": {"values": {"Current_Power": [0, 0, 0, 0, 0, 0, 0], "Used_Energy": [6, 6, 6, 6, 6, 6, 6], "Current_Prio": [2, 2, 2, 2, 2, 2, 2], "Current_deltaPower": [0, 0, 0, 0, 0, 0, 0], "measured_Temp": [0, 0, 0, 0, 0, 0, 0]}}, "Usta2.0": {"values": {"Current_Power": [0, 0, 0, 0, 0, 0, 0], "Used_Energy": [4, 4, 4, 4, 4, 4, 4], "Current_Prio": [2, 2, 2, 2, 2, 2, 2], "Current_deltaPower": [0, 0, 0, 0, 0, 0, 0], "measured_Temp": [0, 0, 0, 0, 0, 0, 0]}}, "shelly_Boiler": {"values": {"Current_Power": [0, 0, 0, 0, 0, 0, 0], "Used_Energy": [0, 0, 0, 0, 0, 0, 0], "Current_Prio": [2, 2, 2, 2, 2, 2, 2], "Current_deltaPower": [0, 0, 0, 0, 0, 0, 0], "measured_Temp": [20.56, 20.56, 20.56, 20.56, 20.56, 20.56, 20.56]}}}
|
{"2024-04-19 16:47": {"producer_values": {"Producer_sum": {"success": true, "day_energy": 94190, "pac": 7661, "total_energy": 59918400, "year_energy": 8832601}, "Fronius_15kW": {"success": true, "day_energy": 38010, "pac": 3060, "total_energy": 31373402, "year_energy": 3576175}, "Fronius_20kW": {"success": true, "day_energy": 56180, "pac": 4601, "total_energy": 28544998, "year_energy": 5256426}}, "meter_values": {"Meter_Sum": {"success": true, "Current_AC_Phase_1": 17.65, "Current_AC_Phase_2": 25.9, "Current_AC_Phase_3": 22.3, "PowerReal_P_Sum": 15015.1}, "Meter_Fronius": {"success": true, "Current_AC_Phase_1": 17.65, "Current_AC_Phase_2": 25.9, "Current_AC_Phase_3": 22.3, "PowerReal_P_Sum": 15015.1}}, "user_values": {"User_data": {"Current_Power": 0, "Used_Energy": 0, "Current_Prio": 0, "Current_deltaPower": 0, "measured_Temp": 0}, "Umod1": {"Current_Power": 0, "Used_Energy": 6, "Current_Prio": 1, "Current_deltaPower": 0, "measured_Temp": 0}, "Umod3": {"Current_Power": 0, "Used_Energy": 6, "Current_Prio": 3, "Current_deltaPower": 0, "measured_Temp": 0}, "Umod2.0": {"Current_Power": 0, "Used_Energy": 6, "Current_Prio": 2, "Current_deltaPower": 0, "measured_Temp": 0}, "Umod2.1": {"Current_Power": 0, "Used_Energy": 6, "Current_Prio": 2, "Current_deltaPower": 0, "measured_Temp": 0}, "Umod2.2": {"Current_Power": 0, "Used_Energy": 6, "Current_Prio": 2, "Current_deltaPower": 0, "measured_Temp": 0}, "Umod2.3": {"Current_Power": 0, "Used_Energy": 6, "Current_Prio": 2, "Current_deltaPower": 0, "measured_Temp": 0}, "Usta2.0": {"Current_Power": 0, "Used_Energy": 4, "Current_Prio": 2, "Current_deltaPower": 0, "measured_Temp": 0}, "shelly_Boiler": {"Current_Power": 0, "Used_Energy": 0, "Current_Prio": 2, "Current_deltaPower": 0, "measured_Temp": 21.69}}}}
|
||||||
@@ -31,7 +31,16 @@ def calcSomeStuff():
|
|||||||
|
|
||||||
while True:
|
while True:
|
||||||
# Neue Konfig holen
|
# Neue Konfig holen
|
||||||
config = json.dumps(serverrequests.get_config(ID))
|
|
||||||
|
try:
|
||||||
|
config = json.dumps(serverrequests.get_config(ID))
|
||||||
|
# Versuche, das JSON zu laden
|
||||||
|
except:
|
||||||
|
# Falls ein Fehler auftritt oder kein JSON zurückkommt, lade config.json
|
||||||
|
with open('config.json', 'r') as file:
|
||||||
|
config = json.dumps(json.load(file))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if JsonHandling.JsonHandling.check_config_has_changed(config):
|
if JsonHandling.JsonHandling.check_config_has_changed(config):
|
||||||
producers = energyproducer.EnergyProducer.create_producerlist_from_json(config)
|
producers = energyproducer.EnergyProducer.create_producerlist_from_json(config)
|
||||||
@@ -48,10 +57,17 @@ while True:
|
|||||||
main.EnergyUserFactory.distribute_energy(users, -1*(meter_values["Meter_Sum"]["PowerReal_P_Sum"]))
|
main.EnergyUserFactory.distribute_energy(users, -1*(meter_values["Meter_Sum"]["PowerReal_P_Sum"]))
|
||||||
|
|
||||||
user_values = energyuser.EnergyUser.get_all_current_values(users)
|
user_values = energyuser.EnergyUser.get_all_current_values(users)
|
||||||
|
try:
|
||||||
Collector.collect_and_store_data(producer_values, meter_values, user_values)
|
a = json.loads(config)['last_timestamp']
|
||||||
|
except:
|
||||||
|
a = "1970-01-01 00:00"
|
||||||
|
Collector.collect_and_store_data(producer_values, meter_values, user_values, a)
|
||||||
data = Collector.data
|
data = Collector.data
|
||||||
serverrequests.set_data(ID, data)
|
|
||||||
|
try:
|
||||||
|
if next(iter(data)) != a:
|
||||||
|
serverrequests.set_data(ID, data)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
File diff suppressed because one or more lines are too long
90
server/hey.html
Normal file
90
server/hey.html
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Highcharts Beispiel</title>
|
||||||
|
<!-- Highcharts CDN -->
|
||||||
|
<script src="https://code.highcharts.com/highcharts.js"></script>
|
||||||
|
<script src="https://code.highcharts.com/modules/exporting.js"></script>
|
||||||
|
<script src="https://code.highcharts.com/modules/export-data.js"></script>
|
||||||
|
<script src="https://code.highcharts.com/modules/accessibility.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="container" style="min-width: 310px; height: 400px; margin: 0 auto"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.addEventListener('DOMContentLoaded', function () {
|
||||||
|
// Laden der JSON-Daten
|
||||||
|
fetch('Data/BasToken.json')
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(data => {
|
||||||
|
const seriesData = [];
|
||||||
|
|
||||||
|
// Iteration über die Daten, um die Serien zu erstellen
|
||||||
|
Object.keys(data).forEach(date => {
|
||||||
|
const producerValues = data[date].producer_values;
|
||||||
|
const meterValues = data[date].meter_values;
|
||||||
|
const userValues = data[date].user_values;
|
||||||
|
|
||||||
|
seriesData.push({
|
||||||
|
name: date,
|
||||||
|
data: [
|
||||||
|
producerValues.day_energy,
|
||||||
|
producerValues.pac,
|
||||||
|
producerValues.total_energy,
|
||||||
|
producerValues.year_energy,
|
||||||
|
meterValues.Current_AC_Phase_1,
|
||||||
|
meterValues.Current_AC_Phase_2,
|
||||||
|
meterValues.Current_AC_Phase_3,
|
||||||
|
meterValues.PowerReal_P_Sum,
|
||||||
|
userValues.Current_Power,
|
||||||
|
userValues.Used_Energy,
|
||||||
|
userValues.Current_Prio,
|
||||||
|
userValues.Current_deltaPower,
|
||||||
|
userValues.measured_Temp
|
||||||
|
]
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Erstellen des Diagramms
|
||||||
|
Highcharts.chart('container', {
|
||||||
|
chart: {
|
||||||
|
type: 'line'
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
text: 'Daten'
|
||||||
|
},
|
||||||
|
xAxis: {
|
||||||
|
categories: [
|
||||||
|
'producer_values.day_energy',
|
||||||
|
'producer_values.pac',
|
||||||
|
'producer_values.total_energy',
|
||||||
|
'producer_values.year_energy',
|
||||||
|
'meter_values.Current_AC_Phase_1',
|
||||||
|
'meter_values.Current_AC_Phase_2',
|
||||||
|
'meter_values.Current_AC_Phase_3',
|
||||||
|
'meter_values.PowerReal_P_Sum',
|
||||||
|
'user_values.Current_Power',
|
||||||
|
'user_values.Used_Energy',
|
||||||
|
'user_values.Current_Prio',
|
||||||
|
'user_values.Current_deltaPower',
|
||||||
|
'user_values.measured_Temp'
|
||||||
|
],
|
||||||
|
title: {
|
||||||
|
text: 'Attribute'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
yAxis: {
|
||||||
|
title: {
|
||||||
|
text: 'Wert'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: seriesData
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(error => console.error('Fehler beim Laden der Daten:', error));
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -1,42 +1,60 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
"""
|
|
||||||
Created on Thu Apr 18 17:13:06 2024
|
|
||||||
|
|
||||||
@author: dh
|
|
||||||
"""
|
|
||||||
def merge_json(old_json, new_json):
|
def merge_json(old_json, new_json):
|
||||||
if not isinstance(old_json, dict) or not isinstance(new_json, dict):
|
# Überprüfen, ob new_json keine Timestamps enthält
|
||||||
|
if "timestamps" not in new_json:
|
||||||
return old_json
|
return old_json
|
||||||
|
|
||||||
for key, value in new_json.items():
|
# Überprüfen, ob old_json keine Timestamps enthält
|
||||||
if key not in old_json:
|
if "timestamps" not in old_json:
|
||||||
old_json[key] = value
|
return new_json
|
||||||
elif isinstance(value, list):
|
|
||||||
if key not in old_json:
|
# Schritt 1: Neue Timestamps prüfen und ggf. hinzufügen
|
||||||
old_json[key] = []
|
for timestamp in new_json["timestamps"]:
|
||||||
if key == "timestamps":
|
if timestamp not in old_json["timestamps"]:
|
||||||
for item in value:
|
old_json["timestamps"].append(timestamp)
|
||||||
if item not in old_json[key]:
|
|
||||||
old_json[key].append(item)
|
# Schritt 2: Neue Werte an den richtigen Positionen einfügen
|
||||||
else:
|
for key, values in new_json["data"].items():
|
||||||
old_json[key].extend(value)
|
if key in old_json["data"]:
|
||||||
elif isinstance(value, dict):
|
for i, timestamp in enumerate(new_json["timestamps"]):
|
||||||
old_json[key] = merge_json(old_json.get(key, {}), value)
|
index = old_json["timestamps"].index(timestamp)
|
||||||
|
if i < len(values):
|
||||||
|
if len(old_json["data"][key]) > index:
|
||||||
|
old_json["data"][key][index] = values[i]
|
||||||
|
else:
|
||||||
|
old_json["data"][key].append(values[i])
|
||||||
else:
|
else:
|
||||||
old_json[key] = value
|
old_json["data"][key] = [None] * len(old_json["timestamps"])
|
||||||
|
for i, timestamp in enumerate(new_json["timestamps"]):
|
||||||
|
index = old_json["timestamps"].index(timestamp)
|
||||||
|
if i < len(values):
|
||||||
|
if len(old_json["data"][key]) > index:
|
||||||
|
old_json["data"][key][index] = values[i]
|
||||||
|
else:
|
||||||
|
old_json["data"][key].append(values[i])
|
||||||
|
|
||||||
return old_json
|
return old_json
|
||||||
|
|
||||||
# Beispielaufruf
|
# Beispielaufrufe
|
||||||
old_json = {
|
old_json1 = {
|
||||||
"timestamps": ["s", "e", "r"],
|
"timestamps": ["s", "e", "r"],
|
||||||
"data": {"foo": [1, 2, 4], "bar": [3, 4, 6]}
|
"data": {"foo": [1, 2, 4], "bar": [3, 4, 6]}
|
||||||
}
|
}
|
||||||
|
|
||||||
new_json = {
|
new_json1 = {}
|
||||||
|
|
||||||
|
merged_json1 = merge_json(old_json1, new_json1)
|
||||||
|
print(merged_json1)
|
||||||
|
|
||||||
|
old_json2 = {}
|
||||||
|
|
||||||
|
new_json2 = {
|
||||||
"timestamps": ["r", "p"],
|
"timestamps": ["r", "p"],
|
||||||
"data": {"foo": [4,5], "bar": [6,7]}
|
"data": {"foo": [4, 4], "bar": [6, 7]}
|
||||||
}
|
}
|
||||||
|
|
||||||
merged_json = merge_json(old_json, new_json)
|
merged_json2 = merge_json(old_json2, new_json2)
|
||||||
print(merged_json)
|
print(merged_json2)
|
||||||
|
|
||||||
|
|
||||||
|
merged_json2 = merge_json(old_json1, new_json2)
|
||||||
|
print(merged_json2)
|
||||||
@@ -15,6 +15,7 @@ def get_config():
|
|||||||
return jsonify({'error': 'Token ID is missing'}), 400
|
return jsonify({'error': 'Token ID is missing'}), 400
|
||||||
|
|
||||||
config_file = os.path.join('config', f'{token_id}.json')
|
config_file = os.path.join('config', f'{token_id}.json')
|
||||||
|
data_file = os.path.join('data', f'{token_id}.json') # angenommen, die Daten befinden sich im Ordner 'data'
|
||||||
|
|
||||||
if not os.path.exists(config_file):
|
if not os.path.exists(config_file):
|
||||||
return jsonify({'error': 'Config not found for the specified token'}), 404
|
return jsonify({'error': 'Config not found for the specified token'}), 404
|
||||||
@@ -22,21 +23,23 @@ def get_config():
|
|||||||
with open(config_file, 'r') as file:
|
with open(config_file, 'r') as file:
|
||||||
config = json.load(file)
|
config = json.load(file)
|
||||||
|
|
||||||
|
|
||||||
data_file = os.path.join('config', f'{token_id}.json')
|
|
||||||
|
|
||||||
with open(data_file, 'r') as file:
|
|
||||||
data = json.load(file)
|
|
||||||
# Extract and include last timestamp in the response
|
# Extract and include last timestamp in the response
|
||||||
try:
|
if os.path.exists(data_file):
|
||||||
config['last_timestamp'] = data['timestamps'][len(data['timestamps'])-1]
|
with open(data_file, 'r') as file:
|
||||||
except:
|
data = json.load(file)
|
||||||
config['last_timestamp']=0
|
try:
|
||||||
|
last_timestamp = max(data.keys()) # Den neuesten Zeitstempel aus den Schlüsseln der Daten extrahieren
|
||||||
|
print(last_timestamp)
|
||||||
|
config['last_timestamp'] = last_timestamp
|
||||||
|
except ValueError:
|
||||||
|
config['last_timestamp'] = 0
|
||||||
|
else:
|
||||||
|
config['last_timestamp'] = 0
|
||||||
|
|
||||||
return jsonify(config), 200
|
return jsonify(config), 200
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return jsonify({'error': str(e)}), 500
|
return jsonify({'error': str(e)}), 500
|
||||||
|
|
||||||
# Route to set new data
|
# Route to set new data
|
||||||
|
|
||||||
|
|
||||||
@@ -91,28 +94,23 @@ def write_json_file(token_id, new_data):
|
|||||||
with open(file_path, 'w') as file:
|
with open(file_path, 'w') as file:
|
||||||
json.dump(new_data, file)
|
json.dump(new_data, file)
|
||||||
|
|
||||||
def merge_json(old_json, new_json):
|
def merge_json(json1, json2):
|
||||||
if not isinstance(old_json, dict) or not isinstance(new_json, dict):
|
# Wenn ein JSON leer ist, gib einfach das andere zurück
|
||||||
return old_json
|
if not json1:
|
||||||
|
return json2
|
||||||
|
if not json2:
|
||||||
|
return json1
|
||||||
|
|
||||||
for key, value in new_json.items():
|
# Erstelle eine Kopie des ersten JSON
|
||||||
if key not in old_json:
|
merged_data = json1.copy()
|
||||||
old_json[key] = value
|
|
||||||
elif isinstance(value, list):
|
# Füge die Timestamps aus dem zweiten JSON ein, falls sie nicht bereits im ersten JSON vorhanden sind
|
||||||
if key not in old_json:
|
for timestamp, values in json2.items():
|
||||||
old_json[key] = []
|
if timestamp not in merged_data:
|
||||||
if key == "timestamps":
|
merged_data[timestamp] = values
|
||||||
for item in value:
|
|
||||||
if item not in old_json[key]:
|
return merged_data
|
||||||
old_json[key].append(item)
|
|
||||||
else:
|
|
||||||
old_json[key].extend(value)
|
|
||||||
elif isinstance(value, dict):
|
|
||||||
old_json[key] = merge_json(old_json.get(key, {}), value)
|
|
||||||
else:
|
|
||||||
old_json[key] = value
|
|
||||||
|
|
||||||
return old_json
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user