Hallo Tell,
hallo Python, Flask und html-Spezialisten.
Wenn in energie_show_20221221.py die 3 hardgecodeten Zeilen an html übergeben werden, wird
1. der Graph richtig gezeichnet
2. zu jedem Messpunkt wird, wenn man ihn mit der Maus anfährt, die Kurzinfo z.B. 00:00-00:59 und Verbrauch: 21 angezeigt.
3. Die Skalierung auf der x-Achse wird korrekt zu jedem Punkt angezeigt. (siehe Bild)

Wenn ich energie_daten per for - Schleife aus den DB-Daten fülle, wird ebenfalls:
1. der Graph richtig gezeichnet
2. zu jedem Messpunkt wird, wenn man ihn mit der Maus anfährt, die Kurzinfo z.B. 00:00-00:59 und Verbrauch: 21 angezeigt.
3. Die Skalierung auf der x-Achse wird NICHT angezeigt. (siehe Bild)

Es muss ein Unterschied zwischen hardgecodetem String "00:00-00:59" und der Stringaufbereitung und Übergabe an die Liste per Programm sein.
Der Datentyp von energie_data ist <class 'list'
der print(energie_data) bricht jedesmal mit
[<__main__.Observation object at 0xb5b84fd0>, <__main__.Observation object at 0xb5b84c10>, <__main__.Observation object at 0xb5b84b80>, <__main__.Observation object at 0xb5b84dd8>, <__main__.Observation object at 0xb5b84ac0>, <__main__.Observation object at 0xb5b848b0>, <__main__.Observation object at 0xb5b848c8>, <__main__.Observation object at 0xb5b84fa0>, <__main__.Observation object at 0xb5b849e8>, <__main__.Observation object at 0xb49c76e8>, <__main__.Observation object at 0xb49c7730>, <__main__.Observation object at 0xb49c75c8>, <__main__.Observation object at 0xb49c70e8>, <__main__.Observation object at 0xb49c7058>, <__main__.Observation object at 0xb49c70d0>, <__main__.Observation object at 0xb49c7070>, <__main__.Observation object at 0xb49c7700>, <__main__.Observation object at 0xb49c7040>, <__main__.Observation object at 0xb49c7208>, <__main__.Observation object at 0xb49c71f0>, <__main__.Observation object at 0xb49c7250>, <__main__.Observation object at 0xb49c71a8>, <__main__.Observation object at 0xb49c7820>, <__main__.Observation object at 0xb49c7100>]
ab?????
Hier noch der Code der App:
#!/usr/bin/env python
# Python mit Flask
# Erstellt von Peter Tellenbach - Tell im https://forum-raspberrypi.de/forum/ - Fa. Blog der Heimetli Software AG
# 21.11.2022
#
# Angepasst Peter Hafenbrak
# 04.12.2022
# -----Stromverbrauchsdaten selektieren und dann mit Jinia an HTML-Seite übergeben.
# ----- Meine Module für die Datenbeschaffung
import sys
sys.path.append("/home/pi/Programme/MyModules")
import energie_logging_mod as energie_funcs
from flask import Flask, render_template, request
import random
import datetime
app = Flask(__name__)
class Observation:
def __init__( self, hh_v_b, value ):
self.hh_v_b = hh_v_b
self.value = value
def generate_energie_data(energie_type, test, day_from_str, time_from_str, num_hours):
energie_data = []
data = energie_funcs.sel_energie_daten(energie_type, test, day_from_str, time_from_str, num_hours)
# Aus 3-spaltiger Liste(data) [von datetime, bis_datetime, count]
# 2-spaltige Liste(energie_data) [Zeitraum, count] für Grafik in HTML machen
i = 0
bis = len(data)
for i in range(0, bis):
hh_von = datetime.datetime.strftime(data[i][0], "%H:%M")
hh_bis = datetime.datetime.strftime(data[i][1], "%H:%M")
hh_v_b = hh_von + "-" + hh_bis
value = data[i][2]
energie_data.append(Observation(hh_v_b,value))
print(hh_v_b, value)
# energie_data.append(Observation("00:00-00:59",21))
# energie_data.append(Observation("01:00-00:59",20))
# energie_data.append(Observation("02:00-00:59",23))
print(type(energie_data))
print( energie_data, file=sys.stderr )
# # ----- Ausgeben der Tabelle
# i = 0
# bis = len(energie_data)
# for i in range(0, bis):
# print(energie_data[i][0])
return energie_data
@app.route("/", methods=["GET", "POST"])
def test():
energie_data = []
if request.method == "POST":
energie_type = request.form[ "energie_art_strom" ]
day_from_str = request.form[ "day_from" ]
# Datumsstring nach tt.mm.jjjj umbauen, da die Funktion es so erwartet
day_from_str = day_from_str[8:] + "." + day_from_str[5:7] + "." + day_from_str[0:4]
time_from_str = request.form[ "time_from" ]
num_days = request.form[ "num_days" ]
num_hours = (int(num_days) * 24)
# Testschalter auf 0
test = 0
# Daten lesen und 2-spaltige Liste erzeugen
energie_data=generate_energie_data(energie_type, test, day_from_str, time_from_str, num_hours)
return render_template("test_20221222.html", energie_data=energie_data)
if __name__ == "__main__":
app.run(debug=True, host='127.0.0.1')
Display More
Falls Du Tell oder jemand noch eine Idee hat.....
Bin jetzt dann soweit, dass ich ohne die Skalierung an der x-Achse lebe 