Node-RED-Integration: USB-Ports für Docker-Container freigeben

Bearbeitung 20/02/2025: Hier ist ein PR, der die USB-Ports im Docker-Container von Node-RED freigibt. Ich habe diese Diskussion in ein anderes Thema verschoben, um mehr Klarheit zu schaffen.

Ich musste die Unit-Tests ändern, daher denke ich, dass dein PR den gestarteten Container tatsächlich nicht verändert hat :smiley:

Ich habe einen Build gestartet, der in etwa 50 Minuten abgeschlossen sein sollte:

gladysassistant/gladys:node-red-usb-ports

Hallo @pierre-gilles
Ich habe den Befehl geändert, schau mal, ob das in Ordnung ist, damit ich es am Morgen testen kann.

docker run -d \
--log-driver json-file \
--log-opt max-size=10m \
--cgroupns=host \
--restart=always \
--privileged \
--network=host \
--name gladys \
-e NODE_ENV=production \
-e SERVER_PORT=80 \
-e TZ=Europe/Paris \
-e SQLITE_FILE_PATH=/var/lib/gladysassistant/gladys-production.db \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/lib/gladysassistant:/var/lib/gladysassistant \
-v /dev:/dev \
-v /run/udev:/run/udev:ro \
gladysassistant/gladys:node-red-usb-ports

Das sieht gut aus :slight_smile:

Ich habe es getestet, aber es funktioniert immer noch nicht:
Mit dmesg -s 1024 habe ich den Port überprüft

Dmesg -s 1024 
62] usbcore: registered new interface driver usbserial_generic
[   12.602675] usbserial: USB Serial support registered for generic
[   12.614134] usbcore: registered new interface driver ch341
[   12.614354] usbserial: USB Serial support registered for ch341-uart
[   12.614551] ch341 1-1.3:1.0: ch341-uart converter detected
[   12.618019] usb 1-1.3: ch341-uart converter now attached to ttyUSB0

In Node Red wähle ich den vorgeschlagenen Port aus:

Konfiguration in Node Red:

Beim Bereitstellen:

Die Node Red Logs

pi@raspberrypi:~ $ docker logs  nodered/node-red:3.1
27 Jan 10:40:44 - [info]

Welcome to Node-RED
===================

27 Jan 10:40:45 - [info] Node-RED version: v3.1.15
27 Jan 10:40:45 - [info] Node.js  version: v16.20.2
27 Jan 10:40:45 - [info] Linux 5.10.103-v8+ arm64 LE
27 Jan 10:40:50 - [info] Loading palette nodes
27 Jan 10:40:58 - [info] Settings file  : /data/settings.js
27 Jan 10:40:58 - [info] Context store  : 'default' [module=memory]
27 Jan 10:40:58 - [info] User directory : /data
27 Jan 10:40:58 - [warn] Projects disabled : editorTheme.projects.enabled=false
27 Jan 10:40:58 - [info] Flows file     : /data/flows.json
27 Jan 10:40:58 - [info] Creating new flow file
27 Jan 10:40:58 - [warn]

---------------------------------------------------------------------
Your flow credentials file is encrypted using a system-generated key.

If the system-generated key is lost for any reason, your credentials
file will not be recoverable, you will have to delete it and re-enter
your credentials.

You should set your own key using the 'credentialSecret' option in
your settings file. Node-RED will then re-encrypt your credentials
file using your chosen key the next time you deploy a change.
---------------------------------------------------------------------

27 Jan 10:40:58 - [info] Server now running at http://127.0.0.1:1880/
27 Jan 10:40:58 - [warn] Encrypted credentials not found
27 Jan 10:40:58 - [info] Starting flows
27 Jan 10:40:58 - [info] Started flows
27 Jan 10:41:42 - [info] Installing module: node-red-node-serialport, version: 2.0.3
27 Jan 10:42:21 - [info] Installed module: node-red-node-serialport
27 Jan 10:42:23 - [info] Added node types:
27 Jan 10:42:23 - [info]  - node-red-node-serialport:serial in
27 Jan 10:42:23 - [info]  - node-red-node-serialport:serial out
27 Jan 10:42:23 - [info]  - node-red-node-serialport:serial request
27 Jan 10:42:23 - [info]  - node-red-node-serialport:serial-port
27 Jan 10:42:23 - [info]  - node-red-node-serialport:serial control
27 Jan 10:46:16 - [info] Stopping flows
27 Jan 10:46:16 - [info] Stopped flows
27 Jan 10:46:16 - [info] Updated flows
27 Jan 10:46:16 - [info] Starting flows
27 Jan 10:46:16 - [info] Started flows
27 Jan 10:46:16 - [error] [serialconfig:b63b9d343f0c14e6] serial port /dev/ttyUSB0 error: Error: Error: Permission denied, cannot open /dev/ttyUSB0
27 Jan 10:46:44 - [info] Stopping flows
27 Jan 10:46:44 - [info] serial port /dev/ttyUSB0 closed
27 Jan 10:46:44 - [info] Stopped flows
27 Jan 10:46:44 - [info] Updated flows
27 Jan 10:46:44 - [info] Starting flows
27 Jan 10:46:44 - [info] Started flows
27 Jan 10:46:44 - [error] [serialconfig:b63b9d343f0c14e6] serial port /dev/ttyAMA0 error: Error: Error: Permission denied, cannot open /dev/ttyAMA0
27 Jan 10:48:20 - [info] Stopping flows
27 Jan 10:48:20 - [info] serial port /dev/ttyAMA0 closed
27 Jan 10:48:20 - [info] Stopped flows
27 Jan 10:48:20 - [info] Updated flows
27 Jan 10:48:20 - [info] Starting flows
27 Jan 10:48:21 - [info] Started flows
27 Jan 10:48:21 - [error] [serialconfig:b63b9d343f0c14e6] serial port /dev/ttyUSB0 error: Error: Error: Permission denied, cannot open /dev/ttyUSB0
27 Jan 10:48:29 - [info] Stopping flows
27 Jan 10:48:29 - [info] serial port /dev/ttyUSB0 closed
27 Jan 10:48:29 - [info] Stopped flows
27 Jan 10:48:29 - [info] Updated flows
27 Jan 10:48:29 - [info] Starting flows
27 Jan 10:48:29 - [info] Started flows
27 Jan 10:48:29 - [error] [serialconfig:b63b9d343f0c14e6] serial port /dev/ttyUSB0 error: Error: Error: Permission denied, cannot open /dev/ttyUSB0

Port auf dem Raspberry

pi@raspberrypi:~ $ lsusb
Bus 001 Device 004: ID 1a86:7523 QinHeng Electronics CH340 serial converter
Bus 001 Device 003: ID 0424:ec00 Microchip Technology, Inc. (formerly SMSC) SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Microchip Technology, Inc. (formerly SMSC) SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Falls du noch mehr Infos brauchst?
Danke dir

Ja, ich bräuchte, dass du folgendes ausführst:

docker inspect ID_DU_CONTAINER_NODE_RED

Und mir hier das Ergebnis zeigst :slight_smile:

Hier


pi@raspberrypi:~ $ docker inspect ID_DU_CONTAINER_NODE_RED
[]
Error: No such object: ID_DU_CONTAINER_NODE_RED

ID_DU_CONTAINER_NODE_RED muss durch die ID des Node-RED-Containers ersetzt werden :joy:

ups :roll_eyes:

Das ist nicht dasselbe :smile:

