Start · Sprachen · JavaScript · Referenz · BluetoothCharacteristicProperties.read

BluetoothCharacteristicProperties.read

Eigenschaft

Schreibgeschützter boolescher Wert, der angibt, ob der Wert einer GATT-Characteristic mit <code>readValue()</code> gelesen werden darf.

seit JavaScript Web Bluetooth API (experimentell) – Chrome/Edge 56 Kategorie: webapi

Signatur

BluetoothCharacteristicProperties.read

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

Typ
boolean
Beschreibung
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);
Batteriestand: 87 %

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.');
  }
};
Wert einmalig gelesen

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);
  }
};
00002a19-0000-1000-8000-00805f9b34fb lesbar: true

// 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 read true ist, kann readValue() 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.