Externe Integrationen: Zugriff auf USB-Seriellschlüssel (RFPlayer, Téléinfo, Zigbee...)

Hallo zusammen,

Nach der Schließung des GitHub-Issues #18 (« lasst uns darüber im Forum diskutieren ») schlage ich hier die Funktion vor.

Der Bedarf

Externe Integrationen laufen in einem isolierten Container, der keinen Zugriff auf USB-Seriell-Ports hat.

Heute erlaubt das Manifest nur die Anforderung dieser Hardwareklassen: coral-usb, coral-pcie, gpu, video. Und nur für Untercontainer (containers[]), nicht für den Hauptcontainer der Integration.

Ergebnis: Es ist unmöglich, direkt einen USB-Seriell-Schlüssel zu lesen.

Betroffene Integrationen

Ich habe zwei Integrationen entwickelt, die dies benötigen:

Aber der Bedarf ist breiter: Zigbee-, Z-Wave-, EnOcean-Schlüssel, Modems usw.

Aktuelle Lösung (nicht ideal)

Über ser2net (oder socat) auf der Host-Maschine, das den Seriell-Port als TCP exponiert.

Die Probleme:

  • ser2net muss manuell per SSH installiert und konfiguriert werden → nicht für die Gladys-Nutzer geeignet.
  • Es öffnet einen Netzwerkport ohne Authentifizierung im lokalen Netzwerk.
  • Ein weiterer Baustein, der gewartet werden muss und ausfallen kann.

Mein Vorschlag

Eine Klasse serial hinzufügen, die genau die gleichen Regeln wie die bestehenden Klassen befolgt:

  1. Angefragt im Manifest: "devices": ["serial"], auch für den Hauptcontainer.
  2. Vom Benutzer genehmigt in der Oberfläche (Schalter bei der Installation, jederzeit entfernbar).
  3. Nur montiert, wenn vorhanden auf der Maschine.

Einige zusätzliche Ideen:

  • Der Benutzer wählt den Schlüssel aus einer Liste der erkannten Seriell-Ports (es wird nur ein Gerät montiert, nicht alles /dev).
  • Verwenden Sie den stabilen Pfad /dev/serial/by-id/..., damit es nach einem Neustart oder einem USB-Port-Wechsel noch funktioniert.
  • Optionaler Filter im Manifest (USB-Hersteller-/Produkt-ID oder eine Bezeichnung), um nur kompatible Schlüssel anzubieten.
  • Nie ein freier /dev-Pfad im Manifest, wie bei den anderen Klassen.

Offene Fragen

  • Was tun, wenn zwei Integrationen (oder eine native Integration wie Zigbee2mqtt) denselben Schlüssel wollen?
  • Wie wird der abgezogene und wieder angesteckte Schlüssel verwaltet?
  • Ein Seriell-Port pro Integration oder mehrere?

Verknüpfte GitHub-Issues

Sobald die Klasse existiert, aktualisiere ich meine beiden Integrationen, um ser2net zu entfernen.

Was haltet ihr davon? Wenn es euch interessiert, zögert nicht, für dieses Thema zu stimmen :slightly_smiling_face: