Skip to content

About

Smart crosspoint router for NDI® decoders – BirdDog, Magewell – extensible for Dante and more. Auto-discovered sources, matrix card, HomeKit-ready.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Strelle AV Matrix – NDI® & Dante® crosspoint router for Home Assistant

Strelle AV Matrix for Home Assistant

Smart crosspoint router for NDI® decoders (BirdDog, Magewell) and Dante® audio networks.

hacs_badge Validate License: MIT

Turn the NDI® decoders behind your screens into a video router you control from Home Assistant: a source selector per screen, automatic discovery of every NDI source on the network, a matrix card for the dashboard, automations, HomeKit, and optional TV power/input control. The same matrix routes Dante® audio: every TX channel of every Dante device on the network is a source, every RX channel a destination – found automatically, no login needed.

Deutsch: siehe unten.

One router, several variants

This repository is the home of Strelle AV Matrix – one crosspoint router for NDI® video and Dante® audio that can run in different places. All variants share the device drivers, the card and the look (Strelle Pult-UI).

Variant Where For
Home Assistant custom_components/av_matrix (installed through HACS) – this README routing from dashboards, automations, HomeKit
Server (stand-alone, Bitfocus Companion) server/ – server/README.md a small box at the desk: browser panel with live NDI preview, presets, HTTP API, Companion module with feedback, MCP for language models

The server's interface is specified independently of its implementation (server/docs/SCHNITTSTELLE.md, OpenAPI and MCP tool schemas next to it), so another backend can serve the same panel, Companion pages and cards. Protocol notes that apply to every variant live in docs/: devices.md (Magewell, BirdDog, Dante® ARC) and ndi-preview.md (receiving NDI at low bandwidth). Further variants get their own directory next to server/.

Matrix view: destinations x sources with tally, presets and crosshair

Panel (X-Y) view with two destinations armed for a salvo
Panel view in a light theme with the routing history open
Panel view on a phone
Matrix view in a light theme, names shown as label and original Matrix view on a phone
Panel view on a phone in a light theme

Screenshots from the mock demo (no Home Assistant needed: serve the repo with python3 -m http.server and open /docs/demo/).

Features

  • Destinations = your decoders (one config entry per device, as many as you like). Multi-channel devices get one destination per channel.
  • Sources are discovered automatically and shared by all decoders:
    • mDNS (_ndi._tcp.local.) through Home Assistant's zeroconf,
    • the source lists of all configured decoders,
    • deduplicated by NDI name, stale entries filtered (TCP check), 2-minute hysteresis so lists don't jump,
    • BirdDog's NDI_<id> placeholders for names with umlauts are mapped to the real name.
  • Entities per destination: select Source (the crosspoint), sensor Connection (connected / connecting / no source / source not sending / offline), sensor Resolution (e.g. 1920x1080p50), binary_sensor Connected, switch Route lock; per device a Refresh sources button and a diagnostic sensor IP address. The device page links to the web UI of the decoder (Visit).
  • Actions: av_matrix.route, av_matrix.salvo (several routes at once, validated first), av_matrix.lock / unlock, av_matrix.undo, av_matrix.refresh_sources; event av_matrix_routed.
  • Linked displays: power on a TV/projector and switch its input when a destination is routed.
  • Labels: give cryptic NDI names, decoder outputs and Dante channels a friendly label (sources also tags); the card switches between Label, Original and both like a broadcast router panel.
  • Device illustrations: every decoder, Dante device and source is shown as a small drawing of the device (Magewell, BirdDog, AVIO adapters, Dante converters, WING …) whose LED shows the live status.
  • Router panel card custom:av-matrix-card, shipped with the integration — no manual resource needed: X-Y panel and matrix view, direct or preset + TAKE (salvo), lock, undo, labels, history, keyboard control.
  • HomeKit-ready: the source selects work with the HomeKit Bridge (one switch per source).
  • Own integration icon and logo (shipped in brand/, shown by Home Assistant 2026.3+).
  • Config flow with connection test, re-authentication, reconfigure, options, diagnostics (passwords redacted).
  • Dante® network (experimental): one entry for the whole network, devices found via mDNS; TX channels = sources, RX channels = destinations, routing = subscriptions. See Dante.
  • Protocol-independent core: one tab per protocol in the card, sources only route within their protocol.

