Signatur
Beschreibung
Die Eigenschaft id eines BluetoothDevice-Objekts enthält eine undurchsichtige Kennung (meist eine Base64-artige Zeichenkette), die der Browser dem Gerät zuweist. Mit ihr lassen sich Geräte in der eigenen Anwendung auseinanderhalten, etwa um mehrere verbundene Sensoren in einer Map zu verwalten oder ein zuvor gewähltes Gerät wiederzuerkennen.
Wichtig: Die id ist nicht die echte Bluetooth-Hardwareadresse (MAC-Adresse). Aus Datenschutzgründen erzeugt der Browser für jeden Ursprung (Origin) eine eigene Kennung. Dasselbe physische Gerät hat auf https://a.example also eine andere id als auf https://b.example. Dadurch lässt sich ein Nutzer nicht über Websites hinweg anhand seiner Geräte verfolgen.
Innerhalb desselben Ursprungs bleibt die Kennung so lange stabil, wie die Berechtigung für das Gerät besteht. In Kombination mit navigator.bluetooth.getDevices() (sofern unterstützt) kann man so ein bereits freigegebenes Gerät nach einem Neuladen der Seite wiederfinden, ohne den Auswahldialog erneut anzuzeigen.
Rückgabewert
Beispiele
Gerät auswählen und Kennung ausgeben
// Muss durch eine Nutzeraktion (z. B. Klick) ausgelöst werden
const button = document.querySelector('#connect');
button.addEventListener('click', async () => {
try {
const device = await navigator.bluetooth.requestDevice({
filters: [{ services: ['heart_rate'] }]
});
console.log(`Name: ${device.name}`);
console.log(`ID: ${device.id}`);
} catch (err) {
console.error('Auswahl abgebrochen oder fehlgeschlagen:', err);
}
});
Mehrere Geräte anhand der id verwalten
const devices = new Map();
const addDevice = async () => {
const device = await navigator.bluetooth.requestDevice({
acceptAllDevices: true,
optionalServices: ['battery_service']
});
if (devices.has(device.id)) {
console.log('Gerät ist bereits registriert:', device.name);
return;
}
devices.set(device.id, device);
device.addEventListener('gattserverdisconnected', () => {
console.log(`Verbindung zu ${device.id} getrennt`);
});
console.log(`Registrierte Geräte: ${devices.size}`);
};
document.querySelector('#add').addEventListener('click', addDevice);
Zuvor freigegebenes Gerät nach Neuladen wiederfinden
const STORAGE_KEY = 'lastBluetoothDeviceId';
const findKnownDevice = async () => {
const savedId = localStorage.getItem(STORAGE_KEY);
if (!savedId || !navigator.bluetooth.getDevices) return null;
const permitted = await navigator.bluetooth.getDevices();
return permitted.find((d) => d.id === savedId) ?? null;
};
const rememberDevice = (device) => {
localStorage.setItem(STORAGE_KEY, device.id);
};
const known = await findKnownDevice();
console.log(known ? `Bekannt: ${known.name}` : 'Kein bekanntes Gerät');
// Wichtig · Fallstricke
- Keine MAC-Adresse: Die
idist eine vom Browser erzeugte, pro Ursprung unterschiedliche Kennung. Sie eignet sich nicht, um Geräte über verschiedene Websites oder Browser hinweg abzugleichen. - Stabilität: Widerruft der Nutzer die Berechtigung oder löscht er Websitedaten, kann das Gerät beim nächsten Mal eine neue
iderhalten. Gespeicherte Kennungen sollten daher immer mit einer Rückfallstrategie (erneuter Auswahldialog) genutzt werden. - Inhalt nicht interpretieren: Das Format ist nicht spezifiziert. Die Zeichenkette nur auf Gleichheit vergleichen, nicht zerlegen.
- Kompatibilität: Die Web Bluetooth API ist experimentell und nur in Chromium-Browsern (Chrome, Edge, Opera) verfügbar – nicht in Firefox und Safari. Sie erfordert einen sicheren Kontext (HTTPS) und eine Nutzeraktion für
requestDevice().getDevices()ist teils nur hinter einem Flag aktiv. - Die Eigenschaft ist schreibgeschützt; eine Zuweisung hat keine Wirkung (im Strict Mode wird ein
TypeErrorgeworfen).