Initial implementation: Bordanlage boat onboard system
Complete multiroom audio + navigation dashboard: - Docker stack: SignalK, Snapcast (4 zones), librespot, shairport-sync, Mopidy, Jellyfin, Portainer - React 18 + Vite dashboard with nautical dark theme - Full mock system (SignalK NMEA simulation, Snapcast zones, Mopidy player) - Real API clients for all services with reconnect logic - SVG instruments: Compass, WindRose, Gauge, DepthSounder, SpeedLog - Pages: Overview, Navigation, Audio (zones/radio/library), Systems - Dev mode runs fully without hardware (make dev) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
32
bordanlage/config/mopidy.conf
Normal file
32
bordanlage/config/mopidy.conf
Normal file
@@ -0,0 +1,32 @@
|
||||
[core]
|
||||
data_dir = /var/lib/mopidy
|
||||
|
||||
[logging]
|
||||
verbosity = 1
|
||||
|
||||
[audio]
|
||||
output = audioresample ! audioconvert ! audio/x-raw,rate=44100,channels=2,format=S16LE ! filesink location=/tmp/audio/mopidy.pcm
|
||||
|
||||
[http]
|
||||
enabled = true
|
||||
hostname = 0.0.0.0
|
||||
port = 6680
|
||||
allowed_origins =
|
||||
|
||||
[mpd]
|
||||
enabled = false
|
||||
|
||||
[local]
|
||||
enabled = true
|
||||
media_dir = /music
|
||||
scan_timeout = 1000
|
||||
|
||||
[stream]
|
||||
enabled = true
|
||||
protocols = http, https, mms, rtmp, rtsp
|
||||
|
||||
[tunein]
|
||||
enabled = true
|
||||
|
||||
[iris]
|
||||
enabled = true
|
||||
48
bordanlage/config/nginx/default.conf
Normal file
48
bordanlage/config/nginx/default.conf
Normal file
@@ -0,0 +1,48 @@
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
root /usr/share/nginx/html;
|
||||
index index.html;
|
||||
|
||||
# Serve React app – HTML5 history mode
|
||||
location / {
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
|
||||
# Proxy SignalK
|
||||
location /signalk/ {
|
||||
proxy_pass http://signalk:3000/signalk/;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header Host $host;
|
||||
}
|
||||
|
||||
# Proxy Snapcast WebSocket API
|
||||
location /snapcast/ {
|
||||
proxy_pass http://snapserver:1780/;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header Host $host;
|
||||
}
|
||||
|
||||
# Proxy Mopidy
|
||||
location /mopidy/ {
|
||||
proxy_pass http://mopidy:6680/mopidy/;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header Host $host;
|
||||
}
|
||||
|
||||
# Proxy Jellyfin
|
||||
location /jellyfin/ {
|
||||
proxy_pass http://jellyfin:8096/;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
}
|
||||
|
||||
gzip on;
|
||||
gzip_types text/plain text/css application/json application/javascript;
|
||||
}
|
||||
15
bordanlage/config/shairport.conf
Normal file
15
bordanlage/config/shairport.conf
Normal file
@@ -0,0 +1,15 @@
|
||||
general = {
|
||||
name = "Bordanlage AirPlay";
|
||||
port = 5000;
|
||||
interpolation = "auto";
|
||||
output_backend = "pipe";
|
||||
};
|
||||
|
||||
pipe = {
|
||||
name = "/tmp/audio/airplay.pcm";
|
||||
};
|
||||
|
||||
metadata = {
|
||||
enabled = yes;
|
||||
include_cover_art = yes;
|
||||
};
|
||||
16
bordanlage/config/snapserver.conf
Normal file
16
bordanlage/config/snapserver.conf
Normal file
@@ -0,0 +1,16 @@
|
||||
[stream]
|
||||
source = pipe:///tmp/audio/spotify.pcm?name=Spotify&codec=pcm&sampleformat=44100:16:2&chunk_ms=20
|
||||
source = pipe:///tmp/audio/airplay.pcm?name=AirPlay&codec=pcm&sampleformat=44100:16:2&chunk_ms=20
|
||||
source = pipe:///tmp/audio/mopidy.pcm?name=Mopidy&codec=pcm&sampleformat=44100:16:2&chunk_ms=20
|
||||
|
||||
[server]
|
||||
threads = -1
|
||||
|
||||
[http]
|
||||
enabled = true
|
||||
bind_to_address = 0.0.0.0
|
||||
port = 1780
|
||||
|
||||
[logging]
|
||||
sink = system
|
||||
filter = *:info
|
||||
Reference in New Issue
Block a user