Supported devices

Device Protocol Status Tested firmware Notes
Magewell Pro Convert NDI to AIO NDI® ✅ verified (login, sources, routing, status) 1.3.24 other Pro Convert NDI decoders (to HDMI / SDI / 12G) use the same API — untested
BirdDog PLAY NDI® ⚠️ untested with this integration (1.0.14 in an earlier project) API on port 8080
BirdDog Mini / Flex / Studio NDI / multi-channel NDI® ⚠️ untested – multi-channel via ChNum is untested
Dante® devices (ARC protocol) Dante® 🧪 experimental: discovery, names, channels, subscriptions read live; switching untested on hardware ARC 2.8.9, router 4.3.0 (Audinate AVIO AES3, HDCVT ULTIMOX2) one entry for the whole network, see Dante

Details and API notes: docs/devices.md. Want another device? Open a device request or write a driver.

Installation

HACS (recommended)

  1. HACS → ⋮ → Custom repositories → add https://github.com/strelle/ha-av-matrix, type Integration.
  2. Search for Strelle AV Matrix, download, restart Home Assistant.
  3. Settings → Devices & services → Add integration → Strelle AV Matrix.

Manual

Copy custom_components/av_matrix (or unzip av_matrix.zip from the latest release) into <config>/custom_components/av_matrix and restart Home Assistant.

Requires Home Assistant 2026.8 or newer.

Configuration

Add one entry per device — usually Home Assistant finds the decoders by itself (see Discovery):

  1. Search the network for decoders, or Choose the device type manually, e.g. NDI® · Magewell Pro Convert.
  2. Enter host/IP, port (empty = default), credentials and an optional name. The connection is tested before the device is added.
    • Magewell: factory login is Admin / Admin — please change the password in the device's web UI.
    • BirdDog: the API on port 8080 normally needs no password; it is only used if the device asks for a login. Set Number of decoder channels for multi-channel devices.
  3. Options (⚙ on the entry): polling interval (default 5 s), a linked display per destination and the preview server (see NDI® preview).

Sources need no configuration: everything that sends NDI on the network shows up within seconds.

Discovery

New decoders show up right in the matrix card (admins): a banner "1 new receiver found – Add" opens the confirmation in the card itself, and they are also listed under Settings → Devices & services as Discovered; one click (Magewell: the factory login Admin/Admin is pre-filled, change it if yours differs) adds them. Devices that are already set up are recognised (by serial number or MAC address), and a new IP address is taken over automatically.

Way Magewell Pro Convert BirdDog Dante®
DHCP / device tracker (MAC vendor prefix) ✅ D0:C8:57:8x (verified, 3 devices) · 70:B3:D5:75:Dx D4:20:00:Ax, 70:B3:D5:3B:9x, 70:B3:D5:C7:Ex (untested) –
Known device, new IP (DHCP registered_devices) ✅ (MAC in device registry) ✅ (serial, unit-tested only) automatic (mDNS)
mDNS / zeroconf ✗ only _http._tcp with the user-given name and no TXT data — nothing to match on untested ✅ _netaudio-arc._udp offers the Dante network entry (once)
SSDP / UPnP ✗ does not answer M-SEARCH untested –
Network scan (config flow) ✅ GET /mwapi?method=get-summary-info → {"status":37} GET :8080/about (untested on hardware) –

DHCP discovery needs Home Assistant to see the device's MAC address: either HA receives the DHCP requests (same network segment / HA OS with host networking), or a device tracker reports it — e.g. the UniFi Network integration, Fritz!Box, nmap tracker. Home Assistant's DHCP integration also looks for hosts on its own network periodically. If the decoders sit in another VLAN without a device tracker, use the scan.

