Files
boWave/README.md
2026-03-26 14:31:08 +01:00

3.9 KiB
Raw Blame History

Bordanlage Boat Onboard System

A complete multiroom audio + navigation dashboard system for boats. Runs on any Docker-capable computer fully simulated in dev mode (no hardware needed).


Prerequisites

  • Docker Desktop (or Docker Engine + Compose)
  • make
  • For Spotify Connect: a Spotify Premium account

Quick Start

cd bordanlage
make dev

Dashboard: http://localhost:8080


Service URLs

Service URL Description
Dashboard http://localhost:8080 Main touch UI
SignalK http://localhost:3000 Navigation data + chart viewer
Mopidy/Iris http://localhost:6680/iris/ Music player UI
Snapcast Web http://localhost:1780 Multiroom audio control
Jellyfin http://localhost:8096 Media library
Portainer http://localhost:9000 Docker management

Spotify Connect

  1. Run make dev (or make boot on the boat)
  2. Open Spotify on your phone/computer
  3. Tap the device icon (bottom right) → look for "Bordanlage"
  4. If it doesn't appear automatically: Go to Connect to a Device → enter the IP of the host machine manually

On Linux (boat): set network_mode: host for the librespot service in docker-compose.yml for reliable mDNS discovery.


AirPlay

  1. Ensure the shairport container is running
  2. On your iPhone/Mac: open Control Center → tap AirPlay → select "Bordanlage AirPlay"

On Mac: AirPlay works natively via Bonjour. On Windows WSL2: the avahi container in docker-compose.dev.yml handles mDNS.


Adding Music

Drop audio files into ./music/. Mopidy and Jellyfin both mount this directory.

Trigger a Mopidy library scan:

curl -s http://localhost:6680/mopidy/rpc -d '{"jsonrpc":"2.0","id":1,"method":"local.scan"}' \
  -H "Content-Type: application/json"

For Jellyfin: open http://localhost:8096 → Settings → Libraries → Scan.


Connecting Real NMEA Hardware

Edit docker-compose.yml and uncomment the signalk device section:

signalk:
  devices:
    - /dev/ttyUSB0:/dev/ttyUSB0  # NMEA 0183 via USB-Serial

Then configure the NMEA connection in SignalK at http://localhost:3000 → Server → Connections.

For NMEA 2000: use a Yacht Devices YDNU-02 or similar USB gateway.


Migration to Real Boat

Changes needed in docker-compose.yml:

  1. Audio output per zone: add --soundcard hw:N,0 to each zone-* command and uncomment /dev/snd
  2. Spotify/AirPlay discovery: set network_mode: host for librespot and shairport
  3. Hardware video decoding (optional): uncomment /dev/dri in jellyfin
  4. NMEA hardware: uncomment /dev/ttyUSB0 in signalk
  5. Set DEV=false in .env

Run make boot instead of make dev.


Troubleshooting

Spotify device not showing up on Mac:

  • Ensure port 57621 (UDP+TCP) is accessible. Docker Desktop on Mac sometimes blocks UDP.
  • Try connecting manually: Spotify → "Connect to a Device" → "Connect to [IP]"

AirPlay not visible on Windows:

  • The avahi container requires D-Bus. Run Docker Desktop with host networking or use WSL2.

Snapcast zones show as offline:

  • Audio pipes must exist before snapserver starts. Run make pipes or bash scripts/init-pipes.sh

Mopidy won't start:

  • Check docker compose logs mopidy. The custom Dockerfile installs plugins on first build; rebuild with make rebuild

Dashboard shows "No signal":

  • In dev mode this is normal until mock data initializes (12 seconds)
  • In production: check that SignalK is running and the WebSocket URL is correct in .env

Port conflicts:

  • Edit the port mappings in docker-compose.yml or docker-compose.dev.yml