У мене є п'ять USB-камер, однакова марка, така ж модель (Canyon CNR-FWC120H). Вони використовуються для моніторингу різних сцен 24/7. Мені потрібно якось визначити, яка камера, яка з консолі Linux (Debian) чи програмно (будь-якою мовою).
Я спробував подивитися на вихід lsusb -vvv
, є поле, iSerial
яке повинно бути різним для кожної камери, але, на жаль, цей виробник вирішив не турбуватись, і всі камери мають однаковий серій в цьому місці:200901010001
Чи є інший спосіб, який я міг би визначити, яка камера, яка незалежно від портів USB, до яких вони підключені, тому що, на жаль, в моєму конкретному сценарії я не можу покластися на те, що одна і та ж камера завжди буде підключена до одного порту.
ОНОВЛЕННЯ Після деяких обговорень у коментарях я розумію, що це місія неможлива. Тож забудьте останній абзац, або якщо у вас є якась геніальна ідея, будь ласка, можете запросити його. Мене зараз цікавить, чи зможу я визначити, до якого порту USB підключено пристрій; Я використовую вбудовані USB-порти на материнській платі та додаткові плати USB-контролера PCI для розміщення камер з достатньою пропускною здатністю. Мені потрібно буде однозначно ідентифікувати порт, і номер порту / ідентифікація не повинна змінюватися, якщо, наприклад, машина перезавантажиться і чомусь USB-контролери ініціалізуються в іншому порядку. Це можливо?
ОНОВЛЕННЯ 2 Я бачу в своїх журналах для однієї з камер таку інформацію:
[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
Використовуючи це, я назвав цю команду:
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
І отримав це:
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
Речі , які відрізняються між камерами DEVPATH
, ID_PATH
, ID_PATH_TAG
, PHYS
і (найцікавішим) USEC_INITIALIZED
. Зараз перші чотири елементи, ймовірно, пов'язані з портом USB, але останній USEC_INITIALIZED
схожий на якийсь серійний номер. Я не можу знайти жодної інформації про те, що вона насправді являє. Хтось знає про це щось? Я подумав, що це може бути час у мікросекунді, коли камера ініціалізується, але камера, яка ініціалізована після цієї, є USEC_INITIALIZED=17919751
, а потім та, що знаходиться після цього, USEC_INITIALIZED=25609278
тому здається досить випадковою. Я спробую перезавантажити систему і побачити, але мені потрібно дочекатися зручного часу для цього.
І якщо хтось цікавиться, чому я не просто намагаюся знову підключити камеру і побачити, чи не залишилося це. Відповідь полягає в тому, що я керую цим ПК віддалено, і я досліджую все це, щоб підготувати систему до повноцінного автономності для будь-яких потенційних подій у майбутньому. Що, наприклад, може включати відключення камер від USB-портів.