Ich werde von vorne neu starten, um sicherzustellen, dass ich die richtigen Berechtigungen habe, denn ich habe so viele Befehle gelöscht und neu gesetzt, dass ich lieber noch einmal versuchen möchte.
Aber ich bin mir praktisch sicher, dass ich ursprünglich den Befehl verwendet habe, den du mir bestätigt hast, und daher keine Verbindung zum Node serial besteht.
Hier ist der Befehl:
guten abend @pierre-gilles
ich habe gerade die Installation von Gladys mit dem obigen Befehl (vorherige Nachricht) erneut durchgeführt
Hier ist das Ergebnis:
crw-rw---- 1 root dialout 188, 0 Feb 20 18:13 /dev/ttyUSB0
lrwxrwxrwx 1 root root 7 Feb 20 18:13 /dev/tty-usb-arduino-nano -> ttyUSB0
Es funktioniert nicht
Aber wenn ich die Rechte für „andere“ für den USB0-Port mit diesem Befehl erteile:
pi@rasp3b:~ $ sudo chmod a+rw /dev/ttyUSB0
dann verbindet sich der serielle Knoten.
Ich habe 2 Bildschirme an meinem PC und ich habe gesehen, dass sich der serielle Knoten sofort verbunden hat, sobald ich den chmod-Befehl bestätigt habe, und seine Nachricht sendet, dass der RFLINK bereit ist
daher gibt --privileged \ meiner Meinung nach nicht alle Rechte
und wie ich dir gesagt habe, werden die Rechte des USB0-Ports zurückgesetzt, wenn man den Rflink abzieht.
@Psoy Ich habe gerade das hier gefunden (vielleicht du auch): https://stackoverflow.com/questions/24225647/docker-a-way-to-give-access-to-a-host-usb-or-serial-device
Man muss bis zu The Safe and Proper way of accessing tty devices without *--privileged* mode runterscrollen
Laut dem Rest scheint es nicht schlecht zu sein, aber ich habe nichts, um es bei mir zu Hause zu testen. Mal sehen, wie es auf deinem Host funktioniert.
Im Grunde genommen wird jedes Mal, wenn du deinen rflink neu einsteckst, ein Skript gestartet, um ihn an die richtige Stelle auf deinem Host anzubinden.
Guten Abend @mutmut
Ich habe nicht gesehen, was du gefunden hast, ich habe mit Gemini zusammengearbeitet, um zu verstehen, warum der Node serial in Node Red sich nicht mit dem USB-Port verbindet, Antwort « Zugriff verweigert », also habe ich die Berechtigungen der Ports recherchiert, (alles, was ich weiter oben erkläre).
Ich habe gelesen, was du mir geschickt hast, aber ich denke, es ist ein bisschen leicht, um den docker run zu ändern, von dem er spricht. Außerdem weiß ich nicht, ob man die Datei /etc/udev/rules.d/99-docker-tty.rules ändern muss, die bereits in Gladys existiert, oder ob man sie anpassen oder eine neue erstellen muss?
Tatsächlich scheint es eine Lösung zu sein. Wenn du das Thema beherrschst, würde ich mich freuen, wenn du mir einen Rahmen gibst, um mir zu helfen, das zu testen, wenn du möchtest!
Aber zuerst müsste man schon, wenn man Node-Red über Gladys öffnet, dass die Zugriffe auf den USB0-Port wie von mir erwähnt gewährt werden.
Tatsächlich habe ich nicht sudo vor docker run eingegeben .
Also habe ich den docker run-Befehl mit sudo davor erneut eingegeben und die Manipulation dreimal wiederholt, um sicherzugehen, aber selbst mit sudo ändern sich die Berechtigungen des USB-Ports nicht und bleiben unverändert
Das ist normal, die Berechtigungen des USB0-Ports sollen so bleiben.
Die Berechtigungen zeigen, dass der Benutzer „root“ Eigentümer dieses USB-Ports ist, aber wenn du deinen Container als root gestartet hast, solltest du eigentlich Eigentümer des USB-Ports sein.
Jetzt hast du einfach nur den Gladys-Container gestartet, und der Node-RED-Container wurde von Gladys gestartet. Vielleicht wurde der Node-RED-Container nicht als root gestartet.
Kannst du überprüfen, welcher Benutzer den Gladys-Container gestartet hat, und das mit dem Benutzer vergleichen, der den Node-RED-Container gestartet hat?
(Ich überlasse es dir, Google/KI zu nutzen, um die richtigen Befehle dafür zu finden )
Von dem, was ich gerade getestet habe, werden alle Befehle auf dem Host ausgeführt, nicht im Docker-Gladys.
Zuerst müssen dein Docker-Gladys und Node-Red laufen.
Anschließend kannst du testen, ob es funktioniert: docker ps -qf name=node-red
et das sollte dir eine Nummer/ID (die von deinem Docker Node-Red) zurückgeben.
Wenn das nicht stimmt, können wir nicht weitermachen, und du kannst überprüfen, ob die Docker laufen, mit docker ps
Also auf dem Host kannst du erstellen (mit deinem bevorzugten Dateieditor): sudo nano /etc/udev/rules.d/99-docker-tty.rules
Dann kopierst du ein:
Wenn es nano ist, drückst du Strg+X und Y (oder O) und Enter, um zu speichern und zu verlassen.
Anschließend, um die Regeln anzuwenden:
sudo udevadm control --reload
Schließlich muss das Skript erstellt werden, das das Gerät automatisch auf dem USB-Port ein- und aushängt: sudo nano /usr/local/bin/docker_tty.sh
et du fügst ein:
#!/usr/bin/env bash
echo "Usb event: $1 $2 $3 $4" >> /tmp/docker_tty.log
if [ ! -z "$(docker ps -qf name=node-red)" ]
then
if [ "$1" == "added" ]
then
docker exec -u 0 env_dev mknod $2 c $3 $4
docker exec -u 0 env_dev chmod -R 777 $2
echo "Adding $2 to docker" >> /tmp/docker_tty.log
else
docker exec -u 0 env_dev rm $2
echo "Removing $2 from docker" >> /tmp/docker_tty.log
fi
fi
Man gibt diesem Skript Ausführungsrechte: sudo chmod +x /usr/local/bin/docker_tty.sh
Und jetzt kannst du schauen, was passiert, wenn du dein USB-Gerät anschließt (insbesondere in /tmp/docker_tty.log).
Wenn nichts funktioniert, gibt es einen Befehl, den man ausführen muss, aber ich weiß nicht genau, was er macht (ich habe meine Grenzen ): docker run --device-cgroup-rule='c 188:* rmw' -itd --name my_container ubuntu
Und das ist das, was mein Link als Erstes vorschlägt. Ich denke, es startet ein Ubuntu mit einem Container, der my_container heißen wird, und es wird ein Argument übergeben. Allerdings weiß ich nicht, ob man diesen Befehl auf dem Docker-Gladys oder auf dem Docker-Node-Red ausführen muss, und da der Docker-Node-Red gestartet wird, weiß ich nicht, ob es funktioniert …
Kurz gesagt, es könnte hier hängen bleiben.
Lass mich in jedem Fall wissen, ob die ersten Tests erfolgreich sind.
EDIT: Danach würde ich dir raten, nicht über Gladys zu gehen, um den Docker Node-Red zu erstellen/starten, sondern einen eigenen zu erstellen, und dann kannst du den seltsamen Befehl in diesem Docker ausführen.
Guten Abend @pierre-gilles@mutmut
Können Sie mir bestätigen, dass der Name des Bildes des Containers von gladys-node-red nodered/node-red:3.1 ist?
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
702448e6dba6 nodered/node-red:3.1 "./entrypoint.sh" 5 minutes ago Up 5 minutes (healthy) 0.0.0.0:1881->1880/tcp, :::1881->1880/tcp gladys-node-red
e000d717481c gladysassistant/gladys:node-red-usb-ports "docker-entrypoint.s…" 7 minutes ago Up 7 minutes gladys
c12621b8b474 containrrr/watchtower "/watchtower --clean…" 4 weeks ago Up 9 minutes (healthy) 8080/tcp watchtower
Zuerst muss ich die Berechtigungen initialisieren (mit CHMOD), da sie beim Start nicht korrekt sind
Ich habe mehrmals versucht, den Rflink zu trennen und wieder anzuschließen, aber es funktioniert nicht, er verbindet sich nicht von selbst.
Ich zeige dir die Logs von /tmp/docker_tty.log
pi@rasp3b:/tmp $ sudo nano docker_tty.log
GNU nano 5.4 docker_tty.log
Usb event: added /dev/tty14 4 14
Usb event: added /dev/tty15 4 15
Usb event: added /dev/tty16 4 16
Usb event: added /dev/tty17 4 17
Usb event: added /dev/tty18 4 18
Usb event: added /dev/tty20 4 20
Usb event: added /dev/tty2 4 2
Usb event: added /dev/tty22 4 22
Usb event: added /dev/tty24 4 24
Usb event: added /dev/tty19 4 19
Usb event: added /dev/tty21 4 21
Usb event: added /dev/tty23 4 23
Usb event: added /dev/tty25 4 25
Usb event: added /dev/tty26 4 26
Usb event: added /dev/tty27 4 27
Usb event: added /dev/tty29 4 29
Usb event: added /dev/tty28 4 28
Usb event: added /dev/tty3 4 3
Usb event: added /dev/tty30 4 30
Usb event: added /dev/tty31 4 31
Usb event: added /dev/tty32 4 32
Usb event: added /dev/tty33 4 33
Usb event: added /dev/tty34 4 34
Usb event: added /dev/tty35 4 35
Usb event: added /dev/tty36 4 36
Usb event: added /dev/tty37 4 37
Usb event: added /dev/tty38 4 38
Usb event: added /dev/tty39 4 39
Usb event: added /dev/tty4 4 4
Usb event: added /dev/tty40 4 40
Usb event: added /dev/tty41 4 41
Usb event: added /dev/tty42 4 42
Usb event: added /dev/tty43 4 43
Usb event: added /dev/tty44 4 44
Usb event: added /dev/tty45 4 45
Usb event: added /dev/tty46 4 46
Usb event: added /dev/tty47 4 47
Usb event: added /dev/tty48 4 48
Usb event: added /dev/tty49 4 49
Usb event: added /dev/tty5 4 5
Usb event: added /dev/tty50 4 50
Usb event: added /dev/tty51 4 51
Usb event: added /dev/tty52 4 52
Usb event: added /dev/tty53 4 53
Usb event: added /dev/tty54 4 54
Usb event: added /dev/tty55 4 55
Usb event: added /dev/tty56 4 56
Usb event: added /dev/tty57 4 57
Usb event: added /dev/tty58 4 58
Usb event: added /dev/tty59 4 59
Usb event: added /dev/tty6 4 6
Usb event: added /dev/tty60 4 60
Usb event: added /dev/tty61 4 61
Usb event: added /dev/tty62 4 62
Usb event: added /dev/tty63 4 63
Usb event: added /dev/tty7 4 7
Ich sehe keinen ttyUSB-Port, sagt dir das etwas?
Ich habe meinen Rflink mehrmals getrennt.
Ich habe versucht, diesen Befehl --device-cgroup-rule='c 188:* rmw' im Docker-Container auszuführen, aber es werden immer noch keine Berechtigungen für die USB-Ports erteilt.
Dann habe ich diesen Befehl --device=/dev/ttyUSB0 \ in den docker run integriert und jetzt werden die Berechtigungen für den USB-Port erteilt und der Node Serial verbindet sich gut.
Allerdings ist es immer noch dasselbe, wenn man den Rflink trennt, verliert der USB-Port seine Berechtigungen und wird zu crw-rw---- 1 root dialout 188, 0 Feb 21 22:52 /dev/ttyUSB0 statt crw-rw-rw- 1 root dialout 188, 0 Feb 21 22:52 /dev/ttyUSB0.
Dann müsste man den chmod in das Skript einfügen, das die Variablen speichert, und falls das nicht funktioniert, durch Ersetzen von chmod a+rw $2 mit chmod a+rw /dev/ttyUSB0 hartcodiert:
#!/usr/bin/env bash
echo "Usb event: $1 $2 $3 $4" >> /tmp/docker_tty.log
if [ ! -z "$(docker ps -qf name=gladys-node-red)" ]
then
if [ "$1" == "added" ]
then
chmod a+rw $2
docker exec -u 0 gladys-node-red mknod $2 c $3 $4
docker exec -u 0 gladys-node-red chmod -R 777 $2
echo "Adding $2 to docker" >> /tmp/docker_tty.log
else
docker exec -u 0 gladys-node-red rm $2
echo "Removing $2 from docker" >> /tmp/docker_tty.log
fi
fi
EDIT: Ups, ich habe vergessen, env_dev in gladys-node-red im Skript zu ändern, das hat wahrscheinlich nicht richtig funktioniert
Wenn man sich das Skript ansieht, das in den tmp schreibt, würde ich sagen: Usb event: added /dev/tty40 4 40
$1 = added (oder removed)
$2 = /dev/tty40
$3 = 4
$4 = 40
Allerdings habe ich keine Ahnung, was $3 und $4 bedeuten.
Man sollte /dev/ttyUSB sehen, wenn man lsusb ausführt, aber es wird nicht im Skript-Log erscheinen (außerdem wird es ein symbolischer Link sein, wenn ich mich nicht irre).
Super, es funktioniert! Ich werde heute Abend ein paar Tests durchführen, aber anscheinend trennt sich der Rflink beim Abstecken und Stecken wieder und verbindet sich erneut
Ich habe Gladys und Node-RED deinstalliert und dann wieder installiert. Allerdings habe ich die beiden erstellten Dateien nicht gelöscht. Nach dem Neustart verbindet sich der RFLink korrekt wieder.
Also, ich habe es auf einem Raspberry 3B+ getestet. Wird diese Lösung auch auf einem Mini-PC funktionieren?
Für das Skript habe ich Debian für den PC besorgt, also wenn es auf deinem Raspberry Pi funktioniert, gibt es keinen Grund, warum es nicht funktionieren sollte.