Zum Inhalt

0.5.12 – 2026-08-16

  • KEBA-Sperren verifiziert den dokumentierten Weg stop <echte RFID> jetzt über den Live-Zustand report 2/Authreq; TCH-OK allein gilt nicht mehr als erfolgreicher Sperrvorgang.
  • Bleibt eine lediglich temporär entsperrte, noch nicht ladende P30 nach dem dokumentierten stop bei Authreq=0, verwendet SNLO optional den empirischen Fallback start 44556677 01010400000000000000 und akzeptiert auch diesen nur nach bestätigtem Authreq=1.
  • Der Fallback ist über KEBA_LOCK_FALLBACK_RFID konfigurierbar (Standard 44556677), wird während aktiver Ladung niemals verwendet und wird blockiert, falls derselbe Wert in SNLO als echter aktiver RFID-Key hinterlegt ist.
  • Pending-Freigabe und Sperrbutton werden erst nach tatsächlich bestätigtem Sperrstatus entfernt; bei fehlgeschlagenem Sperren bleibt die Aktion sichtbar und die UI zeigt keinen fiktiven Erfolg mehr.

SNLO – Spittank.net Ladeorganisation – Changelog

0.5.11 – 2026-08-16

  • KEBA-Sperrstatus wird wie in Home Assistant live aus report 2/Authreq gelesen; lokale TTLs bestimmen nicht mehr, ob die Wallbox als gesperrt oder entsperrt gilt.
  • Dashboard und Ladevorgangsseite aktualisieren den KEBA-Sperrstatus alle fünf Sekunden und bieten abhängig vom Live-Zustand direkt Wallbox entsperren bzw. Wallbox sperren an.
  • Eine kurz zuvor gestartete SNLO-Freigabe behält nur noch die Zuordnung zu Nutzer und RFID-Key; sobald KEBA selbst wieder Authreq=1 meldet, wird dieser Hinweis verworfen.
  • Aktive Ladevorgänge besitzen im Dashboard einen kompakten EVCC-Modus-Umschalter für Aus, PV, Min + PV und Sofort.
  • Installierte PWAs erhalten auf Wunsch eine langlebige, bei jedem App-Start erneuerte SNLO-Anwendungssitzung (PWA_SESSION_TTL_DAYS, Standard 3650 Tage); normale Browser-Sitzungen bleiben bei SESSION_TTL_HOURS (Standard 24 Stunden).
  • PWA- und Browser-Anmeldung bleiben getrennt: eine bestehende normale Browser-Sitzung wird nicht ohne erneute Anmeldung automatisch in eine langlebige PWA-Sitzung umgewandelt.

0.5.10 – 2026-08-16

  • KEBA-RFID-Freigabe an die nachweislich funktionierende Home-Assistant-Integration angeglichen: kurze Karten-UID unverändert plus interner Standard-RFID-Class 01010400000000000000.
  • Falsche Null-Erweiterung aus 0.5.9 entfernt; bereits dort gespeicherte UID00000000-Werte werden automatisch mit der ursprünglichen kurzen UID zuerst verwendet.
  • Autorisierung wird nach TCH-OK zusätzlich über report 2 verifiziert.
  • Nach erfolgreicher Freigabe zeigt eine unterstützte KEBA kurz Hallo <Benutzername>, nach erfolgreichem Sperren Auf Wiedersehen; Displayfehler beeinflussen die eigentliche Freigabe/Sperre nicht.
  • Gemeinsamen Dockerfile-Healthcheck entfernt und service-spezifische Checks ergänzt: API-Readiness, Worker-Heartbeat und KEBA-UDP-Listener.
  • Produktionskonfiguration fällt bei SCHEMA_AUTO_CREATE=false und fehlender DATABASE_URL nicht mehr still auf SQLite zurück.
  • TrueNAS-Deployment unter deploy/truenas/ ergänzt; Reverse Proxies verwenden die stabile TrueNAS-Host-IP auf Port 8080 statt einer internen Container-IP.
  • Dashboard-Karten, Energieverlauf und Tabellen auf schmalen Displays auf die verfügbare Breite begrenzt; breite Inhalte scrollen innerhalb ihrer Karte horizontal.

0.5.9 – 2026-08-16

  • RFID-Eingabe an die KEBA-P30-Verwaltung angepasst: die dort übliche 8-stellige Hex-UID kann direkt eingegeben werden.
  • 8-stellige UIDs werden für die UDP-Befehle kanonisch mit acht nachgestellten Nullen auf 16 Hex-Zeichen erweitert; vollständige 16-stellige UDP-Tags bleiben unverändert.
  • RFID-Klassifikator aus der normalen Administrationsoberfläche entfernt; bestehende Klassifikatorwerte bleiben aus Rückwärtskompatibilität erhalten, sind für neue Zuordnungen aber nicht erforderlich.
  • Regressionstests für 8-stellige KEBA-UIDs, 16-stellige UDP-Tags und die tatsächlich gesendete start-Anweisung ergänzt.

