Signatur
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
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);
}
});
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)');
}
};
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), undrequestDevice()muss durch eine Nutzeraktion ausgelöst werden. - Nur lesbar: Wenn Sie der Eigenschaft einen Wert zuweisen, passiert nichts, im Strict Mode wird ein
TypeErrorausgelöst. Der Wert kommt immer vom Gerät. - Keine eigene Schreibmethode:
trueheiß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.