Native Home Assistant integration for the AUDAC MTX48 and MTX88 multi-zone audio matrices, controlled over their TCP/IP protocol on port 5001.
- Per-zone media-player entity: volume, volume-step (3 dB), mute, source select
- Bass / treble controls (number entities, -14 to +14 dB in 2 dB steps)
- VU-meter sensors (10 levels, disabled by default)
- Save settings & factory-reset buttons
- Connection / firmware diagnostics
- Push-driven updates — listens to broadcasts, no constant polling
- Auto-reconnect with exponential backoff
- Lockout-safe: when the AUDAC Touch app or web UI takes the single permitted TCP slot, the integration shows "disconnected" and reconnects automatically when the slot frees up
The MTX firmware allows only ONE simultaneous TCP/IP connection and broadcasts every state change to the active client. Existing community integrations modelled the protocol as simple request/response and crashed in tight loops when other clients connected — this implementation owns one persistent connection, dispatches frames into a state cache, and gracefully steps aside on lockout.
- Home Assistant 2024.1+
- AUDAC MTX48 or MTX88 reachable on your LAN (default port 5001)
- HACS (recommended)
- HACS → ⋮ → Custom repositories
- URL:
https://github.com/SpLord/audac-mtx-ha, Category: Integration - Install AUDAC MTX, restart Home Assistant
- Settings → Devices & Services → + Add Integration → search AUDAC MTX
- Enter the device IP, port (5001), zone count (4 or 8)
Copy custom_components/audac_mtx/ into your <config>/custom_components/ directory and restart HA.
| Field | Default | Notes |
|---|---|---|
| Host | — | IP or hostname of the MTX |
| Port | 5001 | TCP control port |
| Zones | 8 | 4 for MTX48, 8 for MTX88 |
| Source ID | HA | 1-4 chars, identifies us in the broadcast log |
| Type | Count | Notes |
|---|---|---|
| media_player | 4 or 8 | one per zone |
| number | 8 or 16 | bass + treble per zone, dB |
| sensor | 13 | connection, firmware, last error, 10 × VU |
| button | 2 | Save settings, Factory reset (disabled) |
VU sensors and the Last-Error / Firmware diagnostic sensors are disabled by default — enable them in the entity registry if you need them.
The integration speaks the official AUDAC MTX command protocol on TCP port 5001:
Frame: #|destination|source|command|args|U|<CR><LF>
Volume values are inverted on the wire (0 = max, 70 = min); we map to/from HA's 0.0-1.0 internally. Bass/treble are 0..14 raw with 7 = 0 dB.
The MTX broadcasts an Update frame to every connected client after any state change (its own front-panel knobs, the AUDAC Touch app, wall panels) — so HA stays in sync without polling.
Home Assistant's "Add to Dashboard" button creates basic Tile cards. To get full Tile features (volume slider + source select) for every zone, copy one of the example layouts from examples/dashboards/:
Open Lovelace, edit the view (pencil icon top-right), choose Edit raw configuration (kebab menu), and paste the YAML inside a views: entry. Adjust entity IDs to match your install (default pattern: media_player.audac_mtx88_zone_<n> or ..._mtx48_zone_<n>).
The Tile-card source-select feature requires v0.5.1+ — earlier versions show a
Konfigurationsfehlerbox when a zone is unrouted because sourceNonewas missing fromsource_list.
- Single TCP connection is a hard device limit. While the AUDAC Touch app or web UI is open, this integration is "disconnected" — controls are ignored. Close the other client to regain control.
- VU-meter mapping (which physical input/output corresponds to which of the 10 levels) varies by firmware/configuration; the entities are exposed as
VU 1..VU 10and you can rename them to match your setup.
python -m venv .venv && source .venv/bin/activate
pip install pytest pytest-asyncio pytest-timeout voluptuous
pytest testsTests use an in-process Mock-MTX server — no hardware required.
MIT


