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

126 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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](https://www.docker.com/products/docker-desktop/) (or Docker Engine + Compose)
- `make`
- For Spotify Connect: a Spotify Premium account
---
## Quick Start
```bash
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:
```bash
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:
```yaml
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`