Frontend weiterarbeit, Client Server datenaustausch und sync, fertiggestellt.
This commit is contained in:
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):
|
||||
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)
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user