Posts by Peha01

    Ich habe es :bravo2:

    Die ganzen Versuche mit den Echtdaten waren immer mindestens 1 Tag und es wurde immer der Verbrauch von 1 Stunde aufsummiert.

    Das wiederum heißt, dass die ganze Zeit 24 Zeiträume mit 24 Messwerten ermittelt wurden.

    Und das ist offensichtlich bei 00:00-00:59 zu viel.

    Wenn ich nur 5 Stunden analysiere, dann wird es absolut RICHTIG angezeigt.


    Vielen Dank vor Allem an Tell . Es tut mir leid, dass ich nicht früher mal mit weniger Daten getestet habe.


    Jetzt muss ich mal schauen, ob man die Skalierung um 90° drehen kann; oder kürzer machen!

    Ich kann KEINEN Unterschied feststellen :conf:

    Anbei das App-Coding wo ich die Funktion __repr__ eingebaut habe.


    Anbei 2 Screenshots.

    1. mit hardgecodeten 3 Zeilen


    Und jetzt das Ergebnis mit den per Programm erzeugten Daten:


    Ich habe sowieso schon keine Idee mehr.


    Wie kann man noch Strings untersuchen um einen Unterschied festzustellen?

    Na ja, das habe ich ja in meinem Post #19 bestätigt. Mein 1. Screenshot, (nach 11 Zeilen Text) sieht genauso aus wie Deiner! Eben mit den 3 hardgecodeten Zeilen!


    Das Problem besteht, wenn energie_daten mit


    hh_v_b = hh_von + "-" + hh_bis
    value = data[i][2]
    energie_data.append(Observation(hh_v_b,value))


    aufgebaut wird.

    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:


    Falls Du Tell oder jemand noch eine Idee hat.....


    Bin jetzt dann soweit, dass ich ohne die Skalierung an der x-Achse lebe :@

    Hallo an alle html - flask - Jinia-javascript-Profis,

    ich bekomme es nicht hin :wallbash:

    Für alle die diesen Thread bisher nicht verfolgt haben.

    Es soll eine Linien-Grafik mit google charts erstellt werden. Über Python - Flask wird eine 2-spaltige Liste,
    in der Form "00:00-00:59" und ein ganzahliger Wert per render_template an eine html-Seite übergeben.

    Die numerischen Werte werden in der Grafik richtig dargestellt. Was nicht funktioniert ist die Ausgabe der horizontalen Skalierung je Linienpunkt in der

    Form z.B. 00:00-00:59

    Wenn ich in der html-Seite die Daten für 3 Werte hard codiere, funktioniert es!

    Anbei das html-Coding und ein screenshot wie es FUNKTIONIERT!
    Die hardgecodeten Zeilen sind blau markiert.


    Hier habe ich die Skalierung rot umrandet.


    In dem folgende html-Coding werden nun die übergebenen Daten eingefügt. Wie gesagt, die Verbrauchsdaten werden richtig ausgegeben, nur die horizontale Skalierung bleibt leer. Siehe der nachfolgende Screenshot.




    Wie muss ich die Datenübergabe anpassen, dass Google charts die erste Spalte 00:00-00:59 als Skalierung darstellt?


    Anbei noch die Python-flask-app die die Daten zum rendern sammelt und an html übergibt.



    Tell

    Eigentlich habe ich die Datenübergabe, wie von Dir vorgeschlagen, umgesetzt oder?

    Hallo Tell, hallo alle html - flask - Jinia-Profis,


    sorry, aber jetzt steht mir schon wieder jemand auf der Leitung :daumendreh2:

    Bin jetzt soweit, dass ich eine 2-spaltige Liste in die html-Seite übergeben bekomme.

    Allerdings klappt wohl die Übergabe aus der Liste energie_data an data.addRows() NICHT.

    Wenn ich die Übergabe "hardcode", siehe im Quellcode blau, funktioniert es.

    Wenn ich aber versuche die Daten aus energie_data per Loop an data.addRows() zu übergeben funktioniert es nicht! Es wird gar nichts als Grafik ausgegeben.

    Siehe folgenden Code:


    Dann habe ich die html-Seite dahingehend geändert, dass ich NUR die Daten aus energie_daten ausgebe.

    Siehe folgender Code:


    dann erfolgt die Ausgabe der Daten gem. der beiliegenden Hardcopy/Dateianhang


    Also, Daten sind da, ich mache etwas an der Übergabe an data.addRows() falsch :wallbash:


    Hast Du eine Idee oder Tipp, wo mein Fehler liegt?


    Also falls Du oder jemand aus dem Forum eine Idee hat, nur her damit.


    Vielen Dank schon mal für Eure Mühe

    Hallo Tell,

    sorry, dass ich mich schon wieder melde :blush:

    Ich habe nun "meine" HTML-Seite test.html auf Basis Deines Vorschlages angepasst, sodass ich nun die entsprechenden INPUT-Felder in der Flask-App habe, um dort meine Datenselektion aus der DB vorzunehmen und in eine Liste zu schreiben. Die Ergebnis-Liste die in die test.html gerendert werden soll hat nur noch 2 Werte, energie_daten[von-bis, count]. von-bis ist ein String-wert, count(Anzahl Umdrehungen der Ferraris-Scheibe im Zeitraum) ist ein Integer.


    Ich scheitere immer am Statement

    return render_template("test.html", ..........)

    mit der Fehlermeldung: UnboundLocalError: local Variable 'energie_type' referenced before assignment


    Anbei hier meine test.html

    An der Datenübergabe bei

    data.addRows([..... habe ich noch nicht weitergemacht, weil mir die Datenrückgabe (rendern) noch Probleme macht :conf:


    Jetzt zum Problemkind, der Flask-App:


    Vielleicht kannst Du Dir das Coding mal anschauen. :helpnew:

    Vielen Dank schon mal. Es eilt nicht, kann erst wieder nächsten Sonntag mich damit befassen.

    Hallo Tell,


    vielen Dank für diese tolle Vorlage. Ich hätte mich sonst heute oder morgen gemeldet.

    Ich werde an diesem Projekt allerdings erst wieder übernächste Woche arbeiten können.


    Noch eine Frage hätte ich bezüglich debugging.


    Meine Test-Flask-App sieht so aus und starten tue ich sie über die Thonny-App mit "Ausführen


    1. Frage: In der Entwicklung solch eines Projektes oder einfacher Flask-App.

    Wie startest Du den Server mit der App.

    Auch aus Thonny oder einer anderen Entwicklungsumgebung(wenn ja, welche)?

    Oder über die Kommandozeile und dann mit welchen Parametern?


    Jetzt würde ich einfach gerne im Debugging sehen können,

    1. wie z.B. das Ergebnis meiner Funktion data = energie_funcs.sel_energie_daten(energ....

    aussieht.


    2. Kann ich auch die HTML-Seite, in die die Daten gerendert werden, debuggen?


    Mit breakpoints?


    Also es eilt nicht sehr, aber wenn Du mir entweder Tipps oder ne URL liefern könntest, wäre toll.


    Vielen Dank schon mal

    Hallo Tell,


    bin für jeden Tipp dankbar um es richtig zu machen!

    Ich möchte nur verhindern, dass ich mich tief in HTML, Java .... einarbeiten muss.


    Also mein Endziel ist, dass ich 3 Eingabefelder habe:

    1. Datum Ab wann die Daten beginnt werden sollen

    2. Datum Ende der Betrachtung

    3. Intervall (aktuell 1 Std.)


    Dann per Python die Datenselektion mit Übergabe an die Webseite und Präsentation.


    -

    flask - Bin ich mal beim Suchen im Internet drüber gestolpert aber nicht reingezoomt.


    Hast Du damit schon Dinge realisiert?

    Empfehlenswert?

    Lade ich mir die API/Module auf meinen Raspi und die Daten bleiben bei mir im LAN?

    Beispielcodings?

    Deutschsprachige Community?


    Also Du musst mir nicht alles vorkauen, bin des Lesens mächtig ;)

    Aber eben Empfehlung :bravo2:

    Hallo, ich suche Tipps und Tricks zum Darstellen von Stromverbrauchsdaten pro Stunde als dynamische Webseite.

    Meine Verbrauchsdaten sind in einer mariadb per timestamp pro Umdrehung (Ferraris-Scheibe) gespeichert.

    Jetzt sollen diese Daten dynamisch als Webseite im lokalen Netz auf dem Apache visualisiert werden.


    Programmierkenntnisse habe ich in Python, jedoch nicht Java, html, php, ....

    Nun habe ich unter Data Source Python Library eine für mich erstmal praktische Lösung gefunden, welche in einem Python-Programm eine HTML-Vorlage enthält mit Platzhaltern
    für die Daten, welche in der main() - Funktion in die Variablen "description" und "data" aufbereitet werden.

    Am Ende wird dann per print die Vorlage mit % und Varaiable ausgegeben. So mein Verständnis des Beispielprogramms.

    Wenn das funktionieren würde, bräuchte ich nur mit meinen Python- und sql-Kenntnissen die listen "description" und "data" aufbereiten. Das wäre es dann ....

    Allerdings bekomme ich es auf meinem raspi nicht zum Laufen.


    Vielleicht kann sich ja mal ein Profi von Euch den nachfolgenden der Beispiel-Code von Google anschauen :bravo2:

    Bei den print-Befehlen fehlten die öffnende und schließende Klammer sowie die Einrückung nach def ... : und if ... :

    habe ich berichtigt. Thonny sagt, der Code sei in Ordnung :conf:


    Nun noch eine, hoffentlich, letzte Frage:

    Muss dieses Python-Programm dann im Verz. /var/www/html als prog_name.py abgespeichert werden oder als prog_name.html?


    Hallo und vielen Dank für die tollen und funktionierenden Infos.


    Vor Allem der Link von Tell, https://pynative.com/python-my…using-prepared-statement/

    ist echt klasse :bravo2: Toll beschrieben und mit Code-Beispielen.


    Als Modul verwende ich mariadb.


    Also nochmals vielen Dank für die prompte Unterstützung.


    Übrigens für die User, welche am Anfang von sql stehen, noch eine ebenfalls sehr informative Seite, auf der weiter unten an einem praktischen Beispiel das Problem der viel zitierte SQL-Injections gezeigt wird. Siehe: Best practice fuer SQL-Staements

    Hallo,

    dieses Mal habe ich ein Problem, Datensätze aus einer mariadb auszulesen, indem auf das datum im Datensatz vom Typ timestamp selektiert wird.


    Anbei einmal ein Screenshot von der Tabelle 'verbrauch' mit den Definitonen.


    Mit folgendem Statement, in welchem das Selektionskriterium hardgecoded ist, funktioniert die Selektion:

    Code
    .
    .
    curs = conn.cursor()
    
    # ----- Selektieren der Daten aus DB -----
    curs.execute("SELECT id, datum from verbrauch WHERE energie_art = 'strom' AND test = 0 AND datum < '2022-10-31 00:00:00'")

    Nun meine Fragen:

    Wie muss ich eine Variable definieren/erstellen, dass ich diese Variable anstatt dem hardgecodeden Literal in das execute-Statement einbauen kann?

    Es sollen 4 Input-Felder prozessiert werden.

    Von Datum: Bis Datum:

    Von Zeit: Bis Zeit:

    Daraus sollen dann 2 Variablen generiert werden, mit welchen dann der Select mit dem BETWEEN - Befehl die entsprechenden Datenzeilen selektiert.


    Bin dankbar für jeden Beispielcode


    Hat jemand Tipps für Tutorials über die Verwendung von mysql in Python?


    Vielen Dank schon mal für Eure Tipps und Ideen.

    Vielen Dank Euch für die kompetente Analyse.

    Werde mich gleich mal an das denoopsen machen.


    Mit der Freigabe von QNAP werde ich mal einen Test mit dem Export als NFS machen.

    Bin mal gespannt wie das dann mit WIN 10 aussieht.

    Mit raspiBackup + tar + smb klappt es ganz gut. ZIP-Programme auf WIN kommen auch mit dem tar-Format klar.

    Aber werde jetzt noch mal nfs testen.


    Vielen Dank nochmal und 'n schönes Wochenende :danke_ATDE::bravo2:

    Hallo Systemprofis,

    ich habe ein Verständnisproblem mit den Partitionen auf meiner raspi 4 mit einer 32 GB SSDX-Karte.

    Vorab, das System läuft, es ist NICHT dringend.

    Nur wollte ich mich vor Kurzem mal mit raspiBackup (backup und restore) befassen. Ziel ist, ein regelmäßiges Backup mit raspiBackup zu machen,
    um eventuell das gesamte System ODER einzelne Dateien wieder herstellen zu können.

    Also schaute ich zuerst mal

    1. df

    Code
    Dateisystem               1K-Blöcke    Benutzt Verfügbar Verw% Eingehängt auf
    /dev/root                  26671060   15187104  10103812   61% /
    devtmpfs                     793784          0    793784    0% /dev
    tmpfs                        958648          0    958648    0% /dev/shm
    tmpfs                        383460       1296    382164    1% /run
    tmpfs                          5120          4      5116    1% /run/lock
    /dev/mmcblk0p6               258094      50709    207386   20% /boot
    //NAS-TS451/raspberries/ 2983987944 2872170364 111817580   97% /media/nas_4_raspi
    tmpfs                        191728         36    191692    1% /run/user/1000

    Da war ich dann das erste mal leicht confused :denker: Ich denke mal /dev/mmcblk0p6 ist die Systempartition und /dev/root ist die Nutzerpartion. Wo und wie/warum kommt der
    Rest. /dev/tmpfs , 4x /tmpfs .


    Dann habe ich

    2. blkid ausgeführt:


    Code
    /dev/mmcblk0p1: LABEL_FATBOOT="RECOVERY" LABEL="RECOVERY" UUID="9410-C229" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="000797ef-01"
    /dev/mmcblk0p5: LABEL="SETTINGS" UUID="748172c4-2267-4d97-a8e1-4312d715d60a" BLOCK_SIZE="1024" TYPE="ext4" PARTUUID="000797ef-05"
    /dev/mmcblk0p6: LABEL_FATBOOT="boot" LABEL="boot" UUID="52E2-936D" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="000797ef-06"
    /dev/mmcblk0p7: LABEL="root" UUID="824e63c4-836a-4c6f-87f5-7af5b8cbcb12" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="000797ef-07"

    Dann

    3. lsblk --fs

    Code
    NAME        FSTYPE FSVER LABEL    UUID                                 FSAVAIL FSUSE% MOUNTPOINT
    mmcblk0                                                                               
    ├─mmcblk0p1 vfat   FAT32 RECOVERY 9410-C229                                           
    ├─mmcblk0p2                                                                           
    ├─mmcblk0p5 ext4   1.0   SETTINGS 748172c4-2267-4d97-a8e1-4312d715d60a                
    ├─mmcblk0p6 vfat   FAT32 boot     52E2-936D                             202,5M    20% /boot
    └─mmcblk0p7 ext4   1.0   root     824e63c4-836a-4c6f-87f5-7af5b8cbcb12    9,6G    57% /

    Dann

    4. fdisk -l

    Bei einem vor Kurzem installierten System (mit RaspiPi-Imager) sieht fdisk-l ganz schlicht aus:

    Nun zum Schluss noch die /etc/fstab des "seltsamen" Systemes:

    Code
    proc            /proc           proc    defaults          0       0
    /dev/mmcblk0p6  /boot           vfat    defaults,flush    0       2
    /dev/mmcblk0p7  /               ext4    defaults,noatime  0       1
    # a swapfile is not a swap partition, no line here
    #   use  dphys-swapfile swap[on|off]  for that

    Zum Einen kann vielleicht ein Profi mir und eventuell auch anderen zum besseren Verständnis dieses Szenario erklären?


    Zum zweiten an framp : wie würdest Du mit raspiBackup dieses System sichern und restoren?

    Backup Typ: tar oder rsync?

    Backup Modus: "Sichere die zwei Standardpartitionen" oder "sichere mehr als zwei Partitionen"

    Gesichert wird auf ein Netz-LW eines QNAP-NAS. DD muss nicht sein, ich werde mir eine SSDX-Karte erstellen mit dem Mounten des
    QNAP-Shares und installiertem raspiBackup, sodass ich notfalls von dieser Karte booten und mit raspiBackup den restore auf eine 2. SSDX-Karte fahren kann.


    Vielen Dank schon mal für diejenigen, welche sich dieser Anfrage annehmen.

    Hallo DistroEx,


    zuerst mal will ich mich für meine späte Antwort entschuldigen. Wir hatten Besuch ;(

    Aber trotzdem, um Hilfe bitten und dann nicht antworten geht gar nicht.


    So, jetzt zum eigentlichen Thema.

    Also, es funzt nun wieder nachdem ich folgendes gemacht habe:
    1. sudo apt-get remove realvnc-vnc-server - deinstallieren

    2. sudo apt-get purge realvnc-vnc-server -letzte Reste, auch Config-files löschen

    3. sudo apt-get update

    4. sudo apt-get upgrade

    5. sudo apt-get install realvnc-vnc-server - installieren


    meine /boot/config.txt sieht so aus und ich habe nichts daran modifiziert.

    Trotzdem nochmal vielen Dank für Deine Antwort

    Hallo,

    ich habe folgende Installation. Ein Raspi 4 Model B Rev 1.5 mit Raspbian Vers 11 bullseye

    Normalerweise läuft der raspi im Keller im Schaltschrank und zählt KwH.

    In diesem Fall greife ich über VNC oder ssh auf den raspi zu.

    Aktuell habe ich ihn aber im Büro weil ich an einem neuen Projekt arbeite. Im Büro ist mit LAN flotteres arbeiten möglich.

    Dann schließe ich einen Monitor direkt an die erste HDMI-Buchse neben der USB-Ladebuchse an.

    Wenn ich nun den raspi boote, erhalte ich kein Bild am Monitor und der Monitor geht beim Booten nach kurzer Zeit in Standby.

    Nun habe ich festgestellt, wenn ich über raspi-config > Schnittstellen VNC disable, dann erkennt der raspi beim Booten der den angeschlossenen Monitor und die Anzeige passt.


    Nun die Frage an die Profis:

    Ist dieses Verhalten normal :conf: Wenn man den raspi headless betreibt, muss/sollte ssh und VNC enabled sein. Wenn ich nun ausnahmsweise den raspi mit Monitor betreibe, MUSS ich in raspi-config VNC disablen? Das kann doch nicht sein oder :@