USB Devices im ioBroker Docker Container nutzen

Offenbar immer wieder ein wichtiges Thema und ehrlich gesagt auch schon länger auf meiner ToDo-Liste:

Wie bekomme ich im ioBroker Container Zugriff auf ein USB-Device?

Eigentlich sind hier gar nicht so viele Handgriffe notwendig. Zumal ich im ioBroker-Docker-Image v4.1.0 eine Umgebungsvariable eingeführt habe, die das Handling nochmal vereinfacht und letztendlich dann auch „rebootsicher“ macht. Dazu aber gleich mehr.

Zuvor von mir noch ein kleiner „best practice“-Hinweis über den ihr zumindest einmal nachgedacht haben solltet. 🙂

Bei mir verhäl es sich nämlich so, dass meine DiskStation (also mein Docker Host) nicht gerade optimal plaziert ist um USB-Devices wie zigbee-Stick, rflink oder Bluetooth Dongle zu betreiben. Daher habe ich schon früh eine andere Lösung gesucht und diese im Multihost-Modus von ioBroker gefunden.

Dabei nutze ich heute einen Raspberry Pi als Multihost Slave und habe dort nur Adapter installiert, die zum Betrieb meiner USB-Geräte notwendig sind. Leistungsmäßig ist der Pi dafür absolut ausreichend und ich habe den Vorteil dass ich den kleinen Freund direkt mittig im Haus, unter der Treppe, also optimal für Sende- und Empfangsaufgaben, plazieren konnte.

Vielleicht ist das ja auch für einige von euch eine sinnvolle Alternative.

Nungunt, ihr wollt also undbedingt die Devices an den Docker-Host stecken und im Container verfügbar machen. Kein Problem, denn so geht’s:

Schritt 1 - Device auf dem Host identifizieren

Damit wir das Device in den Container einbinden können müssen wir erst einmal identifizieren unter welchem Pfad es auf unserem Host zur Verfügung steht.

Die einfachste Lösung das zu erledigen ist das Ausführen des Befehls „dmsg“ unmittelbar nach dem Anstecken. Ziemlich am Ende sollte sich erkennen lassen, dass ein USB-Device angesteckt worden ist. Bei mir sieht das so aus:

Daran ist zu erkennen, dass mein USB-Device als ttyACM0 auf dem Host zur Verfügung steht.

Eine andere Möglichkeit wäre die Ausführung des Befehls lsusb. Das sieht bei mir dann so aus:

Die Auflistung zeigt alle meine USB-Devices. Da ich weiß, das mein Zigbee-Stick mit der Kennung „Texas Instruments…“ kommt können wir der Ausgabe entnehmen, dass er an den USB-Port „usb2“, genauer sogar an „2-1“ gesteckt wurde. Mit einem ll /sys/class/tty | grep usb2 oder ll /sys/class/tty | grep 2-1 können wir nun ebenfalls ermitteln dass mein Stick unter ttyACM0 zu finden ist:

Aus diesen Erkenntnissen lässt sich schlussfolgern, dass unser Device auf dem Host unter /dev/ttyACM0 verfügbar ist.

Es gibt natürlich noch viele andere Wege an diese Information zu kommen. Google spuckt da echt eine Menge aus. Für uns soll das hier aber erstmal genügen.

Schritt 2 - Erforderliche Konfigurationseinstellungen im Container

Damit unser USB-Device apäter im Container zur Verfügung steht müssen wir bei der Erstellung des Containers zwei Konfigurationen berücksichtigen. Zum Einen müssen wir das Device in den Container durchreichen, zum Anderen müssen wir dafür Sorge tragen dass unser ioBroker später auch auf das Device zugreifen kann bzw. darf.

Zuerst reichen wir also das Device in den Container durch. Dazu werfen wir beim Erstellen des Containers über Portainer (siehe dazu auch das Tutorial zum Erstellen des Containers) einen Blick auf die „Advanced container settings“, genauer in den Bereich „Runtime & Resources“. Dort gibt es einen Punkt „Devices“. Über „add device“ können wir ein Device hinzufügen

Einzugeben ist hier unter „host“ das zuvor ermittelte tty-Device. Um nicht durcheinander zu kommen empfehle ich das Device später auch im container unter dem gleichen Pfad verfügbar zu machen. Das Ganze sieht dann in etwa so aus:

Fehlt noch das Sicherstellen, dass unser ioBroker später auch zugreifen darf. Dazu habe ich, wie eingangs schon angesprochen, seit der Version 4.1.0 des Docker Images eine Umgebungsvariable (ENV, mehr Infos in der Readme auf Github) eingeführt. Die Variable heißt „USBDEVICES“ und wird mit dem Pfad zum Device gefüllt. Das Ganze passiert ebenfalls unter den „Advanced container settings“ im Punkt „Env“ und sieht dann in etwa so aus:

Alle anderen Einstellungen werden wie im oben bereits angesprochenem Tutorial konfiguriert.

Schritt 3 - Überprüfung

