Signatur
Beschreibung
Die Eigenschaft productId eines USBDevice-Objekts gibt die Product ID (PID) zurück. Das ist eine 16-Bit-Zahl aus dem Gerätedeskriptor (idProduct), mit der ein Hersteller seine Produkte unterscheidet. Zusammen mit vendorId (VID), die das USB Implementers Forum vergibt, bestimmt sie das Gerätemodell eindeutig.
Typische Einsätze sind Filter in navigator.usb.requestDevice(), damit der Auswahldialog nur passende Geräte anzeigt, außerdem das Wiedererkennen bereits freigegebener Geräte über navigator.usb.getDevices() und das Auswählen des passenden Treiber- oder Protokollcodes in der eigenen Anwendung.
Der Wert ist eine gewöhnliche Zahl (number) von 0 bis 0xFFFF. In Datenblättern und in Werkzeugen wie lsusb steht die PID meist hexadezimal, zum Beispiel 0x2341:0x0043. Zum Anzeigen formatiert man sie deshalb am besten mit toString(16) und padStart(4, "0").
Rückgabewert
0–65535) mit der Produktkennung aus dem Gerätedeskriptor.Beispiele
Gerät mit VID/PID-Filter anfordern
// Muss durch eine Nutzeraktion ausgelöst werden (z. B. Klick)
document.querySelector('#connect').addEventListener('click', async () => {
try {
const device = await navigator.usb.requestDevice({
filters: [{ vendorId: 0x2341, productId: 0x0043 }] // Arduino Uno
});
console.log(`Verbunden: ${device.productName} (PID ${device.productId})`);
} catch (err) {
console.warn('Kein Gerät ausgewählt:', err.message);
}
});
PID hexadezimal formatieren
const toHex = (n) => '0x' + n.toString(16).padStart(4, '0');
const devices = await navigator.usb.getDevices();
for (const d of devices) {
console.log(`${toHex(d.vendorId)}:${toHex(d.productId)} – ${d.productName ?? 'unbekannt'}`);
}
Unterstütztes Modell am Verbindungsereignis erkennen
const SUPPORTED = new Map([
['2341:0043', 'Arduino Uno'],
['2341:8036', 'Arduino Leonardo']
]);
navigator.usb.addEventListener('connect', ({ device }) => {
const key = `${device.vendorId.toString(16).padStart(4, '0')}:${device.productId.toString(16).padStart(4, '0')}`;
const model = SUPPORTED.get(key);
console.log(model ? `Bekanntes Gerät: ${model}` : `Nicht unterstützt: ${key}`);
});
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung wie
device.productId = 1wird ignoriert und löst im Strict Mode einenTypeErroraus. - Nur zusammen mit
vendorIdeindeutig: Zwei verschiedene Hersteller können dieselbe PID verwenden. Man sollte also nie nur nachproductIdfiltern. Ein Filter mitproductIdohnevendorIdist laut Spezifikation sogar ungültig und führt zu einemTypeError. - Keine Seriennummer: Mehrere Geräte desselben Modells haben dieselbe PID. Um einzelne Exemplare zu unterscheiden, nutzt man
serialNumber. - PID kann sich ändern: Manche Geräte melden sich im Bootloader- oder DFU-Modus mit einer anderen PID an. Das muss man beim Filtern berücksichtigen.
- Kompatibilität: WebUSB gibt es nur in Chromium-Browsern (Chrome, Edge, Opera) und nur in sicheren Kontexten (HTTPS). Firefox und Safari unterstützen die API nicht. Man sollte vorher mit
'usb' in navigatorprüfen. Die Nutzung kann außerdem per Permissions-Policy (usb) gesperrt sein. - Geräteklassen, die das Betriebssystem schützt (zum Beispiel HID-Tastaturen), stehen über WebUSB nicht zur Verfügung, auch wenn VID und PID stimmen.