Autorun po priklopu USB naprave
Matthai
Član
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:
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...?
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
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
udevadm test /dev/bus/001/008 mi pa javi:
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)
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.