Start · Sprachen · JavaScript · Referenz · BluetoothRemoteGATTServer.device

BluetoothRemoteGATTServer.device

Eigenschaft

Schreibgeschützte Eigenschaft, die das <code>BluetoothDevice</code> zurückgibt, auf dem dieser GATT-Server läuft.

seit JavaScript Experimentell: Chromium-Browser (Chrome/Edge/Opera Kategorie: webapi

Signatur

BluetoothRemoteGATTServer.device

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

Typ
BluetoothDevice
Beschreibung
Das 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);
Polar H10 12345678 true

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);
});
Verbindung zu Mein Sensor getrennt

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');
};
Verbunden nach 1 Versuch(en)

// 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.name kann undefined sein. Nutze als Ersatz device.id. Diese ID ist aus Datenschutzgründen je Ursprung (Origin) verschieden und nicht die MAC-Adresse.
  • Auch nach einer Trennung verweist device weiterhin auf dasselbe Gerät. Den Verbindungsstatus musst du immer über server.connected prüfen.
  • Über Permissions Policy (bluetooth) lässt sich die API in iframes sperren.