Hermes
c5a09833c9
FIX-NETATMO-05: ACeP Native-Farben + bessere Spalten-Verhaeltnisse
...
* Farben auf ACeP 7-Farben-Palette gemappt: BLACK, WHITE, GREEN, BLUE, RED, YELLOW, ORANGE
(PIL.quantize dithert sonst alles in matschige Mischfarben)
* Background PAPER_BG = (255,255,255) echtes Weiss statt warm-creme
* Spalten-Verhaeltnis neu: Indoor 32% (mehr Platz fuer 5 Sensoren),
Aussen 28%, Mitte 18%, Forecast 22%
* Big-Temp candidates von [150,130,110,95] auf [120,100,85,72,60] reduziert
* FAINT und INK_LIGHT als BLACK definiert (Grautöne ergeben Mischpixel)
* Funktioniert mit echten Daten: zeigt 5 Indoor-Sensoren + alle Aussensensoren
2026-08-29 20:49:26 +04:00
Hermes
c55cc90bda
FIX-NETATMO-04: Hintergrund auf echtes Weiss fuer ACeP-Display
...
ACeP rendert warm-creme (252,248,240) als nicht-weisses Pixel und
laesst den Hintergrund verfaerbt/gruengelbstichig aussehen.
PAPER_BG auf (255,255,255) und alle Box-Fills auf reines weiss gesetzt.
Chart-Fill (225,240,225) entfernt — Linie allein reicht.
Box-Trennlinien und Akzent-Farben unveraendert.
2026-08-29 20:40:41 +04:00
Hermes
1aa11f5843
FEAT-NETATMO-03: Luftdruck + 3-Tage Forecast + Überstände-Fix
...
* Luftdruck (mbar) mit Trend-Pfeil (up/down/stable) als 4. Stat in Aussen-Box
* 3-Tage Forecast via Open-Meteo (kostenlos, kein API-Key) in neuer Spalte rechts
* Neue Spalten-Aufteilung: 36/20/24/20% (Aussen / Mitte / Indoor / Forecast)
* Battery-Indikatoren mit %-Wert an Aussen, Wind, Regen und allen 5 Indoor-Sensoren
* Sans-Font (Liberation Sans) statt Serife — moderner Look
* Sichere Padding-Werte (14px Aussen, 14px Indoor) verhindern Text-Überstände
* Temp-Trend farbcodiert: Trend-Pfeil grün (steigend) / rot (fallend)
* Config-Felder: show_forecast (default true), Wind/Regen ein/ausschaltbar
* Inline _fit_size() Helper statt palette.fit_font() (vermeidet Dict-Lookup-Probleme)
* Forecast wird automatisch deaktiviert wenn Open-Meteo nicht erreichbar
* CO2-Schwellen weiterhin konfigurierbar via config string
2026-08-29 20:30:47 +04:00
Hermes
fe1c06b306
FEAT-NETATMO-02: Komplettes Redesign auf 4x4 WarmNews-Layout
...
* Indoor: 5 Sensoren (1x Main + 4x NAModule4) prominent mit Tag, Temp, CO2-Bar
* Outdoor: Big-Temp + 12h-Verlaufsgraph + Min/Max/Luftfeuchte
* Wind/Regen: je mit Mini-Verlauf + 1h/24h-Bars
* Forecast: 3 Tage mit Min/Max + Regen-Bar
* Batterie-Indikatoren mit %-Anzeige an Aussen, Wind, Regen und allen 5 Indoor-Sensoren
* CO2-Bars mit ppm-Wert + Grün/Gelb/Rot-Schwellen
* Sans-Schrift only, WarmNews-Farbpalette (warm-weiss, Tinte-schwarz, Akzent-Farben)
* Subtile Box-Rahmen + Accent-Strips für visuelle Trennung
designbase.py neu hinzugefügt als Template-Modul.
tools/netatmo_auth.py: Auth-Flow leicht angepasst (Redirect-URI auf Pi-IP statt localhost).
2026-08-29 20:24:03 +04:00
hermes
9b91598f5b
FIX-NETATMO-01: Netatmo-Plugin an 2025-API anpassen + /config-Bug fixen
...
Netatmo hat 2025 den OAuth-Password-Grant komplett abgeschaltet.
Auth-Flow ist jetzt nur noch Authorization Code + Refresh-Token.
Ausserdem Domain-Migration api.netatmo.net → api.netatmo.com mit
Azure-Front-Door-WAF die form-urlencoded POSTs blockt.
Plugin (plugins/netatmo.py):
- URLs auf api.netatmo.com umgestellt
- _post_form sendet JSON statt form-urlencoded (umgeht WAF)
- _obtain_tokens nutzt nur noch Refresh-Token-Grant
- fetch() zeigt klare Fehlermeldung wenn refresh_token fehlt
- config_schema: username/password → refresh_token
- Bessere Fehlertexte (zeigt 'tools/netatmo_auth.py erneut ausführen')
Helper (tools/netatmo_auth.py):
- Lokaler HTTP-Server auf 0.0.0.0:8765 fuer Authorization-Code-Callback
- Erkennt LAN-IP automatisch
- Erkennt Chromium auf dem Pi (Display :0) fuer localhost-Redirect
- Tauscht Code gegen Access+Refresh Token via api.netatmo.com
- Schreibt refresh_token in config.json unter plugin_configs.netatmo
Bug-Fix /config:
- AttributeError: module 'dashboard' has no attribute 'SLOTS'
- legacy v1 slot-logik entfernt (nutzt nicht mehr dashboard_mod.SLOTS)
- /config macht jetzt NUR noch refresh_interval_s speichern
- Slot-Belegung laeuft seit v2 ueber /api/layout (drag&drop)
2026-08-29 19:06:10 +04:00
hermes
25b0432757
FEAT-NETATMO-01: Netatmo Weather Station Plugin
...
OAuth2 Password-Grant + Refresh-Token on-the-fly. Holt sich automatisch
einen neuen Access-Token wenn der alte abläuft (3h Gültigkeit).
Module: NAMain (Indoor), NAModule1 (Outdoor), NAModule2 (Wind),
NAModule3 (Regen), NAModule4 (Extra Indoor).
Slot-responsive:
1x1 — Outdoor-Temp prominent + Mini-Status
4x1 — Indoor | Outdoor | Wind/Regen kompakt (3 Spalten)
1x4 — Vertikale Liste aller Module
2x2 — Indoor-Card (mit CO2-Bar) + Outdoor-Card + Wind/Regen-Bereich
4x4 — Volle Ansicht mit Min/Max, Windrose, Timestamps
Config-Optionen:
client_id/client_secret/username/password (secrets via Admin-UI)
station_filter (substring-match für Multi-Setup)
show_indoor/outdoor/wind/rain/compass/secondary (bools)
co2_thresholds (ppm, default ok@600,warn@1000,alert@1500)
temp_unit (C/F), wind_unit (kmh/ms)
Plus:
- plugins/NETATMO.md: vollständige Doku (Setup, Optionen, Diagnose)
- config.netatmo.example.json: copy-paste Beispiel-Config
- layout.py: netatmo default-size = 4x4 (4 Sub-Cards brauchen Platz)
- README.md: Plugin-Tabelle erweitert
Verifiziert: /api/plugins.json listet netatmo, Auto-Loader erkennt es,
Admin-UI zeigt das Config-Form.
2026-08-29 18:35:29 +04:00
hermes
d71b17d5c9
FIX-WC-01: WordClock Redesign - 3 klare Zonen ohne Überlappung
...
Vorher: 11x8-Grid mit starrem Layout, viele Buchstaben-Cluster überlappten
sich gegenseitig, Stunden-Pixel-Font war unleserlich klein/groß gemischt.
Nachher: QlockTwo-inspiriertes Layout in 3 diskreten Zonen:
- Header (Wochentag + Datum, accent, klein)
- Wort-Grid (ES IST + Minuten-Phrase in einer sauberen Zeile)
- Stunden-Block (Stunde in großer Aldrich-Schrift)
Plus:
- Minuten-Dots oben rechts (QlockTwo-typisch: ●●●● für Sektor-Offset)
- Bug-Fix: font_key-Fallback überspringt 'clock'-Pixel-Font
- Bug-Fix: 12/24h Stunden-Mapping für Wortuhr (16:30 = 'halb fünf' → FÜNF)
- Neue Option 'show_es_ist' zum Ein-/Ausblenden des 'ES IST'-Prefixes
- Slot-size-aware: 1x1 single-line, 2x2/4x4 zones, small fallback < 240x140
Verifiziert auf Pi-Display: 'VIERTEL NACH VIER' / 'HALB FÜNF' rendern sauber.
2026-08-29 18:35:20 +04:00
epaper-dashboard
31d27ffa92
FEAT: 4x4 grid UI fixes, smooth drag-drop ghost preview, WordClock plugin
...
- Grid items now correctly placed inside .grid-cell divs (CSS Grid children)
- Visual occupied-state feedback during drag (CSS classes, no full re-render)
- Drag ghost preview (green=ok, red=overlap) replaces flicker on dragend
- New clock_wordclock plugin: German/English word clock (QWATCH layout)
2026-08-29 16:52:55 +04:00
epaper-dashboard and Hermes
45d854e85e
weather.py: nutze fetch_with_retry + render_error_banner
...
Bei API-Fehler (HTTP 5xx, Timeout, DNS-Fehler, Connection refused) wird
3x retry mit backoff versucht. Bei 3x fail wird ein auffaelliges rotes
"!"-Schild mit Plugin-Name und Fehlermeldung statt leeren Slot gerendert.
base.py: NEU - fetch_url() Helper mit Retry-Logik + Error-Formatting
+ render_error_banner() Funktion fuer Plugin-Slots.
Co-Authored-By: Hermes <noreply@hermes.local >
2026-08-26 22:15:53 +04:00
epaper-dashboard and Hermes
1f142f5245
Sync to Pi: alle Features die live deployed sind
...
Aus dem Backup und Live-Pull vom Pi (10.11.3.144):
- dashboard.py: Grid-Linien nur im freien Hintergrund (nicht durch Widgets)
- templates/index.html: komplett redesigned mit Sidebar + Topbar + Toast + Modal
- plugins/clock.py: responsive Layout (1x1 bis 4x4)
- plugins/system.py, weather.py, minimax.py: mit Threshold-Bars und Color-Variants
- plugins/base.py: NEU — fetch_with_retry Helper (3x retry mit backoff)
+ render_error_banner für fehlgeschlagene API-Plugins
(grosses rotes "!" Icon mit Plugin-Name und Fehler statt Crash)
Cleanup: Helfer-Chaos (renderer.py/2/3, design_a/b/c.html, clock_classic.py,
23x clock_*.png, alte test_*.py) wurde bereits im vorherigen Commit entfernt.
Co-Authored-By: Hermes <noreply@hermes.local >
2026-08-26 22:11:36 +04:00
ki
28124c5617
Initial commit: epaper-dashboard for 7.3" ACeP 7-Color display
...
- dashboard.py: plugin-based renderer with 4x4 grid layout
- admin.py: web UI with layout editor + plugin configs
- layout.py: pack algorithm, item placement, grid system
- plugins/: clock, weather, system, spotify, strava, gmail, minimax, hello
- network_watchdog.py: WiFi AP/client mode management
- waveshare_epd_init.py: vendor driver stub
2026-08-26 14:12:43 +04:00