Signatur
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
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);
});
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));
});
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]));
// Wichtig · Fallstricke
- Kein direkter Reliable Write: Auch wenn
reliableWriteden Werttruehat, 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 Wertfalse, 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 navigatorprüfen. - Web Bluetooth funktioniert nur in einem sicheren Kontext (HTTPS), und
requestDevice()braucht eine Nutzeraktion. In Iframes ist außerdem die Permissions Policybluetoothnötig.