Seite 1 von 2

USB port, konflikt? Raspberry 4

Verfasst: 18. Aug 2024 14:26
von mad-mike
Moin zusammen.

In meinem Raspi habe ich ein Sonoff Zigbee Stick und ein Lesekopf.

Das hat alles Problemlos funktioniert. Nun wollte ich einen weiteren USB -> 485 Stick verwenden, kann nun aber nicht mehr auch den Lesekopf zugreifen.

Kurz: Der Sonoff stick ist zu finden unter:

Code: Alles auswählen

/dev/ttyACM0
bzw.:

Code: Alles auswählen

/dev/serial/by-id/usb-ITEAD_SONOFF_Zigbee_3.0_USB_Dongle_Plus_V2_20230803081843-if00
funktioniert weiter problemlos


der Lesekopf:

Code: Alles auswählen

/dev/serial/by-id/usb-FTDI_FT230X_Basic_UART_D30IF42P-if00-port0



der USB -> 485 Stick:

Code: Alles auswählen

/dev/serial/by-id/usb-1a86_USB2.0-Ser_-if00-port0
Aktuell: oder:

Code: Alles auswählen

/dev/ttyUSB0

Den USB -> 485 kann ich über mbpoll ansprechen, und liefert auch werte. :!:
Aber sobald ich ihn einstecke ich der Lesekopf nicht mehr erreichbar.

Ich kann nur ein :!: USB gerät ansprechen. Warum der Sonoff Stick funktioniert weiss ich nicht, aber hier ist ja auch der Port ""ttyACM0""


Jemand eine Idee, warum ich nur

Code: Alles auswählen

/dev/ttyUSB0
im openHAB verwenden kann???

USB1 anscheint nicht.

Gruss ;)

Re: USB port, konflikt? Raspberry 4

Verfasst: 18. Aug 2024 14:35
von udo1toni
Du musst passende udev Rules erstellen, in denen Du die Sticks (z.B. über die UID oder über andere "Alleinstellungsmerkmale") fest bestimmten Gerätenamen zuordnest, also z.B. ttyUSB0, ttyUSB1 usw.
Anschließend musst Du in /etc/default/openhab unter EXTRA_JAVA_OPTS diese Schnittstellen "freigeben". Außerdem muss in den udev Rules noch definiert sein, dass die Schnittstelle von der Gruppe tty verwendet werden darf. Der User openhab (in dessen Kontext openHAB ausgeführt wird) sollte Mitglied der Gruppe tty sein.
Nachdem Du /etc/default/openhab angepasst hast (sudo nano /etc/default/openhab) musst Du openHAB neu starten. Wenn das alles korrekt konfiguriert ist, sollte es anschließend egal sein, in welcher Reihenfolge Du die Sticks im laufenden Betrieb an den Pi steckst, ebenso, an welchem Port Du dies tust (womöglich über einen USB Hub - alles egal, die udev Rules sorgen dafür, dass die Sticks immer den selben Gerätenamen bekommen).

Re: USB port, konflikt? Raspberry 4

Verfasst: 18. Aug 2024 15:55
von mad-mike
Danke, hört sich kompliziert an... :|

das habe ich im Wiki gefunden:

Code: Alles auswählen

openHABian comes with a menu option to configure the serial ports automatically. So all the rest here is only relevant for non-openHABian users.

Aber ich verstehe nicht:
ich kann die Geräte doch per

Code: Alles auswählen

/dev/serial/by-id/
unterscheinden und in den Thing jeweils einstellen.

openHAB bietet es mir auch zur Auswahl an. Aber dennoch kann ich nicht mehr wie ein /ttyUSB0 verwenden...

Habe gerade den USB -485 adapter entfernt und nun geht auch wieder der Lesekopf.

Sei es Drum. :!:

die /etc/defaul/openhab datei bietet mir folgendes:

Code: Alles auswählen

# openHAB service options

#########################
## PORTS
## The ports openHAB will bind its HTTP/HTTPS web server to.

OPENHAB_HTTP_PORT=8080
OPENHAB_HTTPS_PORT=8443

