Signatur
Beschreibung
Die Eigenschaft device eines BluetoothRemoteGATTServer verweist zurück auf das BluetoothDevice, zu dem der Server gehört. Sie ist die Umkehrung von BluetoothDevice.gatt: Es gilt immer device.gatt.device === device.
Nützlich ist die Eigenschaft vor allem dann, wenn in einer Funktion nur das Server-Objekt vorliegt, etwa der Rückgabewert von gatt.connect(). Darüber kommt man an Name, ID und Ereignisse des Geräts, zum Beispiel gattserverdisconnected, ohne das Gerät als eigenen Parameter mitgeben zu müssen.
Der Wert bleibt während der ganzen Lebensdauer des Server-Objekts gleich, auch wenn die Verbindung getrennt ist. Ob gerade eine Verbindung besteht, erfährt man nicht über device, sondern über BluetoothRemoteGATTServer.connected.
Rückgabewert
BluetoothDevice-Objekt, zu dem dieser GATT-Server gehört. Der Wert ist schreibgeschützt.Beispiele
Nach dem Verbinden auf das Gerät zugreifen
const verbinden = async () => {
const device = await navigator.bluetooth.requestDevice({
filters: [{ services: ['heart_rate'] }]
});
const server = await device.gatt.connect();
// Rückverweis vom Server auf das Gerät
console.log(server.device.name);
console.log(server.device === device);
};
document.querySelector('#verbinden').addEventListener('click', verbinden);
Trennung überwachen, wenn nur der Server vorliegt
const ueberwacheVerbindung = (server) => {
const { device } = server;
device.addEventListener('gattserverdisconnected', () => {
console.log(`Verbindung zu ${device.name ?? device.id} getrennt`);
});
};
document.querySelector('#start').addEventListener('click', async () => {
const device = await navigator.bluetooth.requestDevice({ acceptAllDevices: true });
const server = await device.gatt.connect();
ueberwacheVerbindung(server);
});
Wieder verbinden über den Rückverweis
const wiederVerbinden = async (server, versuche = 3) => {
for (let i = 1; i <= versuche; i++) {
try {
await server.device.gatt.connect();
console.log(`Verbunden nach ${i} Versuch(en)`);
return server;
} catch (err) {
console.warn(`Versuch ${i} fehlgeschlagen:`, err.message);
await new Promise((r) => setTimeout(r, 1000 * i));
}
}
throw new Error('Wiederverbinden nicht möglich');
};
// Wichtig · Fallstricke
- Experimentelle API: Web Bluetooth gibt es nur in Chromium-Browsern (Chrome, Edge, Opera). Firefox und Safari unterstützen sie nicht. Prüfe die Unterstützung vorher mit
'bluetooth' in navigator. - Die API funktioniert nur in einem sicheren Kontext (HTTPS oder
localhost).requestDevice()muss außerdem durch eine Nutzeraktion wie einen Klick ausgelöst werden. - Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wird im nicht-strikten Modus einfach ignoriert und hat keine Wirkung.
device.namekannundefinedsein. Nutze als Ersatzdevice.id. Diese ID ist aus Datenschutzgründen je Ursprung (Origin) verschieden und nicht die MAC-Adresse.- Auch nach einer Trennung verweist
deviceweiterhin auf dasselbe Gerät. Den Verbindungsstatus musst du immer überserver.connectedprüfen. - Über Permissions Policy (
bluetooth) lässt sich die API in iframes sperren.