Eu tenho cinco câmeras USB, da mesma marca, do mesmo modelo (Canyon CNR-FWC120H). Eles são usados para monitorar cenas diferentes 24/7. Eu preciso de alguma forma identificar qual câmera é qual do console Linux (Debian) ou programaticamente (qualquer idioma).
Eu tentei olhar para a saída de lsusb -vvv
, existe um campo iSerial
que deve ser diferente para cada câmera, mas infelizmente este fabricante decidiu não se incomodar e todas as câmeras têm a mesma série naquele local:200901010001
Existe alguma outra maneira de identificar qual câmera é qual, independentemente das portas USB às quais elas estão conectadas, porque, infelizmente, no meu cenário específico, não posso confiar no fato de que a mesma câmera sempre estará conectada à mesma porta.
ATUALIZAÇÃO Após algumas discussões nos comentários, percebo que essa é uma missão impossível. Portanto, esqueça o último parágrafo ou, se você tem alguma idéia engenhosa, por favor, seja bem-vindo a apresentá-lo. Agora, estou interessado em identificar a qual porta USB o dispositivo está conectado; Eu uso as portas USB integradas na placa-mãe e placas controladoras PCI USB adicionais para acomodar as câmeras com largura de banda suficiente. Eu precisaria identificar exclusivamente a porta, e o número / identificação da porta não deve mudar se, por exemplo, a máquina reiniciar e, por algum motivo, os controladores USB forem inicializados em ordem diferente. Isso é possível?
ATUALIZAÇÃO 2 Vejo nos meus registros de uma das câmeras as seguintes informações:
[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 isso, chamei este 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 entendi:
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
As coisas que diferem entre as câmeras são DEVPATH
, ID_PATH
, ID_PATH_TAG
, PHYS
e (mais interessante) USEC_INITIALIZED
. Agora, os quatro primeiros elementos provavelmente estão relacionados à porta USB, mas o último USEC_INITIALIZED
parece algum tipo de número de série. Não consigo encontrar nenhuma informação sobre o que realmente representa. Alguém sabe alguma coisa sobre isso? Eu pensei que talvez seja o tempo em microssegundos em que a câmera foi inicializada, mas a câmera que foi inicializada após esta USEC_INITIALIZED=17919751
, e depois a seguinte, USEC_INITIALIZED=25609278
para que pareça bastante aleatória. Vou tentar reiniciar o sistema e ver, mas preciso aguardar um momento conveniente para fazer isso.
E se alguém está se perguntando por que eu não apenas tento reconectar uma câmera e ver se isso permanece o mesmo. A resposta é que eu estou operando este PC remotamente e estou investigando tudo isso para preparar o sistema para ser totalmente autônomo para qualquer evento potencial no futuro. Que, por exemplo, pode incluir desconectar as câmeras das portas USB.