Autorun po priklopu USB naprave

Imam dva Arduinota, ki ju na RaspberryPi povezujem preko USB kabla. Rad bi, da bi takoj, ko Arduino povežem preko USB, Raspberry to zaznal in mi nekam zabeležil, da je naprava povezana, oziroma, da požene neko Python skripto. Ko pa kabel potegnem ven, pa da spet to zazna in zabeleži, da naprava ni več prisotna ter skripto ugasne.

lsusb pravi:

Bus 001 Device 005: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
Bus 001 Device 004: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Podoben izpis vidim če poženem udevadm info --name=/dev/ttyUSB0...

Torej, kako napisat pravilo, ki mi bo ko bom v USB vtaknil prvi kabel zagnalo npr.:
"python /home/pi/arduino-podatki.py 0"

Ko pa bom vtaknil drugega (se pravi bo naprava /dev/ttyUSB1), pa:
"python /home/pi/arduino-podatki.py 1"

Načeloma bi tudi rad, da mi v neko datoteko izpiše kateri Arduinoti so povezani v USB porte, nekaj v stilu:
Trenutno prisotne naprave:
/dev/ttyUSB1

Ali pa:
Trenutno prisotne naprave:
/dev/ttyUSB0
/dev/ttyUSB1

(v prvem primeru sem imel priključena 2 Arduinota, nato sem prvega odklopil - ostal je samo tisti povezan na ttyUSB1. Nato sem priklopil drugega in zasedel je prvo prosto mesto: ttyUSB0)

Če bi se pa dalo ločiti različne Arduinote, bi bilo pa sploh super, ampak verjetno ne, ker imajo v lsusb izpisu vsi isti ID...?

Komentarji

  • Torej, v /etc/udev/rules.d sem dal 90-bluesensor.rules z naslednjo vsebino:

    KERNEL=="ttyUSB?", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", ATTRS{serial}=="1a86_USB2.0-Serial", SYMLINK+="BlueSensor0", RUN+="python /home/pi/sensordata/bluesensor-server.py 0"

    Ampak se ne zgodi nič... any idea?

    Še tole:

    udevadm info -n /dev/ttyUSB0

    P: /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB0/tty/ttyUSB0
    N: ttyUSB0
    S: serial/by-id/usb-1a86_USB2.0-Serial-if00-port0
    S: serial/by-path/platform-3f980000.usb-usb-0:1.2:1.0-port0
    E: DEVLINKS=/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0 /dev/serial/by-path/platform-3f980000.usb-usb-0:1.2:1.0-port0
    E: DEVNAME=/dev/ttyUSB0
    E: DEVPATH=/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB0/tty/ttyUSB0
    E: ID_BUS=usb
    E: ID_MODEL=USB2.0-Serial
    E: ID_MODEL_ENC=USB2.0-Serial
    E: ID_MODEL_FROM_DATABASE=HL-340 USB-Serial adapter
    E: ID_MODEL_ID=7523
    E: ID_PATH=platform-3f980000.usb-usb-0:1.2:1.0
    E: ID_PATH_TAG=platform-3f980000_usb-usb-0_1_2_1_0
    E: ID_REVISION=0254
    E: ID_SERIAL=1a86_USB2.0-SerialE: ID_TYPE=generic
    E: ID_USB_CLASS_FROM_DATABASE=Vendor Specific Class
    E: ID_USB_DRIVER=ch341
    E: ID_USB_INTERFACES=:ff0102:
    E: ID_USB_INTERFACE_NUM=00
    E: ID_VENDOR=1a86
    E: ID_VENDOR_ENC=1a86
    E: ID_VENDOR_FROM_DATABASE=QinHeng Electronics
    E: ID_VENDOR_ID=1a86
    E: MAJOR=188
    E: MINOR=0
    E: SUBSYSTEM=tty
    E: TAGS=:systemd:
    E: USEC_INITIALIZED=92618523


  • Aja, še tole, naredil sem:
    udevadm control --reload-rules
    udevadm test /dev/bus/001/008 mi pa javi:
    ...
    unable to open device '/sys/dev/bus/001/008'



  • udevadm monitor

    pravi tole:

    monitor will print the received events for:
    UDEV - the event which udev sends out after rule processing
    KERNEL - the kernel uevent

    KERNEL[4391.724038] add      /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2 (usb)
    KERNEL[4391.725298] add      /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0 (usb)
    KERNEL[4391.726029] add      /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB0 (usb-serial)
    KERNEL[4391.730896] add      /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB0/tty/ttyUSB0 (tty)
    UDEV  [4391.744234] add      /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2 (usb)
    UDEV  [4392.772422] add      /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0 (usb)
    UDEV  [4392.775924] add      /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB0 (usb-serial)
    UDEV  [4392.794287] add      /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB0/tty/ttyUSB0 (tty)


  • Matthai Član
    uredil/-a 25. June, 2017
    ...
  • Huh, rešil.

    V /etc/udev/rules.d/90-bluesensor.rules sem dal tole:

    KERNEL=="ttyUSB0", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="BlueSensor0"
    KERNEL=="ttyUSB1", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="BlueSensor1"

    Zdaj mi naredi ustrezne symlinke /dev/BlueSenzor0, 1,... ko vklapljam in izklapljam naprave.

    Recimo dam notri napravo 1 in naredi /dev/BlueSenzor0. Nato napravo 2 in naredi /dev/BlueSenzor1. Nato napravo 1 dam ven, ostane samo /dev/BlueSenzor1. Nato še to napravo ven, izginejo vsi, nato to isto napravo nazaj notri in spet dobim /dev/BlueSenzor0.

    Supervisor mi pa poganja proces za branje iz te naprave. Aplikacija bere explicitno samo /dev/BlueSensorX, se pravi ne more brati "napačne" naprave. Če naprave ni, proces exitne, ampak ga Supervisor restarta. To se potem ponavlja v nedogled, dokler ustrezna naprava ni priključena.
Za komentiranje se prijavite ali pa se vpišite.