Nach dem Start des Containers sollte das USB-Device dann innerhalb des Containers zur Verfügung stehen. Püfen lässt sich das recht einfach über ein ls -al /dev/*. Hier muss nun unser Device auftauchen und die Berechtigungen entsprechend für die Gruppe „dialout“ gesetzt sein:

Das sollte es dann auch schon gewensen sein. Jetzt müsst ihr nur noch den entsprechenden Adapter installieren und euer Device in der Adapter-Konfiruration entsprechend angeben.

Für Fragen steht euch wie üblich die Kommentarfunktion zur Verfügung. Bitte vermeidet es mir Direktnachrichten zu schicken. Vielleicht seid Ihr ja nicht die Einzigen die sich genau diese Frage stellen oder genau dieses Problem haben. Und es wäre doch Schade wenn den Anderen dann meine Antwort entgeht. Vielen Dank für euer Verständnis und viel Erfolg beim Ausprobieren.

MfG, André

About the author: André

André
Familienvater und bekennender Technik-Nerd. Beruflich unterwegs als Fachinformatiker für Systemintegration bei einem deutschen IT-Dienstleister. In der Freizeit begeisterter "Home-Automatisierer" bzw. "Smarthome-Bastler" und (zumindest bei schönem Wetter) gerne mit der Familie in verschiedenen Outdooraktivitäten unterwegs.
Abonnieren
Benachrichtige mich zu:
guest
21 Kommentare
Inline Feedbacks
View all comments
LaKl

Hallo.
Ich bin gerade ebenfalls dabei meinen ZIGBEE Stick im IOBroker Container zu verwenden. Doch so ganz will das noch nicht.
An der Stelle nochmal Danke für die viele Mühe. Echt wahnsinn.
Ich habe meinen Docker Container mittels der docker-compose.yml Datei aufgebaut und es funktioniert soweit super. Auch das Device konnte ich hier einbinden. Allerdings habe ich andere Berechtigungen und kann mit dem Zigbee Adapter aus IOBroker leider nicht darauf zugreifen, sondern erhalte nur Fehler. Hast Du eine Idee, wie ich das beheben kann?
Danke und Gruß

Jarek

Hi, da ich nach Lösungen für Probleme mit CC2531 unter Docker auf NAS suchte – bin ich auf dein Beitrag gestoßen. Genial verständlich geschrieben! Leider funktionierte das Ding bei mir nicht mehr… NAS: Stick ist da: |__7-2 0451:16a8:0009 02 2.00 12MBit/s 50mA 2IFs (Texas Instruments TI CC2531 USB CDC __0X00124B000BE95761) unter ttyACM0: [60099.950761] cdc_acm 7-2:1.0: ttyACM0: USB ACM device Docker scheint das auch übernommen zu haben: root@ioBrokerJarek:/# dmesg | grep acm [ 69.801612] cdc_acm 4-2:1.0: This device cannot do calls on its own. It is not a modem. [ 69.809775] cdc_acm 4-2:1.0: ttyACM0: USB ACM device im dev finde ich… Mehr lesen »

Roland Steger

Hallo, vielen Dank für alle deine Mühe und deine Tutorials! Ich nutze iobroker auf einer Synology NAS und habe dort parallel auch Domoticz installiert. Dies aus diesem Grund da ich Somfy RTS Rolläden habe, die ich mittels einen USB-Sender RFXCOM RFXTRX433E ansteuere. Diesen kriege ich leider nicht ins iobroker. Es gab dazu einen Adapter, der aber vom inital release nie rausgekommen ist (https://github.com/ioBroker/ioBroker.rfxcom.git). Hat es niemand noch geschafft diesen in iobroker zu integrieren? Oder sind diese Rolläden wirklich so selten im Einsatz? Ich habe auch einmal den Einsatz den HAM-Adapter gelesen, der auch diese Somfy Rolläden irgendwie unterstützen könnte. Ich… Mehr lesen »

machnetz

Seit dem letzten Update des zigbee-Adapters auf 1.x bekomme ich selbigen im Container (Image 4.x) nicht mehr zum laufen. Ein einziges Mal startet der Adapter, danach verschwindet er auch auf dem Containerhost (dacia): zigbee.0 2020-04-19 11:26:00.060 error (523) Error: Error while opening serialport ‚Error: Error: No such file or directory, cannot open /dev/ttyACM0‘ zigbee.0 2020-04-19 11:26:00.059 error (523) Failed to start Zigbee zigbee.0 2020-04-19 11:26:00.058 info (523) Starting Zigbee… zigbee.0 2020-04-19 11:26:00.057 info (523) Try to reconnect. 5 attempts left zigbee.0 2020-04-19 11:25:50.053 error (523) Adapter disconnected, stopping zigbee.0 2020-04-19 11:25:46.043 info (523) Zigbee started zigbee.0 2020-04-19 11:25:46.043 info (523)… Mehr lesen »

Manuel

Hallo,
dein Docker Container ist echt super und ich bekomme ihn immer besser zum laufen.
Eine Frage: Ist es möglich das lokale Bluetooth Modul eines Raspberry Pi einzubinden und wenn ja wie :D?
Danke schonmal lg

machnetz

Sehr schön gemacht. Ich habe am WE mit iobroker und Zigbee-Stick erste Positive Erfahrungen mit dem Image gemacht. Das einbinden des Stick klappte auf Anhieb.

Martin

Hallo André, vielen Dank erst mal für deine super Tutorials, die mir als absoluten Anfänger schon an vielen Stellen weiter geholfen haben. Ich habe deine Tutorials zum Portainer und der ioBroker Installation „abgearbeitet“ und bisher hat alles so geklappt wie Du beschrieben hast! Nun wollte ich den oben erwähnten ZigBee Stick in meinen ioBroker durchreichen. Ich konnte bisher herausfinden, dass mein Stick unter „usb1“ bzw. „1-2.3“ zu finden ist. nach „ll /sys/class/tty | grep usb1“ spuckt das System mir ebenfalls „ttyACM0“ aus. Soweit so gut, ich gehe über Portainer in die „Advanced Settings“ des ioBroker Containers und reiche den Pfad… Mehr lesen »