A custom Home Assistant integration for the Liberty AV DigitaLinx DL-S42-H2 4×2 HDMI 2.0 Matrix Switcher (and compatible DigitaLinx models) with TCP/IP control.
- One
media_playerentity per HDMI output zone — source selection routes HDMI inputs - Named inputs — configure friendly names (e.g. "Apple TV", "Shield", "PS5") during setup
- CEC display power — turn on/off connected displays via CEC passthrough
- Audio mute — mute/unmute de-embedded audio per output
- Polling state — automatically polls the matrix for current routing and mute state
- Config flow — full UI-based setup, no YAML required
- Options flow — rename inputs and adjust poll interval without reconfiguring
| Feature | Spec |
|---|---|
| Inputs | 4× HDMI 2.0b |
| Outputs | 2× HDMI 2.0b |
| Resolution | Up to 4K@60Hz 4:4:4 HDR |
| Audio | PCM 2.0/5.1/7.1, Dolby TrueHD, Atmos, DTS-HD MA, DTS:X |
| Audio De-embed | Analog 3.5mm (Out 1), Toslink (Out 1 & 2), ARC (Out 2) |
| Control | TCP/IP (port 23), RS-232, IR, Front Panel, Web GUI |
- Open HACS → Integrations → ⋮ menu → Custom Repositories
- Add
https://github.com/ryanmsteed/ha-digitalinx-matrixas Integration - Search for "DigitaLinx" and install
- Restart Home Assistant
- Copy
custom_components/digitalinx_matrix/to your HAconfig/custom_components/directory - Restart Home Assistant
- Go to Settings → Devices & Services → Add Integration
- Search for "DigitaLinx HDMI Matrix"
- Enter the IP address of your DL-S42-H2 (default port 23)
- Name your HDMI inputs (e.g. "Apple TV", "Shield Pro", "PS5", "PC")
- Done — you'll get two
media_playerentities (one per output zone)
Use the source dropdown on each output's media player card to route any HDMI input:
service: media_player.select_source
target:
entity_id: media_player.digitalinx_matrix_output_1
data:
source: "Apple TV"service: media_player.turn_on
target:
entity_id: media_player.digitalinx_matrix_output_1service: media_player.volume_mute
target:
entity_id: media_player.digitalinx_matrix_output_1
data:
is_volume_muted: trueThe DL-S42-H2 uses a simple ASCII protocol over TCP port 23 (telnet):
| Command | Description |
|---|---|
SET SW in{1-4} out{1-2} |
Route input to output |
GET SW out{1-2} |
Query current route |
SET MUTE out{1-2} {on|off} |
Mute/unmute output |
GET MUTE out{1-2} |
Query mute state |
SET CEC out{1-2} {on|off} |
CEC display power |
GET VER |
Query firmware version |
All commands terminated with \r\n. Default IP: 192.168.1.254.
Assign a static IP on your main LAN (e.g. 10.10.10.x). The device ships with default 192.168.1.254 — you'll need to change this via the web GUI first by connecting directly or being on the same subnet.
MIT