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:
- Angefragt im Manifest:
"devices": ["serial"], auch für den Hauptcontainer. - Vom Benutzer genehmigt in der Oberfläche (Schalter bei der Installation, jederzeit entfernbar).
- 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
- Gladys-Kern (Gerätemounting): External integrations: allow access to a USB serial device · Issue #3194 · GladysAssistant/Gladys · GitHub
- Integration Store (Manifest-Schema): External integrations: allow access to a USB serial device · Issue #18 · GladysAssistant/integration-store · GitHub
- JS-SDK: External integrations: allow access to a USB serial device · Issue #39 · GladysAssistant/integration-sdk-js · GitHub
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 ![]()