Start · Sprachen · JavaScript · Referenz · BluetoothCharacteristicProperties.notify

BluetoothCharacteristicProperties.notify

Eigenschaft

Schreibgeschützter <code>boolean</code>, der <code>true</code> ist, wenn die GATT-Charakteristik Wertänderungen per Benachrichtigung ohne Bestätigung (Notification) senden darf.

seit JavaScript Experimentell: Chrome/Edge 56+, Opera; nicht in Fi Kategorie: webapi

Signatur

BluetoothCharacteristicProperties.notify

Beschreibung

Die Eigenschaft notify gehört zum Interface BluetoothCharacteristicProperties. Das zugehörige Objekt erreichst du über BluetoothRemoteGATTCharacteristic.properties. Der Wert zeigt, ob das Bluetooth-LE-Gerät das Notify-Bit für diese Charakteristik gesetzt hat. Ist es gesetzt, kann das Gerät neue Werte selbstständig an den Client schicken. Der Client bestätigt den Empfang dabei nicht.

In der Praxis prüfst du notify, bevor du startNotifications() aufrufst. Typische Fälle sind Herzfrequenzmesser, Sensoren, Batteriestände oder Knöpfe. Solche Werte ändern sich laufend. Mit Benachrichtigungen musst du sie nicht ständig per readValue() abfragen (Polling), sondern bekommst sie über das Ereignis characteristicvaluechanged.

Die Schwester-Eigenschaft ist indicate. Auch damit sendet das Gerät Wertänderungen, aber jede muss auf Protokollebene bestätigt werden. Das ist zuverlässiger, aber langsamer. startNotifications() funktioniert, wenn notify oder indicate auf true steht. Welches Verfahren genutzt wird, entscheidet der Browser.

Rückgabewert

Typ
boolean
Beschreibung
true, wenn die Charakteristik Benachrichtigungen ohne Bestätigung unterstützt, sonst false.

Beispiele

Unterstützung für Benachrichtigungen prüfen

// Muss durch eine Nutzeraktion ausgelöst werden (z. B. Klick)
const button = document.querySelector('#connect');

button.addEventListener('click', 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');

  console.log('notify:', characteristic.properties.notify);
  console.log('indicate:', characteristic.properties.indicate);
});
notify: true indicate: false

Herzfrequenz per Benachrichtigung empfangen

const subscribeHeartRate = async (characteristic) => {
  const { notify, indicate } = characteristic.properties;

  if (!notify && !indicate) {
    console.warn('Charakteristik sendet keine Wertänderungen – Polling nötig.');
    return;
  }

  characteristic.addEventListener('characteristicvaluechanged', (event) => {
    const value = event.target.value; // DataView
    const flags = value.getUint8(0);
    // Bit 0: Herzfrequenz als uint16 statt uint8
    const bpm = flags & 0x01 ? value.getUint16(1, true) : value.getUint8(1);
    console.log(`Puls: ${bpm} bpm`);
  });

  await characteristic.startNotifications();
  console.log('Benachrichtigungen aktiv');
};
Benachrichtigungen aktiv Puls: 72 bpm Puls: 74 bpm

Alle Charakteristiken mit Notify-Unterstützung auflisten

const listNotifiable = async (service) => {
  const characteristics = await service.getCharacteristics();
  return characteristics
    .filter((c) => c.properties.notify)
    .map((c) => c.uuid);
};

// Nutzung, z. B. nach getPrimaryService('battery_service'):
// const uuids = await listNotifiable(service);
// console.log(uuids);
["00002a19-0000-1000-8000-00805f9b34fb"]

// Wichtig · Fallstricke

  • Browser-Unterstützung: Web Bluetooth ist experimentell. Es läuft nur in Chromium-Browsern (Chrome, Edge, Opera) auf Desktop und Android. Firefox und Safari unterstützen es nicht. Prüfe die Verfügbarkeit mit 'bluetooth' in navigator.
  • Die API steht nur in einem sicheren Kontext (HTTPS oder localhost) zur Verfügung. requestDevice() braucht außerdem eine Nutzeraktion, etwa einen Klick.
  • notify ist schreibgeschützt. Eine Zuweisung wird ignoriert und wirft im Strict Mode einen TypeError. Der Wert beschreibt nur, was das Gerät kann. Er zeigt nicht an, ob Benachrichtigungen gerade aktiv sind.
  • Unterstützt die Charakteristik weder notify noch indicate, schlägt startNotifications() mit einem NotSupportedError fehl.
  • Rufe stopNotifications() auf und entferne den Event-Listener, wenn du die Daten nicht mehr brauchst. So sparst du Energie auf dem Gerät und vermeidest Speicherlecks.
  • Wird die Verbindung getrennt (Ereignis gattserverdisconnected), musst du die Benachrichtigungen nach dem erneuten Verbinden wieder aktivieren.