0.5.8 – 2026-08-15

  • KEBA-Gateway auf asyncio-Datagram-Transport umgestellt, damit der feste UDP-7090-Socket auch unter dem von Uvicorn verwendeten uvloop funktioniert.
  • loop.sock_sendto() und loop.sock_recvfrom() vollständig aus dem Gateway entfernt; DatagramTransport.sendto() und DatagramProtocol.datagram_received() verwenden denselben dauerhaft an 7090 gebundenen Socket.
  • Regressionstest ergänzt, der den vollständigen KEBA-UDP-Austausch explizit unter uvloop ausführt und den festen Quellport prüft.
  • Gateway-Startlog nennt nun zusätzlich den verwendeten UDP-Transport, damit der produktive Netzwerkpfad leichter diagnostizierbar ist.

0.5.7 – 2026-08-15

  • KEBA-Gateway auf einen prozessweit dauerhaft offenen UDP-7090-Socket umgestellt; Senden und Empfangen laufen über denselben Listener.
  • Gateway-Access-Log und gezielte KEBA-Diagnoselogs aktiviert: HTTP-Anfrage, gebundener UDP-Socket, Route-Quell-IP, eingehende Datagramme und aussagekräftige Timeout-Diagnose.
  • RFID-Werte werden in den neuen Diagnoseprotokollen weiterhin nicht ausgegeben.
  • Hostseitiges Diagnosewerkzeug scripts/keba-udp-probe.py ergänzt, um Docker/Rootless/NAT als Fehlerquelle eindeutig vom KEBA-Protokoll zu trennen.
  • Dokumentation korrigiert: Host-Networking beseitigt Docker-Bridge-NAT bei rootful Linux, kann aber keine weitere NAT-Stufe außerhalb dieses Netzwerk-Namespace verhindern.

0.5.5 – 2026-08-15

  • Energieverlauf mit kompakten periodengerechten Achsenbeschriftungen: Tage als TT.MM., Monate als kurze Monatsnamen und vollständige Werte weiterhin im Tooltip.
  • X-Achsenbeschriftungen werden auf schmalen Displays gedreht und erhalten zusätzlichen unteren Platz, damit sie weder überlappen noch abgeschnitten werden.
  • Bei dichten Zeitreihen werden auf schmalen Displays automatisch Zwischenbeschriftungen ausgeblendet; Balken und Tooltips bleiben vollständig erhalten.

0.5.5 – 2026-08-15

  • KEBA-P30-UDP-Empfang korrigiert: SNLO bindet vor dem Senden den festen lokalen UDP-Port 7090 und verarbeitet die Antwort der Wallbox dort.
  • Compose veröffentlicht UDP 7090 für den API-Container; Portkonflikte werden mit verständlicher Fehlermeldung gemeldet.
  • Dashboard-Kennzahlen bleiben auf schmalen Displays zweispaltig und werden kompakter dargestellt.
  • Asynchrone Seitenwechsel und Admin-Ansichten gegen veraltete DOM-Antworten abgesichert; Dashboard-Live-Poller werden zuverlässig ersetzt statt vervielfacht.
  • API-Aufrufe besitzen ein clientseitiges Timeout, damit die Oberfläche bei einer nicht antwortenden Gegenstelle nicht unbegrenzt hängen bleibt.
  • Ladesitzungen im Dashboard und in der Sitzungsliste öffnen beim Antippen eine Detailansicht mit den jeweils sichtbaren Preisbestandteilen.
  • Lizenzhinweis nennt Daniel Spittank als Copyright-Inhaber.

0.5.3 – 2026-08-15

  • Forgejo-CI weiter vereinfacht: validate ruft scripts/validate-release.sh nicht mehr auf und enthält keinerlei Dokumentationsprüfung.
  • validate führt ausschließlich Python-Kompilierung, 29 Anwendungstests, JavaScript-Syntaxprüfung und Alembic-Migrationsprüfung aus.
  • Zensical wird ausschließlich im separaten docs-Job installiert und gebaut; die Veröffentlichung folgt direkt der funktionierenden git-pages-Vorlage.
  • Pages-Ziel bleibt https://daniel.snii.de/snlo/; Docker-Builds bleiben ausschließlich im Tag-Release.

0.5.2 – 2026-08-15

  • Docker-Build aus dem normalen Forgejo-CI-Workflow entfernt; Images werden ausschließlich im Tag-Release gebaut
  • Zensical und git-pages fest auf die Repository-Pages-Adresse https://daniel.snii.de/snlo/ eingestellt
  • konfigurierbare PAGES_URL und Hinweise auf eine Custom Domain entfernt
  • Projekt unter die GNU Affero General Public License v3.0 (AGPL-3.0-only) gestellt
  • vollständiger AGPL-Lizenztext, Lizenzdokumentation und sichtbarer Quellcode-/Lizenzhinweis in der Webapp ergänzt

