USB Devices im ioBroker Docker Container nutzen
Wie bekomme ich im ioBroker Container Zugriff auf ein USB-Device am Docker Host?
Eine Frage die mir in jüngster Vergangenheit öfter gestellt wurde und eigentlich gar nicht so kompliziert zu beantworten ist.
In Bezug auf mein ioBroker-Docker-Image habe ich bereits in Version 4.1.0 eine Umgebungsvariable eingeführt, die dafür sorgt, dass zumindest die Rechte innerhalb des Containers immer passen sollten und letztendlich auch „reboot-sicher“ sind. Dazu aber gleich mehr.
Zuvor von mir noch ein kleiner „Best Practice“-Hinweis, über den ihr zumindest einmal nachgedacht haben solltet. 🙂
Bei mir verhält es sich nämlich so, dass meine DiskStation (also mein Docker Host) nicht gerade optimal platziert ist um USB-Devices wie einen Zigbee-Stick oder einen rflink 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 2B als Multihost Slave und habe dort nur Adapter installiert, die zum Betrieb meiner USB-Geräte notwendig sind. In Sachen Leistung 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, platzieren konnte.
Im Falle einer DiskStation als Docker Host kommt außerdem hinzu, dass leider nicht alle USB Devices problemlos an den DiskStations laufen. Aber das ist eine andere Geschichte.
Nun gut, soweit dies als kleinen Denkanstoß. Kommen wir also nun dazu unser USB Device in den Container durch zu reichen.
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 und angesprochen werden kann.
Die einfachste Lösung das zu erledigen ist das Ausführen des Befehls „dmesg“ unmittelbar nach dem Anstecken. Ziemlich am Ende sollte sich erkennen lassen, dass ein USB-Device angesteckt worden ist. Bei mir sieht das so aus:
An der Ausgabe 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 dem Alias ttyACM0
zu finden ist:
Aus diesen Erkenntnissen lässt sich schlussfolgern, dass unser Device auf dem Host unter /dev/ttyACM0
verfügbar ist.
Es geht aber auch anders...
Die beiden bisher genannten Wege zur Ermittlung des Pfades unter dem das Device ansprechbar ist, sind Beispiele von einer DiskStation. Auf anderen Systemen, wie z.B. einem Rasopberry Pi, gibt es noch eine Andere Möglichkeit. Hier ist es nämlich möglich ein Device auch „by-id“ an zu sprechen. Dazu kann man per ls -al /dev/serial/by-id/
so etwas auslesen:
Auch hier ist wieder zu erkennen, dass das Device usb-Texas_Instruments… als tty/ACM0 zur Verfügung steht. Doch was viel besser ist ist die Erkenntnis, dass das Device auch über den Pfad /dev/serial/by-id/usb-Texas_Instruments_[...]
ansprechbar ist. Der Voreil dieser Variante ist, dass es sich bei dem Pfad um den echten Namen (ID) und nicht um einen Alias wie ttyACM0
handelt. Das wird vor allem dann interessant wenn man, wie ich, nicht nur ein USB Device durchreichen möchte. Denn es kann durchaus passieren, dass nach einem Reboot des Hosts der Alias plötzlich einem anderen USB device zugeordnet wird weil die verschiedenen Devices vom Betriebssystem in einer anderen Reihenfolge erkannt wurden.
Kurzum: Es empfiehlt sich bei mehreren USB-Devices am Docker Host den „by-id“-Pfad zu verwenden und nicht den Alias.
Es gibt natürlich noch andere Wege an die Information zum Device-Pfad zu kommen. Die Möglichkeiten können sich von System zu System unterscheiden. Google spuckt da echt eine Menge aus. Für uns soll das hier aber erstmal genügen.
Schritt 2 - Erforderliche Konfigurationseinstellungen im Container (via Portainer)
Damit unser USB-Device spä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“ der zuvor ermittelte Device-Pfad. Bei Verwendung des Alias-Pfads (also z.B. /dev/ttyACM0) empfehle ich das Device auch innerhalb des Container unter dem gleichen Pfad verfügbar zu machen. Das Ganze sieht dann in etwa so aus:
Für den Fall, dass wir den eindeutigen, langen „by-id“-Pfad verwenden wollen, empfiehlt es sich im Container einen Alias zu verwenden. Möglich wäre z.B. /dev/serial/by-id/zigbee
für einen Zigbee-Stick.
Wenn unser Device in einen ioBroker Container durchgereicht wird, sollten wir nun noch sicherstellen, dass unser ioBroker später auch auf das Device 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 gefüllt, unter dem das Device innerhalb des Containers erreichbar ist. In meinen Beispielen wäre das also /dev/ttyACM0
oder /dev/serial/by-id/zigbee
. Das Ganze passiert ebenfalls unter den „Advanced container settings“ im Punkt „Env“ und sieht dann in etwa so aus:
Schritt 3 - Überprüfung
Nach dem Start des Containers sollte das USB-Device nun innerhalb des Containers zur Verfügung stehen. Prüfen lässt sich das recht einfach über ein ls -al /dev/*
bzw. ls -al /dev/serial/by-id/*
.
Hier muss nun unser Device auftauchen und die Berechtigungen entsprechend für die Gruppe „dialout“ gesetzt sein:
Das sollte es dann auch schon gewesen sein. Jetzt müsst ihr nur noch den entsprechenden Adapter installieren und euer Device in der Adapter-Konfiguration entsprechend angeben.
Das solle es zu diesem Thema erst einmal gewesen sein. Bei Fragen und Anregungen nutzt gerne die Kommentare oder kontaktiert mich über einen der öffentlichen Kanäle wie z.B. über das ioBroker Forum oder den ioBroker Discord Channel.
Grundsätzlich biete ich keinen persönlichen Support per Messenger bzw. E-Mail an. Fragen sollten meiner Meinung nach immer öffentlich gestellt und beantwortet werden, damit auch andere User mit der selben Frage Zugriff auf die Antworten bekommen. 🙂 Falls ihr mal irgendwo keine Antwort bekommt, nutzt gerne das Kontaktformular und macht mich auf euren Kommentar, Post, Beitrag oder Thread aufmerksam! Danke.
MfG,
André
Änderungshistorie
2020-09-15 Überarbeitung und Umzug von buanet.de/tutorials zu smarthome.buanet.de. Ergänzung um Möglichkeit zur Einbindung über /serial/by-id/*
(Nicht möglich bei Synology DiskStations).
Hallo,
erst einmal ein großes Lob an dich André, für die nachvollziehbaren und ausführlichen Anleitungen. Ich werde mich auf jeden Fall noch erkenntlich zeigen.
Dank deiner Anleitungen habe ich unter anderem Portainer und iobroker auf einer Synology 720+ zum Laufen gebracht und erfreue mich an meinem wachsenden smart-home.
Derzeit stehe ich aber vor einem Problem und erhoffe mir hier Hilfe.
Ich wollte einen Zigbee-Stick unter iobroker zum Laufen bringen und scheitere daran. Genauer handelt es sich um einen CC2531 von Texas Instruments. Der soll bereits mit entsprechender Firmware geflasht worden sein.
Die Synology hat mittlerweile DSM 7 installiert. Ab dieser Version wird von Hause aus der USB- Support eingeschränkt. Nach einiger Recherche habe ich einen Workaround gefunden, mit dem die Diskstation überredet werden konnte, den Stick zu akzeptieren. Auf der Konsole wird er an /dev/ttyACM0 als ein device von Texas Instruments erkannt.
Ich habe nachfolgend einen Container „zigbee2mqtt“ aufgebaut. Dieser läuft ordnungsgemäß durch und ist zum Beispiel über die Statistiken ansprechbar.
So weit so gut. Nur in iobroker hapert es dann.
Ich habe diesen neu aufgesetzt, um den USB Port durchzureichen. Diese Funktion hatte zuvor gefehlt. Ich kann nachfolgend auch in der Konsole in Portainer wie oben in der Anleitung beschrieben auch den Port /dev/ttyACM0 auch sehen.
Anschließend habe ich einen neuen Adapter Zigbee unter iobroker installiert und eben diesen kann ich nicht konfigurieren. Er wird installiert und es öffnet sich die Seite zum Einstellen und Konfigurieren. Dort gehe ich auf den Reiter „Einstellungen“ und kann nicht über das dropdown- Menü den Port anwählen. Eine manuelle Eingabe geht zwar, ist aber gewiss nicht vorgesehen, hat dann auch keine Auswirkung. Der Adapter verbindet sich nach dem Start zwar mit dem Host aber eben nicht mit dem Stick.
Wo liegt der Fehler?
Ach ja, den Container für iobroker habe ich nicht manuell neu erstellt, sondern in Portainer die Funktion Duplicate/Edit genutzt. Nachdem ich dort dann runtime &resources und ENV entsprechend hinzugefügt hatte, ersetzte Portainer den alten Container.
Danke
Mathias
Hallo Mathias,
da kann ich dir so direkt gar nicht weiter helfen. Eigentlich sollte das Dropdown Menü funktionieren (tut es zumindest bei mir). Wüsste jetzt aus dem Stand auch nicht woran es liegen könnte. Denke das ist eine gute Frage für die Community… Was ich aber weiß ist, dass es mitunter im Portainer bei Duplicate/Edit gerade in Bezug auf Umgebungsvariablen Probleme geben kann. Es gab da mal einen Bug da wurden neue Variablen nicht übernommen. Du solltest mal schauen ob dein Container wirklich die Einstellungen übernommen hat. Ansonsten würde ich wirklich empfehlen die Frage mal im Discord Channel oder im Forum zu stellen.
MfG,
André
Zuerst mal Danke,
wirklich gut gemachte Tutorials, zu dem hier hätte ich noch eine Ergänzung:
Ich nutze auf diese Weise auch I2C und SPI, die ich als Volumes in den Container durchreiche. hier müssen im „EveryStartupscript“ nur noch die Rechte bzw. der Owner angepasst werden.
Ich hoffe das bringt anderen auch och was.
LG Stefan
Hallo
Kann man die USB-Schnittstellen auch an iobroker auch durchleiten ohne den Container neu erstellen zu müssen?
Gruß
Stephan
Hallo Stephan,
nein, das geht nicht. Grundsätzlich geht eine Änderung der Konfiguration immer mit dem Neuanlegen des Containers einher. Das sollte aber eigentlich kein Problem sein. Zumindest wenn du nicht manuell an deinem Container Hand angelegt hast, was grundsätzlich nicht empfehlenswert ist.
MfG,
André
Hallo André,
danke für deine tolle Arbeit.
Ich betreibe einen Portainer Stack mit mariadb, mosquitto und iobroker. Den Stack habe ich mit Hilfe eines docker-compose Files erstellt.
Ich habe danach – gemäß diesem Artikel – den Stick (ConBee) problemlos in den iobroker Container einbinden können.
Leider ist es so, dass diese Änderungen bei mir nicht persistent bleiben. Sobald ich den ganzen Stack neu starte, ist die ConBee-Einbindung futsch.
Hast du eine Idee, wie man das dauerhaft machen kann?
Hallo Daniel,
das sollte eigentlich nicht passieren wenn du die Optionen für die Einbindung im Compose-File mit drin hast. Leider weiß ich nicht was genau bei dir verloren geht. Für die Hardwareeinbindung und Installation von erforderlichen Paketen gibt es entsprechende Umgebungsvariablen bzw. Direktiven. Mehr Infos dazu findest du auch in der Readme vom Docker Image sowie in der Docker Dokumentation zu docker-compose. Solltest du die Ausführung von irgendwelchen Kommandos benötigen, so bietet das Docker Image mit den „User defined startup scripts“ auch hier eine Möglichkeit. Damit sollten eigentlich alle benötigten Einstellungen persistent gemacht werden können.
Falls du noch weitere Fragen hast, melde dich gerne mal im ioBroker Discord Channel.
MfG,
André
Hast du auch eine Anleitung wie man deconz installiert? Für den Conbee 2 auf der Synology?
Eventuell ein Video?
Hallo Paul,
da ich keinen Conbee 2 besitze, nein.
MfG,
André
Hallo André,
ist es mit der oben beschriebenen Anleitung möglich den Stick, bei mir ein Conbee II mit deconz Adapter als HOST laufen zu lassen und an den ioBroker im MACVLAN durchzureichen? Das habe ich nämlich nicht hinbekommen. Packe ich den Stick ebenfalls ins MACVLAN läuft es sofort und so habe ich es auch erstmal gelassen.
Danke schonmal!
Grüße Franz
Hallo Franz,
ich kann dir leider nicht ganz folgen. Wie meinst du das „ein Conbee II mit deconz Adapter als HOST laufen zu lassen“?
Und wie machst du das: „Packe ich den Stick ebenfalls ins MACVLAN“?
Bei einem Stick handelt es sich für mich um eine USB Device. Wenn du den im ioBroker Container nutzen möchtest, musst du ihn wie oben beschrieben durchreichen. Meines Erachtens hat das aber nichts mit HOST oder MACVLAN Netzwerk zu tun…
MfG,
André
Hallo André,
sorry, da habe ich mich wohl zu knapp ausgedrückt.
Also mein Setup sieht folgendermaßen aus. Ich habe eine Synology DS918+ und Docker am laufen. ioBroker läuft nach deiner V3 Anleitung in einem Container mit eingerichtetem MACVLAN Netzwerk und eigener IP, also nicht unter dem HOST Netzwerk mit der Synology IP Adresse. Den Conbee II Stick habe ich an dem hinteren USB Port der Synology angeschlossen. In einem weiteren Container habe ich das marthoc/deconz Image für meinen Conbee II Stick im HOST Netzwerk am laufen. Per HOST IP und Port kann ich dann auf den Conbee II Stick zugreifen und Zigbee Geräte anlernen und verwalten.
Um den Conbee II Stick jetzt auch in ioBroker verfügbar zu machen bin ich 1:1 deiner obigen Anleitung gefolgt und, habe den deconz Adapter in ioBroker installiert. In den Adapter Settings muss man Name und Passwort eingeben um einen API Key zu generieren. Den API Key holt sich der Adapter direkt vom Conbee II Stick und auf den kann er irg. wie nicht zugreifen, sprich es wird kein API Key generiert bzw. vom Stick abgeholt. Mit ls -al /dev/* sehe ich aber den Stick unter /dev/ttyACM0 – also um so merkwürdiger.
Wenn ich jetzt den Docker Container des Conbee II Sticks, also den Container mit dem deconz image auch in das MACVLAN einbinde in dem bereits ioBroker läuft und diesem Adapter eine eigene IP Adresse gebe, kann ich den API Key sofort abholen. Sprich der Deconz Adapter im ioBroker kann problemlos auf den Stick zugreifen.
Da ich jetzt schon öfter gelesen habe, dass Docker Container die in einem MACVLAN Netzwerk laufen nicht auf Docker Container die im HOST Netzwerk laufen zugreifen können und andersrum, war meine Frage, ob das mit deiner obigen Anleitung? Falls ja, mache ich noch immer etwas falsch und falls nein, dann wahrscheinlich weil Docker Container im MACVLAN und HOST, wie beschrieben untereinander getrennt sind.
Grüße Franz
Hallo Franz,
ich glaube du bringst da ein bisschen was durcheinander. Soweit ich weiß hast du zwei Möglichkeiten:
1. Du nutzt Deconz in einem eigenen Container und verbindest diesen mit deinem ioBroker Container in dem der Deconz Adapter läuft.
2. Du deaktivierst den Deconz Container, reichst deinen Conbee II direkt in den ioBroker Container durch und nutzt ihn z.B. mit dem Zigbee Adapter (soweit ich weiß soll das gehen)
Was du m. E. nicht machen kannst ist den Conbee Stick direkt in den ioBroker Container durch reichen und im Deconz Adapter nutzen…
Bei Variante 1 wird es für dich allerdings schwierig. Um Container untereinander kommunizieren zu lassen nutzt man in der Regel ein gemeinsames Bridge Netzwerk. Beim ioBroker mit MACVLAN ist das kein Problem. Da kannst du zusätzlich ein Bridge Netzwerk verbinden. Bei einem Container im Host Netzwerk geht das leider nicht. Du könntest aber Glück haben und versuchen dem ioBroker Container ein Bridge Netzwerk zuzuweisen und dann über das Gateway des Bridge Netzwerks deinen Host zu erreichen. Vielleicht erreichst du über diesen Weg dann den Deconz Container. Theoretisch geht das so. Praktische Erfahrung habe ich dazu aber nicht.
Da ich diesbezüglich keine Erfahrungen habe und das auch nicht testen kann, solltest du vielleicht mal im ioBroker Forum fragen. Da gibt es sicher User die Docker und Conbee II im Einsatz haben.
MfG,
André
Hallo André,
vielen Dank für deine Rückmeldung! Dann werde ich mal ein bisschen ausprobieren und belese ich mich auch im iobroker Forum.
Grüße Franz
Hi Andre,
vielen Dank für diese weitere Hilfestellung. Bei der Einbindung des USB-Sticks Einbindung hab ich allerdings die ersten „Probleme“
Ich habe alles (ioBroker + MCVLAN, Portainer) auf einer DS218+ am laufen mit zeigt es aber den -> /dev/ttyACM0 nie an(auch nicht mit dmesg).
Mit lsusb bekomme ich meine Geräte angezeigt jedoch laufen die die folgenden Befehle bei mir ins Leere…
ll /sys/class/tty | grep usb2
ll /sys/class/tty | grep 2-1
Wenn ich die Befehle eingebe kommt nichts, weder eine Fehlermeldung noch ein Output, ich bekomme eine neue leere Kommandozeile angezeigt (auf wenn ich die USB Ports tausche 21). Hier hat ein weiterer User das gleiche Problem, gibt es mittlerweile eine Lösung?
Hallo Mark,
das mit den USB Devices an den Disk Stations ist immer so eine Sache. Erfahrungsgemäß geht da nicht alles „out of the box“. Was für ein Gerät versuchst du denn in den Container durch zu reichen? Wir hatten es dazu auch vor kurzem gerade erst im iobroker discord chat…
MfG,
André
Hallo André,
ich versuche einen Zigbee Stick CC2531 einzubinden, mittlerweile glaube ich dass dieser einen defekt hat, ich werde einen neuen bestellen und weiter berichten.
Grüße
Mark
Hallo André,
hier eine Update 🙂
Ich habe den Stick mit Heißluft und Unterhitze nachgelötet…und siehe da er funktioniert 🙂 und dank deiner Anleitung auch auf der Synology..
Noch eine Anmerkung an für alle Synology Nutzer, der Container muss mit „hoher Priorität“ ausgeführt werden.
Grüße
Mark
Hallo Mark,
schön dass es mit dem Stick jetzt geklappt hat.
Was deine Anmerkung angeht, da muss ich dir leider widersprechen. Eine Ausführung des Containers mit „hoher Priorität“ ist nicht notwendig sofern du die USB-Devices korrekt in den Container durch reichst.
Führst du den Container mit „hoher Priorität“ aus, erhält er automatisch vollen Zugriff auf alle USB-Devices. Du kannst dir da dann praktisch das durchreichen sparen.
Ganz davon ab würde ich nicht empfehlen den Container mit „hoher Priorität“ aus zu führen. Erst recht nicht, wenn du deinen ioBroker an die Cloud anbindest oder anderweitig von extern verfügbar machst. Damit gibst du jemanden, der es schafft in deinen Container einzudringen volle Kontrolle über deine Disk Station.
MfG,
André
Hi André,
erst mal großes Lob zur neuen Homepage, sehr schick -da ist klar, dass das mal länger dauert (-:
Dank deiner Anleitungen hab ich mich in die ganze Materie gut reingefuchst und auf einer DS920+ IOBroker Portainer und dein Image am Laufen – Letztes offenes Migrationsthema bei mir ist der NANO DMX Stick (aktuell läuft der noch auf dem alten SmarthomeNG den ich mit IOBroker ersetzen will). Da es noch nichts gibt will ich mich mal an die Adapterentwicklung wagen und basierend auf node-dmx was machen, aktuell scheitere ich an der Installation des node siehe hier: https://forum.iobroker.net/topic/37720/problem-beim-einbinden-eines-node-js-adapters
Es scheint am Node.js V12 zu liegen … oder an ggf. an deinem Build? mit den Abhängigkeiten hab ich noch nicht alles durchdrungen – nun habe ich deine Version 4.1 zum laufen gebracht, da geht es… (4.2 startet bei mir den Webservice nicht)
Mit meiner „neuen Produktivumgebung“ bin ich auf 502beta…
Da mein Stick als /dev/ttyACM0 erkannt wird hoffe ich mal das ich keine generellen Probleme mit der Syno bekomme…
mit DSM 7 scheint es doch weiterhin zu gehen?
Für jeden Tipp bin ich Dankbar…
Uwe
Hallo Uwe,
so recht kann ich dir da leider nicht weiterhelfen. In Node stecke ich auch nur soweit drin, als dass ich es fehlerfrei installieren kann ;).
Generell ist aber zu sagen, dass der Docker Dienst auf der Synology nicht zu 100% vollwertig ist. Zum Beispiel fehlt dort die Möglichkeit mit Capabilities zu arbeiten. An der Stelle hilft dann nur noch den Container wirklich privilegiert aus zu führen. Vielleicht kommst du da gerade an die Grenzen dessen was auf der Synology möglich ist.
Zu DSM 7 kann ich aktuell noch gar nichts sagen. Allerdings ist es auch so, dass das ioBroker Docker Projekt zwar praktisch aus meiner DiskStation geboren wurde, für mich persönlich die DiskStation aber nur noch eine untergeordnete Rolle als Docker host spielt. Dazu sind mir die Einschränkungen (Capabilities Problem, sudo Problem, veraltete Docker Version) einfach zu viel geworden. Natürlich werde ich trotzdem weiter die DiskStation als Host unterstützen, aber man muss sich halt bewusst machen, dass dort schlichtweg nicht alles geht.
Und wenn dann is DSM 7 z.B. der USB Support weg fällt, dann ist das eben so…
MfG,
André
Kein Support mehr für USB-Devices in DSM 7 ?!
Ernsthaft? Kann das jemand bestätigen?
Oder lässt sich das auch mit
sudo insmod /lib/modules/usbserial.ko
sudo insmod /lib/modules/ftdi_sio.ko
fixen, wie das bei DSM6.2 erforderlich war?
Ich habe auch noch einen Zigbee-Stick am NAS hängen, welcher bis jetzt einwandfrei aus einem Docker Container heraus versorgt wird….
Hallo Wolfgang,
das höre ich jetzt das erste Mal. Aber selbst wenn das so ist, auch jetzt ist der USB Support bei Synology eher ein Graus. Stichwort Capabilities.
Wie ich schon öfter geschrieben habe empfehle ich sowieso eine Lösung mit einem Multihost Slave (z.B. Raspberry Pi) für USB Devices. Mittlerweile lässt sich mit meinem Image sogar ohne große Problem ein Slave container auf einem Raspberry Pi starten. Großer Vorteil: Den Raspberry kann man einfacher als die DS „sendegünstig“ im Haus positionieren.
Vielleicht ja mal ein Gedanke wert.
Und wenn nicht, dann hilft wohl nur Feedback an Synology…
MfG,
André
Ich habe eine DS218+
Mit deiner klassen Anleitung habe ich IOBroker eingerichtet.
Doch bekomme ich meinen Conbee2 Stick erst ans laufen nachdem ich den Container mit hoher Priorität ausführe. Ohne klappt es einfach nicht.
Hat das jemand ohne geschafft? Oder muss da noch etwas extra eingestellt werden?
Ich Antworte mir mal selber.
Es funktioniert nun. Es lag wirklich daran das der Container über Portainer eingerichtet werden muss. Beziehungsweise liegt es an dem Eintrag in „Advanced container settings“ in dem Bereich „Runtime & Resources“
Dort gibt es einen Punkt „Devices“. Über „add device“ können wir ein Device hinzufügen.
Also wie oben geschrieben. Dieser Eintrag brachte den Erfolg.
Hallo Christian,
genau so ist es ja im Tutorial beschrieben. Aus gutem Grund. 🙂
MfG,
André
Hi,
kann es sein, dass der erste Befehl einen Schreibfehler beinhaltet und anstatt „dmsg“ eigentlich „dmsg“ heißen muss?
Bei mir scheint hci0 zudem nicht auf einen tty gemounted zu sein, muss man dazu irgendwas spezielles machen?
Grüße
Hallo Hans,
da hast du natürlich Recht, auch wenn du offenbar den selben Schreibfehler gemacht hast. 🙂 Hier ist im Befehl ein „e“ verlustig gegangen. Es heißt natürlich „dmesg“. Werde das gleich korrigieren.
Was dein hci0 angeht, das klingt mir nach Bluetooth, oder? Soweit ich weiß gilt Bluetooth im Linux nicht als USB-Device (obwohl natürlich über USB verbunden) sondern als Network Device. Das kann man auf diese Art und Weise leider nicht durch reichen. Mir ist auch noch keine Möglichkeit bekannt wie das klappt.
MfG,
André
Stimmt 🙂 Schöner Copy & Paste Fehler.
Da hast du natürlich recht, irgendwie habe ich die ganze Zeit angenommen du behandelst in dem Post ein Bluetooth Device.
Da muss ich mal schauen, es scheint Lösungen mit net=host sowie -privileged zu geben.
Vielleicht sollte ich aber erst mal schauen ob man die ganzen von Radar2 benötigten Pakete sinnvoll geladen bekommt via Packages.
Hallo,
ich wollte hiermit meinen Jeelink von FHEM in ioBroker betreieben, scheitere aber schon am herausfinden des USB Ports… mit lsusb bekomme ich folgende ausgabe:
admin_*******@a****:~$ lsusb
|__usb1 1d6b:0002:0404 09 2.00 480MBit/s 0mA 1IF (Linux 4.4.59+ xhci-hcd xHCI Host Controller 0000:00:15.0) hub
|__1-3 0403:6001:0600 00 2.00 12MBit/s 90mA 1IF (FTDI FT232R USB UART AI04PH3V)
|__1-4 f400:f400:0100 00 2.00 480MBit/s 200mA 1IF (Synology DiskStation 7F0097D992CA6027)
|__usb2 1d6b:0003:0404 09 3.00 5000MBit/s 0mA 1IF (Linux 4.4.59+ xhci-hcd xHCI Host Controller 0000:00:15.0) hub
|__usb3 1d6b:0002:0404 09 2.00 480MBit/s 0mA 1IF (Linux 4.4.59+ etxhci_hcd-170202 Etron xHCI Host Controller 0000:02:00.0) hub
|__usb4 1d6b:0003:0404 09 3.00 5000MBit/s 0mA 1IF (Linux 4.4.59+ etxhci_hcd-170202 Etron xHCI Host Controller 0000:02:00.0) hub
daraus folgere ich, dass ich den Stick an USB1-3 angesteckt habe.
ein ll /sys/class/tty | grep 1-3 bringt mir aber keine Ausgabe. Hast du eine Idee an was das liegen könnte?
Danke und Gruß
Hallo,
da kann ich auch nicht so richtig viel zu sagen. Google hält da viele Antworten zu bereit. Letztendlich funktioniert nicht jeder Weg auch auf jedem System. Hast du mal die Variante mit „dmsg“ probiert?
MfG,
André
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ß
Hallo,
was hast du denn beim compose eingebaut? Du müsstest einmal das Device durchreichen und die Umgebungsvariable setzen. Eigentlich sollte das Startupscript dann die Berechtigungen automatisch setzen.
Falls du es nicht zum Laufen bekommst, melde dich mal in meinem ioBroker Forum Thread. Am Besten gleich mit Log und compose.yml.
MfG,
André
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 es aber nicht:
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
was auch in den Logs nach Start zu sehen ist:
bee.0 2020-05-12 13:53:27.097 error at Generator.next ()
zigbee.0 2020-05-12 13:53:27.097 error at Znp. (/opt/iobroker/node_modules/zigbee-herdsman/dist/adapter/z-stack/znp/znp.js:113:32)
zigbee.0 2020-05-12 13:53:27.097 error (9119) Error: Error while opening serialport ‚Error: Error: No such file or directory, cannot open /dev/ttyACM0‘
zigbee.0 2020-05-12 13:53:27.096 error (9119) Failed to start Zigbee
zigbee.0 2020-05-12 13:53:25.494 info (9119) Starting Zigbee…
Häst du da ne Idee ?
Alles schon öfters durchgestartet (Adapter, ioBroker, Docker, NAS), Rechte vergeben, Ports und Einstellungen geändert.
Im ioBroker – Forum auch viel durchgesucht und viele (auch deine) Beiträge durchgelesen… aber noch keine Lösung gefunden.
DS713+ mit DSM 6.2.2, ioBroker 4.0.9, Node.js 10.19.0, zigbee 1.0.4,
Danke
Jarek
Hallo Jarek,
hast du das Device auch korrekt in den Container durchgereicht, wie in Schritt 2 beschrieben? Scheint mir so als kommt es im Container nicht an.
MfG,
André
Hi,
anscheinend nicht korrekt weil sonnst würde es funktionieren.
Also Containder will eh auf /dev/ttyACM0 zugreifen – das ist aber am Docker nicht vorhanden.
Am NAS ist es da:
crwxrwxrwx 1 root root 166, 0 May 12 14:52 ttyACM0
Stick wird auch richtig erkannt an verschiedenen Ports.
Portainer – Container – Details ist auch da:
USBDEVICES /dev/ttyACM0
wenn ich aber am Terminal über Docker oder portainer schaue ist in dev nichts
root@ioBrokerJarek:/opt/iobroker# cd /dev/
root@ioBrokerJarek:/dev# ls -l | grep tts*
crw–w—- 1 root tty 136, 0 Mai 13 16:44 console
crw-rw-rw- 1 root root 5, 0 Mai 13 16:01 tty
root@ioBrokerJarek:/dev#
chown: Zugriff auf ‚/dev/ttyACM0‘ nicht möglich: Datei oder Verzeichnis nicht gefunden
chmod: Zugriff auf ‚/dev/ttyACM0‘ nicht möglich: Datei oder Verzeichnis nicht gefunden
OK.
Hab’s gefunden.
ioBroker im Privileged mode starten.
Falls die es g’freid bitte deine Anleitung erweitern und dann meine Kommentare löschen.
(bis auf „genial verständlich geschrieben! „)
vg
jarek
Hallo Jarek,
dass es im Privileged Mode läuft ist kein Wunder. Dabei bekommt der Container volle Berechtigung auf alle Devices am Host, und nicht nur das. Das Einschalten des Modes werde ich in meinem Tutorial so sicher nicht empfehlen.
Der Privileged Mode ist ein Sicherheitsrisiko. Falls jemand von außen in deinen Container eindringt präsentierst du ihm damit Root-Rechte auf deine DS praktisch auf dem Silbertablett.
Fakt ist, es geht auch ohne. Warum es bei dir nicht klappt kann ich so nicht sagen. Ich vermute weiter dass etwas beim Durchreichen des Device schief geht…
MfG,
André
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 krieg es leider nicht hin 🙁
Für einen Tipp bin ich sehr dankbar!
Vielen Dank und Gruß
Roland
Hallo Roland,
deine Anfrage ist schon recht speziell. Weiß nicht ob du hier genügend Leute erreichst. Hast du es auch schon mal im ioBroker-Forum versucht?
Ich persönlich kann dazu leider nicht so viel beisteuern. Viel Erfolg!
MfG,
André
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) Currently no devices.
zigbee.0 2020-04-19 11:25:46.038 info (523) –> transmitPower : normal
zigbee.0 2020-04-19 11:25:46.028 info (523) Coordinator firmware version: {„type“:“zStack12″,“meta“:{„transportrev“:2,“product“:0,“majorrel“:2,“minorrel“:6,“maintrel“:3,“revision“:20190608}}
zigbee.0 2020-04-19 11:25:43.938 info (523) Starting Zigbee…
zigbee.0 2020-04-19 11:25:43.925 info (523) starting. Version 1.1.1 in /opt/iobroker/node_modules/iobroker.zigbee, node: v10.19.0
Schau ich dann auf dem Dockerhost nach dem Adapter, ist der verschwunden, was iobroker ja auch richtig feststellt:
dacia:~# ls -altr /dev/ttyACM0
ls: /dev/ttyACM0: No such file or directory
Habe den Adapter im iobroker gelöscht, Instanz entfernt, /opt/iobroker/iobroker-data/zigbee_0 entfernt, Container gestartet und Zigbee neu installiert. Adapter ist da, lässt sich genau einmal starten, dann bleibt er gelb.
Irgendwelche Ideen? Genau dieses Vorgehen hat auf einem rPI3 mit Biobroker (Prod.-System) funktioniert. Ich bin grad etwas Ideenlos was man noch machen kann.
Hallo,
seltsam. Aber wenn das device auf dem Docker Host verschwindet, dann sieht das für mich irgendwie nach USB oder Hardwareproblem aus. Das kann viele Gründe haben. Hast du mal Google befragt was es bedeuten könnte wenn ein Device unter Linux einfach verschwindet? Hast du mal einen anderen USB-Port versucht?
MfG,
André
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
Hallo Manuel,
das kann ich dir leider nicht beantworten. Aber vom Prinzip her sollte es genauso funktionieren wie das Durchreichen eines USB-Geräts. Nur dass eben der Pfad ein anderer ist.
MfG,
André
Hi Manuel,
hast Du den internen Bluetooth Adapter des Raspi zum laufen bekommen? Hänge gerade an der gleichen Stelle. Nutze ein Raspy 4. Im Hostsystem wird der Adapter als hci0 angezeigt. Hab nun versucht das Device über USBDEVICES mit dem Eintrag /dev/hci0 an den Container weiterzureichen. Der ble Adapter in ioBroker kann aber keine Verbindung aufbauen.
Viele Grüße,
Jonathan
Hallo Jonathan,
bezüglich Bluetooth hat sich mittlerweile herausgestellt, dass der Bluetooth Stick unter Linux nicht als USB Device sondern als Network Device gilt. Das kann man allerdings m.W. nicht einfach durchreichen. Hier benötigt der Container wohl „erweiterte Rechte“. Ich persönlich empfehle diese Konfiguration allerdings nicht.
MfG,
André
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.
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 wie oben beschrieben unter „Runtime & Resources“ durch. Unter ENV versuche ich jedoch vergeblich den Pfad bei USBDEVICES zu hinterlegen. Jedes mal nach dem „deployen“ des Containers, steht die Variable wieder auf „none“. Ich habe auch die schon vorhandene Variable gelöscht und neu angelegt, auch dies bringt kein Erfolg. Beim erneuten Editieren müsste die Variable doch wie angepasst in den Settings stehen bleiben oder?
Mein Zigbee Controller gibt im Protokoll die Fehlermeldung „Permission denied, cannot open /dev/ttyACM0“.
Kann es sein, dass ich beim deployen oder Anpassen der „Advanced Settings“ etwas falsch mache, sodass die Einstellungen nicht übernommen werden? Komischerweise scheint der Pfad „/dev/ttyACM0“ unter „Runtime & Resources“ stehen zu bleiben.
Ich hoffe ich konnte mein Problem fachgerecht genug beschreiben, vielleicht haben ja auch andere das Problem. Habe sonst auch entsprechende Screenshots, weiß nur nicht wie ich dir hier einfügen kann 🙂
Viele Grüße und Danke,
Martin
Hallo Martin,
du beschreibst ein bekanntes Portainer-Problem. Aktuell ist es durch einen Bug im Portainer nicht möglich über „Duplicate/ Edit“ Umgebungsvariablen zu verändern. Workaround: Container einmal löschen und neu anlegen.
MfG,
André
Hi André,
das war die Lösung!
Jetzt funktioniert es bei mir auch!
Besten Dank! 🙂
Hi Andre,
Danke für Deine Arbeit!!
Wie genau meinst du das mit Löschen und neu anlegen? Ich habe etwas Sorge,dass mir beim Löschen die VIS und alles Angelegte im IOBroker abhanden kommen. Muss /kann ich etwas backuppen? Ist das dann der REMOVE button? Der Docker läuft gemäß Deiner Anleitung auf der Syno.
Heißt „neu anlegen“ in dem Fall, dass ich in Portainer gemäß deinem Einrichtungstutorial alles nochmal durchgehen muss?
Beste Grüße
Chris
Hallo Chris,
wenn du wie beschrieben den /opt/iobroker Ordner auf deine DS ausgelagert hast, brauchst du beim Löschen des Containers keine Angst zu haben. Dein ioBroker samt Konfiguration, Visualisierungen usw. liegt in diesem Ordner. Bedeutet dementsprechend auch, dass du vor einem Update o.Ä. relativ einfach ein Backup erstellen kannst. Einfach den Container stoppen, in der Filestation eine Kopie des Ordners anlegen und den Container wieder Starten. Geht was schief brauchst du nur den Container stoppen. Ordner löschen und ggf. dein Backupordner umbenennen. Container wieder starten, läuft. 🙂
Neu anlegen bedeutet also in der Tat „neu anlegen“. Allerdings brauchst du natürlich nur die Konfigurationsschritte des Containers durchgehen. Eine (fortgeschrittene) Alternative wäre die Verwendung eines Stack Files. Bin ich in meinen Tutorials auch schon drauf eingegangen. Schau mal ob das vielleicht etwas für dich ist.
MfG,
André
Hall André,
leider bekomme ich bei ll /sys/class/tty | grep usb2 nichts angezeigt im vorherigen Schritt sehe ich zwar den BT Dongle an USB 2. Nach welchen Schlagworten muss ich googeln, damit ich herausfinden kann welche tty… ich verwenden muss?
Hallo Daniel,
hast du es mal mit „dmsg“ versucht? Im Prinzip musst du nur herausfinden wo dein USB-Device vom Betriebssystem gemountet wird. Also Google vielleicht mal nach „usb device identification linux“ oder sowas fragen.
MfG,
André
Hallo André,
bei dsmeg spuckt die Konsole folgendes aus, direkt nach dem Anschließen des BT Dongle an die Diskstation:
usb 2-2: new full-speed USB device number 17 using etxhci_hcd-170202
[2143375.626565] Bluetooth: Core ver 2.19
[2143375.630809] NET: Registered protocol family 31
[2143375.635984] Bluetooth: HCI device and connection manager initialized
[2143375.643310] Bluetooth: HCI socket layer initialized
[2143375.648969] Bluetooth: L2CAP socket layer initialized
[2143375.654837] Bluetooth: SCO socket layer initialized
[2143375.696059] Bluetooth: RFCOMM socket layer initialized
[2143375.702036] Bluetooth: RFCOMM ver 1.11
[2143375.709872] Bluetooth: HIDP (Human Interface Emulation) ver 1.2
[2143375.716729] Bluetooth: HIDP socket layer initialized
[2143375.726861] usbcore: registered new interface driver btusb
Welche Information ist jetzt richtig btusb ist der Treiber…
Ich bin halt leider auf dem Gebiet ein Anfänger. Bisher habe ich mit deinen Anleitungen alles zum laufen bekommen.
Vielleicht kannst Du mir noch einen Tipp geben.
Grüße
Daniel
Hallo Daniel,
da bin ich auch überfragt. Hast du es mal im ioBroker Forum Thread versucht? Da lesen eine Menge Leute mit die da vielleicht mehr Erfahrungen gemacht haben als ich.
Sorry.
MfG,
André
hab das gleiche Problem. Hast Du deine Lösung gefunden?
Danke