Symlink zur eindeutigen Erkennung von mehreren Arduinos mittels udev-Regel

Begonnen von JoWiemann, 07 November 2014, 17:31:21

Vorheriges Thema - Nächstes Thema

JoWiemann

Hallo,

da ich mittlerweile mehrere Arduinos am RPi habe wurde das Neustarten des RPi immer wieder zu einem Glücksspiel, was die Zuordnung zu ttyUSBx betraf. Nach einigem suchen bin ich auf folgende Seite gestoßen: http://wiki.siduction.de/index.php?title=Symlink_zur_eindeutigen_Erkennung_mittels_udev-Regel.
Um nun die entsprechenden Einträge machen zu können habe ich mit folgendem Befehl mir die Daten meiner zugeordneten Arduinos anzeigen lassen (Geht auch unter Win mittel der FTDI-Tools, funktioniert allerdings nicht mit NichtArduinos)

udevadm info -a -p /sys/bus/usb-serial/devices/ttyUSB2/

Im oberen Teil der Ausgabe finden sich dann die benötigten Daten:

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3.2/1-1.3.2:1.0/ttyUSB2':
    KERNEL=="ttyUSB2"
    SUBSYSTEM=="usb-serial"
    DRIVER=="cp210x"
    ATTR{port_number}=="0"

  looking at parent device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3.2/1-1.3.2:1.0':
    KERNELS=="1-1.3.2:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="cp210x"
    ATTRS{bInterfaceClass}=="ff"
    ATTRS{bInterfaceSubClass}=="00"
    ATTRS{bInterfaceProtocol}=="00"
    ATTRS{bNumEndpoints}=="02"
    ATTRS{supports_autosuspend}=="1"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{interface}=="OWL Wireless Electricity Monitor USB version is connected"

  looking at parent device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3.2':
    KERNELS=="1-1.3.2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{devpath}=="1.3.2"
    ATTRS{idVendor}=="0fde"
    ATTRS{speed}=="12"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="7"
    ATTRS{configuration}==""
    ATTRS{bMaxPower}=="100mA"
    ATTRS{authorized}=="1"
    ATTRS{bmAttributes}=="80"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{maxchild}=="0"
    ATTRS{bcdDevice}=="0100"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{serial}=="0078BEA2"
    ATTRS{version}==" 2.00"
    ATTRS{urbnum}=="39309"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="Silicon Labs"
    ATTRS{removable}=="unknown"
    ATTRS{idProduct}=="ca05"
    ATTRS{bDeviceClass}=="00"
    ATTRS{product}=="OWL Wireless Electricity Monitor USB version is connected"

Das Neustarten des UDEV Dienstes reicht leider nicht aus. Erst nach einem Reboot des RPi werden die Symlinks angelegt. Danach kann man in der FHEM.cfg die Devices entsprechend zuordnen:

#--------------------------------------------------------------------------
define FHEMduino_USB FHEMduino /dev/ttyUSB_FHEMduino@9600

#--------------------------------------------------------------------------
define myEC3000 JeeLink /dev/ttyUSB_EC3000@57600

#--------------------------------------------------------------------------
define CM160 CM160 /dev/ttyUSB_CM160

#--------------------------------------------------------------------------
define myJeePCA JeeLink /dev/ttyUSB_JeeLink@57600
attr myJeePCA flashCommand avrdude -p atmega328P -c arduino -P [PORT] -D -U flash:w:[HEXFILE] 2>[LOGFILE]



Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

digital.arts

Hallo Jörg,

da gibt es für die Arduinos auch die Möglichkeit, mit
ls -l /dev/serial/by-id
die ID des Arduino auszulesen.

root@raspberrypi:~# ls -l /dev/serial/by-id
insgesamt 0
lrwxrwxrwx 1 root root 13 Jan  1  1970 usb-busware.de_CUL868-if00 -> ../../ttyACM0
lrwxrwxrwx 1 root root 13 Nov  7 00:00 usb-FTDI_FT232R_USB_UART_A603UT3B-if00-port0 -> ../../ttyUSB0


Und damit in der fhem.cfg das device zu definieren, z.B. einen FHEMduino:
define FHEMduino_USB FHEMduino /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A603UT3B-if00-port0@9600

Somit wird das Device immer erkannt, egal in welchem USB-Port es dann gesteckt wird...

VG
Karl
FHEM auf RPi; CUL868 für FHT; NanoCUL433 für IT und Revolt; Fhemduino für IT und Temp/Hum; RFXTRX433e für IT/FA20RF/Funkgong/HomeEasy; NanoFirmataEth für 1wire Temp

JoWiemann

Hallo Karl,

danke für Deine Lösung. Linux hat wohl viele "Wege nach Rom". Leider verstecken sich einige hartnäckig vor mir.  ;D

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM