Signatur
Beschreibung
Die Eigenschaft writableAuxiliaries gehört zur Schnittstelle BluetoothCharacteristicProperties der Web Bluetooth API. Sie ist schreibgeschützt und gibt an, ob das Bit Writable Auxiliaries im Deskriptor Characteristic Extended Properties (UUID 0x2900) der Charakteristik gesetzt ist. Ist es gesetzt, darf ein Client die Zusatz-Deskriptoren beschreiben. Gemeint ist vor allem der Deskriptor Characteristic User Description (0x2901), also die für Menschen lesbare Bezeichnung der Charakteristik.
Du erreichst die Eigenschaft über BluetoothRemoteGATTCharacteristic.properties. Prüfe sie bevor du versuchst, einen Deskriptor mit BluetoothRemoteGATTDescriptor.writeValue() zu ändern. So kannst du die Oberfläche anpassen (zum Beispiel das Feld zum Umbenennen ausblenden) und vermeidest vorhersehbare NotSupportedError- oder NotAllowedError-Fehler.
Die Eigenschaft sagt nur, was das Gerät laut eigener Angabe erlaubt. Ob das Schreiben tatsächlich klappt, hängt außerdem von der Blocklist des Browsers, der Kopplung und der Verschlüsselung der Verbindung ab. Es gibt keine Parameter: Du liest die Eigenschaft einfach aus.
Rückgabewert
true, wenn das Bit „Writable Auxiliaries“ in den erweiterten Eigenschaften gesetzt ist, sonst false.Beispiele
Eigenschaft 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: ['battery_service'] }]
});
const server = await device.gatt.connect();
const service = await server.getPrimaryService('battery_service');
const characteristic = await service.getCharacteristic('battery_level');
console.log('Writable Auxiliaries:', characteristic.properties.writableAuxiliaries);
});
Benutzerbeschreibung nur bei Erlaubnis umbenennen
const renameCharacteristic = async (characteristic, newName) => {
if (!characteristic.properties.writableAuxiliaries) {
console.warn('Das Gerät erlaubt kein Ändern der Beschreibung.');
return false;
}
const descriptor = await characteristic.getDescriptor(
'gatt.characteristic_user_description'
);
const encoded = new TextEncoder().encode(newName);
await descriptor.writeValue(encoded);
console.log(`Beschreibung geändert in „${newName}“`);
return true;
};
// Nutzung: await renameCharacteristic(characteristic, 'Wohnzimmer-Sensor');
Alle Fähigkeiten einer Charakteristik tabellarisch ausgeben
const logCapabilities = (characteristic) => {
const p = characteristic.properties;
console.table({
read: p.read,
write: p.write,
writeWithoutResponse: p.writeWithoutResponse,
notify: p.notify,
indicate: p.indicate,
reliableWrite: p.reliableWrite,
writableAuxiliaries: p.writableAuxiliaries
});
};
// Nutzung: logCapabilities(characteristic);
// Wichtig · Fallstricke
- Browser-Kompatibilität: Die Web Bluetooth API ist experimentell. Sie läuft nur in Chromium-basierten Browsern (Chrome, Edge, Opera), und das auch nicht auf jeder Plattform gleich gut. Firefox und Safari unterstützen sie nicht. Prüfe deshalb vorher mit
'bluetooth' in navigator. - Die API gibt es nur in einem sicheren Kontext (HTTPS oder localhost).
requestDevice()braucht eine Nutzeraktion. In iframes ist zusätzlich die Berechtigungsrichtliniebluetoothnötig. - Nicht verwechseln mit
reliableWrite: Beide Werte stammen aus dem Deskriptor Extended Properties.reliableWritebetrifft aber zuverlässige (transaktionale) Schreibvorgänge auf den Wert der Charakteristik.writableAuxiliariesbetrifft das Beschreiben der Zusatz-Deskriptoren. - Hat eine Charakteristik gar keinen Deskriptor Extended Properties, ist der Wert immer
false. Je nach Betriebssystem kann der Browser die erweiterten Eigenschaften außerdem unvollständig melden. - Selbst bei
truekannwriteValue()scheitern, etwa wegen der GATT-Blocklist des Browsers, fehlender Kopplung oder einer abgebrochenen Verbindung. Fange Fehler deshalb immer mittry/catchab.