Signatur
Beschreibung
Die schreibgeschützte Eigenschaft BluetoothRemoteGATTService.device verweist auf das BluetoothDevice-Objekt, das den jeweiligen GATT-Dienst (Generic Attribute Profile) bereitstellt. Über diesen Rückverweis kommt man von einem Dienst direkt zum Gerät: zu seinem Namen (name), seiner Kennung (id) und seinem GATT-Server (gatt).
Nützlich ist das vor allem, wenn in einer Anwendung nur Dienst- oder Characteristic-Objekte weitergereicht werden, etwa an eine generische Hilfsfunktion oder an einen Event-Handler für characteristicvaluechanged. Die Funktion kann dann über service.device (bzw. characteristic.service.device) feststellen, von welchem Gerät die Daten stammen, ohne dass man das Gerät extra mitgeben muss. Das ist besonders praktisch, wenn mehrere Geräte gleichzeitig verbunden sind.
Die Eigenschaft ist schreibgeschützt und gibt für einen Dienst immer dasselbe Objekt zurück, also gilt service.device === device. Über service.device.gatt lässt sich auch die Verbindung prüfen (connected) oder mit disconnect() trennen.
Rückgabewert
BluetoothDevice-Objekt, zu dem der Dienst gehört.Beispiele
Gerät eines Dienstes ermitteln
const connectBattery = async () => {
const device = await navigator.bluetooth.requestDevice({
filters: [{ services: ['battery_service'] }]
});
const server = await device.gatt.connect();
const service = await server.getPrimaryService('battery_service');
console.log('Dienst gehört zu:', service.device.name);
console.log('Selbes Objekt:', service.device === device);
};
// Muss durch eine Nutzergeste ausgelöst werden
document.querySelector('#connect').addEventListener('click', connectBattery);
Messwerte mehrerer Geräte zuordnen
const handleHeartRate = (event) => {
const characteristic = event.target;
const device = characteristic.service.device;
const bpm = characteristic.value.getUint8(1);
console.log(`${device.name} (${device.id}): ${bpm} bpm`);
};
const subscribe = async () => {
const device = await navigator.bluetooth.requestDevice({
filters: [{ services: ['heart_rate'] }]
});
const server = await device.gatt.connect();
const service = await server.getPrimaryService('heart_rate');
const characteristic = await service.getCharacteristic('heart_rate_measurement');
characteristic.addEventListener('characteristicvaluechanged', handleHeartRate);
await characteristic.startNotifications();
};
document.querySelector('#hr').addEventListener('click', subscribe);
Verbindung über den Dienst trennen
const disconnectFromService = (service) => {
const { gatt, name } = service.device;
if (gatt.connected) {
gatt.disconnect();
console.log(`${name} getrennt`);
} else {
console.log(`${name} war nicht verbunden`);
}
};
// Wichtig · Fallstricke
- Browser-Unterstützung: Die Web Bluetooth API ist experimentell. Sie läuft in Chromium-Browsern (Chrome, Edge, Opera) auf Desktop und Android, aber nicht in Firefox oder Safari/iOS. Prüfe die Verfügbarkeit mit
'bluetooth' in navigator. - Nur in sicheren Kontexten: Die API funktioniert nur über HTTPS (oder
localhost), undrequestDevice()muss durch eine Nutzergeste wie einen Klick ausgelöst werden. - Gerät kann getrennt sein: Auch nach einem Verbindungsabbruch zeigt
deviceweiter auf das Gerät. Der Dienst selbst ist dann aber nicht mehr nutzbar. Prüfeservice.device.gatt.connectedund reagiere auf das Ereignisgattserverdisconnected. device.namekannundefinedsein, wenn das Gerät keinen Namen meldet.device.idist eine vom Browser erzeugte, pro Ursprung (Origin) eindeutige Kennung, nicht die MAC-Adresse.- In älteren Dokumenten heißt die Schnittstelle noch
BluetoothGATTService. Gemeint ist dieselbe Eigenschaft.