Network scan: Add integration → Strelle AV Matrix → Search the network for decoders. The subnet defaults to Home Assistant's own network (a /24; at most /22 is accepted). Every address is checked read-only and without login: first a quick TCP connect to the driver's port (0.7 s timeout, 64 in parallel), then the driver's fingerprint request. A /24 takes about 3 seconds. Every driver that implements async_probe takes part automatically.

Dante

Dante matrix grouped by device: stagebox channels on the mixer inputs, other devices collapsed

Dante panel view: RX channels grouped by device as scribble-strip displays Dante matrix in the daylight theme

Settings → Devices & services → Add integration → Strelle AV Matrix → Dante® network (Home Assistant also offers it as soon as a Dante device announces itself). That single entry covers the whole network:

  • Discovery: every device that announces _netaudio-arc._udp via mDNS is added automatically and becomes a Home Assistant device (manufacturer/model from mDNS); new devices appear while running. If mDNS does not reach Home Assistant (other VLAN), add the device IPs as additional device addresses.
  • Sources = TX channels, named like in Dante Controller: channel@device, e.g. Kick@STAGEBOX-A (the channel label if one is set). They disappear 2 minutes after their device went offline. Labels/tags work as for NDI.
  • Destinations = RX channels. Routing sets the subscription of the RX channel, None removes it. The subscription is read back after writing; a refused or not applied subscription fails the route.
  • Entities per RX channel: select Source, sensor Subscription (subscribed, self, in_progress, unresolved, none, idle, warning, error; attributes with Dante's status name and explanation, e.g. UNRESOLVED – the transmitting device is not on the network), switch Route lock. Per device: TX channels, RX channels, Sample rate, IP address, Online. Network: Dante devices online, Refresh.
  • Big devices: devices with more than 32 RX channels (e.g. a 64×64 console card) get their entities disabled by default – enable the ones you need. The card routes all channels anyway (by destination id, see frontend API). Options: hide devices completely, or create entities only for selected RX channels.
  • Card: Dante is a second tab. Sources and destinations are grouped by device; each device can be collapsed (a collapsed source device becomes one summary column that lights up on the rows listening to it) and filtered (Sources: device, Destinations: device). Big devices start collapsed in panel mode.
  • Actions work unchanged: av_matrix.route (source: "Kick@STAGEBOX-A"), salvo, lock, undo … plus an optional destination field with destination ids for RX channels without enabled entities.

Limits – this is an unofficial implementation of a reverse-engineered protocol (based on the public-domain netaudio project), not affiliated with Audinate:

  • Networks managed by Dante Domain Manager (authenticated control) are not supported.
  • AES67-only devices (no Dante control protocol) and multicast flows (creating/choosing them) are not supported; subscriptions are made the normal way (the devices pick unicast/multicast themselves).
  • No device settings (sample rate, latency, clocking, gain, channel names) – routing only.
  • Switching has been verified against reference packets and a simulator, not yet on real hardware – test on channels that are not in use.

NDI® preview

Panel with a live picture in every source tile; each destination shows the picture of its source

Every NDI® source tile of the card can show its picture, every destination the picture of the source it is switched to, and a click on ⤢ (key V) opens a larger, fluent live preview of that one source.

Home Assistant does not receive NDI itself. The pictures come from a Strelle AV Matrix server (the server variant of this repository, e.g. on a Raspberry Pi next to the desk). Tell the integration where it is: Settings → Devices & services → Strelle AV Matrix → ⚙ Configure (on any device of the integration) → Preview server, e.g. http://192.0.2.8:8088. One address for the whole integration; a server found on the network (mDNS) is suggested in that field. The address is tested when you save. Leave it empty and the card looks and works as before.

  • Home Assistant relays the pictures (/api/av_matrix/preview.jpg, .mjpeg), the browser never talks to the server. That is on purpose: dashboards opened through https (remote access, a reverse proxy) may not load pictures from a plain-http address (mixed content), and the server is often not reachable from where the browser is. The relay needs the Home Assistant login like every other API call.
  • Frugal by design. The server opens a real NDI receiver per still and allows one live preview at a time. The card only refreshes tiles that are on screen (every 4.5 s, heavy sources every 20 s, two requests at a time), pauses while the tab is hidden and while the live preview is open, and several dashboards share one request.
  • States instead of old pictures: No signal, Offline, Preview not possible (NDI|HX source without a decoder on the server, or a server without the NDI SDK), Preview not reachable (server down – switching is not affected), No update. A still that the device itself delivered instead of the NDI feed is marked from device. Protocols without pictures (Dante®) get no picture area.
  • Device types. NDI sources carry a symbol for camera, encoder, computer, test pattern or (neutral) NDI source - the same rule table as the server. With a preview server its knowledge is used (it also looks at the device's web interface), and source tiles get a ↗ link to that web interface.
  • Sources are matched by their exact NDI name. Labels are only display names; a source the server does not know shows Unknown.

Dashboard card

The card is loaded automatically. Add it via Add card → Strelle AV Matrix (visual editor) or YAML. In a sections view give it the full width.

type: custom:av-matrix-card
title: Video routing
mode: panel            # panel (X-Y) | matrix
take_mode: preset      # direct | preset (arm + TAKE)
name_mode: both        # label | original | both
# protocol: ndi        # start tab
# show_offline: true
# compact: false
# theme: auto          # auto (follows HA) | dark | daylight
# brand: auto          # auto | full | compact | off  (Strelle logo + "Strelle AV Matrix" on top)
# preview: true        # preview pictures, if a preview server is set up
# columns: 6           # source columns in the panel, 0 = auto
# destinations:        # selection and order, default: all
#   - select.stage_left_source
#   - select.stage_right_source
Option Default Description
title Strelle AV Matrix Card title (empty = none). A title that only repeats the product name is not shown again under the brand line.
mode panel panel: destinations on top, sources below (X-Y panel). matrix: destinations × sources grid. Narrow cards (< 640 px) start in panel mode.
take_mode direct direct: tapping a source switches immediately. preset: tapping arms the route (amber), TAKE switches all armed routes at once (salvo).
name_mode both Names shown: label (label, else the original name), original (device / NDI / Dante name), both (label, original name in small print underneath). Initial value only – the switch in the header is remembered per browser.
protocol first Protocol tab to start on (ndi, dante). Only sources of the same protocol can be routed.
show_offline true Show sources that stopped sending (greyed, "offline · 6 min").
compact false Smaller tiles.
theme auto dark (control room, hall, evening), daylight (open air, stage, office: high-contrast light theme) or auto (follows the dark mode of the Home Assistant theme).
brand auto Brand line on top of the card: Strelle logo and "Strelle AV Matrix", centred. full: word mark (light or dark variant to match the theme), compact: picture mark, off: none. auto = full, compact in narrow (< 640 px) or compact cards.
preview true Preview pictures in the panel tiles (needs a preview server, see NDI® preview). false = never.
columns auto Number of source columns in panel mode.
destinations all List of destination select entities: which ones to show, in this order.

Mode, take mode and names (Label | Original | Both, like on a Lawo panel) can also be switched in the card header at any time.

Design – Strelle Pult-UI. The card follows the conventions of broadcast and live-sound consoles: one colour, one meaning everywhere (red = program / on air, amber = preset / warning, green = ok, blue only for selection, focus and TAKE), illuminated keys with a coloured state edge on top, destinations as scribble-strip displays with a coloured name label, states always as text and shape too (LED forms, "ON AIR" / "PRESET" on the keys), touch targets of 56 px on touch screens, a dark and a high-contrast daylight theme. Type: Atkinson Hyperlegible Next for text and Atkinson Hyperlegible Mono for values – shipped with the integration (SIL OFL 1.1, frontend/fonts/), no external font service. Tally and preset colours can still be changed with the theme variables av-matrix-tally-color and av-matrix-preset-color.

Operating it like a router panel

  • Panel: pick a destination (its current source lights up red = program/tally), then pick a source. Several destinations: Shift/Ctrl-click or long-press (touch) – the source then goes to all of them (salvo). Number badges show the selection order.

  • Matrix: click a crosspoint. Lit red = on air, lit amber = armed, red striped = routed source not sending. Hover shows a crosshair; headers stay in place while scrolling large matrices.

  • Preset + TAKE: armed routes are listed in the take bar; TAKE switches them together (validated first – a locked destination fails the whole salvo), Clear/Esc discards them. If switching fails the presets come back and an error is shown.

  • Status: LED (form and colour) and coloured top edge per destination – green circle connected, amber triangle connecting / source not sending, ring no source, red square device offline; resolution (e.g. 1080p50).

  • Lock (padlock) protects a destination, undo (↶) restores its previous source; Undo last in the footer undoes the latest route made from the card. The TV button switches a linked display on/off and shows its input.

  • IP address and web interface: every device shows its IP address (NDI® decoders on the tile / matrix row, Dante® devices under the device name). The ↗ button opens the web interface of a decoder in a new tab – only where the driver knows one (Magewell, BirdDog; Dante® adapters have none). The link points to the local address of the device, so it works in the device's network, not through a remote connection to Home Assistant.

  • Search and tags filter the sources; Live only hides offline sources.

  • Add receivers (admins): when Home Assistant has discovered a decoder (DHCP / mDNS) that is not set up yet, a banner "1 new receiver found" appears under the header. Add opens the setup right in the card: credentials (Magewell factory login pre-filled), optional name, done – the new destination appears immediately. A wrong password is shown as an error in the form; Ignore hides the device like in the settings, Settings opens Devices & services. The + Add button in the header runs the same dialog for any device: Search the network (scan, pick from the results) or Choose the device type manually. Non-admin users see neither.

    Banner in the card: 1 new receiver found, Magewell 192.0.2.127, Add Add dialog in the card (daylight theme): factory login pre-filled, the device rejected the password
  • Labels (admins): pencil button in the header, then tap a source or a destination – or right-click / long-press a source, double-click / long-press a destination name (right-click works too). Give cryptic NDI names and device names a friendly label (sources also tags); the original name stays visible in small print in Both mode. Destination labels only rename the destination in the card, not the entities in Home Assistant.

  • Names: Label | Original | Both in the header (key N) switches every name in the card – tiles, matrix headers, take bar, history, messages. Search always finds label, original name and tags.

  • Devices: each destination shows a small drawing of its device (Magewell, BirdDog, AVIO adapters, WING, …) whose LED follows the status; sources show a small icon (Dante: on the device header).

  • History: the last 50 routes with time, destination, source, previous source, origin and user (who switched; user names are resolved for admins).

  • Switching shows switching… immediately and is confirmed by the live state from Home Assistant.

Keyboard (when the card has focus):

Key Action
/ Search sources (Esc clears, ↓ jumps into the sources)
Arrow keys Move between destinations, sources and crosspoints
Enter / Space Press the focused tile; Enter elsewhere (or Ctrl/⌘+Enter anywhere) = TAKE
Esc Clear presets / multi-selection
U Undo (focused or selected destination, else the last route)
L Lock / unlock the focused or selected destination
N Names: Label → Original → Both
1 – 9 Select destination 1–9 (Shift adds to the selection)

The card follows your Home Assistant theme (dark and light) and respects reduced motion. Tally colours can be themed with --av-matrix-tally-color and --av-matrix-preset-color. Without the WebSocket API (older version) it falls back to the select entities (basic mode). The plain select entities work in any entities card too.

Automations

Route on a button press, and the screens of a room at once:

automation:
  - alias: "Show slides in the lobby"
    triggers:
      - trigger: state
        entity_id: input_button.lobby_slides
    actions:
      - action: av_matrix.route
        target:
          entity_id: select.lobby_source
        data:
          source: "STUDIO-PC (Slides)"

  - alias: "Conference start"
    triggers:
      - trigger: time
        at: "08:45:00"
    actions:
      - action: av_matrix.salvo
        data:
          routes:
            - destination: select.lobby_source
              source: "STUDIO-PC (Welcome)"
            - destination: select.stage_left_source
              source: "CAMERA-1 (Program)"
            - destination: select.stage_right_source
              source: "None"   # off

  - alias: "Notify when a screen loses its source"
    triggers:
      - trigger: state
        entity_id: sensor.lobby_connection
        to: source_lost
        for: "00:00:30"
    actions:
      - action: notify.notify
        data:
          message: "Lobby screen: source stopped sending"

React to routing with the event av_matrix_routed (entity_id, source, previous_source, origin). Lock a screen during a show with av_matrix.lock or its Route lock switch.

Linked displays

E.g. LG webOS TVs via the webOS integration — works with any media_player.

In the options of a device, pick a media_player per destination, its input (e.g. HDMI 2, suggestions come from the TV's source list) and whether to

  • power on & switch input on route (default on), and
  • turn the display off when routed to None.

When the destination is routed, Strelle AV Matrix turns the display on if needed, waits until it is on (max 10 s, without blocking other destinations) and selects the input if it is not already active. Display problems never fail the route; they are logged and shown as display_error.

HomeKit

Expose the select.*_source entities with the HomeKit Bridge integration. HomeKit Bridge shows a select as a group of switches, one per option — tap a switch to route that source. Tips:

  • HomeKit builds the accessory when the bridge starts; sources that appear later need a reload of the HomeKit Bridge entry. For a stable HomeKit view, create a template select with your favourite sources and route via av_matrix.route.
  • Give long NDI names a label so the switches stay readable.

Updates

Every change to the integration is published as a GitHub release, so HACS shows it as an update entity (update.av_matrix_update) with release notes. Integration updates need a Home Assistant restart to become active.

Optional auto-update, only when you allow it (an input_boolean.av_matrix_auto_update), with a nightly restart:

automation:
  - alias: "AV Matrix auto-update"
    triggers:
      - trigger: state
        entity_id: update.av_matrix_update
        to: "on"
    conditions:
      - condition: state
        entity_id: input_boolean.av_matrix_auto_update
        state: "on"
    actions:
      - action: update.install
        target:
          entity_id: update.av_matrix_update
      - action: input_boolean.turn_on
        target:
          entity_id: input_boolean.restart_pending   # helper you create

  - alias: "Nightly restart after updates"
    triggers:
      - trigger: time
        at: "04:00:00"
    conditions:
      - condition: state
        entity_id: input_boolean.restart_pending
        state: "on"
    actions:
      - action: input_boolean.turn_off
        target:
          entity_id: input_boolean.restart_pending
      - action: homeassistant.restart

Troubleshooting

  • No sources appear. mDNS must reach Home Assistant: run HA with host networking (default for HA OS / network_mode: host in Docker) and allow multicast between the VLANs. If your network uses an NDI Discovery Server instead of mDNS, Strelle AV Matrix only sees what the decoders list.

  • A source shows as not live but is sending. BirdDog source lists are verified by a TCP connection to the sender; a firewall on the sender can block that. Magewell lists and mDNS are trusted as-is.

  • Sources linger. They disappear 2 minutes after they stopped sending (on purpose). Refresh sources drops cached knowledge immediately.

  • Magewell: "invalid authentication". Wrong password — Home Assistant starts a re-authentication flow.

  • BirdDog shows its logo. The routed source is not sending; the connection sensor says Source not sending.

  • "Preview not reachable" in the tiles. Home Assistant gets no answer from the preview server: is it running, is the address in the options right, can Home Assistant reach it (firewall, VLAN)? Switching does not depend on it. Preview not possible means the server answers but cannot decode that source (NDI|HX decoder or NDI SDK missing on the server).

  • Diagnostics: device page → ⋮ → Download diagnostics (passwords are redacted). Debug log:

    logger:
      logs:
        custom_components.av_matrix: debug

Roadmap

  • Dante®: verify switching on more hardware, optional channel-label display from _netaudio-chan, stable device identity across renames.
  • More NDI® decoders: Kiloview, NewTek/Vizrt Connect Spark, Teradek, …
  • HDMI-CEC via decoder APIs (if supported by the device) as an alternative to linked displays.
  • NDI port-5960 queries as an extra source of truth, Discovery Server support.

Development

See CONTRIBUTING.md. Tests: pytest (drivers against recorded answers, source registry, linked displays, config flow, services, WebSocket API).


Deutsch

Strelle AV Matrix macht aus NDI®-Decodern (BirdDog, Magewell) eine Kreuzschiene in Home Assistant.

  • Ziele sind die Decoder hinter den Bildschirmen; jedes Gerät wird über Einstellungen → Geräte & Dienste → Integration hinzufügen → Strelle AV Matrix angelegt (erst Protokoll/Hersteller wählen, dann Adresse und Zugangsdaten; die Verbindung wird dabei geprüft). Magewell-Werkszugang Admin/Admin – bitte ändern.
  • Automatische Erkennung: neue Decoder meldet die Karte selbst (Admins): Banner „1 neuer Empfänger gefunden – Hinzufügen“, die Einrichtung läuft direkt in der Karte (Zugangsdaten, fertig; falsches Passwort = Fehler im Formular). Der Knopf + Hinzufügen in der Kopfzeile startet dasselbe für beliebige Geräte (Netzwerk durchsuchen oder Gerätetyp wählen). Außerdem erscheinen sie unter Geräte & Dienste als „Entdeckt“ und werden mit einem Klick übernommen (Magewell: Werkszugang vorausgefüllt). Erkannt werden sie über die MAC-Herstellerkennung (DHCP – dafür muss HA die DHCP-Anfragen sehen oder ein Device-Tracker wie UniFi die MAC melden); bekannte Geräte mit neuer IP werden automatisch nachgeführt. Zusätzlich: Integration hinzufügen → Strelle AV Matrix → Netzwerk nach Decodern durchsuchen fragt das eigene /24 (oder ein angegebenes Subnetz bis /22) nur lesend ab (~3 s). Magewell sendet kein verwertbares mDNS und kein SSDP; Dante-Geräte schlagen per mDNS den Eintrag „Dante®-Netzwerk“ vor.
  • Quellen werden automatisch gefunden (mDNS und die Listen aller Decoder), nach NDI-Namen zusammengeführt; veraltete Einträge fallen weg, verschwundene Quellen bleiben 2 Minuten stehen, damit nichts springt. Umlaut-Namen, die BirdDog nur als NDI_… kennt, werden über die Adresse zugeordnet.
  • Pro Ziel: Auswahl Quelle (select), Verbindung, Auflösung, Verbunden, Schaltsperre; pro Gerät Quellen aktualisieren.
  • Aktionen: av_matrix.route, av_matrix.salvo (mehrere Ziele, vorher komplett geprüft), lock/unlock, undo, refresh_sources; Ereignis av_matrix_routed.
  • Bildschirme koppeln: In den Optionen pro Ziel einen media_player (z. B. LG-TV über webOS) und den Eingang wählen – beim Schalten wird der TV eingeschaltet und der Eingang gewählt, bei „None“ optional ausgeschaltet.
  • Karte: type: custom:av-matrix-card – wird von der Integration selbst ausgeliefert, keine Ressource nötig. Kreuzschienen-Bedienfeld wie bei Videohub & Co.: Panel (Ziel wählen → Quelle) oder Matrix, Direkt oder Preset + TAKE (Salvo, Mehrfachauswahl per Shift/Long-Press), Sperre, Undo, Labels/Tags (Admin), Verlauf mit Benutzer, Tastatur (/ Suche, Enter TAKE, Esc verwerfen, U Undo, L Sperre, N Namen). Namensanzeige wie bei Lawo umschaltbar: Label | Original | Beide (name_mode, im Browser gemerkt); Labels (Admin) auch für Ziele (Stift, dann Ziel antippen, oder Doppelklick / langes Drücken auf den Zielnamen). Jedes Gerät wird als kleine Zeichnung mit Status-LED gezeigt, dazu seine IP-Adresse; die Taste ↗ öffnet die Weboberfläche des Decoders in einem neuen Tab (Magewell, BirdDog; nur im Netz des Geräts erreichbar, Dante®-Adapter haben keine). In Home Assistant: Diagnose-Sensor IP-Adresse je Gerät und Besuchen auf der Geräteseite. Oben mittig stehen Strelle-Logo und „Strelle AV Matrix“ (brand: auto | full | compact | off). Optionen siehe Tabelle oben.
  • NDI®-Vorschau: Jede Quellen-Kachel zeigt ihr Bild, jedes Ziel das Bild seiner aktuellen Quelle; ⤢ (Taste V) öffnet die eine Quelle größer und flüssig. Die Bilder liefert ein Strelle-AV-Matrix-Server (Server-Variante); seine Adresse steht unter Einstellungen → Geräte & Dienste → Strelle AV Matrix → ⚙ Konfigurieren → Vorschau-Server (z. B. http://192.0.2.8:8088, gilt für die ganze Integration, ein im Netz gefundener Server wird vorgeschlagen; leer = keine Vorschau, alles wie bisher). Home Assistant reicht die Bilder selbst durch – deshalb funktioniert es auch über https und Fernzugriff, und der Browser muss den Server nicht erreichen. Abgerufen wird sparsam: nur sichtbare Kacheln, alle 4,5 s, nicht bei verdecktem Tab, live nur die eine geöffnete Quelle. Statt alter Bilder steht der Zustand da: Kein Signal, Offline, Vorschau nicht möglich, Vorschau nicht erreichbar (Server weg – geschaltet wird trotzdem), vom Gerät (Standbild des Geräts statt NDI-Feed). Quellen tragen ein Symbol für Kamera, Encoder, Rechner, Testbild oder neutral.
  • HomeKit: die Quellen-Auswahl über die HomeKit-Bridge freigeben (ein Schalter pro Quelle; neue Quellen erst nach Neuladen der Bridge).
  • Updates kommen über HACS (Update-Entität), danach Home Assistant neu starten.
  • Dante® (experimentell): Eintrag „Dante®-Netzwerk“ übernimmt alle Dante-Geräte im Netz automatisch (mDNS, ohne Zugangsdaten). TX-Kanäle sind Quellen (Kanal@Gerät), RX-Kanäle Ziele; Schalten setzt bzw. löscht die Subscription. Pro RX-Kanal: Quelle (select), Subscription-Sensor, Schaltsperre; pro Gerät Kanalzahlen, Abtastrate, Online. Geräte mit mehr als 32 RX-Kanälen: Entitäten standardmäßig deaktiviert, die Karte schaltet trotzdem alle. Karte: eigener Tab, nach Gerät gruppiert, einklappbar, Gerätefilter. Nicht unterstützt: Dante Domain Manager, reine AES67-Geräte, Multicast-Flows. Inoffizielles, nachgebautes Protokoll – das Schalten ist noch nicht auf echter Hardware getestet.
  • Keine Quellen sichtbar? mDNS muss HA erreichen (Host-Netzwerk, Multicast zwischen VLANs). Mit NDI Discovery Server sieht Strelle AV Matrix nur, was die Decoder melden.

Installation über HACS (benutzerdefiniertes Repository https://github.com/strelle/ha-av-matrix, Typ Integration) oder manuell nach <config>/custom_components/av_matrix, danach Neustart.


NDI® is a registered trademark of Vizrt NDI AB. Dante® is a registered trademark of Audinate Group Pty Ltd; the Dante support uses an unofficial, reverse-engineered protocol. This project is not affiliated with, endorsed or sponsored by Vizrt, Audinate, BirdDog, Magewell, Behringer, Neutrik or HDCVT. The device illustrations are our own stylised drawings, not manufacturer artwork; product names only identify the supported devices. The Strelle word mark and picture mark shown in the card belong to Strelle GmbH and are not covered by the MIT license (see NOTICE). Protocol knowledge from netaudio (public domain), see NOTICE.

License: MIT · © 2026 Strelle

About

Smart crosspoint router for NDI® decoders – BirdDog, Magewell – extensible for Dante and more. Auto-discovered sources, matrix card, HomeKit-ready.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages