NEWS
USB in Docker via neuer Container über Compose u.a. andere
-
Hallo,
ich habe schon diverse Anleitungen gelesen wie USB-Port an IOBroker durchgereicht werden soll:1.) hier:https://www.smarthomejetzt.de/smarten-stromzaehler-mit-ir-adapter-auslesen-und-stromverbrauch-protokollieren/
Da steht, man benötigt nur das:
sudo insmod /lib/modules/usbserial.ko
sudo insmod /lib/modules/ftdi_sio.ko
Also keine Env-Var in Docker und kein Mapping des USB-Devices in Docker-Config.
Jedenfalls funktioniert es damit noch nicht, es gibt diese Fehlermeldung:
No or too long answer from Serial Device after last request.2.) dann hier (von buanet selbst):https://docs.buanet.de/de/iobroker-docker-image/docs/#erweiterte-konfiguration
Da steht, man muss beides tun. jetzt kommt mein Problem: Umgebungsvariable kann man nachträglich in Container-Config (über Synology Docker-UI ändern), aber es gibt keine Möglichkeit, für das Durchreichen des USB-Devices, weder in Synology-UI noch in Portainer-UI. Wobei das lt. dieser Anleitung (auch von buanet) jedoch gehen sollte, finde das jedoch nicht: https://smarthome.buanet.de/2020/02/usb-devices-im-iobroker-docker-container-nutzen/
Jetzt wollte ich den Weg bzgl. Starscript versuchen, auch lt. dieser Anleitung:
https://docs.buanet.de/de/iobroker-docker-image/docs/#erweiterte-konfigurationJedoch steht hier (https://smarthome.buanet.de/2020/02/usb-devices-im-iobroker-docker-container-nutzen/), dass man das bei einem bestehenden Container nicht machen kann:
Stephan Seidl5. November 2021 um 16:53 Uhr
HalloKann man die USB-Schnittstellen auch an iobroker auch durchleiten ohne den Container neu erstellen zu müssen?
Gruß
StephanANDRÉ13. November 2021 um 16:32 Uhr
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éIch würde ungern neuen Container erstellen, da ich im bestehenden noch weitere Linux-Pakete installiert habe.
Wer kann helfen?
-
@chrisham sagte in USB Device für IOBroker:
Wer kann helfen?
Ich fürchte, wenn du den Container nicht neu erstellen willst, kann dir niemand helfen.
Du solltest deine Container-Config so herstellen, dass du jederzeit und ohne Nacharbeiten den Container wegwerfen und neu erstellen lassen kannst. Wenn du Pakete nachinstallieren willst, dann einfach über die "PACKAGES" Umgebungsvariable.
-
@chrisham sagte in USB Device für IOBroker:
Ich würde ungern neuen Container erstellen, da ich im bestehenden noch weitere Linux-Pakete installiert habe.
Container sind Wegwerfartikel und nicht für die Ewigkeit.
Wenn Du - wie überall beschrieben und empfohlen - ein lokales Verzeichnis der Syno in den Container mountest, kannst (und solltest) Du den Container jederzeit verwerfen und neu erstellen.
Das ist auch der Weg, um größere Systemupdates in den Container zu kriegen.- Container stoppen und löschen
- Image aktualisieren
- Container mit identischen Einstellungen neu erzeugen und starten
- warten ...
Wie @Marc-Berg schon schreibt, werden zusätzliche Packages über die Umgebungsvariable in den Container gebracht.
-
@codierknecht Ok, alles klar, verstanden. Dann noch die Anschlussfragen, damit beim neu erstellen alles wieder hergestellt weden kann:
-
list itemlist itemwie bekomme ich automatisiert die bisherige Konfiguration innerhalb des Containers in den neuen? also:
- Container-Einstellungen wie volume-mount, Umgebungsvariablen,...
- Settings im IOBroker-Container
- alle installierten Adapter
- ...
Dies steckt ja alles in der Container-Instanz und nicht im Image....
-
wie geht das genau mit den zusätlichen Paketen und Umgebungsvariable? Also ich habe z.B. den asterisk-Linux-Pakete installiert, die müssen ja innerhalb des Containers liegen.
Vielen Dank für die Hilfe.
-
-
@chrisham sagte in USB Device für IOBroker:
alle installierten Adapter
Du mountest ja immer das gleiche Verzeichnis auf der Syno.
Damit findet das Startscript des Containers alle Daten und installiert völlig selbsttätig beim ersten Start alle nötigen Adapter.Zu den anderen Themen können vielleicht andere etwas beitragen.
Ich habe das immer "von Hand" gemacht. -
@chrisham sagte in USB Device für IOBroker:
wie bekomme ich automatisiert die bisherige Konfiguration innerhalb des Containers in den neuen? also:
Container-Einstellungen wie volume-mount, Umgebungsvariablen,...
In Portainer auf "Edit/Duplicate" klicken, dann werden alle Einstellungen übernommen. Wenn der Containername nicht geändert wird, dann wird der Container ersetzt, sonst ein neuer angelegt.
Settings im IOBroker-Container
alle installierten Adapter
...
Dies steckt ja alles in der Container-Instanz und nicht im Image....Wenn du nach Anleitung von Buanet/André installiert hast, dann liegen alle ioBroker-Daten in einem Verzeichnis auf dem Host und werden durch das Neuerstellen des Containers zunächst nicht angefasst.
https://docs.buanet.de/de/iobroker-docker-image/docs/#persistente-datenwie geht das genau mit den zusätlichen Paketen und Umgebungsvariable? Also ich habe z.B. den asterisk-Linux-Pakete installiert, die müssen ja innerhalb des Containers liegen.
Genau. In die Packages-Umgebungsvariable schreibst du alle Pakete (mit Leerzeichen getrennt), die du installiert haben willst. Ist hier beschrieben: https://docs.buanet.de/de/iobroker-docker-image/docs/#umgebungsvariablen-env
Durch eine Inkompatibilität zwischen Portainer und der DSM, die schon seit Jahren besteht, musst du die Umgebungsvariablen allerdings auf der DSM-Oberfläche setzen.
Dass du ein aktuelles ioBroker-Backup vorrätig haben solltest, sollte selbstverständlich sein.
-
@chrisham sagte in USB Device für IOBroker:
Wer kann helfen?
du solltest den Threadtitel anpassen. Docker müsste sxhon drin stehen.
-
@homoran done. danke.
-
@marc-berg Ok, das Duplicate habe ich jetzt gemacht über Portainer, ich kann dabei zwar die Konfiguraiton ändern (z.B. neue ENV-Variablen hinzufügen), aber nach dem Deploy wird diese Änderung nicht übernommen, die Konfiguration ist wie beim ursprünglichen Container, ist das das richtige Verhalten, d.h. bei Änderung der KOnfig muss ich neuen Container vom Image anlegen und nicht über Duplicate....?
-
@chrisham Ist wohl ein Problem auf Synology: https://github.com/portainer/portainer/issues/4356
-
@chrisham sagte in USB Device für IOBroker in Docker:
Ist wohl ein Problem auf Synology
Ja, habe ich doch oben schon geschrieben. So wie es aussieht, musst du die Änderungen an den Environment Variablen auf der DSM eintragen. Wie genau, kann ich nicht sagen, habe die Hardware nicht. Hier wird es noch weiter diskutiert:
https://github.com/portainer/portainer/issues/2423
Die Änderungen an den Device-Mappings etc. sollten aber über Portainer gehen.
-
aber nach dem Deploy wird diese Änderung nicht übernommen,
Kommt mir igendwie bekannt vor ..
Versuche es mit dieser Version , wie im Thread beschrieben !
-
@glasfaser Danke für den Hinweis, jetzt habe ich es gemäß
Dazu einfach als Image portainer/portainer-ce:2.15.1 nutzen und nicht das latest
mit Image portainer/portainer-ce:2.15.1 nutzen und nicht das latest, allerdings läuft diese portainer-version bei mir gar nicht.Eine Idee?
-
@chrisham sagte in USB Device für IOBroker in Docker:
nicht
und wie wirkt sich das aus?
Fehlermeldung?
was steht im log-tab des containers?du hast in den kommentaren auf der smarthomejetz-erklärung gesehen, das
bei DSM7 die Befehle etwas anders aussehen um die usb auf der synology verfügbar zu machen?
Da ist ein Link zu einer weiteren Erklärung.auch würde ich die container einstellungen nicht über duplicate/edit machen, sondern alles über eine docker-compose (bei portainer=stacks) machen. da hast du alles übersichtlich in einer datei konfiguriert und kannst leicht ändern. allerdings wird bei jeder änderung der container neu generiert. daher sollten alle flüchtigen bestandteile sich entweder in der datei befinden oder in gemappten volumes. man kann auch named volumes machen, aber dann befinden sich die dateien ganz tief bei docker, da kommst du so ohne weiteres dann nicht mehr ran, falls du einen backup machen willst.
ich habe alle gemappten volumes aller meiner docker-container in einem verzeichnis. je container ein unterverzeichnis und darin , je gemappten volume ein weiteres verzeichnis. dieser pfad wird dann in docker compose gesetzt.iobroker sieht dann bei mir so aus. auf basis dieses docker-compose werden 2 container generiert, ein iobroker, ein redis, die dann netzwerktechnisch zusammengeschaltet sind.
wenn du kein macvlan nutzt, dann müssen die netzwerk einträge gegen dein bridge netzwerk getauscht werden.version: '3' services: iobrokerprod4: restart: always image: buanet/iobroker:latest container_name: iobrokerprod4 hostname: iobrokerprod4 ports: - "8081:8081" environment: SETGID: 1001 SETUID: 1001 volumes: - /home/iobroker/docker/volume/iobroker_prod4:/opt/iobroker - /home/iobroker/docker/volume/iobroker_prod4_nodemodules:/usr/lib/node_modules - /media/iobroker_backup/:/opt/iobroker/backup networks: dockerMACVLAN: ipv4_address: 192.168.1.85 iobrokerprod4: redis4: image: "redis:alpine" volumes: - /home/iobroker/docker/volume/redis_prod4:/data networks: iobrokerprod4: networks: dockerMACVLAN: external: true iobrokerprod4:
-
@oliverio Vielen Dank.
1.) Portainer version: portainer-ce:2.15.1
Das ist die Fehlermeldung:portainer-portainer-ce-1
date,stream,content
2023/10/23 11:59:33,stdout,"[36mINFO[0m[0006] 2023/10/23 09:59:33 [INFO] [http,server] [message: starting HTTP server on port :9000]
"
2023/10/23 11:59:33,stdout,"[36mINFO[0m[0006] 2023/10/23 09:59:33 [INFO] [http,server] [message: starting HTTPS server on port :9443]
"
2023/10/23 11:59:33,stdout,"[36mINFO[0m[0006] 2023/10/23 09:59:33 [DEBUG] [internal,init] [message: start initialization monitor ]
"
2023/10/23 11:59:33,stdout,"[36mINFO[0m[0006] 2023/10/23 09:59:33 [DEBUG] [chisel, monitoring] [check_interval_seconds: 10.000000] [message: starting tunnel management process]
"
2023/10/23 11:59:33,stdout,"[36mINFO[0m[0006] [INFO] [cmd,main] Starting Portainer [36mBuildNumber[0m=22936 [36mGoVersion[0m=1.18.3 [36mImageTag[0m=linux-amd64-2.15.1 [36mNodejsVersion[0m=14.20.0 [36mVersion[0m=2.15.1 [36mWebpackVersion[0m=5.68.0 [36mYarnVersion[0m=1.22.19
"
2023/10/23 11:59:33,stdout,2023/10/23 09:59:33 server: Listening on 0.0.0.0:8000...2023/10/23 11:59:33,stdout,2023/10/23 09:59:33 server: Fingerprint 5c:86:b2:8e:6b:59:21:a8:7f:68:12:86:76:1a:d3:0a
2023/10/23 11:59:33,stdout,2023/10/23 09:59:33 server: Reverse tunnelling enabled
2023/10/23 11:59:32,stdout,[36mINFO[0m[0005] Opened existing store [36mversion[0m=61
2023/10/23 11:59:27,stdout,[36mINFO[0m[0000] Loading PortainerDB: portainer.db
2023/10/23 11:59:27,stdout,[36mINFO[0m[0000] Proceeding without encryption key
2023/10/23 11:59:27,stdout,[36mINFO[0m[0000] Encryption key file
portainer
not present2.) Docker compose: ja, das war auch mein Ansatz zwischendurch, allerdings bin ich auch da nicht weitergekommen.
Und zwar gibt es Fehlermeldung bzgl. dem USB-Device-Eintrag (das ist ja aktuell meine Hauptmotivation einen neuen IOBroker-Container zu erstellen).compose-file:
version: '3'
services:
iobroker:
restart: always
image: buanet/iobroker:latest
container_name: iobroker-4
hostname: iobroker-4
ports:
- "8081:8081"
volumes:
- /docker/iobroker-Chrisham:/opt/iobroker
- /docker/userscripts:/opt/userscripts
- /docker/Backup:/opt/backup/
environment:
- PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- DEBIAN_FRONTEND=teletype
- LANG=de_DE.UTF-8
- LANGUAGE=de_DE:de
- LC_ALL=de_DE.UTF-8
- SETGID=1000
- SETUID=1000
- TZ=Europe/Berlin
- USBDEVICES=/dev/ttyUSB0
- PACKAGES="ffmpeg lame sox libsox-fmt-mp3 asterisk"
devices:
- /dev/ttyUSB0=/dev/ttyUSB0Fehlermeldung:
Error Deployment error
failed to deploy a stack: Network mychrisham-stack-1_default Creating Network mychrisham-stack-1_default Created Container iobroker-4 Creating Container iobroker-4 Created Container iobroker-4 Starting Error response from daemon: error gathering device information while adding custom device "/dev/ttyUSB0=/dev/ttyUSB0": no such file or directoryDann hab ich ggf. auch das Problem, dass ich dann alle anderen verbundenen Container auch gleich über docker-compose machen muss...? Ich hab da noch influxdb und grafana. Oder geht das auch gemischt (IOBroker über Compose und grafana/influx über DSM-UI bzw. Portainer-UI)?
-
@chrisham
als alles erstes vorweg. wenn du das in code tags packst, ist es vieeeeel lesbarer ( der knopf </>)-
log file portainer
da ist keine fehlermeldung enthalten, also müsste portainer auch unter port 8000 erreichbar sein
grundsätzlich sieht das schon mal gut aus.
die fehlermeldungError response from daemon: error gathering device information while adding custom device "/dev/ttyUSB0=/dev/ttyUSB0": no such file or directory
sagt, das das gerät mit diesem namen auf dem host nicht vorhanden ist.
kannst du den von der synology auf das usb zugreifen? das gerät muss erst mal auf dem host verfügbar sein, bevor man versuchen kann es in einen container weiterzureichen.
evtl ist auch die bezeichnung einfach falsch. das hängt immer auch vom gerät ab.
was für ein gerät hast du den da?
die fehlermeldung mit datei oder directory wirkt hier etwas seltsam bei einem gerät. aber einer der linux grundsätze ist: "alles ist eine datei" https://en.wikipedia.org/wiki/Everything_is_a_file@chrisham sagte in USB Device für IOBroker in Docker:
Dann hab ich ggf. auch das Problem, dass ich dann alle anderen verbundenen Container auch gleich über docker-compose machen muss...?
das kommt drauf an. docker separiert intern jeden einzelnen container netzwerktechnisch.
bei bridge ist die einzige möglichkeit, das die container miteinander kommunizieren können über die gemappten ports.jetzt kannst du allerdings mehrere container zu einem service zusammenfassen. sieh dazu mein beispiel mit dem redis-container. diese sind dann intern netzwerktechnisch verschaltet und können sich sehen. der jeweilige servicename (sofern kein extra hostname angegeben) ist dann der hostname des containers. am beispiel redis muss ich nicht mühevoll die ip adresse herausfinden, sondern gebe in der iobroker konfiguration bzw den environments einfach nur redis4 an und schon finden die sich.
-
-
@oliverio Vielen Dank.
-
Code-Schnipsel: ja, sry, ist bekannt, war zu schludrig, das nächste mal werd ich drauf achten
-
Portainer: ja container startet, ist allerdings über IP und entsprechenden Port nicht erreichbar, bei der aktuellen Portainer-version funktioniert es, muss ich mir nochmals anschauen
-
ich bin gemäß https://smarthome.buanet.de/2020/02/usb-devices-im-iobroker-docker-container-nutzen/ vorgegangen.
Und auf meinem Host (Synology) sieht es so aus:
Oder muss da noch ein /tty/ vorangestellt werden...?
-
-
@chrisham sagte in USB Device für IOBroker in Docker:
Hallo,
ich habe schon diverse Anleitungen gelesen wie USB-Port an IOBroker durchgereicht werden soll:Was ich mich die ganze Zeit Frage ... wundere bzw. nirgends erlesen kann .
Was für ein USB Stick und wofür !So sieht meins aus :
bineinUser@DS:~# lsusb |__usb1 1d6b:0002:0404 09 2.00 480MBit/s 0mA 1IF (Linux 4.4.302+ xhci-hcd xHCI Host Controller 0000:00:15.0) hub |__1-1 0bda:5411:0127 09 2.10 480MBit/s 0mA 1IF (Generic 4-Port USB 2.1 Hub ffffffd6ffffffa3ffffffebffffffcb) hub |__1-1.1 051d:0002:0090 00 2.00 12MBit/s 2mA 1IF (American Power Conversion Back-UPS RS 1200G FW:877.L5 .I USB FW:L5 4B2021P32400 ) |__1-1.2 1a40:0101:0111 09 2.00 480MBit/s 100mA 1IF ( ffffffd6ffffffa3ffffffebffffffc5) hub |__1-1.2.3 10c4:8c07:0101 00 2.00 12MBit/s 150mA 1IF (Alexander Reinert HB-RF-USB-2 fae17ff40dc1e811829a6a713b0549ec) |__1-1.2.4 0451:16c8:0100 02 2.00 12MBit/s 50mA 2IFs (Texas Instruments CC2538 USB CDC fffffff7ffffffb3fffffff0ffffffd0) |__1-1.3 0bda:5411:0127 09 2.10 480MBit/s 0mA 1IF (Generic 4-Port USB 2.1 Hub ffffffd6ffffffa3ffffffebffffffc1) hub |__1-1.4 0bda:5411:0127 09 2.10 480MBit/s 0mA 1IF (Generic 4-Port USB 2.1 Hub ffffffd6ffffffa3ffffffebffffffc3) hub |__1-1.4.1 0403:6001:0600 00 2.00 12MBit/s 90mA 1IF (EService-Online eBus Coupler Iso 21001 A5WHQ9VE) |__1-1.4.2 0403:6015:1000 00 2.00 12MBit/s 90mA 1IF (FTDI FT230X Basic UART D30AB5U3) |__1-1.4.3 2a07:0102:0201 00 2.00 12MBit/s 100mA 1IF (KNX License Stick KNX-1C01BC41 42D7B0C00604) |__1-4 f400:f400:0100 00 2.00 480MBit/s 200mA 1IF (Synology DiskStation 65007C9F15DA5A98) |__usb2 1d6b:0003:0404 09 3.00 5000MBit/s 0mA 1IF (Linux 4.4.302+ xhci-hcd xHCI Host Controller 0000:00:15.0) hub |__2-1 174c:55aa:0100 00 3.00 5000MBit/s 0mA 1IF (Inateck ASM1153E 12345678910B) |__2-2 0bda:0411:0127 09 3.20 5000MBit/s 0mA 1IF (Generic 4-Port USB 3.1 Hub ffffffd6ffffffa3ffffffebffffffc0) hub |__2-2.3 0bda:0411:0127 09 3.20 5000MBit/s 0mA 1IF (Generic 4-Port USB 3.1 Hub ffffffd6ffffffa3ffffffebffffffc2) hub |__2-2.3.4 0bda:8156:3104 00 3.20 5000MBit/s 256mA 1IF (Realtek USB 10/100/1G/2.5G LAN 401000001) |__2-2.4 0bda:0411:0127 09 3.20 5000MBit/s 0mA 1IF (Generic 4-Port USB 3.1 Hub ffffffd6ffffffa3ffffffebffffffc4) hub
.
denn in deiner Ausgabe :Und auf meinem Host (Synology) sieht es so aus:
sehe ich nichts davon , also wird er nicht erkannt !
-
@glasfaser sagte in USB Device für IOBroker in Docker:
bineinUser@DS:~
Ist schon wieder Karneval und es wird sich verkleidet?
-
@chrisham sagte in USB Device für IOBroker in Docker:
Und auf meinem Host (Synology) sieht es so aus:
Im Host :
Schau damit ..
bineinUser@DS:~# ls -la /dev/ttyUSB* crwxrwxrwx 1 root root 188, 1 Oct 23 13:41 /dev/ttyUSB1 bineinUser@DS:~# ls -la /dev/ttyA* crwxrwxrwx 1 root root 166, 0 Oct 23 13:41 /dev/ttyACM0 bineinUser@DS:~#
USB1 ist bei mir ein Lesekopf / Smartmeter
ACM0 ist bei mir ein Zigbee-Stick