--- # musicdolphin: display-only instance. No physical mouse attached, so serial and audio # are both "simulate" - the web front-end (shown locally in the pi_kiosk Firefox window, # and reachable on the LAN for a tablet) is a complete way to drive the player on its # own. `figures` still needs at least one entry (the schema requires it) even though # nothing will ever scan a tag here. # # This Pi does have a HifiBerry amp (mediapi_has_hifiberry_amp, alsa_card_name # sndrpihifiberry), so the `softvol_effects` slot from pi_alsasetup exists on it. # Swapping alsa_device to that is the one-line change that gives this instance real # sound - the amp is currently shared by squeezelite and shairport only. # # Unknown keys are rejected rather than ignored, so a typo fails at startup with the # path to the offending line. Every key is documented in the app repo's # python-backend/config.yml.example. general: library: # The four shelves underneath are fixed names, not settings: Figuren/, Musik/, # Hoerbuecher/ (with real umlauts) and Kinderpodcasts/. root: /media/musicmouse # Relative, so it resolves against *this file's* directory - # /media/musicmouse/.musicmouse-cache. Seeded by the app repo's # scripts/sync-library.sh; safe to delete, at the cost of recomputing analysis. cache: .musicmouse-cache # analysis_workers: 2 # ^ pointless until this role installs the backend's `analysis` extra # (librosa + numpy, a heavy build on a Pi). Without it build_analyzer() falls # back to NullAnalyzer and the reactive background stays static. # Both required rather than optional on purpose: running blind or silent has to be # asked for, so a config that lost a line fails loudly instead of booting into # something that looks like it is working. Startup says so every boot. serial_port: "simulate" alsa_device: "simulate" web: host: "0.0.0.0" port: 8080 # Absolute on purpose. The repo's example uses ../web/dist because its config sits # in python-backend/; from /media/musicmouse that would resolve to /media/web/dist # and silently serve nothing. static_dir: /opt/musicmouse/web/dist # The typing game. Both paths are relative, so both land in /media/musicmouse/. # curriculum_file must exist at startup and is installed by this role; # progress_file is created and written by the app itself. tippen: curriculum_file: tippen-curriculum.yml progress_file: tippen-progress.json # Home Assistant "Mein Zimmer" page. Left out until the Wohnzimmer-oben entity ids # are picked - the dev config's entities are Arbeitszimmer, the wrong room for this # Pi. An empty ha: block is invalid; the section needs at least one device or scene, # so uncomment it only once it is filled in: # # ha: # url: "https://ha.bauer.tech" # token: "" # devices: # - entity_id: cover.wohnzimmer_oben_rollo # name: "Rollo" # - entity_id: light.wohnzimmer_oben_... # name: "Licht" # scenes: # - entity_id: scene.wohnzimmer_oben_... # name: "Lesen" # No mqtt: section. The Home Assistant integration exposes the *mouse's* lights, # buttons, touch areas and tag scanner, none of which exist on a simulate-only # instance - it would publish a device of dead entities. # # No lirc: section either, and consequently no top-level `remote:` mapping. This host # uses mediapi_ir_control: irserver, a custom serial daemon on /dev/ttyUSB0; the # backend's LircConfig speaks lircd's TCP protocol (pi_lirc, port 2222) and cannot # talk to it. # Backlight of the prev/next buttons while a figure is playing, 0..1. Inert here # (no mouse), kept so the file reads the same as the other hosts'. button_leds_brightness: 0.5 # Volume, 0..100. The full range: this one is driven from a screen, not from a knob a # child can spin, so there is nothing to protect against. min_volume: 0 max_volume: 100 initial_volume: 40 volume_increment: 5 figures: # Placeholder - serial_port is "simulate" so no reader ever reports a tag id, but the # schema requires at least one figure to be configured. placeholder: id: "0000000001" colors: ["#ffffff", "#ffffff", "#000000", "#ffffff"]