Signatur
Beschreibung
Die Eigenschaft write des Interfaces BluetoothCharacteristicProperties gibt an, ob eine Bluetooth-Low-Energy-Charakteristik (GATT) Schreibvorgänge mit Rückmeldung unterstützt. Bei einem solchen „Write Request“ bestätigt das Peripheriegerät jeden Schreibvorgang mit einer Antwort. Schlägt der Vorgang fehl, meldet das Gerät einen Fehler zurück.
Das Objekt erhalten Sie über BluetoothRemoteGATTCharacteristic.properties. Prüfen Sie write, bevor Sie writeValueWithResponse() aufrufen. So vermeiden Sie einen NotSupportedError und können in der Oberfläche passend reagieren, etwa einen Schreib-Button ausblenden.
Die Eigenschaft beschreibt nur, was die Charakteristik laut ihrer GATT-Deklaration kann. Sie sagt nichts darüber aus, ob der Schreibvorgang gerade tatsächlich gelingt: Verbindungsabbrüche, fehlende Kopplung oder Sicherheitsanforderungen des Geräts können trotzdem zu Fehlern führen. Für Schreibvorgänge ohne Bestätigung gibt es die separate Eigenschaft writeWithoutResponse.
Rückgabewert
true, wenn die Charakteristik Schreibvorgänge mit Bestätigung erlaubt, sonst false.Beispiele
Schreibfähigkeit einer Charakteristik prüfen
// 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: ['heart_rate'] }]
});
const server = await device.gatt.connect();
const service = await server.getPrimaryService('heart_rate');
const characteristic = await service.getCharacteristic('heart_rate_control_point');
console.log('Schreiben mit Rückmeldung:', characteristic.properties.write);
});
Passende Schreibmethode automatisch wählen
const schreibeWert = async (characteristic, daten) => {
const { write, writeWithoutResponse } = characteristic.properties;
if (write) {
// Gerät bestätigt den Schreibvorgang
await characteristic.writeValueWithResponse(daten);
return 'mit Rückmeldung geschrieben';
}
if (writeWithoutResponse) {
await characteristic.writeValueWithoutResponse(daten);
return 'ohne Rückmeldung geschrieben';
}
throw new Error('Charakteristik ist nicht beschreibbar');
};
// Aufruf, z. B. zum Zurücksetzen des Energiezählers
// const ergebnis = await schreibeWert(characteristic, Uint8Array.of(1));
// console.log(ergebnis);
Alle Eigenschaften eines Dienstes auflisten
const listeCharakteristiken = async (service) => {
const characteristics = await service.getCharacteristics();
for (const c of characteristics) {
const p = c.properties;
console.log(c.uuid, {
read: p.read,
write: p.write,
writeWithoutResponse: p.writeWithoutResponse,
notify: p.notify
});
}
};
// Wichtig · Fallstricke
- Experimentell und nur eingeschränkt verfügbar: Web Bluetooth läuft nur in Chromium-basierten Browsern (Chrome, Edge, Opera). Firefox und Safari unterstützen die API nicht. Unter Linux muss sie teils per Flag aktiviert werden. Prüfen Sie die Verfügbarkeit mit
'bluetooth' in navigator. - Die API steht nur in sicheren Kontexten (HTTPS oder localhost) bereit.
requestDevice()muss außerdem durch eine Nutzeraktion ausgelöst werden. writeist schreibgeschützt: Eine Zuweisung wird ignoriert bzw. löst im Strict Mode einenTypeErroraus.truegarantiert keinen erfolgreichen Schreibvorgang. Fangen Sie Fehler vonwriteValueWithResponse()immer ab, z. B.NetworkErrorbei getrennter Verbindung oderNotSupportedError.- Das ältere
writeValue()gilt als veraltet. Nutzen Sie je nach Eigenschaft ausdrücklichwriteValueWithResponse()oderwriteValueWithoutResponse(). - Bestimmte UUIDs stehen auf der Blockliste von Web Bluetooth und lassen sich unabhängig von
writenicht beschreiben.