pi@raspberrypi:~ $ docker inspect 4bdf10801a20
[
    {
        "Id": "4bdf10801a2056713b1ea04d49e89a1f9b126ca041d89f6a56f2973c14354fd0",
        "Created": "2025-01-27T10:40:00.988429022Z",
        "Path": "./entrypoint.sh",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 2552,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2025-01-27T10:40:15.299175192Z",
            "FinishedAt": "0001-01-01T00:00:00Z",
            "Health": {
                "Status": "healthy",
                "FailingStreak": 0,
                "Log": [
                    {
                        "Start": "2025-01-27T14:32:45.468270734+01:00",
                        "End": "2025-01-27T14:32:46.089802444+01:00",
                        "ExitCode": 0,
                        "Output": ""
                    },
                    {
                        "Start": "2025-01-27T14:33:16.145544727+01:00",
                        "End": "2025-01-27T14:33:16.759836444+01:00",
                        "ExitCode": 0,
                        "Output": ""
                    },
                    {
                        "Start": "2025-01-27T14:33:46.827170575+01:00",
                        "End": "2025-01-27T14:33:47.459022894+01:00",
                        "ExitCode": 0,
                        "Output": ""
                    },
                    {
                        "Start": "2025-01-27T14:34:17.525029165+01:00",
                        "End": "2025-01-27T14:34:18.195952915+01:00",
                        "ExitCode": 0,
                        "Output": ""
                    },
                    {
                        "Start": "2025-01-27T14:34:48.342865391+01:00",
                        "End": "2025-01-27T14:34:49.004312549+01:00",
                        "ExitCode": 0,
                        "Output": ""
                    }
                ]
            }
        },
        "Image": "sha256:bf1dac2b1cbc77b96f0ef704281763f5cba01b59f36d3d16d231bab333dc4115",
        "ResolvConfPath": "/var/lib/docker/containers/4bdf10801a2056713b1ea04d49e89a1f9b126ca041d89f6a56f2973c14354fd0/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/4bdf10801a2056713b1ea04d49e89a1f9b126ca041d89f6a56f2973c14354fd0/hostname",
        "HostsPath": "/var/lib/docker/containers/4bdf10801a2056713b1ea04d49e89a1f9b126ca041d89f6a56f2973c14354fd0/hosts",
        "LogPath": "/var/lib/docker/containers/4bdf10801a2056713b1ea04d49e89a1f9b126ca041d89f6a56f2973c14354fd0/4bdf10801a2056713b1ea04d49e89a1f9b126ca041d89f6a56f2973c14354fd0-json.log",
        "Name": "/gladys-node-red",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": [
                "/var/lib/gladysassistant/node-red:/data",
                "/dev:/dev",
                "/run/udev:/run/udev:ro"
            ],
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {
                    "max-size": "10m"
                }
            },
            "NetworkMode": "default",
            "PortBindings": {
                "1880/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "1881"
                    }
                ]
            },
            "RestartPolicy": {
                "Name": "always",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "private",
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": true,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": [
                "label=disable"
            ],
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": null,
            "ReadonlyPaths": null
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/3bfbd36779fb2625e76ec7d8560e8d205ed75d33118a75db09e537794c454764-init/diff:/var/lib/docker/overlay2/5254fb1e94ecaad1ae06c3606a90da705ac47123e78697c7de02bdb355e24002/diff:/var/lib/docker/overlay2/2c0cf5446301fbfe977761e109d05d81c33aa068586cbf5bf8315da7521704ab/diff:/var/lib/docker/overlay2/b24091075e548c2bcbcd616e54ca72a5ff53b07bfd71061e05fef41f5fb6adee/diff:/var/lib/docker/overlay2/b8a6030c37237b02360c54260c2ad3ba7612b8da59d4d3eb97b9d2a8fac76c55/diff:/var/lib/docker/overlay2/afa66f72df5d76bbf043888f550d0368566273eec1a304edc679c38f7d4374f8/diff:/var/lib/docker/overlay2/ea57f7aff9e03e0ef6cf001967006f24e985f7f6d1ab249adda78c1e0a85e29c/diff:/var/lib/docker/overlay2/6583b1111613b61869c058a59fdc7ccf4f22e1cdd4e22ef3fefede0f530e7255/diff:/var/lib/docker/overlay2/b1e013593560d227c5f884021547e357bf131d66e9111d4aa055e5d0d4c91bee/diff:/var/lib/docker/overlay2/b57961199d2e32910e0c767f0f589cafab8ffe6c6124d91ad38154a893d59b34/diff:/var/lib/docker/overlay2/f318dcc1db476e645b3a58c11a01ecac48a8394560f714022ea13501dc06beb8/diff:/var/lib/docker/overlay2/9c5b0d92ed004650418f5a382adc499618b92140c3fac173fe0f24f3e480d469/diff:/var/lib/docker/overlay2/8104bd617585d550646386d8a342623040b89a155a6b89670fe1b096ffe47a9a/diff:/var/lib/docker/overlay2/71bbe4ab385219cd219eb357231e2ab340a4da222439327422f5ffe1ee66b7be/diff:/var/lib/docker/overlay2/c920da126c3090214760c81faeeb27c4ccb642e3efa51327d72dce89a801f35f/diff:/var/lib/docker/overlay2/3a0e8c6e90e5eea537307617a6586ec54e6689b817e22e32778cf74bb5236908/diff:/var/lib/docker/overlay2/c11fc90afb6e3e224589162178b7da33669ddf6510620671eec08fb0b8ac1732/diff:/var/lib/docker/overlay2/b61fc569233d18d75d56592e335fac15c022dffe9622e64fabe355a9012ba6f8/diff",
                "MergedDir": "/var/lib/docker/overlay2/3bfbd36779fb2625e76ec7d8560e8d205ed75d33118a75db09e537794c454764/merged",
                "UpperDir": "/var/lib/docker/overlay2/3bfbd36779fb2625e76ec7d8560e8d205ed75d33118a75db09e537794c454764/diff",
                "WorkDir": "/var/lib/docker/overlay2/3bfbd36779fb2625e76ec7d8560e8d205ed75d33118a75db09e537794c454764/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/var/lib/gladysassistant/node-red",
                "Ziel": "/data",
                "Modus": "",
                "Schreibzugriff": true,
                "Propagation": "rprivate"
            },
            {
                "Typ": "bind",
                "Quelle": "/dev",
                "Ziel": "/dev",
                "Modus": "",
                "Schreibzugriff": true,
                "Propagation": "rprivate"
            },
            {
                "Typ": "bind",
                "Quelle": "/run/udev",
                "Ziel": "/run/udev",
                "Modus": "ro",
                "Schreibzugriff": false,
                "Propagation": "rprivate"
            }
        ],
        "Konfiguration": {
            "Hostname": "4bdf10801a20",
            "Domainname": "",
            "Benutzer": "node-red",
            "StdinAngehängt": false,
            "StdoutAngehängt": false,
            "StderrAngehängt": false,
            "ExponiertePorts": {
                "1880/tcp": {}
            },
            "Tty": false,
            "StdinGeöffnet": false,
            "StdinEinmalig": false,
            "Umgebung": [
                "PATH=/usr/src/node-red/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NODE_VERSION=16.20.2",
                "YARN_VERSION=1.22.19",
                "NODE_RED_VERSION=v3.1.15",
                "NODE_PATH=/usr/src/node-red/node_modules:/data/node_modules",
                "FLOWS=flows.json"
            ],
            "Befehl": null,
            "Healthcheck": {
                "Test": [
                    "CMD-SHELL",
                    "node /healthcheck.js"
                ]
            },
            "Bild": "nodered/node-red:3.1",
            "Volumes": null,
            "Arbeitsverzeichnis": "/usr/src/node-red",
            "Einstiegspunkt": [
                "./entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
                "autoren": "Dave Conway-Jones, Nick O'Leary, James Thomas, Raymond Mouthaan",
                "org.label-schema.arch": "",
                "org.label-schema.build-date": "2024-12-17T09:46:41Z",
                "org.label-schema.description": "Low-code programming for event-driven applications.",
                "org.label-schema.docker.dockerfile": ".docker/Dockerfile.alpine",
                "org.label-schema.license": "Apache-2.0",
                "org.label-schema.name": "Node-RED",
                "org.label-schema.url": "https://nodered.org",
                "org.label-schema.vcs-ref": "",
                "org.label-schema.vcs-type": "Git",
                "org.label-schema.vcs-url": "https://github.com/node-red/node-red-docker",
                "org.label-schema.version": "3.1.15"
            }
        },
        "NetzwerkEinstellungen": {
            "Bridge": "",
            "SandboxID": "24902baafb6717ff0342ee17e2c8ed2e809947ff30e9704acf3128dd5c5f3451",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "1880/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "1881"
                    },
                    {
                        "HostIp": "::",
                        "HostPort": "1881"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/24902baafb67",
            "SekundäreIPAdressen": null,
            "SekundäreIPv6Adressen": null,
            "EndpointID": "cddbcedf3cd1d16eff4da4c215d9144946d26ae367673e542ef8179affd7418e",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.4",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:04",
            "Netzwerke": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "1d3b4c16fadcdd1917b86c97e0381ee4f056693bead5556046e45a6f43a01978",
                    "EndpointID": "cddbcedf3cd1d16eff4da4c215d9144946d26ae367673e542ef8179affd7418e",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.4",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:04",
                    "DriverOpts": null
                }
            }
        }
    }
]