0.5.0 – 2026-08-15

  • Zensical-Dokumentationssite aus den Markdown-Quellen unter docs/
  • deutschsprachige Navigation, SNLO-Wortmarke, Hell-/Dunkeldarstellung und eigener Dokumentationsstil
  • reproduzierbarer Dokumentationsbuild mit gepinnter Zensical-Version und überschreibbarer kanonischer Pages-URL
  • Forgejo-CI für Tests, Migrationen, Dokumentationsbuild und Container-Build
  • automatische Veröffentlichung der Dokumentation über git-pages nach erfolgreichen Pushes auf main
  • Multi-Arch-Release-Workflow für linux/amd64 und linux/arm64 bei v*-Tags
  • ein gemeinsames Forgejo-Registry-Image für migrate, api und worker
  • Compose-Umschaltung zwischen lokalem Build und Registry-Image über SNLO_IMAGE und SNLO_PULL_POLICY
  • Betriebsdokumentation für Forgejo-Secrets, Variablen, Pages und Registry-Deployment
  • Release-Tag wird vor dem Push auf exaktes vX.Y.Z und Übereinstimmung mit pyproject.toml geprüft

0.4.0 – 2026-08-15

  • vollständige Produktumstellung auf SNLO – Spittank.net Ladeorganisation
  • App- und PWA-Wortmarke SNLO · Laden organisiert.
  • technischer Python-Paketname, Compose-Projektname, Cookie-Namen, Datenbankvorgaben, OIDC-Beispiele und Exportdateien auf snlo vereinheitlicht
  • neues horizontales SVG-Logo sowie neu erzeugte PWA-Icons in 192 und 512 Pixeln
  • konfigurierbarer, projektunabhängiger PostgreSQL-Volume-Name für sichere Updates
  • Lesekompatibilität für bereits verschlüsselte EVCC-/KEBA-Zugangsdaten bleibt erhalten

0.3.0 – 2026-08-15

  • OpenID-Connect-Anmeldung über Authorization Code mit PKCE S256
  • Rollenabgleich über konfigurierbare Nutzer- und Administratorgruppen
  • automatische OIDC-Nutzeranlage oder sichere Verknüpfung über verifizierte E-Mail-Adresse
  • optionaler direkter Redirect zum Identity Provider mit lokalem Fallback über /?local=1
  • OIDC-only-Betrieb durch deaktivierbaren lokalen Login
  • EVCC-Instanzen können bearbeitet und mit kontrollierter Historienlöschung entfernt werden
  • benannte Tarife unabhängig von Nutzern und Zeiträumen
  • globale und nutzerbezogene Tarifzuordnungen mit Gültigkeitszeiträumen
  • historische Tarife können nach Warnung bearbeitet und alle betroffenen Sitzungen neu berechnet werden
  • Fahrzeuge können mehreren Nutzern gleichzeitig zugeordnet werden
  • pro Fahrzeug und Zeitraum genau ein zahlender Nutzer
  • Filter für Nutzer: alle zugeordneten Fahrzeuge oder nur selbst bezahlte Fahrzeuge
  • rückwirkende Reparatur der EVCC-Fahrzeugzuordnung über internen Namen oder EVCC-Titel
  • Admin-Druckansicht für beliebige zahlende Nutzer
  • Nutzer-CSV-Export entfernt; CSV bleibt Administratoren vorbehalten
  • fremde aktive Sitzungen werden vollständig auf „Belegt“ reduziert
  • Reservierungen/Claims vollständig aus Bedienoberfläche und API entfernt
  • überarbeitete Kostenbegriffe: Stromkosten, Aufschläge, Solaranteil und Batterienutzung gesamt
  • optionaler KEBA-P30-UDP-Adapter mit verschlüsselten RFID-Keys je Nutzer
  • Freigabe und Beenden einer KEBA-Sitzung über die App mit hinterlegter RFID
  • Alembic-Migration mit Übernahme vorhandener 0.1-Tarif-Snapshots und Fahrzeugzahler

0.1.1 – 2026-08-15

  • erster vollständiger Quellstand
  • EVCC als verpflichtende Lade- und Sitzungsquelle
  • dynamisch viele EVCC-Instanzen
  • fahrzeugbasierte Nutzerzuordnung
  • vier Aufschlagskomponenten ohne Monatsbeitrag
  • Batterieentladungsregel inklusive Obergrenze
  • FastAPI-PWA, PostgreSQL, Collector, Alembic und Compose