Ankündigung

Einklappen
Keine Ankündigung bisher.

Vorstellung: KNX-Lens

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Amenophis
    antwortet
    Nochmal zum Verständnis. Ich hatte eine neue Projektdatei per SFTP hochgeladen und den logger neu gestartet. Nach kurzer Zeit crashed er immer mit dem Fehler. Ich habe dann eine alte Projektdatei genutzt und auch dort kam der Fehler.

    Dann habe ich ein Backup von Lens aus November eingespielt. Hier lief sowohl die neue als auch die alte Datei ohne Probleme.

    Jetzt habe ich mich mal eingelesen und verschiedene Versionen über git checkout versucht. Komischerweise kann ich mit der neusten Projektedatei alle Versionen nutzen. Auch die aktuelle wirft keinen Fehler mehr aus. Ich verstehe es nicht und versuche es zu reproduzieren aber noch ist es mir nicht gelungen.

    Somit aktuell neuste Lens-Version von git, neuste Projektdatei und auch nach Restart des Systems läuft alles ohne Problem. Ich werde jetzt nochmal ein bisschen spielen und schauen, ob ich den Fehler irgendwie reproduzieren kann.

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Funktioniert der aktuelle Code mit der vorherigen projektdatei?

    Einen Kommentar schreiben:


  • Amenophis
    antwortet
    Zitat von henfri Beitrag anzeigen
    In github kannst du zu beliebigen älteren Versionen zurückgehen.
    Habe ich bei Github irgendwie nicht gefunden, kenne nur die Release Versionen und da werden mir keine angezeigt. Muss ich mal Google fragen, wie das geht

    Zitat von henfri Beitrag anzeigen
    Hast du es nochmal mit der älteren projektdatei versucht?


    Ja, habe verschiedene Projekt-Dateien versucht. Neue erstellt und auch alte Projekt-Backups eingespielt. Nur der Lens-Code aus November wirft keinen Fehler aus, auch mit der neuen Projektdatei. Der aktuelle Code läuft nach kurzem Anlauf immer in diesen Fehler.

    Einen Kommentar schreiben:


  • henfri
    antwortet
    In github kannst du zu beliebigen älteren Versionen zurückgehen.

    Hast du es nochmal mit der älteren projektdatei versucht?

    Einen Kommentar schreiben:


  • Amenophis
    antwortet
    Ich befürchte, dass es seit der letzten Anpassung von uns Probleme macht. Scheinbar hat es was mit unserer letzten Anpassung des Datei Uploads was zu tun. Ich habe ein Backup von davor eingespielt, welches keine Probleme hatte. Allerdings ist das aus November, ein anderes hatte ich leider nicht mehr.

    henfri: Hast du noch eine Version ohne den Dateiupload? Auf Git liegt leider auch keine Version. Dann würde ich mal weiter testen.

    Einen Kommentar schreiben:


  • Amenophis
    antwortet
    Ich habe in letzter Zeit einige Anpassungen meiner Projektdatei gemacht und sie neu hochgeladen. Nun hat der Logger ständig ein Problem, was ich aber absolut nicht nachvollziehen kann. Auch Google und ChatGPT können mir nicht wirklich weiterhelfen. Jemand eine Idee, woran das liegen könnte:

    Code:
    root@knx-lens:~# systemctl status -full knx-lens-logger.service
    systemctl: invalid option -- 'u'
    root@knx-lens:~# systemctl status -l knx-lens-logger.service
    * knx-lens-logger.service - KNX Lens Logger Service
         Loaded: loaded (/etc/systemd/system/knx-lens-logger.service; enabled; preset: enabled)
         Active: inactive (dead) since Fri 2026-04-03 16:51:11 CEST; 1min 15s ago
       Duration: 14.887s
        Process: 433 ExecStart=/root/knx-lens/.venv/bin/python /root/knx-lens/knx-lens-logger.py --daemon (code=exited, status=0/SUCCES>
       Main PID: 433 (code=exited, status=0/SUCCESS)
            CPU: 14.872s
    
    Apr 03 16:51:11 knx-lens python[433]:   File "/usr/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete
    Apr 03 16:51:11 knx-lens python[433]:     return future.result()
    Apr 03 16:51:11 knx-lens python[433]:            ^^^^^^^^^^^^^^^
    Apr 03 16:51:11 knx-lens python[433]:   File "/root/knx-lens/knx-lens-logger.py", line 285, in start_logger_mode
    Apr 03 16:51:11 knx-lens python[433]:     xknx.knxproj = knx_project
    Apr 03 16:51:11 knx-lens python[433]:     ^^^^^^^^^^^^
    Apr 03 16:51:11 knx-lens python[433]: AttributeError: 'XKNX' object has no attribute 'knxproj'
    Apr 03 16:51:11 knx-lens python[433]: 2026-04-03 16:51:11,037 [INFO] root: Anwendung heruntergefahren.
    Apr 03 16:51:11 knx-lens systemd[1]: knx-lens-logger.service: Deactivated successfully.
    Apr 03 16:51:11 knx-lens systemd[1]: knx-lens-logger.service: Consumed 14.872s CPU time.​

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Geht nicht so einfach.
    Das Framework textual ist dafür da, Anwendungen gleichermaßen an der Kommandozeile und im Browser verfügbar zu machen.
    In der Kommandozeile macht ein Upload button halt keinen Sinn und deshalb gibt es das halt 😁 m Framework nicht.

    Einen Kommentar schreiben:


  • Amenophis
    antwortet
    Habe es mal installiert und getestet. Scheint gut zu funktionieren, vielen Dank

    Den Teil mit einem Upload über die Website hast du bewusst nicht mit übernommen?

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Selbst mit KI Hilfe (GitHub Copilot, kann Code bei mir ändern und ausführen, ein Gamechanger) erstellt und der deinen Vorschlag gegeben.

    Einen Kommentar schreiben:


  • Amenophis
    antwortet
    Haste selbst was erstellt oder auf dem ChatGPT Vorschlag aufgebaut?

    Auf jeden Fall schon mal vielen Dank. Hoffe, dass ich am Wochenende zum Testen komme

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Ich hab das Laden der Projektdatei via Dateibrowser implementiert - aber nur einmal kurz getestet.

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • Amenophis
    antwortet
    Ne, kam ich noch nicht zu. Hab es mir quasi aus Langeweile unterwegs mal erstellen lassen und würde es die Tage mal Test. Falls einer schneller ist, go for it

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hast du es getestet?

    Einen Kommentar schreiben:


  • Amenophis
    antwortet
    Wie gesagt, bin ich leider kein Entwickler aber falls jemand Lust hat, das nachgefragt Feature umzusetzen, ich habe ChatGPT mal eine Grundlage dafür schreiben lassen. Wer mag, der kann darauf aufsetzen. Da ich leider weder weiß, wie man Fehler findet noch sonst was, kann ich nicht weiter dabei helfen. Sorry:
    -------

    Perfekt 👍
    Hier ist ein Git-Patch im unified diff Format, der:
    • Upload-Ordner ergänzt
    • Upload-Route hinzufügt
    • Reload-Funktion ergänzt
    • HTML-Formular einbaut

    Ich gehe davon aus, dass:
    • knx-lens-web.py im Root liegt
    • Templates unter templates/index.html liegen
    • Das Projekt aktuell beim Start bereits einmal eingelesen wird

    📦 Git Patch (unified diff)

    Code:
    diff --git a/knx-lens-web.py b/knx-lens-web.py
    index 1234567..abcdef0 100644
    --- a/knx-lens-web.py
    +++ b/knx-lens-web.py
    @@ -1,6 +1,16 @@
     import os
    +from werkzeug.utils import secure_filename
    +from flask import request, redirect, flash
    
     app = Flask(__name__)
    
    +# --------------------------------------------------
    +# Upload-Konfiguration
    +# --------------------------------------------------
    +UPLOAD_FOLDER = os.path.join(os.getcwd(), "uploaded_projects")
    +ALLOWED_EXTENSIONS = {"knxproj"}
    +os.makedirs(UPLOAD_FOLDER, exist_ok=True)
    +app.config["UPLOAD_FOLDER"] = UPLOAD_FOLDER
    +app.config["MAX_CONTENT_LENGTH"] = 50 * 1024 * 1024  # 50 MB
    
     # --------------------------------------------------
     # Bestehende Projekt-Initialisierung
    @@ -20,6 +30,41 @@ knx_project = load_project_from_env()
    
     
    +# --------------------------------------------------
    +# Hilfsfunktion: Dateiendung prüfen
    +# --------------------------------------------------
    +def allowed_file(filename):
    +    return "." in filename and \
    +           filename.rsplit(".", 1)[1].lower() in ALLOWED_EXTENSIONS
    +
    +
    +# --------------------------------------------------
    +# Projekt neu laden
    +# --------------------------------------------------
    +def reload_project(path):
    +    global knx_project
    +    try:
    +        knx_project = None
    +        knx_project = load_project(path)  # Bestehende Projekt-Ladefunktion verwenden!
    +        print(f"Projekt neu geladen: {path}")
    +    except Exception as e:
    +        print(f"Fehler beim Neuladen: {e}")
    +
    +
    +# --------------------------------------------------
    +# Upload-Route
    +# --------------------------------------------------
    +@app.route("/upload_project", methods=["POST"])
    +def upload_project():
    +    if "project_file" not in request.files:
    +        flash("Keine Datei ausgewählt")
    +        return redirect("/")
    +
    +    file = request.files["project_file"]
    +
    +    if file.filename == "":
    +        flash("Dateiname leer")
    +        return redirect("/")
    +
    +    if not allowed_file(file.filename):
    +        flash("Nur .knxproj Dateien erlaubt")
    +        return redirect("/")
    +
    +    # Alte Dateien löschen (optional: nur eine Projektdatei aktiv)
    +    for f in os.listdir(app.config["UPLOAD_FOLDER"]):
    +        os.remove(os.path.join(app.config["UPLOAD_FOLDER"], f))
    +
    +    filename = secure_filename(file.filename)
    +    save_path = os.path.join(app.config["UPLOAD_FOLDER"], filename)
    +    file.save(save_path)
    +
    +    reload_project(save_path)
    +
    +    flash("Projekt erfolgreich hochgeladen und neu geladen")
    +    return redirect("/")
    +
     
     if __name__ == "__main__":
         app.run(host="0.0.0.0", port=5000)
    diff --git a/templates/index.html b/templates/index.html
    index 7654321..fedcba9 100644
    --- a/templates/index.html
    +++ b/templates/index.html
    @@ -10,6 +10,29 @@
     <body>
    
    +  <!-- Flash-Messages -->
    +  {% with messages = get_flashed_messages() %}
    +    {% if messages %}
    +      <ul style="color: green;">
    +        {% for message in messages %}
    +          <li>{{ message }}</li>
    +        {% endfor %}
    +      </ul>
    +    {% endif %}
    +  {% endwith %}
    +
    +  <hr>
    +  <h3>Neues ETS-Projekt hochladen</h3>
    +
    +  <form action="/upload_project" method="POST" enctype="multipart/form-data">
    +      <input type="file"
    +             name="project_file"
    +             accept=".knxproj"
    +             required>
    +      <button type="submit">Projekt hochladen</button>
    +  </form>
    +
       <!-- Bestehender Seiteninhalt -->
     
     </body>
     </html>​


    🛠 Anwendung des Patches

    Datei z. B. speichern als:
    Code:
    knx-lens-upload.patch
    Dann im Projektordner ausführen:
    Code:
    git apply knx-lens-upload.patch
    Oder:
    Code:
    patch -p1 < knx-lens-upload.patch

    ⚠ Wichtiger Hinweis


    Du musst in dieser Zeile:
    Code:
    knx_project = load_project(path)
    die tatsächliche bestehende Projektladefunktion von KNX-Lens einsetzen
    (z. B. load_project_from_env() oder wie sie im Original heißt).

    Einen Kommentar schreiben:


  • Alloc
    antwortet
    Kann ich verstehen, muss ja auch nicht. Wie gesagt, das wäre *für mich* der einzige Grund warum das neu laden per Web was bringt. Da ich aber vorher auch die Projektdatei erstmal auf die Maschine bekommen muss kann ich da auch noch den Restart der beiden Services anstoßen

    Einen Kommentar schreiben:

Lädt...
X