Fennek · Releases
from GitHub · updated 2026-06-2320 releases
v2.6.0 # 1 day ago · 2026-06-22 16:46 UTC
Änderungen
- Tic-Tac-Toe: Fennek macht mit 20 % Wahrscheinlichkeit einen zufälligen Zug statt Minimax — der Spieler hat jetzt eine echte Chance zu gewinnen
- Adaptives Polling: Eingabe-Polling drosselt sich nach 3 s Leerlauf von ~100 Hz auf ~30 Hz (spart Core-1-Wachzeit ohne spürbare Latenz)
- Tap-Log-Drossel: Gehaltener Finger flutete Serial-Konsole mit Dauer-Taps — jetzt max. 1 Log-Zeile alle 400 ms
power::idleMs(): Neue Funktion gibt Millisekunden seit letzter Aktivität zurück
v2.5.9 # 2 days ago · 2026-06-21 19:36 UTC
Podcast-App deaktiviert (WLAN-Sync zu langsam).
- Auto-WLAN-Sync vor Standby (podcast::flushBeforeStandby) auskommentiert — brachte bei jedem Standby das WLAN über den 4-MHz-SD-Bus hoch
- Launcher-Kachel + appmgr-Registrierung + podcast::begin() aus → App vom Gerät verschwunden, Slot 13 (Seite 2) bleibt leer
- Code/Konsolen-Befehle/NVS-Toggle/i18n bewusst behalten (reaktivierbar)
v2.5.7 # 2 days ago · 2026-06-21 19:05 UTC
Sudoku als fünftes Spiel
Neues Spiel Sudoku in der Spiele-App (neben 2048, Minensucher, Schach, Tic-Tac-Toe).
- Arduino-freier Generator + Solver (
sudoku_core.h, host-getestet): randomisiertes Backtracking für die Vollösung, dann eindeutigkeitsprüfendes Ausgraben — erzeugt nur Rätsel mit genau einer Lösung. Rekursionsfrei (iterativer Level-Stack). - 9×9-Gitter à 26 px, Touch-Tap/WASD-Cursor, Zifferntasten 1–9 setzen, 0/Backspace/Mikrofon leeren, Konfliktzellen invertiert, „Gelöst"-Overlay mit Zeit.
- Schwierigkeit Leicht/Mittel/Schwer (40/32/26 Vorgaben).
- Beststände im NVS (gelöste Rätsel + Bestzeit), inkl. INI-Export/-Import.
OTA:
firmware.binangehängt.- Arduino-freier Generator + Solver (
v2.5.6 # 2 days ago · 2026-06-21 15:32 UTC
fix(power): Dateien-Modus am Kabel nicht einschlafen lassen
- battery::external() (DSG-Bit aus BatteryStatus 0x0A) erkennt Netzteil zuverlässig, auch bei vollem Akku (charging() fiel bei Strom ~0 auf false)
- power::poll() nutzt external() statt charging() für die Dateien-Standby-Bremse
v2.5.5 # 2 days ago · 2026-06-21 15:07 UTC
feat(wecker): Einmalig-Option für Wecker
- Neues Alarm-Feld
once(NVS byte0 Bit4, abwärtskompatibel) - Einmalige Wecker feuern am nächsten hh:mm tageunabhängig und schalten sich danach selbst aus
- Editor-Preset "Einmalig" im Feld Tage; Liste/Editor zeigen es an
- Konsole:
alarm <i> <hh:mm> einmal(once/1x)
OTA: firmware.bin angehängt.
- Neues Alarm-Feld
v2.5.4 # 2 days ago · 2026-06-21 15:00 UTC
OTA-Update-Fix + Ollama-Timeout.
- OTA
-104behoben: GitHub liefert für Release-Assets eine signierte Redirect-URL (release-assets.githubusercontent.com, ~900 Zeichen). Diese sprengte den 300-Byte-Puffer inapply()→ abgeschnittene URL →httpUpdate-Fehler-104(wrong http code). Puffer auf 1400 Byte vergrößert. - notes_ai (Ollama) Timeout:
HTTPClient::setTimeout()nimmtuint16_t(max 65535 ms); der Wert 120000 lief still auf 54464 ms über. Konstante auf 65000 ms korrigiert.
Erstes Release, mit dem OTA von einer früheren Version aus zuverlässig durchläuft.
- OTA
v2.5.3 # 2 days ago · 2026-06-21 14:48 UTC
perf(dateien): Request-Zähler-Refresh 10x seltener gegen E-Ink-Flackern
- Drosselung des Request-Zähler-Voll-Redraws im RUNNING-Zustand von 5 s auf 50 s
- Zähler ist reine Info; seltenere Voll-Redraws sparen sichtbares E-Ink-Flackern
v2.5.2 # 2 days ago · 2026-06-21 14:29 UTC
Highlights
- On-Device-OTA-Knopf (Settings → Update → „Aktualisieren"): prüft GitHub-Releases und flasht direkt am Gerät mit Vollbild-Fortschritt (Phase + Balken + %). Kein Browser/Konsole mehr nötig.
- Notizen: Audionotiz-Player (Play/Pause, ±10 s, Region-Fortschritt) + hoch-scrollbarer Editor.
- Karteikarten: Übersicht mit Leitner-Fächer-Verteilung (fällig/bearbeitet).
- Kopfrechnen: adaptive Schwierigkeit, je-Modus persistierte Stufe.
- notes_ai: behutsamerer Korrektur-Prompt (nur Rechtschreibung/Umlaute, kein Umdichten).
- Tools:
maps_tiles.pymit wählbaren Kachelquellen (--preset standard|cyclosm|topo).
OTA-Update
Geräte ab v2.5.1 können direkt am Gerät auf diese Version aktualisieren (Settings → Update → „Aktualisieren") oder via Web-UI (
fennek.local) / Konsole (ota update).Flashen (USB):
firmware.binin den inaktiven OTA-Slot bzw. viapio run -e fennek -t upload.v2.5.0 # 2 days ago · 2026-06-21 10:11 UTC
Full Changelog: https://github.com/danst0/fennek/compare/v2.4.9...v2.5.0
v2.4.8 # 3 days ago · 2026-06-20 19:59 UTC
Änderungen
- OTA: Semver-Vergleich für Update-Erkennung (
tag_name != FENNEK_VERSION→ korrekte Versionslogik) - Akku: Batterieanzeige-Fix in der Statuszeile
Flashen
pio run -e fennek -t uploadoder OTA via
fennek.local→ Firmware-Update.- OTA: Semver-Vergleich für Update-Erkennung (
v2.3.1 # 4 days ago · 2026-06-19 14:27 UTC
Notizen / Audio
- Sprachnotiz-Liste zeigt jetzt Datum + HH:MM (statt HH:MM:SS bzw. generisch „Sprachnotiz").
- Aufnahme-Gain ×6 mit Sättigung: das PDM-Mikro war ~−20 dBFS leise → Wiedergabe kaum hörbar. Neue Aufnahmen sitzen bei ~−7 dBFS (kein Clipping).
- Sauberer I2S0-Handover nach der Aufnahme: kein doppeltes
i2s_driver_uninstallmehr (endMic/MicResumemacht uninstall+install in einem Schritt).
Karten / GPS
- No-Fix-Fallback zentriert jetzt auf Düsseldorf (51.2277/6.7735);
DEFAULT_ZOOM15 → 13 (NRW-weit bekachelt). - GPS-Zeit-Diagnose: Einmal-Log
[MAPS] GPS-Zeit empfangen …pro Karten-Session.
Enthält außerdem v2.3.0 (GPS-/WAV-Diagnose-Logs, Karten-Fallback, Notizen-Zeitlabel).
v2.0.4 # 6 days ago · 2026-06-17 17:30 UTC
Changes
- Regenerated README/website screenshots. The home-screen mirror in the host renderer (
tools/screenshot.cpp) was stuck on an old layout (6 tiles, 2×3); it now matches the reallauncher.cpp— a 2×5 grid with all 10 slots (Music/Listen/Read/Mesh/Settings/Games/Files/Notes/Alarm). The Settings screenshot now shows the current version. - Images updated in
docs/screenshots/{de,en,sv}/and on fennek.dumke.me.
🤖 Generated with Claude Code
- Regenerated README/website screenshots. The home-screen mirror in the host renderer (
v1.9.4 # 7 days ago · 2026-06-17 06:53 UTC
Änderungen
- Web-Dateimanager: Löschen ohne Rückfrage. Nur Ordner mit Unterordnern fragen kurz nach und werden dann rekursiv gelöscht (
rmRecursive); Dateien und flache Ordner verschwinden sofort. - Notizen-App + Konsole: weitere Verbesserungen.
🤖 Generated with Claude Code
- Web-Dateimanager: Löschen ohne Rückfrage. Nur Ordner mit Unterordnern fragen kurz nach und werden dann rekursiv gelöscht (
v1.9.2 # 8 days ago · 2026-06-15 15:51 UTC
Added
BATTLOG— opt-in battery & activity logger (services/battlog). When theBATTLOGbuild flag is set, the firmware writes one record per event (app switch, audio track, mesh radio on, Wi-Fi on/off, standby/wake) and a battery probe every 60 s to/.fennek/battery.log(timestamp + %/mV/charging? + Wi-Fi/mesh status). It's a throttled PSRAM ring flushed to SD before standby, and downloadable via the Web file manager — useful for diagnosing real-world battery drain. Deliberately zero-cost when the flag is off (allBATTLOG_*calls compile to nothing).
🌐 Project page & screenshots: https://fennek.dumke.me
Full changelog:
CHANGELOG.mdv1.9.1 # 8 days ago · 2026-06-15 15:51 UTC
Fixed
- Notes never silently lost on a failed SD write. The save path now clears its dirty flag only on a complete success; if an SD write or remove fails, the note stays dirty and is retried on the next autosave instead of being overwritten on the next editor open.
- Just-played track now reaches the scrobble queue before standby.
power::poll()stops audio (and lets the audio task drain the stop command) before the pre-standby Navidrome flush, so the current track is enqueued vianoteTrackEnded()rather than landing in the PSRAM ring that deep sleep would otherwise discard.
Full changelog:
CHANGELOG.mdv1.9.0 # 8 days ago · 2026-06-15 15:51 UTC
Added
- Mesh:
contacts resetconsole command +mesh_client::resetContacts(). Clears all contacts and their persistent mirrors (SPIFFS/contacts, SD/meshcore/contacts.bin); the contact table then rebuilds itself from incoming adverts. Handy when the 64-slot table fills up with stale nodes or you want a clean slate.
Full changelog:
CHANGELOG.md- Mesh:
v1.8.1 # 8 days ago · 2026-06-15 15:51 UTC
Changed
- Unified back/home navigation across all apps. Home is now a visible affordance: the status bar shows a house glyph (⌂) outside the launcher and the whole bar taps to Home. Lower corner buttons are consistently labelled "Back" (exactly one level) — audiobook/reader/notes lists and Settings now say "Back" instead of "Home", and the Settings back button steps edit → category → root → launcher. Mesh sub-screens dropped their redundant second "Home" button, the Files app gained a visible "Back" button, and the reader footer tap-zone is labelled "◄ List". Games keep no on-screen back button (exit via the ⌂ glyph; keyboard
Backspace/Qstill works). Keyboard conventions (Q= Home,Backspace= one level back) unchanged.
Full changelog:
CHANGELOG.md- Unified back/home navigation across all apps. Home is now a visible affordance: the status bar shows a house glyph (⌂) outside the launcher and the whole bar taps to Home. Lower corner buttons are consistently labelled "Back" (exactly one level) — audiobook/reader/notes lists and Settings now say "Back" instead of "Home", and the Settings back button steps edit → category → root → launcher. Mesh sub-screens dropped their redundant second "Home" button, the Files app gained a visible "Back" button, and the reader footer tap-zone is labelled "◄ List". Games keep no on-screen back button (exit via the ⌂ glyph; keyboard
v1.8.0 # 10 days ago · 2026-06-13 19:18 UTC
Added
Notes app (launcher tile 7): a daily-notes model — exactly one note per day, named after the local date (
/notes/YYYY-MM-DD.md). "+ Today" opens or appends to today's note; the list shows every day newest-first with a first-line preview, and notes can be deleted with a confirmation. The editor is append-style (type / Backspace / Enter) with its own word wrap and a compact header.Persistence is chunked under
spiLock(never insidedraw()), with a 30 s autosave and a save on leave; empty notes are removed. Without an SD card it shows "No SD card" + "Search again" like the other apps. The date comes from the local system clock (timesync). New console commandnotesruns an SD round-trip / scan self-check (in the style ofbooks).
Localized in DE/IT/SV/EN/ES. Verified on device (clean boot, SD round-trip with UTF-8 preserved, scan/sort).
Full changelog: CHANGELOG.md
v1.7.1 # 11 days ago · 2026-06-13 04:08 UTC
✨ Added
- Settings backup as INI (
services/settingsfile): export/import all NVS settings to/from an SD file. SPI-free serialization on a RAM buffer, SD I/O isolated underspiLock. Per-book bookmarks/reading positions are excluded (CRC32-hashed keys). New console command +main/powerwiring.
📝 Docs
- Added
CHANGELOG.mdand GitHub releases for v1.3.0–v1.7.0. - README now ships in English (default), German (
README.de.md) and Swedish (README.sv.md) with a language switcher and release/changelog badges.
📋 Full history: CHANGELOG.md
- Settings backup as INI (
v1.7.0 # 11 days ago · 2026-06-13 04:03 UTC
✨ Added
- "+ New Channel" UI for joining hashtag channels — a "► New Channel" row at the top of the chat list opens a join screen (keyboard types the
#name, PSK derived from it, persisted tochannels.txton SD; jumps straight into the new channel after joining).
🔄 Changed
- Robust time synchronization without a hardware RTC. Canonical clock is now ESP32 system time (
SystemRTCClock), which survives deep sleep. Newservices/timesynccoordinator: opportunistic NTP (when Wi-Fi is up) + a top-up before auto-standby, with Mesh adverts as a passive source. Quality model (estErr = learned drift × time since sync) with exponential back-off,s_clockConfidentbootstrap for the first advert after boot, POSIX time zone (defaultEurope/Berlinincl. DST), settings rows "Time zone"/"Time", and consoletime/time set/time sync/tz.
📋 Full history: CHANGELOG.md
- "+ New Channel" UI for joining hashtag channels — a "► New Channel" row at the top of the chat list opens a join screen (keyboard types the