Start · Sprachen · JavaScript · Referenz · BluetoothRemoteGATTService.device

BluetoothRemoteGATTService.device

Eigenschaft

Die schreibgeschützte Eigenschaft <code>device</code> liefert das <code>BluetoothDevice</code>, zu dem dieser GATT-Dienst gehört.

seit JavaScript Web Bluetooth API (experimentell) – Chrome/Edge 56 Kategorie: webapi

Signatur

BluetoothRemoteGATTService.device

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

Typ
BluetoothDevice
Beschreibung
Das 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);
Dienst gehört zu: Mi Band 4 Selbes Objekt: true

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);
Polar H10 (aB3xY9...): 72 bpm

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`);
  }
};
Mi Band 4 getrennt

// 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), und requestDevice() muss durch eine Nutzergeste wie einen Klick ausgelöst werden.
  • Gerät kann getrennt sein: Auch nach einem Verbindungsabbruch zeigt device weiter auf das Gerät. Der Dienst selbst ist dann aber nicht mehr nutzbar. Prüfe service.device.gatt.connected und reagiere auf das Ereignis gattserverdisconnected.
  • device.name kann undefined sein, wenn das Gerät keinen Namen meldet. device.id ist 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.