Signatur
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
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);
});
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');
};
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);
// 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. notifyist schreibgeschützt. Eine Zuweisung wird ignoriert und wirft im Strict Mode einenTypeError. Der Wert beschreibt nur, was das Gerät kann. Er zeigt nicht an, ob Benachrichtigungen gerade aktiv sind.- Unterstützt die Charakteristik weder
notifynochindicate, schlägtstartNotifications()mit einemNotSupportedErrorfehl. - 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.