#########################
## HTTP(S) LISTEN ADDRESS
##  The listen address used by the HTTP(S) server.
##  0.0.0.0 (default) allows a connection from any location
##  127.0.0.1 only allows the local machine to connect

#OPENHAB_HTTP_ADDRESS=0.0.0.0

#########################
## BACKUP DIRECTORY
## Set the following variable to specify the backup location.
## runtime/bin/backup and runtime/bin/restore will use this path for the zip files.

#OPENHAB_BACKUPS=/var/lib/openhab/backups

#########################
## JAVA OPTIONS
## Additional options for the JAVA_OPTS environment variable.
## These will be appended to the execution of the openHAB Java runtime in front of all other options.
## 
## A couple of independent examples:
##   EXTRA_JAVA_OPTS="-Dgnu.io.rxtx.SerialPorts=/dev/ttyZWAVE:/dev/ttyUSB0:/dev/ttyUSB1:/dev/ttyS0:/dev/ttyS2:/dev/ttyACM0:/dev/ttyAMA0"
##   EXTRA_JAVA_OPTS="-Djna.library.path=/lib/arm-linux-gnueabihf/ -Duser.timezone=Europe/Berlin -Dgnu.io.rxtx.SerialPorts=/dev/ttyZWave"

##   EXTRA_JAVA_OPTS="-Dgnu.io.rxtx.SerialPorts=/dev/ttyUSB1:/dev/ttyUSB0:/dev/ttyACM0"

## EXTRA_JAVA_OPTS="-Xms192m -Xmx768m"


#########################
## OPENHAB DEFAULTS PATHS
## The following settings override the default apt/rpm locations and should be used with caution.
## openHAB will fail to update itself if you're using different paths. 
## Only set these if you are testing and are confident in debugging.
 
#OPENHAB_HOME=/usr/share/openhab
#OPENHAB_CONF=/etc/openhab
#OPENHAB_RUNTIME=/usr/share/openhab/runtime
#OPENHAB_USERDATA=/var/lib/openhab
#OPENHAB_LOGDIR=/var/log/openhab

#########################
## OPENHAB USER AND GROUP
## The user and group that takes ownership of openHAB. Only available for init.d systems.
## To edit user and group for systemd, see the service file at /usr/lib/systemd/system/openhab.service.

#OPENHAB_USER=openhab
#OPENHAB_GROUP=openhab

#########################
## SYSTEMD START MODE
## The Karaf startmode for the openHAB runtime. Only available for systemctl/systemd systems.
## Defaults to daemon when unset here. Multiple options can be used without quotes. 
## debug increases log output. daemon launches the Karaf/openHAB processes. 

#OPENHAB_STARTMODE=debug
ehrlich gesagt, keine Anhnung was ich ich hier machen muss... :oops:


Du musst passende udev Rules erstellen,
Wo muss ich was erstellen, mit welchen inhalt?

Code: Alles auswählen

/etc/udev/rules.d/99-usb-serial.rules
das gibt es nicht bei mir.

Ist es also korrekt:
Datei

Code: Alles auswählen

99-usb-serial.rules
zu erstellen?

nur was gehört da rein?

:?:

Danke schon mal

Re: USB port, konflikt? Raspberry 4

Verfasst: 18. Aug 2024 19:01
von udo1toni
Ich nutze selbst openHABian, allerdings nicht auf einem Pi, sondern in einem LX Container. Insofern kenne ich nicht die Hardware-Seite von openHABian.
mad-mike hat geschrieben: 18. Aug 2024 15:55 ich kann die Geräte doch per /dev/serial/by-id/ unterscheiden und in den Thing jeweils einstellen.
Ist das so? Sind die IDs dann in der UI auswählbar, oder tippst Du die ID ein? Und kannst Du den Stick dann auch erfolgreich ansprechen?
Letztlich sind die Geräte unterhalb /by-id/ lediglich Links auf die "echten" Geräte, also falls der Zugriff über die ID funktioniert, so muss die ID nach Java hereingereicht werden (über die EXTRA_JAVA_OPTS Variable).
Die "best practice" auf "konventionellen" GNU/Linux Systemen ist jedenfalls, udev Rules anzulegen.

