Start · Sprachen · JavaScript · Referenz · SerialPort.getInfo()

SerialPort.getInfo()

Methode

Gibt synchron ein Objekt mit Kennungen des Geräts am seriellen Port zurück, z. B. <code>usbVendorId</code> und <code>usbProductId</code>.

seit JavaScript Chrome/Edge 89+ (Web Serial API, experimentell, nu Kategorie: webapi

Signatur

SerialPort.prototype.getInfo()

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

Typ
{ usbVendorId?: number, usbProductId?: number, bluetoothServiceClassId?: number | string }
Beschreibung

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)}`);
});
Vendor: 0x2341, Product: 0x0043

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');
}
Automatisch verbunden

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());
});
Gerät angeschlossen: { usbVendorId: 6790, usbProductId: 29987 }

// 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 undefined ab.
  • Mehrere baugleiche Geräte haben dieselben IDs und lassen sich über getInfo() nicht unterscheiden. Eine Seriennummer wird nicht herausgegeben.
  • bluetoothServiceClassId gibt es erst in neueren Chromium-Versionen (ab etwa 117).