You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+74-69Lines changed: 74 additions & 69 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,94 +5,101 @@ player backends (required) and, optionally, media providers while keeping the Mi
5
5
happy. It exposes the same HTTP/WebSocket surface as the original firmware so existing apps,
6
6
Touch/Miniservers, and integrations can keep talking to it without modification.
7
7
8
-
The project currently ships with working Bang & Olufsen BeoLink and Music Assistant support, but the modular design makes it straightforward to plug in other systems.
9
-
10
8
## Features
11
9
12
-
- 🎧 **Zone backends**: Music Assistant, Beolink, and a stub Sonos implementation that
13
-
demonstrates how to integrate additional clients.
14
-
- 📻 **Media providers (optional)**: Music Assistant provider with full library/radio/playlist
15
-
support. If no provider is configured, the built-in dummy provider returns empty lists so
16
-
clients remain responsive.
17
-
- 🧩 **Extensible core**: Clean separation between request routing, providers, and zone
18
-
backends to make future integrations easy.
10
+
- Zone backends
11
+
- 🎧 Music Assistant backend — Controls Music Assistant players; supports multiple players per server. (Set `maPlayerId` per zone in the admin UI.)
12
+
- 🔊 BeoLink backend — Integrates with Bang & Olufsen BeoLink devices. Typically one device per zone via its IP.
13
+
- 📦 Sonos / Example backend — Stub/sample implementation to demonstrate how to integrate additional clients; extend this for real Sonos support.
14
+
15
+
- Media providers (optional)
16
+
- 📻 Music Assistant provider — Full library, radio and playlist browsing and playback via Music Assistant.
17
+
- 🧪 BeoLink provider — Only radio support.
18
+
- ⚙️ Dummy provider — Returns empty lists for library/radio/playlist requests so clients remain responsive when no provider is configured (Default provider).
19
+
20
+
- Extensible core
21
+
- 🧩 Clean separation between HTTP/WebSocket routing, media providers, and zone backends to make adding new integrations straightforward.
22
+
23
+
You can configure backends and providers via the admin UI; see the `Configuration Overview` below for pointer to `data/config.json` and per-backend notes.
19
24
20
25
## Requirements
21
26
22
-
-Node.js **20** or newer (the repo uses `@tsconfig/node20`).
23
-
-npm (ships with Node) for dependency management.
24
-
-Easiest deployment: use the published Docker image.
27
+
-Docker (recommended) — easiest way to run the server without building from source.
28
+
-docker-compose (optional) — the repository includes a `docker-compose.yml`for one-command startup.
29
+
-Make sure host ports `7091` and `7095` are available (or adjust host mappings when running the container).
25
30
26
31
## Quick Start
27
32
28
-
Clone the repository of use a zipped release from the releases.
33
+
The easiest options are `docker-compose` or `docker run`.
29
34
30
-
1.**Install dependencies**
35
+
### Recommended: docker-compose (one command)
31
36
32
-
```bash
33
-
npm install
34
-
```
37
+
If you have Docker and docker-compose installed you can use the included `docker-compose.yml`:
35
38
36
-
2.**Build**
39
+
```bash
40
+
docker compose up -d
41
+
```
37
42
38
-
```bash
39
-
npm run build
40
-
```
43
+
This starts a container named `lox-audioserver` and exposes the required ports (`7091`, `7095`).
-`7091` – `AppHttp` (used by Loxone apps / WebSocket clients and the admin UI).
51
-
-`7095` – `msHttp` (used by the Miniserver itself).
58
+
This starts a container named `lox-audioserver` and exposes the required ports (`7091`, `7095`).
52
59
53
-
During development you can use the watcher to run TypeScript directly:
60
+
### Run standalone by cloning (no Docker)
54
61
55
-
```bash
56
-
npm run watch
57
-
```
62
+
If you prefer to run the server directly on the host without Docker, follow these steps. This is a minimal "standalone" run and requires Node.js and npm.
58
63
59
-
5.**Run via Docker (from GitHub Container Registry)**
64
+
Prerequisites
60
65
61
-
Every release publishes a multi-arch image to GHCR. Replace `VERSION` with a published tag
Open the admin UI at `http://<lox-audioserver-ip>:7091/admin` and follow the guided steps. It walks you through adding the Audio Server in Loxone Config, rebooting the Miniserver, pairing, and assigning zones/providers once the MiniServer reconnects.
79
+
2. Create a persistent data folder (used for config, logs, and cache):
77
80
78
-
When the lox-audioserver starts successfully and the Miniserver pairs successfully with the lox-audioserver, the Audio Server icon in
79
-
Loxone Config turns green.
81
+
```bash
82
+
mkdir -p data
83
+
```
80
84
81
-
## Configuration Overview
85
+
3. Install dependencies and build:
82
86
83
-
All settings are stored in`data/config.json`. The
84
-
admin UI reads and writes this file for you.
87
+
```bash
88
+
npm install
89
+
npm run build
90
+
```
91
+
92
+
4. Start the server:
93
+
94
+
```bash
95
+
npm start
96
+
```
85
97
86
-
- **Beolink/Sonos backends** expect a one-to-one mapping: each zone points to a dedicated
87
-
device IP.
88
-
- **MusicAssistant backend** can control many players on the same server. Set `maPlayerId`for
89
-
each zone using the “Player ID” from Music Assistant → Player settings.
|`BackendMusicAssistant`|`MusicAssistantProvider`, `DummyProvider`| Requires `maPlayerId`; multiple zones can share one MA host. |
94
-
|`BackendBeolink`|`BeolinkProvider`, `DummyProvider`| One device per zone via its IP. |
95
-
|`BackendSonos` / `BackendExample`|`DummyProvider`| Stub/sample implementations; extend to add real provider support. |
100
+
Open the admin UI at http://<lox-audioserver-ip>:7091/admin and follow the guided steps. It walks you through adding the Audio Server in Loxone Config, rebooting the Miniserver, pairing, and assigning zones/providers once the MiniServer reconnects.
101
+
102
+
When the lox-audioserver starts successfully and the Miniserver pairs successfully with the lox-audioserver, the Audio Server icon in Loxone Config turns green.
96
103
97
104
## Code Structure
98
105
@@ -124,19 +131,17 @@ src/
124
131
(e.g., Music Assistant provider pairs with `BackendMusicAssistant`). Mixing incompatible
125
132
providers/backends is not supported.
126
133
127
-
## Development Notes
134
+
## Contributing
128
135
129
-
- TypeScript sources live in `src/`; compiled output goes to `dist/` via `npm run build`.
130
-
- Logging uses a Winston-based logger (`src/utils/troxorlogger.ts`). Log levels are configured
131
-
via the admin UI (stored in `data/config.json`).
132
-
- Graceful shutdown signals (`SIGINT`, `SIGTERM`) are handled in `src/server.ts`; staged
0 commit comments