Start · Sprachen · JavaScript · Referenz · BluetoothCharacteristicProperties.authenticatedSignedWrites

BluetoothCharacteristicProperties.authenticatedSignedWrites

Eigenschaft

Schreibgeschützter Boolean, der angibt, ob eine GATT-Charakteristik signierte Schreibvorgänge (Authenticated Signed Writes) auf ihren Wert erlaubt.

seit JavaScript Web Bluetooth API: Chrome/Edge 56+, Opera 43+ (exp Kategorie: webapi

Signatur

BluetoothCharacteristicProperties.authenticatedSignedWrites

Beschreibung

Die schreibgeschützte Eigenschaft authenticatedSignedWrites des Interfaces BluetoothCharacteristicProperties ist true, wenn das Bluetooth-Low-Energy-Gerät für diese Charakteristik das GATT-Verfahren Signed Write Without Response unterstützt. Dabei wird der geschriebene Wert mit einer Signatur versehen, die auf einem beim Pairing ausgetauschten Schlüssel (CSRK) beruht. So lässt sich die Echtheit der Daten prüfen, ohne dass die Verbindung selbst verschlüsselt sein muss.

Die Eigenschaft entspricht dem Bit 0x40 im Feld Characteristic Properties der GATT-Charakteristik-Deklaration. Erreichbar ist sie über BluetoothRemoteGATTCharacteristic.properties. Sinnvoll ist sie vor allem zur Fähigkeitsprüfung: Bevor Ihre Anwendung Werte schreibt, sieht sie nach, welche Schreibarten die Charakteristik überhaupt anbietet (write, writeWithoutResponse, authenticatedSignedWrites).

Die Web Bluetooth API hat keine eigene Methode für signierte Schreibvorgänge. Die Signatur übernimmt, falls überhaupt, der Bluetooth-Stack des Betriebssystems. Für Webentwickler ist das Flag deshalb vor allem eine Information zum Anzeigen oder Protokollieren, etwa in Diagnose- und Debugging-Werkzeugen für BLE-Geräte.

Rückgabewert

Typ
boolean
Beschreibung
true, wenn die Charakteristik signierte Schreibvorgänge erlaubt, sonst false.

Beispiele

Flag einer Charakteristik prüfen

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

button.addEventListener('click', async () => {
  try {
    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');

    const signiert = characteristic.properties.authenticatedSignedWrites;
    console.log(`Signierte Schreibvorgänge erlaubt: ${signiert}`);
  } catch (error) {
    console.error('Bluetooth-Fehler:', error);
  }
});
Signierte Schreibvorgänge erlaubt: false

Alle Eigenschaften einer Charakteristik als Liste ausgeben

const PROPERTY_NAMES = [
  'broadcast', 'read', 'writeWithoutResponse', 'write',
  'notify', 'indicate', 'authenticatedSignedWrites',
  'reliableWrite', 'writableAuxiliaries'
];

const describeProperties = (characteristic) =>
  PROPERTY_NAMES.filter((name) => characteristic.properties[name]);

const inspectService = async (service) => {
  const characteristics = await service.getCharacteristics();
  for (const c of characteristics) {
    console.log(c.uuid, '→', describeProperties(c).join(', ') || '(keine)');
  }
};
00002a19-0000-1000-8000-00805f9b34fb → read, notify

Passende Schreibart auswählen

const writeValue = async (characteristic, data) => {
  const { write, writeWithoutResponse, authenticatedSignedWrites } =
    characteristic.properties;

  if (authenticatedSignedWrites) {
    console.info('Gerät unterstützt signierte Writes (Signatur übernimmt der OS-Stack).');
  }

  if (write) {
    await characteristic.writeValueWithResponse(data);
  } else if (writeWithoutResponse || authenticatedSignedWrites) {
    await characteristic.writeValueWithoutResponse(data);
  } else {
    throw new Error('Charakteristik ist nicht beschreibbar.');
  }
};

// Aufruf: await writeValue(characteristic, new Uint8Array([0x01]));

// Wichtig · Fallstricke

  • Kompatibilität: Die Web Bluetooth API ist experimentell und nur in Chromium-basierten Browsern verfügbar (Chrome, Edge, Opera). Firefox und Safari unterstützen sie nicht. Unter Linux sind je nach Version eventuell Flags nötig. Prüfen Sie die Verfügbarkeit mit 'bluetooth' in navigator.
  • Sicherer Kontext: Die API funktioniert nur über HTTPS (oder localhost), und requestDevice() muss durch eine Nutzeraktion ausgelöst werden.
  • Nur lesbar: Wenn Sie der Eigenschaft einen Wert zuweisen, passiert nichts, im Strict Mode wird ein TypeError ausgelöst. Der Wert kommt immer vom Gerät.
  • Keine eigene Schreibmethode: true heißt nicht, dass Ihre Anwendung selbst signiert schreiben kann. Die Web Bluetooth API hat dafür keinen eigenen Aufruf. Ob der Betriebssystem-Stack signiert, hängt von der Plattform und dem Pairing-Zustand ab (die Signatur setzt eine gekoppelte Verbindung voraus).
  • Manche Charakteristiken stehen auf der GATT-Blockliste des Browsers. Auf sie können Sie grundsätzlich nicht zugreifen, egal welche Flags gesetzt sind.