Signatur
Beschreibung
Die Eigenschaft read des Interfaces BluetoothCharacteristicProperties ist schreibgeschützt und liefert true, wenn das Bluetooth-Low-Energy-Gerät das Lesen des Characteristic-Werts erlaubt. Sie entspricht dem Read-Bit (0x02) im Properties-Feld der GATT-Characteristic-Deklaration.
Du erreichst das Objekt über BluetoothRemoteGATTCharacteristic.properties. Prüfe read, bevor du characteristic.readValue() aufrufst. So vermeidest du einen abgelehnten Promise mit NotSupportedError und kannst deine Oberfläche passend gestalten, z. B. einen „Aktualisieren“-Button ausblenden.
Viele Sensoren stellen Werte nur über Benachrichtigungen bereit (notify/indicate) und erlauben kein direktes Lesen. Robuster Code prüft deshalb mehrere Flags und wählt danach die passende Strategie: einmalig lesen oder Benachrichtigungen abonnieren.
Rückgabewert
true, wenn der Characteristic-Wert gelesen werden darf, sonst false.Beispiele
Batteriestand lesen, wenn erlaubt
const readBatteryLevel = 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');
if (!characteristic.properties.read) {
console.warn('Lesen wird von diesem Gerät nicht unterstützt.');
return null;
}
const value = await characteristic.readValue();
const level = value.getUint8(0);
console.log(`Batteriestand: ${level} %`);
return level;
};
// Muss durch eine Nutzeraktion ausgelöst werden
document.querySelector('#connect').addEventListener('click', readBatteryLevel);
Zwischen Lesen und Benachrichtigungen wählen
const subscribeOrRead = async (characteristic, onValue) => {
const { read, notify } = characteristic.properties;
if (notify) {
characteristic.addEventListener('characteristicvaluechanged', (event) => {
onValue(event.target.value);
});
await characteristic.startNotifications();
console.log('Benachrichtigungen aktiv');
} else if (read) {
onValue(await characteristic.readValue());
console.log('Wert einmalig gelesen');
} else {
throw new Error('Characteristic ist weder lesbar noch benachrichtigbar.');
}
};
Alle Characteristics eines Services auflisten
const listReadable = async (service) => {
const characteristics = await service.getCharacteristics();
for (const c of characteristics) {
console.log(c.uuid, 'lesbar:', c.properties.read);
}
};
// Wichtig · Fallstricke
- Browser-Kompatibilität: Die Web Bluetooth API ist experimentell. Chromium-basierte Browser (Chrome, Edge, Opera) auf Desktop und Android unterstützen sie. Firefox und Safari unterstützen sie nicht. Prüfe vorher mit
'bluetooth' in navigator, ob die API verfügbar ist. - Die API funktioniert nur in einem sicheren Kontext (HTTPS oder
localhost).requestDevice()muss durch eine Nutzeraktion ausgelöst werden, z. B. einen Klick. - Auch wenn
readtrueist, kannreadValue()fehlschlagen, z. B. bei fehlender Kopplung, verschlüsselten Characteristics (SecurityError) oder wenn die Verbindung getrennt wurde (NetworkError). - Einige UUIDs stehen auf der Sperrliste der Web-Bluetooth-Spezifikation. Solche Characteristics lassen sich unabhängig von diesem Flag nicht lesen.
- Die Eigenschaft ist schreibgeschützt. Eine Zuweisung hat keine Wirkung.