A Home Assistant custom integration for PureLink AV matrix switchers (UX series). Control video routing from your Home Assistant dashboard.
- Route any input to any output via a drop-down selector or media player card
media_playerentity per output (source picker + on/off = connect/disconnect)buttonentity per stored preset for one-tap recall- Fires a
purelink_route_changedevent when routing changes (including switches made at the front panel), usable as an automation trigger - Optional entity naming from the switcher's own port names (Web UI credentials)
- Automatic state polling every 30 seconds
- Instant state update after routing changes
- Connection error handling with automatic reconnect
- Supports all UX-series matrix switchers (UX-4400, UX-8800, etc.)
Recall a preset saved on the switcher with its Preset button (native Telnet, no credentials needed). Presets you have named appear with that name and are enabled by default; unnamed slots are created disabled.
Create, update, and delete presets from Home Assistant with the
purelink.save_preset and purelink.delete_preset services. These write over
the Web UI websocket, so the integration must be configured with the Web UI
username and password; without them the services return an error. save_preset
snapshots the current routing by default (or takes an explicit routing map and
optional name); delete_preset resets a slot to unconfigured. After a change
the integration reloads so the preset buttons update.
service: purelink.save_preset
data:
device_id: <your switcher device>
slot: 5
name: Movie
routing: { 1: 2, 2: 2, 3: 1 } # optional; omit to snapshot current routingEvery routing change detected on a poll fires a purelink_route_changed event
with entry_id, output, input, and previous_input — handy for reacting to
front-panel switches Home Assistant would otherwise only see silently:
trigger:
- platform: event
event_type: purelink_route_changed
event_data:
output: 3Any PureLink / Dtrovision matrix switcher with a LAN port that accepts the ASCII TCP command protocol, including:
- UX-4400 (4×4)
- UX-8800 (8×8)
- Other UX series models
- Download this repository
- Copy the
custom_components/purelinkfolder into your HA configuration directory:<ha_config>/custom_components/purelink/ - Restart Home Assistant
- In HACS → Integrations → ⋮ → Custom repositories
- Add this repository URL with category Integration
- Install PureLink
- Restart Home Assistant
- Go to Settings → Devices & Services → Add Integration
- Search for PureLink
- Fill in the form:
| Field | Description | Default |
|---|---|---|
| IP Address / Hostname | Device LAN IP or hostname | — |
| TCP Port | Device port (telnet; check Network Settings in device web UI if non-standard) | 23 |
| Switcher ID | Device switcher ID (see device settings) | 255 |
| Web UI Username / Password | Optional. When provided, entities are named after the input/output names configured on the switcher (e.g. TV1, CABLE) instead of Output 1 / Input 1. |
empty |
- Confirm the matrix size. The number of outputs is detected automatically from the switcher's status reply (UX matrices are square, so inputs default to the same count); adjust only if your model differs.
Device-side names are read once per (re)start of the integration — after renaming ports in the switcher's web UI, reload the integration to pick the new names up. Without credentials, entities use generic names that you can rename in Home Assistant.
Two entities are created per output port — use whichever fits your dashboard:
| Entity | Behaviour |
|---|---|
media_player.purelink_..._output_n |
Source picker routes an input; off disconnects the output, on restores the last input. |
select.purelink_..._output_n |
Options: Disconnected, Input 1 … Input N. Selecting an input routes the signal; Disconnected severs the connection. |
"Cannot connect" during setup
- Verify the device IP and port with
nc <ip> <port>(or telnet) - Check the device is powered on and LAN connected
- Confirm the Switcher ID matches the device setting (default 255)
- Setup probes the device with the
*<id>?C!status query (some models, e.g. the UX-8800, reject the H000 heartbeat while answering?Cnormally)
Entities show as unavailable
- HA lost the TCP connection; it will reconnect automatically on the next poll
- Check network connectivity between HA and the switcher
State doesn't update after manual routing change
- State polls every 30 seconds; wait up to 30s for HA to reflect external changes