Ein guter Artikel dazu: https://wiki.ubuntuusers.de/udev/
Zu Beginn des Artikels wird darauf hingewiesen, dass dieser fehlerhaft sei. Das bezieht sich allerdings auf einen Teilaspekt, der hier unerheblich ist.

Letztlich geht es darum, solche Einträge zu erstellen:

Code: Alles auswählen

KERNEL=="tty", SUBSYSTEMS=="usb", ATTRS{idVendor}=="0204", ATTRS{idProduct}=="0275", SYMLINK+="ttyMODBUS", ACTION=="add", GROUP=="tty"
wobei die VendorID und die ProductID natürlich passen muss. In diesem Fall würde ein Gerät mit dem Namen /dev/ttyMODBUS erzeugt und die Group tty würde gesetzt, und zwar genau dann, wenn ein USB-Stick mit der VendoID 0204 und der ProductID 0275 angeschlossen wird. Es gibt noch diverse andere Eigenschaften, notfalls auch die Seriennummer des Sticks, wobei es ja meist darum geht, funktional unterschiedliche Sticks sicher zuzuordnen, aber bei Bedarf die Hardware gegen ein identisches Exemplar tauschen zu können ohne erneut konfigurieren zu müssen.
Anschließend muss man die EXTRA_JAVA_OPTS ergänzen:

Code: Alles auswählen

EXTRA_JAVA_OPTS="-Dgnu.io.rxtx.SerialPorts=/dev/ttyZWAVE:/dev/ttyMODBUS"
und nach einem Neustart von openHAB müsste es zwei ansprechbare Geräte geben, eben /dev/ttyZWAVE und /dev/ttyMODBUS.
Die Zeile ist natürlich nur beispielhaft :)

Re: USB port, konflikt? Raspberry 4

Verfasst: 18. Aug 2024 21:38
von mad-mike
Ist das so? Sind die IDs dann in der UI auswählbar
Exakt, es steht doppelt in einer Auswahl Liste. Wie gesagt by-id und zusätzlich noch ttyusb.

Das bedeutet ich habe bei 3 angeschlossen USB Sticks 6 Auswahl Punkte,wovon 3 x serial/by-id sind....

Die Zuordnung Stick zu korrekten USB Port ist also eindeutig.

Aber wie gesagt, da der zigbee Stick nicht als USB angezeigt wird sondern als acm0

Funktioniert noch USB0 aber halt usb1 nicht.

Mit dem udev muss ich mich Mal einlesen.

Danke schonmal.

Re: USB port, konflikt? Raspberry 4

Verfasst: 19. Aug 2024 18:05
von peter-pan
...Halbwissen !!!
Könnte es sein, dass der Stromverbrauch der angeschlossenen Geräte zu viel für den RasPi (Netzteil) ist ?
Vielleicht wirst du hier fündig.

Re: USB port, konflikt? Raspberry 4

Verfasst: 19. Aug 2024 18:51
von mad-mike
Danke für deinen Beitrag.
Derzeit steckt:

Sonoff USB und Lesekopf USB in den USB 2.0 Doppel port.

Erweiterung wollte ich:
Den USB - 485 Stick in den USB 3.0 Port.


Eigentlich ist da dann noch ein 3.0 Port frei.

Als Netzteil habe ich ein original Raspberry Netzteil in Verwendung, Leistung weiss ich jedoch nicht.
Ich werde dem auch nachgehen...

Re: USB port, konflikt? Raspberry 4

Verfasst: 19. Aug 2024 19:29
von peter-pan
Hast du einen aktiven USB-Hub mit Netzteil ?
Wenn ja, dann probier mal den aktiven Hub an den PI zu hängen und ein oder zwei USB-Geräte über den Hub anzubinden.

Edit:

Code: Alles auswählen

