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

File diff suppressed because one or more lines are too long

90
server/hey.html Normal file
View 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>

View File

@@ -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):
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
for key, value in new_json.items():
if key not in old_json:
old_json[key] = value
elif isinstance(value, list):
if key not in old_json:
old_json[key] = []
if key == "timestamps":
for item in value:
if item not in old_json[key]:
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)
# Überprüfen, ob old_json keine Timestamps enthält
if "timestamps" not in old_json:
return new_json
# Schritt 1: Neue Timestamps prüfen und ggf. hinzufügen
for timestamp in new_json["timestamps"]:
if timestamp not in old_json["timestamps"]:
old_json["timestamps"].append(timestamp)
# Schritt 2: Neue Werte an den richtigen Positionen einfügen
for key, values in new_json["data"].items():
if key in old_json["data"]:
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])
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
# Beispielaufruf
old_json = {
# Beispielaufrufe
old_json1 = {
"timestamps": ["s", "e", "r"],
"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"],
"data": {"foo": [4,5], "bar": [6,7]}
"data": {"foo": [4, 4], "bar": [6, 7]}
}
merged_json = merge_json(old_json, new_json)
print(merged_json)
merged_json2 = merge_json(old_json2, new_json2)
print(merged_json2)
merged_json2 = merge_json(old_json1, new_json2)
print(merged_json2)

View File

@@ -15,6 +15,7 @@ def get_config():
return jsonify({'error': 'Token ID is missing'}), 400
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):
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:
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
try:
config['last_timestamp'] = data['timestamps'][len(data['timestamps'])-1]
except:
config['last_timestamp']=0
if os.path.exists(data_file):
with open(data_file, 'r') as file:
data = json.load(file)
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
except Exception as e:
return jsonify({'error': str(e)}), 500
# Route to set new data
@@ -91,28 +94,23 @@ def write_json_file(token_id, new_data):
with open(file_path, 'w') as file:
json.dump(new_data, file)
def merge_json(old_json, new_json):
if not isinstance(old_json, dict) or not isinstance(new_json, dict):
return old_json
def merge_json(json1, json2):
# Wenn ein JSON leer ist, gib einfach das andere zurück
if not json1:
return json2
if not json2:
return json1
for key, value in new_json.items():
if key not in old_json:
old_json[key] = value
elif isinstance(value, list):
if key not in old_json:
old_json[key] = []
if key == "timestamps":
for item in value:
if item not in old_json[key]:
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
# Erstelle eine Kopie des ersten JSON
merged_data = json1.copy()
# Füge die Timestamps aus dem zweiten JSON ein, falls sie nicht bereits im ersten JSON vorhanden sind
for timestamp, values in json2.items():
if timestamp not in merged_data:
merged_data[timestamp] = values
return merged_data
return old_json