Commit Graph

50 Commits

Author SHA1 Message Date
ba7f082f48 Rework navigation for a consistent music/room toggle and back button
- Replace the "Mein Zimmer"/"Musik" text pills and the help button with
  two fixed circular corner buttons: a music/room toggle (top-right)
  and a single "back one level" button (top-left) used everywhere -
  search, categories, and the play view.
- Split `view` (browse/play) from a new `page` (music/room) in UiState
  so toggling to the room and back leaves the music side - search,
  selection, even the full-screen play view - exactly as it was.
- Back peels one step at a time (search, then track-search mode, then
  group+category together, since a root shelf tile sets both at once
  and undoing that jump should be one step too).
- Album cards: click the cover to open the track list, click the title
  to start playing immediately (matching what Enter already did from
  the keyboard). Audiobook cards drop the artist line and clamp the
  title to a fixed height so covers stay aligned across a row.
- Root shelf group headings ("Musik", "Hörbücher", "Podcasts") are now
  the link into that group's full category grid, replacing the
  separate search-icon button.
- "Taste zuweisen" is now an icon-only round button, moved to the
  bottom-right so it doesn't sit under the new toggle.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-11 11:12:39 +02:00
69119bb72a Add per-episode podcast cover art and fix nested album grouping
- podcast_feeds.py: fetch per-episode cover art from a feed's itunes:image
  (when it's genuinely distinct from the channel image) or, failing that,
  from the og:image on the episode's own linked page; extract audio from
  video-only enclosures via ffmpeg; match podcast-dl's filename convention
  (illegal characters become "_" instead of being dropped) so enabling
  feed.txt on an already-downloaded show doesn't re-download its back catalog
- scanner.py: _cover_for_episode now checks for a same-stem sidecar cover
  image before falling back to embedded ID3 art and the shared folder cover
- scanner.py/__init__.py: fixed a bug where an album folder nested one level
  deeper than usual (an age-range grouping folder, say) was mistaken for an
  empty album and skipped; added periodic progress logging for long scans
  and analysis passes

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-11 09:54:33 +02:00
747c390303 Add IR remote control (LIRC) with a number-key content mapping
Adds a TCP client for lircd's classic protocol: play/pause/next/prev/
volume/mute map to the same intents every other front-end already
emits, and number keys 0-9 play an assigned album/audiobook from the
start or a podcast show's newest episode, resolved fresh on every
press. The mapping is configured in config.yml and editable from the
frontend: a small "Taste zuweisen" button on the play screen (or the
A+digit keyboard shortcut) opens a 10-key picker to assign whatever is
currently playing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-11 08:31:28 +02:00
57afc32f4a Auto-download new podcast episodes from an RSS feed
A show folder under Kinderpodcasts/ opts in by containing a feed.txt marker
naming its RSS feed. A new PodcastFeedService polls every such feed every 6
hours (and once at startup), downloads any episode not already on disk using
the existing YYYYMMDD - Title.ext convention, and triggers the same
rescan-and-broadcast sequence "Bibliothek neu einlesen" already uses - now
shared via App.rescan_library() instead of duplicated. A show with no
feed.txt is untouched, so there is no new config section for this.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-10 22:43:50 +02:00
2e0e6ad199 Add librosa beat/mood analysis and an Ambience background driven by it
The background worker now runs a real librosa analyzer (tempo, beat grid,
per-second energy/valence curves) instead of only the null baseline, kept
behind build_analyzer() so a plain checkout without the analysis extra still
runs fine. The web player reads that per-track analysis and drives a new
animated "Ambience" background (bubbles, colour, current) that reacts to the
beat and the mood curve as the track plays, plus a debug overlay for tuning
it. Also adds a one-off script to backfill podcast cover art from iTunes.
2026-09-10 22:42:51 +02:00
8aed3b022b updates 2026-08-27 23:46:19 +02:00
a8ed350aec Add "Mein Zimmer" room-control page (Home Assistant, proxied through the backend)
Implements the room-control page from the design mockup: a scenes row above cards
for shutters, color lamps, and brightness-only lamps, all driven by a new
`general.ha` config section (server URL, token, ordered device/scene lists).

The backend proxies every Home Assistant call server-side (GET/POST /api/ha/...)
rather than the browser calling Home Assistant directly, so the long-lived token
never leaves the LAN device and Home Assistant's own CORS settings don't need to
know about musicmouse at all. Card kind (shutter/color/brightness-only) is
inferred at runtime from what Home Assistant reports about each entity, not
configured explicitly.

Also stops tracking python-backend/config.yml, which had drifted into the repo
despite its own header saying it shouldn't be - it now carries real credentials
locally and needs to stay untracked.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-27 23:45:29 +02:00
edb6e5e027 Web frontend 2026-08-27 12:32:20 +02:00
d44c24ec97 Full rearchitecture using Claude
- event bus systen
- all components are independent
- preparation for web frontend
2026-08-26 13:22:28 +02:00
55bcc9448c color parsing cleanup 2026-08-26 11:28:48 +02:00
1cb3387fbe Fix: lights now should turn off correctly when playlist ends 2026-08-26 10:54:40 +02:00
7aa7fe4693 Claude cleanup 2026-08-26 10:38:56 +02:00
bd8925a278 Cleaned up repository
- only moving files around
2026-08-25 17:06:53 +02:00
Martin Bauer
b2c060fcc9 Adapted to new aiomqtt version release/1.1 2024-03-07 16:38:05 +01:00
Martin Bauer
11bf0505fb Changes for python3.11 2024-03-06 17:15:07 +01:00
Martin Bauer
ef038a29a4 fixes release/1.0 2024-01-02 17:41:43 +01:00
Martin Bauer
d5a4bbb7e2 new static effect with range select, increment, and transition time 2024-01-01 18:54:24 +01:00
Martin Bauer
6128d8706d MQTT persist discovery msg 2023-10-09 10:54:33 +02:00
Martin Bauer
6850c9646e from desktop pc 2023-10-06 08:51:28 +02:00
Martin Bauer
828d1b3360 missing files 2023-10-06 08:51:27 +02:00
Martin Bauer
804940bfac modification on musicmouse host 2023-01-03 20:50:45 +01:00
Martin Bauer
a67c6078c5 Local modification 2022-10-02 12:40:42 +02:00
Martin Bauer
42f0701c0b mqtt for shelve light using json protocol now -> more reliable 2022-02-04 18:13:46 +01:00
Martin Bauer
4c5db49c61 mqtt integration 2022-01-13 19:20:33 +01:00
Martin Bauer
1458793d74 started mqtt shelve led control 2022-01-12 22:35:49 +01:00
Martin Bauer
1a17d49599 adding shelve leds 2022-01-12 18:13:59 +01:00
Martin Bauer
32b1c54fbc wip 2021-12-28 11:42:39 +01:00
Martin Bauer
59060d6636 Changes on device 2021-12-26 11:30:56 +01:00
Martin Bauer
da9373e74d generalized main - get values from config 2021-12-24 22:11:43 +01:00
Martin Bauer
823552ce7f updates 2021-12-24 00:12:43 +01:00
Martin Bauer
9a68619293 msgs for button background leds 2021-12-20 21:32:05 +01:00
Martin Bauer
74118fbeb7 Reverse swipe 2021-12-20 20:41:50 +01:00
Martin Bauer
bb5d3e1870 Different color for each figure 2021-12-19 13:46:45 +01:00
Martin Bauer
7a1ed75998 Some missing files & fixes 2021-12-16 23:39:13 +01:00
Martin Bauer
6243480f6e prev/next buttons working 2021-12-16 22:34:40 +01:00
Martin Bauer
1c406f8b4e volume control 2021-12-15 23:14:59 +01:00
Martin Bauer
ee632664e6 Touch events & rotary events to host 2021-12-15 22:47:28 +01:00
Martin Bauer
f9f1244807 mouse leds test 2021-12-15 19:21:16 +01:00
Martin Bauer
f4e31176a9 first try with vlc 2021-11-27 22:05:48 +01:00
Martin Bauer
4fbd7f0f1b Firmware cleanup 2021-11-27 21:18:54 +01:00
Martin Bauer
11db5763eb 2way host-firmware comm 2021-11-27 19:04:08 +01:00
Martin Bauer
e1807360f8 started host <-> fw communication 2021-11-25 22:20:04 +01:00
Martin Bauer
da9a96fdfa Color interpolation effect 2021-11-19 20:31:39 +01:00
Martin Bauer
0bbb5d278c Swipe backwards 2021-11-19 17:34:59 +01:00
Martin Bauer
aa76900244 Alexa swipe effect 2021-11-19 17:22:09 +01:00
Martin Bauer
484db9bdfa start/stop for audio player 2021-11-18 17:52:45 +01:00
Martin Bauer
3bb280cda2 c++ audio player 2021-11-18 15:47:49 +01:00
Martin Bauer
5a41c03e8e Separate FreeRTOS task for LED 2021-11-17 23:18:10 +01:00
Martin Bauer
c68114dc4c New led control 2021-11-16 22:04:22 +01:00
Martin Bauer
6a5d4c463c Initial commit 2021-10-27 16:40:18 +02:00