Characteristic: Was es ist, Datentypen und Werte auslesen

Autor: IT Sectr Veröffentlicht: 2026-07-15 Lesezeit: 7 Min.

Characteristic ist eine fundamentale Dateneinheit in Bluetooth Low Energy, über die ein Central Informationen auf einem Peripheriegerät liest oder schreibt. Jede Characteristic gehört zu einem bestimmten GATT-Dienst, hat eine eindeutige UUID und eine Reihe von Eigenschaften (read, write, notify, indicate), die die möglichen Operationen definieren. Laut Bluetooth Core Specification 5.4 (2023) hat Bluetooth SIG über 500 Standard-Characteristics für medizinische, Fitness- und Industriege-räte spezifiziert. Entwickler erstellen benutzerdefinierte Characteristics zur Übertragung beliebiger Benutzerdaten – von Sensorwerten bis zu Gerätesteuerungsbefehlen.

Wichtige Punkte

  • Characteristic ist ein Datenpunkt innerhalb eines BLE-GATT-Dienstes mit UUID, Eigenschaften und einem Wert eines bestimmten Typs.
  • Eigenschaften definieren die verfügbaren Operationen: read (Lesen), write (Schreiben), notify (Benachrichtigung), indicate (bestätigte Benachrichtigung).
  • Standard-Characteristics (Batteriestand, Herzfrequenz) haben 16-Bit-UUIDs aus dem Bluetooth-SIG-Register.
  • Jede Characteristic kann Deskriptoren enthalten — Metadaten, die Maßeinheiten oder die Benachrichtigungskonfiguration beschreiben.
  • Die maximale Größe eines einzelnen Datenpakets über eine Characteristic beträgt 20 Bytes (MTU 23) oder bis zu 244 Bytes bei MTU-Erhöhung.

Was ist eine Characteristic in BLE?

Eine Characteristic ist ein Attribut des GATT-Protokolls, das einen Wert und Metadaten enthält. In der BLE-Architektur werden Daten nicht direkt zwischen Geräten übertragen, sondern durch Lesen und Schreiben der Werte von Dienst-Characteristics. Wenn ein Dienst ein Ordner ist, dann ist eine Characteristic eine Datei in diesem Ordner.

Jede Characteristic besteht aus drei Komponenten: Deklaration (declaration), Wert (value) und Deskriptoren (descriptors). Die Deklaration enthält die UUID der Characteristic und ihre Eigenschaften. Der Wert sind die tatsächlichen Daten, die zwischen Central und Peripheral übertragen werden. Deskriptoren bieten zusätzliche Konfiguration.

Laut der Bluetooth Core Specification 5.4 (2023) erfolgen alle Datenaustausche in BLE über Operationen an Characteristics. Sogar Standardprofile wie Heart Rate Profile oder Battery Service basieren auf einer Reihe von Characteristics mit vordefinierten UUIDs. Dies gewährleistet die Kompatibilität von Geräten verschiedener Hersteller ohne Vorkonfiguration.

Für Entwickler ist es wichtig zu verstehen: Jede Characteristic kann verschiedene Eigenschaftskombinationen unterstützen. Eine Characteristic kann schreibgeschützt sein, eine andere zum Schreiben, eine dritte für Benachrichtigungen. Die richtige Wahl der Eigenschaften bestimmt das Nutzungsszenario und den Stromverbrauch des Geräts.

Eigenschaften und Berechtigungen der Characteristic

Die Eigenschaften (properties) einer Characteristic definieren, welche Operationen an ihr erlaubt sind. Es handelt sich um eine Byte-Maske, bei der jedes Bit eine bestimmte Operation aktiviert oder deaktiviert. Nachfolgend sind die wichtigsten Eigenschaften aufgeführt.

EigenschaftBitBeschreibungTypische Verwendung
Read0x02Central kann den aktuellen Wert lesenStatus, Batteriestand, Konfiguration
Write0x08Central kann einen neuen Wert schreibenSteuerbefehle, Einstellungen
Notify0x10Peripheral sendet Wert ohne BestätigungStreaming-Daten (Puls, Temperatur)
Indicate0x20Peripheral sendet Wert mit BestätigungKritische Daten (Alarme, Status)
Write Without Response0x04Schreiben ohne Warten auf Bestätigung vom ServerHochgeschwindigkeits-Befehlübertragung

Berechtigungen (permissions) sind die Zugriffsebene auf der GATT-Serverebene. Im Gegensatz zu Eigenschaften, die in der Deklaration der Characteristic deklariert werden, werden Berechtigungen bei jeder Operation überprüft. Sie können Verschlüsselungs- und Authentifizierungsanforderungen umfassen.

Standard-Characteristics von Bluetooth SIG

Bluetooth SIG hat über 500 Standard-Characteristics spezifiziert, die die meisten gängigen BLE-Anwendungsfälle abdecken. Die Verwendung von Standard-UUIDs stellt sicher, dass jedes empfangende Gerät die Daten ohne Vorkonfiguration korrekt interpretiert.

Hier sind die am häufigsten verwendeten Standard-Characteristics:

UUIDNameDatentypDienst
0x2A19Battery Leveluint8 (0–100%)Battery Service
0x2A37Heart Rate Measurementuint8 + FlagsHeart Rate
0x2A6ETemperatureint16 (0.01°C)Environmental Sensing
0x2A6FHumidityuint16 (0.01%)Environmental Sensing
0x2A00Device NameUTF-8-StringGeneric Access
0x2A01Appearanceuint16Generic Access

Wenn eine vorhandene Standard-Characteristic Ihre Aufgabe abdeckt, verwenden Sie sie. Dies vereinfacht die Bluetooth-Zertifizierung und verbessert die Kompatibilität mit dem Ökosystem. Erstellen Sie benutzerdefinierte Characteristics nur für eindeutige Daten, die nicht im SIG-Register enthalten sind.

Erstellen einer Characteristic in iOS und Android

Das Erstellen einer Characteristic erfolgt auf der Peripheral-Seite — dem Gerät, das die Daten bereitstellt. Sehen wir uns die Implementierungen auf iOS (Swift) und Android (Java) an.

iOS: CBMutableCharacteristic

Core Bluetooth stellt die Klasse CBMutableCharacteristic zum Erstellen einer Characteristic mit UUID, Eigenschaften und Anfangswert bereit.

swift
import CoreBluetooth

let characteristicUUID = CBUUID("2A19") // Batteriestandsmerkmal

let characteristic = CBMutableCharacteristic(
    type: characteristicUUID,
    properties: [.read, .notify],
    value: nil,
    permissions: [.readable]
)

// Wert bei Änderung aktualisieren
let batteryData = Data([batteryLevel]) // uint8
peripheralManager.updateValue(
    batteryData,
    for: characteristic,
    onSubscribedCentrals: nil
)

Android: BluetoothGattCharacteristic

Unter Android wird eine Characteristic mit BluetoothGattCharacteristic mit UUID, Eigenschaften und Berechtigungen erstellt.

java
import android.bluetooth.*;

UUID charUuid = UUID.fromString("00002A19-0000-1000-8000-00805F9B34FB");

BluetoothGattCharacteristic characteristic =
    new BluetoothGattCharacteristic(
        charUuid,
        BluetoothGattCharacteristic.PROPERTY_READ
            | BluetoothGattCharacteristic.PROPERTY_NOTIFY,
        BluetoothGattCharacteristic.PERMISSION_READ
    );

// Wert festlegen
characteristic.setValue(batteryLevel, BluetoothGattCharacteristic.FORMAT_UINT8, 0);
gattServer.notifyCharacteristicChanged(device, characteristic, false);

Lesen, Schreiben und Benachrichtigungen

Die Operationen an einer Characteristic unterteilen sich in drei Typen: Lesen (read), Schreiben (write) und Benachrichtigungen (notify/indicate). Die Wahl hängt vom Szenario ab: Daten auf Abruf werden gelesen, Befehle geschrieben, Streaming-Daten abonnieren Benachrichtigungen.

Read: Central sendet eine Anfrage zum Lesen des Characteristic-Werts. Peripheral antwortet mit dem aktuellen Wert. Die Operation ist synchron und erfordert eine explizite Anfrage von jeder Seite. Verwendet für Daten, die sich selten ändern: Firmware-Version, Seriennummer, Einstellungen.

Write: Central sendet Daten an Peripheral. Es gibt zwei Modi: Write with Response (Bestätigung von Peripheral) und Write Without Response (ohne Bestätigung). Write with Response garantiert die Zustellung — Peripheral sendet nach dem Schreiben eine Bestätigung. Write Without Response ist schneller, garantiert jedoch keine Zustellung.

Notify und Indicate: Peripheral initiiert die Datenübertragung an Central. Bei Notify werden Daten ohne Bestätigung gesendet — wenn Central das Paket nicht empfängt, geht es verloren. Bei Indicate sendet Central eine Bestätigung (PDU-Ebene), was die Zustellung garantiert. Indicate ist langsamer, aber zuverlässiger. Um Benachrichtigungen zu abonnieren, schreibt Central den Wert 0x0001 in den CCCD (Client Characteristic Configuration Descriptor).

MTU und Größe der übertragenen Daten

MTU (Maximum Transmission Unit) definiert die maximale Größe eines einzelnen BLE-Datenpakets. Standardmäßig beträgt das MTU 23 Bytes, wovon 3 Bytes der Header sind — die Nutzlast (ATT-Payload) beträgt 20 Bytes. Dies ist für die meisten Sensordaten ausreichend, aber nicht für Dateiübertragungen oder große Konfigurationen.

Bluetooth Core Specification 5.4 unterstützt MTU-Aushandlung — Central und Peripheral können sich auf eine größere Paketgröße von bis zu 517 Bytes einigen. Der Prozess funktioniert wie folgt: Central sendet eine MTU-Exchange-Anfrage mit seinem vorgeschlagenen MTU; Peripheral antwortet mit seinem MTU; der kleinere der beiden Werte wird verwendet.

swift
// iOS fordert MTU bei Verbindung an
// Maximale MTU in iOS ist 185 Bytes
func peripheral(
    _ peripheral: CBPeripheral,
    didDiscoverServices error: Error?
) {
    // MTU für bestimmtes Peripheriegerät anfordern
    peripheral.maximumWriteValueLength(for: .withResponse)
}

Laut Bluetooth SIG (2023) reduziert die Erhöhung des MTU von 23 auf 185 Bytes den Datenübertragungs-Overhead um bis zu 80% aufgrund weniger Pakete. Für Anwendungen, die hochfrequente Messwerte übertragen (z. B. EKG oder Beschleunigungsmesser), ist die MTU-Erhöhung für die Stream-Stabilität entscheidend.

Häufig gestellte Fragen

Wie viele Characteristics kann ein Dienst enthalten?

Die BLE-Spezifikation beschränkt die Anzahl der Characteristics in einem Dienst nicht. In der Praxis wird die Grenze durch den verfügbaren Speicher des GATT-Servers und die Leistungsanforderungen bestimmt. Für eingebettete Geräte werden nicht mehr als 10–15 Characteristics pro Dienst empfohlen.

Was ist der Unterschied zwischen Notify und Indicate?

Notify sendet Daten ohne Bestätigung — das Paket kann ohne Benachrichtigung des Senders verloren gehen. Indicate erfordert eine Bestätigung (ACK) auf Protokollebene, was die Zustellung garantiert. Indicate ist langsamer, aber zuverlässiger. Verwenden Sie Indicate für kritische Daten (Alarme, Befehle).

Kann eine Characteristic gleichzeitig Read und Write haben?

Ja, eine Characteristic kann eine Kombination von Eigenschaften haben. Beispielsweise kann eine Einstellungs-Characteristic Read (Lesen des aktuellen Werts) und Write (Ändern der Einstellung) unterstützen. Kombinieren Sie die Eigenschaften entsprechend Ihrem Nutzungsszenario.

Wie überträgt man Daten größer als 20 Bytes über BLE?

Verwenden Sie die MTU-Aushandlung, um die Paketgröße auf 185–517 Bytes zu erhöhen. Wenn die Daten immer noch größer sind, implementieren Sie die Fragmentierung auf Anwendungsebene: Teilen Sie die Daten in mehrere aufeinanderfolgende Anforderungen mit Integritätskontrolle auf.

Sollte ich Standard-Characteristic-UUIDs verwenden?

Wenn Ihre Aufgabe von einer Standard-Characteristic abgedeckt wird, verwenden Sie UUIDs aus dem Bluetooth-SIG-Register. Dies vereinfacht die Zertifizierung und gewährleistet die Kompatibilität mit dem Ökosystem. Erstellen Sie benutzerdefinierte UUIDs nur für eindeutige Daten von Drittanbietern.

Zusammenfassung

  • Characteristic ist der primäre Datenübertragungsmechanismus in BLE und stellt einen Wert mit UUID, Eigenschaften und Deskriptoren dar.
  • Eigenschaften (Read, Write, Notify, Indicate) definieren, welche Operationen an der Characteristic verfügbar sind.
  • Bluetooth SIG hat über 500 Standard-Characteristics spezifiziert — verwenden Sie sie für die Gerätekompatibilität.
  • Die Erstellung von Characteristics erfolgt auf der Peripheral-Seite über Core Bluetooth (iOS) oder BluetoothGattCharacteristic (Android).
  • Benachrichtigungen (Notify/Indicate) sind effizienter als regelmäßiges Abfragen für Streaming-Daten — sie erfordern keine ständigen Anfragen vom Central.
  • Die Größe eines einzelnen Pakets ist durch MTU (standardmäßig 20 Bytes) begrenzt, kann aber durch MTU Exchange auf 517 Bytes erhöht werden.
  • Die richtige Wahl von Eigenschaften und UUID bestimmt Stromverbrauch, Zuverlässigkeit und Leistung der BLE-Verbindung.

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch