Start · Sprachen · JavaScript · Referenz · BluetoothCharacteristicProperties.reliableWrite

BluetoothCharacteristicProperties.reliableWrite

Eigenschaft

Schreibgeschützter <code>boolean</code>, der angibt, ob die GATT-Charakteristik zuverlässiges Schreiben (Reliable Write / Queued Write) unterstützt.

seit JavaScript Chrome/Edge 56+, Opera 43+ (experimentell; nicht i Kategorie: webapi

Signatur

BluetoothCharacteristicProperties.reliableWrite

Beschreibung

Die schreibgeschützte Eigenschaft reliableWrite des Interfaces BluetoothCharacteristicProperties ist true, wenn die Bluetooth-Low-Energy-Charakteristik das Verfahren Reliable Write unterstützt. Das Gerät meldet das über das Bit „Reliable Write“ im Deskriptor Characteristic Extended Properties (UUID 0x2900). An das Objekt kommt man über BluetoothRemoteGATTCharacteristic.properties.

Beim zuverlässigen Schreiben (Queued Writes mit Prepare Write und Execute Write) schickt das Peripheriegerät jedes vorbereitete Datenstück an den Client zurück. Der Client prüft damit, ob alles richtig angekommen ist, und lässt den Schreibvorgang erst dann endgültig ausführen. Das lohnt sich bei langen Werten oder bei kritischen Konfigurationsdaten wie Firmware-Parametern oder Kalibrierwerten.

Wichtig: Die Web-Bluetooth-API hat derzeit keine eigene Methode, mit der man gezielt einen Reliable Write auslöst. Die Eigenschaft dient deshalb vor allem dazu, die Fähigkeiten eines Geräts zu erkennen, etwa in Diagnose-Werkzeugen oder um eine passende Schreibstrategie auszuwählen. Geschrieben wird weiterhin mit writeValueWithResponse() oder writeValueWithoutResponse().

Rückgabewert

Typ
boolean
Beschreibung
true, wenn die Charakteristik Reliable Writes unterstützt, sonst false.

Beispiele

Unterstützung für Reliable Write abfragen

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

button.addEventListener('click', async () => {
  const device = await navigator.bluetooth.requestDevice({
    filters: [{ services: ['battery_service'] }]
  });
  const server = await device.gatt.connect();
  const service = await server.getPrimaryService('battery_service');
  const characteristic = await service.getCharacteristic('battery_level');

  console.log('Reliable Write:', characteristic.properties.reliableWrite);
});
Reliable Write: false

Alle Fähigkeiten eines Dienstes für ein Diagnose-Werkzeug auflisten

const describeProps = (p) => [
  'broadcast', 'read', 'writeWithoutResponse', 'write',
  'notify', 'indicate', 'authenticatedSignedWrites',
  'reliableWrite', 'writableAuxiliaries'
].filter((name) => p[name]);

const inspectService = async (service) => {
  const characteristics = await service.getCharacteristics();
  return characteristics.map((c) => ({
    uuid: c.uuid,
    features: describeProps(c.properties).join(', ')
  }));
};

document.querySelector('#scan').addEventListener('click', async () => {
  const device = await navigator.bluetooth.requestDevice({
    acceptAllDevices: true,
    optionalServices: ['device_information']
  });
  const server = await device.gatt.connect();
  const service = await server.getPrimaryService('device_information');
  console.table(await inspectService(service));
});
Tabelle mit UUID und Fähigkeiten, z. B. "read, reliableWrite"

Schreibstrategie anhand der Fähigkeiten wählen

// Kritische Konfiguration nur mit Bestätigung schreiben
const writeConfig = async (characteristic, bytes) => {
  const { reliableWrite, write, writeWithoutResponse } = characteristic.properties;
  const data = new Uint8Array(bytes);

  if (reliableWrite || write) {
    // Web Bluetooth kennt keinen expliziten Reliable Write;
    // writeValueWithResponse() liefert zumindest eine Bestätigung
    await characteristic.writeValueWithResponse(data);
    return 'mit Bestätigung geschrieben';
  }
  if (writeWithoutResponse) {
    await characteristic.writeValueWithoutResponse(data);
    return 'ohne Bestätigung geschrieben';
  }
  throw new Error('Charakteristik ist nicht beschreibbar');
};

// Aufruf: console.log(await writeConfig(characteristic, [0x01, 0x20]));
mit Bestätigung geschrieben

// Wichtig · Fallstricke

  • Kein direkter Reliable Write: Auch wenn reliableWrite den Wert true hat, bietet Web Bluetooth keine Methode für Prepare/Execute Write. Ob der Browser oder das Betriebssystem lange Werte intern als Queued Write überträgt, hängt von der Plattform ab und lässt sich nicht steuern.
  • Der Wert kommt aus dem Deskriptor 0x2900 (Extended Properties). Fehlt dieser Deskriptor oder liest ihn der Browser auf der jeweiligen Plattform nicht aus, ist der Wert false, auch wenn das Gerät die Funktion eigentlich beherrscht.
  • Kompatibilität: Die API ist experimentell und nur in Chromium-Browsern verfügbar (Chrome, Edge, Opera; unter Linux teils nur mit Flag). Firefox und Safari unterstützen Web Bluetooth nicht. Vorher mit 'bluetooth' in navigator prüfen.
  • Web Bluetooth funktioniert nur in einem sicheren Kontext (HTTPS), und requestDevice() braucht eine Nutzeraktion. In Iframes ist außerdem die Permissions Policy bluetooth nötig.