You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 0863f75
Browse filesBrowse the repository at this point in the historyBrowse files
feat: optional 'no standby while on external power' setting
Adds a General-tab option to suppress the inactivity deep-sleep while the device
is on external power. The complete board has no charge/VBUS sense, so 'on power'
is a heuristic: battery voltage >= a configurable threshold (default 3.5 V, since
the LiFePO4 charge voltage sits above its resting voltage). The manual sleep timer
is unaffected.
- System: System_IsExternallyPowered() + System_ReloadSleepSettings(); the idle
branch of System_SleepHandler() refreshes the activity timer instead of sleeping
when enabled and powered. Config in NVS (noSleepPwr / pwrSleepVolt), applied live
on settings save.
- Web: checkbox + voltage-threshold field in the General settings sub-tab; settings
JSON read/write. i18n de/en/fr.
Verified on the test device: settings round-trip persists and is read back, other
settings preserved, UI fields populate and localize, no console errors.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: README.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -136,6 +136,7 @@ neon logo that doubles as the SVG favicon ([`7be5254`](../../commit/7be5254)):
136
136
|**Fully offline web interface**: all third-party libraries (jQuery, jQuery-UI, Bootstrap JS/CSS, jstree + themes, bootstrap-slider, Font Awesome + webfonts, i18next) and the Orbitron/Rajdhani/Share Tech Mono fonts are now vendored and served gzipped from the device instead of public CDNs. This fixes the ~2-minute first-load hang with empty (untranslated) text after a cold boot/flash, and makes the management UI work without any internet access (incl. AP mode). `processHtml.py` embeds the assets into flash (build size grows accordingly) and now derives unique header symbol names from the full asset path. The libs are concatenated into a single JS and a single CSS bundle (`tools/bundle_assets.py`) so the page makes only a handful of requests — many parallel requests to the ESP32's async web server made some browsers (Safari/Chrome) stall for minutes while Firefox coped |[`c618191`](../../commit/c618191)|
137
137
|**M3U playlist builder**: a "Create playlist" button in the Files tab opens a two-pane builder — browse the SD card on the left, an ordered (drag-to-reorder) track list on the right — to assemble an `.m3u` from SD files, whole folders, and webradio URLs (which `LOCAL_M3U` plays interchangeably). Saving writes `/Playlists/<name>.m3u` via a new `POST /playlist` endpoint; the file can then be assigned to an RFID tag with play mode 11. i18n de/en/fr |[`af041fc`](../../commit/af041fc)|
138
138
|**File browser: assignment badges + context-menu RFID learn (scan-after-select)**: in the Files-tab tree each row is badged (right-aligned, after the name) when that exact path has an **RFID tag** assigned (tag icon) and/or a **per-path EQ rule** (sliders icon), so you can see at a glance what is mapped where. The explorer **context menu** learns/removes RFID assignments directly: right-click a file/folder → **RFID anlernen** → pick a play mode, then **lay the card** — the next scanned card is assigned to that path (no tab switch / submit); or **remove** an existing assignment. Mirrors the existing EQ-profile submenu. Works with physical cards and the [virtual cards](#virtual-rfid-cards) (`CMD_VIRTUAL_RFID_CARD_*`) alike. Badges refresh when a folder is (re)opened and live after assigning/removing. i18n de/en/fr |[`7b8e303`](../../commit/7b8e303)|
139
+
|**No standby while on external power**: optional setting (General tab) that keeps the device from entering the inactivity standby while it is on external power. The `complete` board has no charge/USB sense, so "on power" is inferred heuristically from the battery voltage against a configurable threshold (default **3.5 V** — the LiFePO4 charge voltage sits above its resting voltage). The manual sleep timer is unaffected. i18n de/en/fr |[`no-sleep-on-power`](../../releases/tag/no-sleep-on-power)|
139
140
|**OpenAPI/Swagger spec updated**: the bundled `REST_API.yaml` (served at `/swagger.html`) now documents all fork-added endpoints (`/sync`, `/syncstop`, `/playlist`, `/githubupdate`, `/version`, `/login`, `/logout`, `/security`, `/eqrule(s)`, `/activeequalizer`, `/bluetooth*`, `/sdclean`) and declares the security schemes (`X-API-Key` header / `apikey` query param, or the `ESPUINO_SESSION` login cookie) so the Swagger "Authorize" button works. The web-interface footer links to the Swagger UI (`/swagger.html`) |[`f8298d9`](../../commit/f8298d9)|
Copy file name to clipboardExpand all lines: html/locales/de.json
+5-1Lines changed: 5 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -560,7 +560,11 @@
560
560
"recoverVolBootExp": "Die Box erinnert sich über einen Neustart hinweg, welche Lautstärke zuletzt verwendet wurde und stellt diese automatisch wieder ein.",
561
561
"volumeCurve": "Feinere Abstufungen bei niedriger Lautstärke",
562
562
"volumeCurveExp": "Verwendung von logarithmischer Lautstärkeberechnung. Kann helfen, wenn im unteren Lautstärkebereich die Abstufungen zu grob sind.",
563
-
"readypath": "Pfad zur Begrüßungs-MP3 (Kaltstart)"
563
+
"readypath": "Pfad zur Begrüßungs-MP3 (Kaltstart)",
564
+
"noSleepWhenPowered": "Kein Standby wenn am Strom",
565
+
"noSleepWhenPoweredExp": "Wenn aktiv, geht das Gerät nicht wegen Inaktivität in den Standby, solange es am Strom hängt. Mangels Lade-/USB-Erkennung wird „am Strom“ über die Akkuspannung geschätzt (Ladespannung liegt über der Ruhespannung) — siehe Schwelle. Der manuelle Sleep-Timer bleibt davon unberührt.",
566
+
"poweredVoltage": "Schwelle „am Strom“ (V)",
567
+
"poweredVoltageExp": "Ab dieser Akkuspannung gilt das Gerät als „am Strom“. Für LiFePO4 ist ~3,5 V ein guter Startwert (Ladespannung ~3,6 V, Ruhespannung voll ~3,3–3,4 V)."
Copy file name to clipboardExpand all lines: html/locales/en.json
+5-1Lines changed: 5 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -560,7 +560,11 @@
560
560
"recoverVolBootExp": "After a restart, the speaker remembers which volume was last used and automatically adjusts it again.",
561
561
"volumeCurve": "Finer gradations at low volume",
562
562
"volumeCurveExp": "Use of logarithmic volume calculation. Can help if the gradations in the lower volume range are too coarse.",
563
-
"readypath": "Path to ready MP3 (cold start)"
563
+
"readypath": "Path to ready MP3 (cold start)",
564
+
"noSleepWhenPowered": "No standby while on power",
565
+
"noSleepWhenPoweredExp": "When enabled, the device will not go into standby due to inactivity while it is on external power. Since there is no charge/USB sense, being 'on power' is estimated from the battery voltage (charge voltage sits above the resting voltage) — see threshold. The manual sleep timer is unaffected.",
566
+
"poweredVoltage": "'On power' threshold (V)",
567
+
"poweredVoltageExp": "At or above this battery voltage the device is considered 'on power'. For LiFePO4, ~3.5 V is a good starting point (charge voltage ~3.6 V, full resting ~3.3-3.4 V)."
Copy file name to clipboardExpand all lines: html/locales/fr.json
+5-1Lines changed: 5 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -549,7 +549,11 @@
549
549
"recoverVolBootExp": "Le boîtier se souvient, après un redémarrage, du dernier volume utilisé et le rétablit automatiquement.",
550
550
"volumeCurve": "Des nuances plus fines à faible volume",
551
551
"volumeCurveExp": "Utilisation du calcul logarithmique du volume. Peut aider si les nuances sont trop grossières dans la plage de volume inférieure.",
552
-
"readypath": "Chemin vers le MP3 de bienvenue"
552
+
"readypath": "Chemin vers le MP3 de bienvenue",
553
+
"noSleepWhenPowered": "Pas de veille sur secteur",
554
+
"noSleepWhenPoweredExp": "Si activé, l'appareil ne se met pas en veille par inactivité tant qu'il est sur secteur. Faute de détection de charge/USB, « sur secteur » est estimé via la tension de la batterie (la tension de charge dépasse la tension au repos) — voir le seuil. La minuterie de veille manuelle n'est pas affectée.",
555
+
"poweredVoltage": "Seuil « sur secteur » (V)",
556
+
"poweredVoltageExp": "À partir de cette tension de batterie, l'appareil est considéré « sur secteur ». Pour le LiFePO4, ~3,5 V est un bon point de départ (tension de charge ~3,6 V, repos plein ~3,3-3,4 V)."
0 commit comments