Start · Sprachen · JavaScript · Referenz · BluetoothDevice.gatt

BluetoothDevice.gatt

Eigenschaft

Die schreibgeschützte Eigenschaft <code>BluetoothDevice.gatt</code> liefert den <code>BluetoothRemoteGATTServer</code> des Geräts, über den Verbindung, Dienste und Charakteristiken erreichbar sind.

seit JavaScript Chromium-Browser (Chrome/Edge 56+, Opera); nicht i Kategorie: webapi

Signatur

BluetoothDevice.gatt

Beschreibung

Über BluetoothDevice.gatt erreicht man den GATT-Server (Generic Attribute Profile) eines Bluetooth-Low-Energy-Geräts. Er ist der Einstiegspunkt für jede Datenübertragung: Mit gatt.connect() baust du die Verbindung auf, mit getPrimaryService() greifst du auf Dienste zu und über deren Charakteristiken liest oder schreibst du Werte, oder du abonnierst Benachrichtigungen.

Ein BluetoothDevice bekommst du normalerweise über navigator.bluetooth.requestDevice(). Diese Methode darf nur nach einer Nutzeraktion (z. B. einem Klick) aufgerufen werden. Die Eigenschaft gatt gibt immer dasselbe Serverobjekt zurück. Ob gerade eine Verbindung besteht, zeigt gatt.connected.

Die Eigenschaft ist null, wenn die Seite keinen GATT-Zugriff auf das Gerät hat, etwa weil das Gerät kein GATT unterstützt oder die Berechtigung fehlt. Prüfe den Wert deshalb vor der Nutzung. Auf Dienste kannst du nur zugreifen, wenn du sie bei requestDevice() in filters oder optionalServices angegeben hast.

Rückgabewert

Typ
BluetoothRemoteGATTServer | null
Beschreibung
Der GATT-Server des entfernten Geräts oder null, wenn kein GATT-Zugriff möglich ist.

Beispiele

Gerät auswählen und mit dem GATT-Server verbinden

const button = document.querySelector('#connect');

button.addEventListener('click', async () => {
  try {
    const device = await navigator.bluetooth.requestDevice({
      filters: [{ services: ['battery_service'] }]
    });

    if (!device.gatt) {
      console.warn('Kein GATT-Zugriff auf dieses Gerät.');
      return;
    }

    const server = await device.gatt.connect();
    console.log(`Verbunden mit ${device.name}:`, server.connected);
  } catch (err) {
    console.error('Verbindung fehlgeschlagen:', err.name, err.message);
  }
});
Verbunden mit Mein Sensor: true

Batteriestand über den GATT-Server lesen

const readBatteryLevel = async (device) => {
  const server = device.gatt.connected
    ? device.gatt
    : await device.gatt.connect();

  const service = await server.getPrimaryService('battery_service');
  const characteristic = await service.getCharacteristic('battery_level');
  const value = await characteristic.readValue(); // DataView
  return value.getUint8(0);
};

document.querySelector('#battery').addEventListener('click', async () => {
  const device = await navigator.bluetooth.requestDevice({
    filters: [{ services: ['battery_service'] }]
  });
  const level = await readBatteryLevel(device);
  console.log(`Batterie: ${level} %`);
});
Batterie: 87 %

Verbindungsabbruch erkennen und sauber trennen

const setupDevice = async (device) => {
  device.addEventListener('gattserverdisconnected', () => {
    console.log(`${device.name} wurde getrennt.`);
  });

  await device.gatt.connect();
  console.log('Verbunden:', device.gatt.connected);

  // Später, z. B. beim Verlassen der Ansicht:
  device.gatt.disconnect();
  console.log('Verbunden:', device.gatt.connected);
};
Verbunden: true Mein Sensor wurde getrennt. Verbunden: false

// Wichtig · Fallstricke

  • Browserunterstützung: Die Web Bluetooth API gibt es nur in Chromium-Browsern (Chrome, Edge, Opera) unter Windows, macOS, ChromeOS und Android. Unter Linux muss sie teilweise erst über ein Flag aktiviert werden. Firefox und Safari unterstützen sie nicht. Prüfe vorher mit 'bluetooth' in navigator, ob sie verfügbar ist.
  • Nur in sicherem Kontext: Die API funktioniert nur über HTTPS oder localhost. requestDevice() braucht eine Nutzeraktion. In iframes muss sie per Permissions Policy (bluetooth) freigegeben sein.
  • null-Wert: gatt kann null sein. Ein ungeprüfter Aufruf von device.gatt.connect() wirft dann einen TypeError.
  • Dienste freigeben: Dienste, die nicht in filters oder optionalServices stehen, lösen bei getPrimaryService() einen SecurityError aus. Bestimmte Dienste stehen außerdem auf einer Sperrliste (Blocklist).
  • Instabile Verbindungen: BLE-Verbindungen brechen oft ab, zum Beispiel wegen Reichweite oder Energiesparmodus. Reagiere auf das Ereignis gattserverdisconnected und verbinde bei Bedarf neu. Vorher geholte Dienst- und Charakteristik-Objekte sind nach einer Trennung ungültig.