NEWS
[gelöst] SerialPort-Adapter
-
@Garf
Hallo, darf ich fragen wie du die sleep und work befehle hinbekommen hast?
Habe den gleichen sensor einlesen geht aber dadurch das ich das ich den Sleep nicht hinbekomme läuft er immer durch. -
Wichtige Info für alle, die (wie ich) auf diesen Thread bei der Suche nach Informationen über ioBroker und SerialPort stoßen...
Die Syntax für die Verwendung der SerialPort JavaScript Library hat sich mit Sprung auf die Version 10.x geändert. Die Nutzung wie von @jey-cee beschrieben funktioniert dann nicht und bringt folgende Fehlermeldung:
TypeError: SerialPort is not a constructor
Die richtige Syntax (aber Version 10.x) wäre:
var { SerialPort } = require('serialport')
Und dann, für die Bindung mit der entsprechenden Schnittstelle:
var port = new SerialPort({ path: '/dev/ttyUSB0', baudRate: 9600 });
Details dazu findet man hier: https://serialport.io/docs/guide-upgrade#upgrading-from-9x-to-10x
-
ich versuche mich gerade auch mit USB2RS232 und bin somit hier gelandet
Ich habe das Testskriopt übernommen bekomme aber
Error: Error: Permission denied, cannot open /dev/ttyUSB0
aber die Hardware ist da
root@iobroker:/opt/iobroker# dmesg | grep "usb 1-1.4" [ 2.243577] usb 1-1.4: new full-speed USB device number 3 using xhci_hcd [ 2.349783] usb 1-1.4: New USB device found, idVendor=0403, idProduct=6001, bcdDevice= 6.00 [ 2.349797] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 2.349808] usb 1-1.4: Product: FT232R USB UART [ 2.349819] usb 1-1.4: Manufacturer: FTDI [ 2.349829] usb 1-1.4: SerialNumber: A10K5SV4 [ 5.173412] usb 1-1.4: Detected FT232RL [ 5.185287] usb 1-1.4: FTDI USB Serial Device converter now attached to ttyUSB0
hier ist der Pfad
root@iobroker:/opt/iobroker# ls /dev/tty* /dev/tty /dev/ttyUSB0
da iobroker im Docker läuft bin ich auch ls -l /dev/serial/by-id gefolgt:
version: '2' services: iobroker: restart: always image: buanet/iobroker:latest container_name: iobroker hostname: iobroker ports: - "8081:8081" - "1882:1882" - "1883:1883" - "8082:8082" volumes: - /storage/system/data-containers/iobroker:/opt/iobroker networks: - lsio devices: - /dev/ttyUSB0:/dev/ttyUSB0 networks: lsio: external: true
hier noch der USBtoRS232 Adapter auf dem Host
LibreELEC:~ # dmesg | grep "usb 1-1.4" [ 2.243577] usb 1-1.4: new full-speed USB device number 3 using xhci_hcd [ 2.349783] usb 1-1.4: New USB device found, idVendor=0403, idProduct=6001, bcdDevice= 6.00 [ 2.349797] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 2.349808] usb 1-1.4: Product: FT232R USB UART [ 2.349819] usb 1-1.4: Manufacturer: FTDI [ 2.349829] usb 1-1.4: SerialNumber: A10K5SV4 [ 5.173412] usb 1-1.4: Detected FT232RL [ 5.185287] usb 1-1.4: FTDI USB Serial Device converter now attached to ttyUSB0
auf dem Host
LibreELEC:~ # ls -l /dev/serial/by-id total 0 lrwxrwxrwx 1 root root 13 Feb 2 2021 usb-FTDI_FT232R_USB_UART_A10K5SV4-if00-port0 -> ../../ttyUSB0
in ioBroker
root@iobroker:/opt/iobroker# ls -l /dev/serial/by-id ls: cannot access '/dev/serial/by-id': No such file or directory
scheint er wird nicht richtig installiert
-
Moin,
wem (user) gehört das Device und zu welcher
gruppe
?
Hat der User im Docker deswegen keinen Zugriff, zeig mal mitls -la
.$ ls -la /dev/tty* crw-rw-rw- 1 nobody nobody 5, 0 Mar 17 10:25 /dev/tty crw--w---- 1 root tty 136, 1 Mar 16 11:32 /dev/tty1 crw--w---- 1 root tty 136, 2 Mar 16 11:32 /dev/tty2 ---------- 1 root root 0 Mar 16 11:32 /dev/ttyACM0 crw-rw-rw- 1 nobody nobody 166, 3 Mar 19 18:06 /dev/ttyACM3
VG
Bernd -
@dp20eic
habe mal testweise die compose file angepasstdevices: - /dev/ttyUSB0:/dev/ttyUSB1
nun
root@iobroker:/opt/iobroker# ls -la /dev/tty* crw-rw-rw- 1 root root 5, 0 Mär 19 18:12 /dev/tty crw-rw---- 1 root 18 188, 0 Mär 19 18:12 /dev/ttyUSB1
aber nhier ist noch ttyUSB0
root@iobroker:/opt/iobroker# dmesg | grep "usb 1-1.4" [ 2.243577] usb 1-1.4: new full-speed USB device number 3 using xhci_hcd [ 2.349783] usb 1-1.4: New USB device found, idVendor=0403, idProduct=6001, bcdDevice= 6.00 [ 2.349797] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 2.349808] usb 1-1.4: Product: FT232R USB UART [ 2.349819] usb 1-1.4: Manufacturer: FTDI [ 2.349829] usb 1-1.4: SerialNumber: A10K5SV4 [ 5.173412] usb 1-1.4: Detected FT232RL [ 5.185287] usb 1-1.4: FTDI USB Serial Device converter now attached to ttyUSB0
-
Moin,
einmal auseinander halten.
Host:
ls -la /dev/tty*
Dann erst einmal schauen, wem das Device gehört, siehe bei mir oben
Beispiel: crw-rw-rw- 1 nobody nobody 166, 3 Mar 19 18:06 /dev/ttyACM3 1) rw- = read/write user -> nobody 2) rw- = read/write gruppe -> nobody 3) rw- = read/write other -> alle Wobei: c = Caracter device r = read w = write - = kann ein x sein und bedeutet ausführbar
VG
Bernd -
@packelend sagte in SerialPort-Adapter:
/dev/tty /dev/ttyUSB0
da iobroker im Docker läuft bin ich auch ls -l /dev/serial/by-id gefolgt:
version: '2'services:
iobroker:
restart: always
image: buanet/iobroker:latest
container_name: iobroker
hostname: iobroker
ports:
- "8081:8081"
- "1882:1882"
- "1883:1883"
- "8082:8082"
volumes:
- /storage/system/data-containers/iobroker:/opt/iobroker
networks:
- lsio
devices:
- /dev/ttyUSB0:/dev/ttyUSB0networks:
lsio:
external: trueda iobroker im Docker läuft
Keine Ahnung was du da für ein System hast ..
aber der
environment: USBDEVICES: /dev/ttyUSB0
fehlt !
-
@dp20eic die Frage nach dem Benutzer hat bei mir was klingeln lassen, ich hatter übersehen, dass folgdendes gesetzer werden muss
environment: USBDEVICES: /dev/ttyUSB0
Fehler ist nun
javascript.0
2023-03-19 20:39:40.059 error Error: Error Resource temporarily unavailable Cannot lock port
javascript.0
2023-03-19 20:39:40.058 error Error: Error Resource temporarily unavailable Cannot lock port
javascript.0
2023-03-19 20:39:40.057 error An error happened which is most likely from one of your scripts, but the originating script could not be detected.In Zigbee iobroker Error while opening serialport und Error Resource temporarily unavailable Cannot lock port wird über ähnliches gesprochen und es heisst, dass das Gerät woanders schon verwendet wird.
Wenn ich aber linux - How to find processes using serial port - Unix & Linux Stack Exchange folge, bekomme ich
HOST:LibreELEC:~ # ls -l /proc/[0-9]*/fd/* |grep /dev/ttyUSB0 ls: /proc/6165/fd/10: No such file or directory ls: /proc/6165/fd/3: No such file or directory lrwx------ 1 1000 1000 64 Mar 19 21:04 /proc/30962/fd/27 -> /dev/ttyUSB0
LibreELEC:~ # ps | grep 30962 6472 root 0:00 grep 30962 30962 1000 0:22 io.javascript.0
so ich sehe hier mein JaveScript-Adapter aus dem ioBroker-Docker?
Hier die bisherigen Befehle
-
DOCKER COMPOSE
devices: - /dev/ttyUSB0:/dev/ttyUSB0 environment: USBDEVICES: /dev/ttyUSB0
-
DOCKER INSPECT
{ ... ], "Config": { ... "Env": [ "USBDEVICES=/dev/ttyUSB0", ... "Devices": [ { "CgroupPermissions": "rwm", "PathInContainer": "/dev/ttyUSB0", "PathOnHost": "/dev/ttyUSB0" }
-
HOST
LibreELEC:~ # ls -la /dev/tty* crw-rw-rw- 1 root tty 5, 0 Feb 2 2021 /dev/tty .... crw--w---- 1 root tty 4, 9 Feb 2 2021 /dev/tty9 crw-rw---- 1 root dialout 204, 64 Mar 17 22:37 /dev/ttyAMA0 crw-rw---- 1 root dialout 188, 0 Feb 2 2021 /dev/ttyUSB0
LibreELEC:~ # dmesg | grep "usb 1-1.4" [ 2.243577] usb 1-1.4: new full-speed USB device number 3 using xhci_hcd [ 2.349783] usb 1-1.4: New USB device found, idVendor=0403, idProduct=6001, bcdDevice= 6.00 [ 2.349797] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 2.349808] usb 1-1.4: Product: FT232R USB UART [ 2.349819] usb 1-1.4: Manufacturer: FTDI [ 2.349829] usb 1-1.4: SerialNumber: A10K5SV4 [ 5.173412] usb 1-1.4: Detected FT232RL [ 5.185287] usb 1-1.4: FTDI USB Serial Device converter now attached to ttyUSB0
LibreELEC:~ # ls -l /dev/serial/by-id total 0 lrwxrwxrwx 1 root root 13 Feb 2 2021 usb-FTDI_FT232R_USB_UART_A10K5SV4-if00-port0 -> ../../ttyUSB0
-
IOBROKER CONTAINER (dsmeg ist identisch mit Host?)
root@iobroker:/opt/iobroker# ls -la /dev/tty* crw-rw-rw- 1 root root 5, 0 Mär 19 20:28 /dev/tty crw-rw---- 1 root dialout 188, 0 Mär 19 20:31 /dev/ttyUSB0
root@iobroker:/opt/iobroker# dmesg | grep "usb 1-1.4" [ 2.243577] usb 1-1.4: new full-speed USB device number 3 using xhci_hcd [ 2.349783] usb 1-1.4: New USB device found, idVendor=0403, idProduct=6001, bcdDevice= 6.00 [ 2.349797] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 2.349808] usb 1-1.4: Product: FT232R USB UART [ 2.349819] usb 1-1.4: Manufacturer: FTDI [ 2.349829] usb 1-1.4: SerialNumber: A10K5SV4 [ 5.173412] usb 1-1.4: Detected FT232RL [ 5.185287] usb 1-1.4: FTDI USB Serial Device converter now attached to ttyUSB0
root@iobroker:/opt/iobroker# ls -l /dev/serial/by-id ls: cannot access '/dev/serial/by-id': No such file or directory
-
-
@glasfaser said in SerialPort-Adapter:
aber der ...
fheltdein Antwort habe ich ganz übersehen, hätte mir so mnaches grübeln erspart
@glasfaser said in SerialPort-Adapter:
Keine Ahnung was du da für ein System hast ..
Ist bei mir LibreELEC mit der Dockererweiterung.
Ich möchte hierüber meinen Surround Receiver und TV mittels ioBroker steuern.
Hardware ist ein Pi 4. -
Moin,
ich zitiere mal nicht, sondern sage Dir nur, dass der Host, die Infrastruktur hat, also alles was unter
/dev/serial
hat, das wird aber nicht an den Docker weitergereicht, im Docker wirst Du nur das Device haben, aber nicht die Infrastruktur.
Ob Du auch das/dev/serial
an den Docker durchreichen kannst, weiß ich gerade nicht.Dann solltest Du um den Zugriff auf das Device im Docker den User noch in die Gruppe
dialout
packen, denn sonst hat der keine Berechtigung zum Lesen und Schreiben, oder Du musst das Device im Host so anlegen, dass, wie ich oben schon beschrieben habe, alle Zugriff bekommen, alsoUser
,Gruppe
undOther
->crw-rw-rw-
, aktuell dürfen nurroot = User
unddialout = Gruppe
auf das Device zugreifen.Ich würde erst mal versuchen auf dem Host sauber auf das Device zugreifen zu können, und mich dann mit dem Durchreichen an den Docker beschäftigen.
Ich habe da nichts mehr um das zu testen, aber diese Anleitung scheint ganz gut zu sein, um die Kommunikation auf dem Host zu testen.
VG
Bernd -
@dp20eic said in SerialPort-Adapter:
Ich würde erst mal versuchen auf dem Host sauber auf das Device zugreifen zu können,
das wird nicht so einfach, es hat keine programm, um damit zu arbeiten und LibreELEC lässt auch nicht zu weitere Linux Pacakges zu installieren.
Zumindest hat es LIRC - Linux Infrared Remote Control, was auch mit meinem FT232R arbeiten könnne sollte: FTDI driver --> FTDI USB driver .
Ic habe aber noch nicht herausgefunden, wie ich das bewerkstellige. Ich hoffe auf Antwort in how to do / test RS232 communication to control surround receiver - General Support - LibreELEC Forum. -
@dp20eic glck gehapt, screen ist verfügbar.
Hier was mirscreen
anzeigt, wenn ich am Rotel etwas einstelle:��� PRODOGY 49������ VIDEO 2 49�\�� VIDEO 2 49 ������ TAPE 49��� TAPE 49 �}����TP 5 �u� TAPE 54 �y�
somit funktioniert es prinzipiel, ergbeniss ist das gleiche, wenn ich mich in Windoof ein Terminal aufmache mit
aus Microsoft Word - RSX1057 Protocol.docx - RSX1057 Protocol.pdf -
Moin,
na dann ist das ja schon einmal ein Teilerfolg
So jetzt, muss nur noch das Device richtig durchgereicht werden, da hattest Du ja schon Ansätze, wie gesagt, das /dev/serial Verzeichnis wirdt Du im Docker nicht haben nur das /dev/ttyUSB0 und das sollte auch die richtigen
Lese/Schreibrechte
haben.Also wenn auf dem Host
crw-rw----
und User = root und Gruppe = dialout, dann sollte das jetzt im Docker auch so aussehen, es sei denn, es gibt im Docker die Gruppe = dialout nicht.Aus dem letzten Post von Dir
IOBROKER CONTAINER (dsmeg ist identisch mit Host?) root@iobroker:/opt/iobroker# ls -la /dev/tty* crw-rw-rw- 1 root root 5, 0 Mär 19 20:28 /dev/tty crw-rw---- 1 root dialout 188, 0 Mär 19 20:31 /dev/ttyUSB0
Sehe ich jetzt, das es im Docker identisch zum Host ist, jetzt musst Du nur noch den User
iobroker
berechtigen das Device auch zu benutzen.Was sagt:
id iobroker
Ist der User in der Gruppe
dialout
?
Wenn ja, sollte der Test mit screen auch aus dem Docker funktionieren.VG
Bernd -
@dp20eic
id iobroker
root@iobroker:/opt/iobroker# id iobroker uid=1000(iobroker) gid=1000(iobroker) groups=1000(iobroker),5(tty),20(dialout),29(audio),44(video)
screen war gar nicht verfügbar, da bin ich IoBroker Raspberry Image, minicom Installation gefolgt.
Dessen Einstellung entsprechend angepasst und es wird auch etwas gelesen:Lockfile is stale. Overriding it.. Welcome to minicom 2.8 OPTIONS: I18n Port /dev/ttyUSB0, 20:59:31 Press CTRL-A Z for help on special keys þþÇ TAPE 44 xþÇ TAPE 43 wþÇ TAPE 42 vþÇ TAPE 41 uþÇ TAPE 40 tþÇ TAPE 39 |þ
aber ich habe weiterhin im Log:
javascript.0
2023-03-20 21:05:34.602 error Error: Error Resource temporarily unavailable Cannot lock port
javascript.0
2023-03-20 21:05:34.602 error Error: Error Resource temporarily unavailable Cannot lock port
javascript.0
2023-03-20 21:05:34.600 error An error happened which is most likely from one of your scripts, but the originating script could not be detected. -
Moin,
keine Ahnung, was da mit dem
javascript - Adapter
falsch läuft. Hast Du denn irgendwelche Skripte am Laufen?VG
Bernd -
@dp20eic said in SerialPort-Adapter:
Hast Du denn irgendwelche Skripte am Laufen?
mir nicht bekannt,, habe erst gerade mit Skripten angefangen
Ich werde es neu installieren, auch mit nodeRED probieren, dann ioBroker neu aufsezten.
-
- neuinstallation javascrtip half nichts
- node red läuft
- aber nur über port nicht im ioBroker GUI
- in node-red scheint ttyUSB0 ist verwendbar
aber ich bin 100% neun node red. Wenn mir jemand sagt, wie ich da Log, Antworten über das interface auslese, kann ich das vollständig testen.
dann wäre es eine Macke im JavaScrip (--> Bug Report)
- aber nur über port nicht im ioBroker GUI
-
Moin,
Du kannst ja mal den Code zeigen, nur ein Bild vom JS-Skript hilft nicht viel
Node Red steht noch auf meiner To-do-Liste, da bin ich dann raus, da müssen andere ran.
VG
Bernd -
@dp20eic said in SerialPort-Adapter:
Du kannst ja mal den Code zeigen, nur ein Bild vom JS-Skript hilft nicht viel
var { SerialPort } = require('serialport') var port = new SerialPort({ path: '/dev/ttyUSB0', baudRate: 19200 // parser: SerialPort.parsers.readline("\n") }); port.write('Hi Mom!'); /* port.on('data', function(data) { console.log(data); }); */
run script:
10:57:32.214 info javascript.0 (671) Stop script script.js.Rotel
10:57:34.749 info javascript.0 (671) Start javascript script.js.Rotel
10:57:34.892 info javascript.0 (671) script.js.Rotel: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
log:
javascript.0
2023-03-21 10:59:42.953 error Error: Error Resource temporarily unavailable Cannot lock port
javascript.0
2023-03-21 10:59:42.948 error Error: Error Resource temporarily unavailable Cannot lock port
javascript.0
2023-03-21 10:59:42.947 error An error happened which is most likely from one of your scripts, but the originating script could not be detected. -
@packelend sagte in SerialPort-Adapter:
var { SerialPort } = require('serialport')
Moin,
falls ich den Eindruck erweckt haben sollte, ich kann Programmieren, da muss, ich passen, ich kann etwas Shell Skripten, dann hört es aber schon auf
Ich denke, Du musst erstmal im
javascript - Adapter
das zusätzlicheserialport
Modul laden und soweit ich das verstehe ist das kein Port, daher auch der Fehler im Log-File.Ich habe mal etwas gegoogelt und bin auf diese Seite gestoßen, ich denke hier findest Du die Antworten um dein Skript zu schreiben.
Ob das, das tut, was Du möchtest, keine Ahnung
VG
Bernd