Ho cinque fotocamere USB, stessa marca, stesso modello (Canyon CNR-FWC120H). Sono utilizzati per monitorare diverse scene 24/7. Devo in qualche modo identificare quale telecamera è quale dalla console Linux (Debian) o programmaticamente (qualsiasi lingua).
Ho provato a guardare l'output di lsusb -vvv
, c'è un campo iSerial
che dovrebbe essere diverso per ogni telecamera ma sfortunatamente questo produttore ha deciso di non disturbare e tutte le telecamere hanno lo stesso seriale in quel posto:200901010001
Esiste un altro modo per identificare quale fotocamera è quale indipendentemente dalle porte USB a cui sono collegate perché purtroppo nel mio scenario specifico non posso fare affidamento sul fatto che la stessa fotocamera sarà sempre collegata alla stessa porta.
AGGIORNAMENTO Dopo alcune discussioni nei commenti mi rendo conto che questa missione è impossibile. Quindi dimentica l'ultimo paragrafo o se hai qualche idea geniale, per favore, sei il benvenuto a presentarlo. Ora sono interessato se potessi identificare a quale porta USB è collegato il dispositivo; Uso le porte USB integrate sulla scheda madre e le schede controller PCI USB aggiuntive per ospitare le telecamere con una larghezza di banda sufficiente. Dovrei identificare in modo univoco la porta e il numero / identificazione della porta non dovrebbe cambiare se, ad esempio, la macchina si riavvia e per qualche motivo i controller USB vengono inizializzati in ordine diverso. È possibile?
AGGIORNAMENTO 2 Vedo nei miei registri per una delle telecamere le seguenti informazioni:
[Wed Apr 30 18:35:02 2014] uvcvideo: Found UVC 1.00 device FULL HD 1080P Webcam (0bda:58b0)
[Wed Apr 30 18:35:02 2014] input: FULL HD 1080P Webcam as /devices/pci0000:00/0000:00:01.0/0000:01:00.0/usb3/3-2/3-2:1.0/input/input4
Usando quello, ho chiamato questo comando:
udevadm info --query=all --path=/devices/pci0000:00/0000:00:01.0/0000:01:00.0/usb3/3-2/3-2:1.0/input/input4
E ottenuto questo:
P: /devices/pci0000:00/0000:00:01.0/0000:01:00.0/usb3/3-2/3-2:1.0/input/input4
E: DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:01:00.0/usb3/3-2/3-2:1.0/input/input4
E: EV=3
E: ID_BUS=usb
E: ID_INPUT=1
E: ID_INPUT_KEY=1
E: ID_MODEL=FULL_HD_1080P_Webcam
E: ID_MODEL_ENC=FULL\x20HD\x201080P\x20Webcam
E: ID_MODEL_ID=58b0
E: ID_PATH=pci-0000:01:00.0-usb-0:2:1.0
E: ID_PATH_TAG=pci-0000_01_00_0-usb-0_2_1_0
E: ID_REVISION=5801
E: ID_SERIAL=Generic_FULL_HD_1080P_Webcam_200901010001
E: ID_SERIAL_SHORT=200901010001
E: ID_TYPE=video
E: ID_USB_DRIVER=uvcvideo
E: ID_USB_INTERFACES=:0e0100:0e0200:010100:010200:
E: ID_USB_INTERFACE_NUM=00
E: ID_VENDOR=Generic
E: ID_VENDOR_ENC=Generic
E: ID_VENDOR_ID=0bda
E: KEY=100000 0 0 0
E: MODALIAS=input:b0003v0BDAp58B0e5801-e0,1,kD4,ramlsfw
E: NAME="FULL HD 1080P Webcam"
E: PHYS="usb-0000:01:00.0-2/button"
E: PRODUCT=3/bda/58b0/5801
E: PROP=0
E: SUBSYSTEM=input
E: UDEV_LOG=3
E: USEC_INITIALIZED=41090223
Le cose che differiscono tra le telecamere sono DEVPATH
, ID_PATH
, ID_PATH_TAG
, PHYS
e (più interessante) USEC_INITIALIZED
. Ora i primi quattro elementi sono probabilmente correlati alla porta USB, ma l'ultimo USEC_INITIALIZED
sembra una sorta di numero seriale. Non riesco a trovare informazioni su ciò che rappresenta effettivamente. Qualcuno ne sa qualcosa a riguardo? Ho pensato che fosse forse il tempo in micro secondi quando la fotocamera è stata inizializzata, ma la fotocamera che si è inizializzata dopo questa ha USEC_INITIALIZED=17919751
, e poi quella successiva, USEC_INITIALIZED=25609278
quindi sembra piuttosto casuale. Proverò a riavviare il sistema e vedere, ma devo aspettare un momento opportuno per farlo.
E se qualcuno si sta chiedendo perché non provo semplicemente a ricollegare una videocamera e vedere se rimane lo stesso. La risposta è che sto usando questo PC da remoto, e sto indagando su tutto questo per preparare il sistema ad essere completamente autonomo per qualsiasi potenziale evento in futuro. Che per esempio potrebbe includere la disconnessione delle telecamere dalle porte USB.