hab4@raspi58:~ $ lsusb
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 002: ID 1a86:55d4 QinHeng Electronics SONOFF Zigbee 3.0 USB Dongle Plus V2
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 174c:1153 ASMedia Technology Inc. ASM1153 SATA 3Gb/s bridge
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
hab4@raspi58:~ $
Ich hab leider nur eine SSD (USB3) und einen ZIGBEE Dongle (USB2) angeschlossen (Pi5). Sonst momentan kein weiterer Verbraucher.

Re: USB port, konflikt? Raspberry 4

Verfasst: 19. Aug 2024 20:12
von mad-mike
Das Netzteil steht 3Amp.
Ein externen USB Hub besitze ich leider nicht...


Ich habe im laufenden Betrieb noch mal eingesteckt.
Mbpoll gestartet über die Konsole und der 485 Stick wird direkt angesprochen...
Bekomme auch werte.

openHAB hat Parallel auch immer noch den Lesekopf online und bekommt werte rein, und Zigbee geht auch... :!:

Code: Alles auswählen

lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 1a86:55d4 QinHeng Electronics SONOFF Zigbee 3.0 USB Dongle Plus V2
Bus 001 Device 003: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)
Bus 001 Device 005: ID 1a86:7523 QinHeng Electronics CH340 serial converter
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

und /dev/serial/by-id/

gibt folgendes aus:

Code: Alles auswählen

usb-1a86_USB2.0-Ser_-if00-port0
usb-FTDI_FT230X_Basic_UART_D30IF42P-if00-port0
usb-ITEAD_SONOFF_Zigbee_3.0_USB_Dongle_Plus_V2_20230803081843-if00
Bild1.png

Ich verstehe es einfach nicht, das man dies nicht auf einfachen Wege Parallel hinbekommt...

Ich werde mich noch mal mit der UDEV auseinander setzen müssen...

Danke nochmals...

Re: USB port, konflikt? Raspberry 4

Verfasst: 20. Aug 2024 19:31
von mad-mike
Habe mal geschaut wegen der Udev.
Ein User hat hier im Forum eine Anleitung geschrieben:

viewtopic.php?p=18315#p18315

aber:

Was muss ich denn wohl bei "Serial" eingeben, wenn der Stick keine hat?? :?:

Code: Alles auswählen

sudo lsusb -v | grep 'idVendor\|idProduct\|iProduct\|iSerial'
[sudo] password for openhabian: 
can't get debug descriptor: Resource temporarily unavailable
  idVendor           0x1d6b Linux Foundation
  idProduct          0x0003 3.0 root hub
  iProduct                2 xHCI Host Controller
  iSerial                 1 0000:01:00.0
  idVendor           0x1a86 QinHeng Electronics
  idProduct          0x55d4 
  iProduct                2 SONOFF Zigbee 3.0 USB Dongle Plus V2
  iSerial                 3 20230803081843
can't get debug descriptor: Resource temporarily unavailable
can't get device qualifier: Resource temporarily unavailable
can't get debug descriptor: Resource temporarily unavailable
  idVendor           0x0403 Future Technology Devices International, Ltd
  idProduct          0x6015 Bridge(I2C/SPI/UART/FIFO)
  iProduct                2 FT230X Basic UART
  iSerial                 3 D30IF42P
can't get debug descriptor: Resource temporarily unavailable
  idVendor           0x1a86 QinHeng Electronics
  idProduct          0x7523 CH340 serial converter
  iProduct                2 USB2.0-Ser!
  iSerial                 0 
  idVendor           0x2109 VIA Labs, Inc.
  idProduct          0x3431 Hub
  iProduct                1 USB2.0 Hub
  iSerial                 0 
can't get debug descriptor: Resource temporarily unavailable
can't get device qualifier: Resource temporarily unavailable
can't get debug descriptor: Resource temporarily unavailable
  idVendor           0x1d6b Linux Foundation
  idProduct          0x0002 2.0 root hub
  iProduct                2 xHCI Host Controller
  iSerial                 1 0000:01:00.0
Wenn ich das richtig sehe, ist das folgende spalte:

Code: Alles auswählen

  idVendor           0x1a86 QinHeng Electronics
  idProduct          0x7523 CH340 serial converter
  iProduct                2 USB2.0-Ser!
  iSerial                 0