Zpět na domů

HDMI matice v Home Assistant: integrace RS-232

Článek popisuje vytvoření vlastní integrace HDMI matice 4×4 do Home Assistant přes RS-232. Detailní kód koordinátoru s threading, media_player entity a protokol výměny. Instrukce k instalaci přes Samba pro Raspberry Pi.

DIY HDMI Switch pro Home Assistant: kompletní průvodce
Advertisement 728x90

Integrace HDMI matice 4×4 do Home Assistant přes RS-232

Systém založený na HDMI matici 4×4 umožňuje přepínat zdroje signálu — kabelovou TV, mediální přehrávače, herní konzole — mezi čtyřmi televizory. Integrace s Home Assistant využívá RS-232 pro příkazy a Coordinator pro vláknově bezpečnou práci s portem. Neuronová síť Qwen urychlila reverzní inženýrství protokolu a vývoj kódu.

Hardwarové předpoklady

Je potřeba matice 4×4 s podporou 4K@60 Hz a RS-232, USB-to-RS232 konvertor pro Raspberry Pi. Řídicí protokol byl reverzně inženýrskován podle článku na Habr: příkazy v textovém formátu, rychlost 115200 baudů.

Koordinátor HDMISwitchCoordinator spravuje spojení v samostatných vláknech, čímž se vyhýbá blokování event loop Home Assistant. Podporuje inicializaci portu, odesílání příkazů s blokováním threading.Lock a načítání odpovědí na pozadí.

Google AdInline article slot

Protokol komunikace

Příkazy pro přepínání: cir + hexadecimální hodnota podle vzorce 8 × (zóna-1) + (vstup-1).

Příklady:

  • Zóna 1, vstup 1: cir 00
  • Zóna 2, vstup 3: cir 11 (0x0A jako 0a)

Příkaz končí \r\n. Zařízení posílá stavy s{zóna}{vstup}, například s13 — zóna 1 na vstupu 3. Koordinátor parsuje a aktualizuje entity přes callbacks.

Google AdInline article slot

Entity media_player

Pro každou zónu — samostatný media_player:

  • Zobrazení aktuálního zdroje
  • Výběr vstupu ze seznamu
  • Služby media_player.select_source
  • Vlastní názvy zdrojů

Podpora:

  • Zapnutí: první zdroj
  • Vypnutí: druhý zdroj (zástupný)
  • Ikony: entity_picture z /config/www/hdmi_switch/img_{n}.png

Struktura instalace

Složka custom_components/hdmi_switch/:

Google AdInline article slot
config/
├── custom_components/
│   └── hdmi_switch/
│       ├── __init__.py
│       ├── manifest.json
│       ├── const.py
│       ├── media_player.py
│       └── images/  # img_1.png atd.
├── www/
│   └── hdmi_switch/
└── configuration.yaml

Instalace přes Samba:

  • Nastavit Samba share v HA
  • Připojit se: \\homeassistant\config
  • Vytvořit strukturu, nahrát soubory
  • Restartovat HA

Kód: manifest.json

{
  "domain": "hdmi_switch",
  "name": "HDMI Switch",
  "version": "1.1.0",
  "requirements": ["pyserial>=3.5"],
  "iot_class": "local_push",
  "config_flow": false
}

Kód: const.py

DOMAIN = "hdmi_switch"
DEFAULT_NAME = "HDMI Switch"
DEFAULT_PORT = "/dev/ttyACM0"
DEFAULT_COMMAND_BAUDRATE = 115200
DEFAULT_TIMEOUT = 5.0
DEFAULT_SOURCES = ["Vstup 1", "Vstup 2", "Vstup 3", "Vstup 4"]

Kód: __init__.py (koordinátor)

Třída HDMISwitchCoordinator:

  • _open_serial(): serial.Serial(port, baudrate=115200, timeout=0.5, 8N1)
  • start(): threading pro _initialize_and_listen
  • _listen_loop(): načítání na pozadí
  • register_listener(zone_id, callback)

Celý kód zajišťuje vláknovou bezpečnost a asynchronitu.

Konfigurace v configuration.yaml

hdmi_switch:
  port: /dev/ttyACM0  # volitelně
  command_baudrate: 115200
  timeout: 5.0

Po restartu jsou entity dostupné v rozhraní. Ikony se automaticky kopírují do www/hdmi_switch.

Co je důležité

  • Vláknová bezpečnost: threading.Lock a samostatná vlákna pro sériový port
  • Entity: 4 media_player s select_source a entity_picture
  • Protokol: cir{hex} pro přepínání, s{zóna}{vstup} pro stav
  • Závislosti: pyserial>=3.5
  • Instalace: custom_components bez HACS

— Editorial Team

Advertisement 728x90

Číst dál