Signatur
Beschreibung
Die Methode getInfo() der Schnittstelle SerialPort gibt ein einfaches Objekt mit Informationen zurück, über die sich das angeschlossene Gerät erkennen lässt. Bei USB-Geräten sind das die Hersteller-ID (usbVendorId) und die Produkt-ID (usbProductId). Bei seriellen Bluetooth-Ports (RFCOMM) gibt es zusätzlich bluetoothServiceClassId.
Gebraucht wird die Methode vor allem, um bekannte Geräte wiederzufinden: navigator.serial.getPorts() liefert alle Ports, für die die Seite schon eine Berechtigung hat. Mit getInfo() sucht man daraus z. B. einen bestimmten Arduino- oder USB-Seriell-Adapter heraus. Die Anwendung kann sich dann automatisch verbinden, ohne dass der Nutzer erneut einen Port auswählen muss.
Der Aufruf ist synchron und setzt nicht voraus, dass der Port geöffnet ist. Bei Geräten, die nicht über USB angeschlossen sind (z. B. eingebaute serielle Schnittstellen), kann das Objekt leer sein. Seriennummern oder Klartext-Namen des Geräts gibt die Methode aus Datenschutzgründen nicht heraus.
Rückgabewert
Ein Objekt mit den optionalen Eigenschaften:
usbVendorId– 16-Bit-Hersteller-ID des USB-Geräts, falls es ein USB-Gerät ist.usbProductId– 16-Bit-Produkt-ID des USB-Geräts, falls es ein USB-Gerät ist.bluetoothServiceClassId– UUID bzw. Kurz-ID der Bluetooth-Dienstklasse, falls es ein Bluetooth-RFCOMM-Port ist.
Eigenschaften, die nicht zutreffen, fehlen einfach (undefined).
Beispiele
Port auswählen und Geräte-IDs anzeigen
const button = document.querySelector('#connect');
button.addEventListener('click', async () => {
// requestPort() muss durch eine Nutzeraktion ausgelöst werden
const port = await navigator.serial.requestPort();
const { usbVendorId, usbProductId } = port.getInfo();
const hex = (n) => n?.toString(16).padStart(4, '0') ?? '—';
console.log(`Vendor: 0x${hex(usbVendorId)}, Product: 0x${hex(usbProductId)}`);
});
Bekanntes Gerät automatisch wiederfinden
// Arduino Uno: Vendor 0x2341, Product 0x0043
const TARGET = { usbVendorId: 0x2341, usbProductId: 0x0043 };
const findKnownPort = async () => {
const ports = await navigator.serial.getPorts();
return ports.find((port) => {
const info = port.getInfo();
return info.usbVendorId === TARGET.usbVendorId &&
info.usbProductId === TARGET.usbProductId;
});
};
const port = await findKnownPort();
if (port) {
await port.open({ baudRate: 9600 });
console.log('Automatisch verbunden');
} else {
console.log('Kein bekanntes Gerät – bitte Port auswählen');
}
Auf neu angeschlossene Geräte reagieren
navigator.serial.addEventListener('connect', (event) => {
const port = event.target;
const info = port.getInfo();
console.log('Gerät angeschlossen:', info);
});
navigator.serial.addEventListener('disconnect', (event) => {
console.log('Gerät getrennt:', event.target.getInfo());
});
// Wichtig · Fallstricke
- Browser-Kompatibilität: Die Web Serial API gibt es nur in Chromium-Browsern auf dem Desktop (Chrome, Edge, Opera, ab Version 89). Firefox und Safari unterstützen sie nicht. Vor der Nutzung sollte man prüfen:
'serial' in navigator. - Die API funktioniert nur in einem sicheren Kontext (HTTPS oder
localhost). Eine Permissions-Policy (serial) kann sie z. B. in iframes sperren. - Die IDs sind Zahlen, keine Hex-Strings. Vergleichen Sie also mit
0x2341, nicht mit'2341'. - Das zurückgegebene Objekt kann leer sein, etwa bei eingebauten Schnittstellen oder bei Bluetooth-Ports. Fragen Sie deshalb jede Eigenschaft mit optionaler Verkettung bzw. einer Prüfung auf
undefinedab. - Mehrere baugleiche Geräte haben dieselben IDs und lassen sich über
getInfo()nicht unterscheiden. Eine Seriennummer wird nicht herausgegeben. bluetoothServiceClassIdgibt es erst in neueren Chromium-Versionen (ab etwa 117).