Okay, das sieht jetzt gut aus, mein Pull Request hat das gemacht, was ich vorhatte.

Aber trotzdem habe ich keine Ahnung, warum es nicht funktioniert.

@Psoy Da du RFLink verwendest, könntest du vielleicht in deiner Ecke herumprobieren, bis du ein funktionierendes RFLink hast, und mir dann die Docker-Konfiguration schicken, die du verwendet hast? Vielleicht ist das der einfachere Weg.

Guten Abend @pierre-gilles
Ich würde gerne Dinge testen, aber mit Docker herumzuspielen, wird schwierig sein, besonders weil ich nicht weiß, wie Gladys node_red startet und ich es auch nicht beherrscht. Bei dem externen Node_red habe ich durch Herumprobieren herausgefunden, wo die Dateien sind, ich habe die Befehle, die funktionieren, also da läuft es; Wenn du Ideen hast, wo ich suchen kann, bin ich dankbar, aber ich werde suchen.
Aber wie ich gesagt habe, bin ich etwa 15 Tage weg, ich werde nicht auf dem rflink sein.
Gute Nacht

Gladys startet Node-RED mit einem einfachen docker run :slight_smile: Also wenn du es schaffst, einen Node-RED zum Laufen zu bringen, schick mir deinen docker run und ich baue ihn ein!

Kein Problem, nichts Eiliges auf meiner Seite!

Ich verwende das, was im Tutorial steht, aber es gibt vielleicht Dinge, die angepasst werden müssen, insbesondere das Update durch Watchtower:

Installation von Node Red

1 - Geben Sie den Befehl von @VonOx ein, Sie müssen ein System haben, das an die USB0- und USB1-Ports angeschlossen ist. In meinem Fall habe ich einen RFlink am Port ttyUSB0 und den Zigbee-Sonoff-Key am Port ttyUSB1. Daher müssen Sie möglicherweise in den Zeilen " --device=/dev/ttyUSB0 \ " den Namen des verwendeten Ports anpassen, es könnte ttyACM0 sein.

docker run -d \
--log-opt max-size=10m \
--restart=always \
--network=host \
--name node_red \
-u node-red:dialout \
--device=/dev/ttyUSB0 \
--device=/dev/ttyUSB1 \
--label com.centurylinklabs.watchtower.enable=false \
-v /var/lib/node-red:/data \
nodered/node-red

Achtung, Sie müssen die Zeile anpassen:

--device=/dev/ttyUSB0 \
Abhängig vom USB-Port, an dem der RFlink angeschlossen ist. Manchmal kann der RFlink an den USB-Port /dev/ttyAMA0 angeschlossen sein.
In meinem Fall entspricht /devttyUSB0 meinem Zigbee-Key und /dev/ttyUSB1 entspricht meinem RFlink

Achtung mit diesem Befehl:

--label com.centurylinklabs.watchtower.enable=false \
Watchtower aktualisiert Node Red nicht mehr und wenn Sie den PI neu starten, startet Node Red nicht mehr automatisch wie Gladys. Sie müssen den Node-Red-Container mit « docker restart node_red » neu starten

2 - dann diesen hier

sudo chown -R 1000:1000 /var/lib/node-red

Du kopierst diesen Befehl
docker run (und der Rest … )

et vor allem
Befehl 2:

sudo chown -R 1000:1000 /var/lib/node-red

sonst funktioniert nichts.

Allerdings ist « Node _red extern » in Version 4 und scheint die Probleme der Version des « node-red-node-serialport »-Pakets behoben zu haben (früher musste die Version zurückgesetzt werden, damit es funktioniert)

Ich habe es noch einmal durchgelesen, aber die Version 3.1.15 von Node_Red akzeptiert auch die neueste Version von « node-red-node-serialport ».

Eine kleine Bonusfrage zu meinem Mini-PC
Diese Docker-Konfiguration würde nicht verhindern, die Ports des Zigbee-Sticks und des Rflinks zu vertauschen (denn wenn mein Sicherungsautomat auslöst, vertauschen sich die beiden Ports beim Wiedereinschalten, der Rflink landet dann auf USB0, obwohl er vorher auf USB1 war, und umgekehrt für den Zigbee-Stick. Ich habe versucht, den Port des Rflinks auf USB0 zu ändern, aber das geht nicht, Node Red lehnt es ab. Ich werde es mal mit dem Port des Zigbee-Sticks versuchen!
Vielen Dank nochmals für alles

Genau das geht nicht, weil der USB-Port hier fest ist.

Hier wollen wir, dass Node-RED auf alle USB-Ports zugreifen kann, daher die Übergabe von /dev:/dev als Volume und der --privileged-Modus des Containers.

Guten Abend @pierre-gilles und alle
Ich habe mich wieder mit node red und rflink beschäftigt und gebe diesen Befehl ein: ls /dev/tty*

pi@rasp3b:// $ ls /dev/tty*
/dev/tty    /dev/tty14  /dev/tty20  /dev/tty27  /dev/tty33  /dev/tty4   /dev/tty46  /dev/tty52  /dev/tty59  /dev/tty8
/dev/tty0   /dev/tty15  /dev/tty21  /dev/tty28  /dev/tty34  /dev/tty40  /dev/tty47  /dev/tty53  /dev/tty6   /dev/tty9
/dev/tty1   /dev/tty16  /dev/tty22  /dev/tty29  /dev/tty35  /dev/tty41  /dev/tty48  /dev/tty54  /dev/tty60  /dev/ttyAMA0
/dev/tty10  /dev/tty17  /dev/tty23  /dev/tty3   /dev/tty36  /dev/tty42  /dev/tty49  /dev/tty55  /dev/tty61  /dev/ttyprintk
/dev/tty11  /dev/tty18  /dev/tty24  /dev/tty30  /dev/tty37  /dev/tty43  /dev/tty5   /dev/tty56  /dev/tty62  /dev/ttyUSB0
/dev/tty12  /dev/tty19  /dev/tty25  /dev/tty31  /dev/tty38  /dev/tty44  /dev/tty50  /dev/tty57  /dev/tty63  /dev/tty-usb-arduino-nano
/dev/tty13  /dev/tty2   /dev/tty26  /dev/tty32  /dev/tty39  /dev/tty45  /dev/tty51  /dev/tty58  /dev/tty7

An den letzten USB-Ports sehe ich den Port /dev/tty/USB0 und dann gibt es diesen Port /dev/tty-usb-arduino-nano.
Es sind dieselben Ports, denn wenn ich den RFlink abstecke, verschwinden beide Ports.
Auf dem Mini-PC sehe ich jedoch den Port /devttyUSB1 (wenn ich den RFlink anstecke), aber nicht die Umbenennung in « /dev/tty-usb-arduino-nano », wobei ich auf dem Mini-PC auf externem node red bin.
Ist das normal? Wird der USB-Port in internem node red umbenannt und deshalb nicht angezeigt?
Vielen Dank für eure Hilfe

Du hast eine udev-Regel erstellt, die auf dem Host gilt, aber nicht im Container verfügbar ist!

Hallo @pierre-gilles
Ich habe nichts erstellt, falls es Udev-Regeln gibt, stammen sie von der Installation von Node Red durch Gladys :thinking:

Die udev-Regeln erscheinen nicht wie von Zauberhand :stuck_out_tongue:

Hallo @pierre-gilles
Ich habe keine udev-Regel erstellt, aber /dev/tty-usb-arduino-nano ist ein symbolischer Link, der, glaube ich, beim Anschließen des Rflink erstellt wird. Ich habe eine Tabelle gesehen, die die Entsprechungen erstellt, wenn man einen Arduino Uno oder einen Arduino Mega anschließt,
`rasp3b:/etc/udev/rules.d $ sudo nano 99-gladys-tty.rules

Laut meinen Recherchen habe ich herausgefunden, dass dieser symbolische Link (wie Gemini sagte) folgende Berechtigungen hat:

pi@rasp3b:~ $  ls -l /dev/tty-usb-arduino-nano
lrwxrwxrwx 1 root root 7 Feb 19 10:02 /dev/tty-usb-arduino-nano -> ttyUSB0

et der USB0-Port, an den der Port ``/dev/tty-usb-arduino-nano``` gebunden ist, hat folgende Berechtigungen:

pi@rasp3b:~ $ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 Feb 19 10:02 /dev/ttyUSB0

Also habe ich sudo chmod a+rw /dev/ttyUSB0 ausgeführt, um den « ANDEREN » die Berechtigungen zu erteilen:

pi@rasp3b:~ $ ls -l /dev/ttyUSB0
crw-rw-rw- 1 root dialout 188, 0 Feb 19 11:50 /dev/ttyUSB0

et jetzt verbindet sich mein « node serial »:

  • Ich weiß nicht, was das in Bezug auf die Sicherheit wert ist?
  • Das Problem ist, dass sich die Berechtigungen des USB0-Ports bei jeder Trennung des RFlink zurücksetzen auf

crw-rw---- 1 root dialout 188, 0 Feb 19 10:02 /dev/ttyUSB0`

et daher geht die Verbindung des Node Serial verloren.
Man müsste diese Berechtigungen fixieren, damit sie sich beim Anschließen des Rflink korrekt initialisieren. Und vielleicht auch für andere Ports, wenn mehrere Geräte angeschlossen sind (Gateway Xiaomi oder Arduino Uno-Karte, …)
Also, wenn du das machen könntest, wenn du etwas Zeit hast, würde ich gerne das neue Image testen
Danke dir

@Psoy das wundert mich, was du mir sagst, weil Node-RED normalerweise im „privilegierten“ Modus gestartet wird, mit allen Rechten.

Bist du sicher, dass du Gladys richtig gestartet hast, der wiederum Node-RED richtig gestartet hat?

Ich erinnere an das Docker-Image:

gladysassistant/gladys:node-red-usb-ports