Start · Sprachen · JavaScript · Referenz · BluetoothCharacteristicProperties.writableAuxiliaries

BluetoothCharacteristicProperties.writableAuxiliaries

Eigenschaft

Schreibgeschützter <code>boolean</code>, der <code>true</code> ist, wenn die GATT-Charakteristik das Beschreiben ihrer Zusatz-Deskriptoren (Writable Auxiliaries) erlaubt.

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

Signatur

BluetoothCharacteristicProperties.writableAuxiliaries

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

Typ
boolean
Beschreibung
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);
});
Writable Auxiliaries: false

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');
Beschreibung geändert in „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);
Tabelle mit true/false je Fähigkeit

// 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 Berechtigungsrichtlinie bluetooth nötig.
  • Nicht verwechseln mit reliableWrite: Beide Werte stammen aus dem Deskriptor Extended Properties. reliableWrite betrifft aber zuverlässige (transaktionale) Schreibvorgänge auf den Wert der Charakteristik. writableAuxiliaries betrifft 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 true kann writeValue() scheitern, etwa wegen der GATT-Blocklist des Browsers, fehlender Kopplung oder einer abgebrochenen Verbindung. Fange Fehler deshalb immer mit try/catch ab.