Philips Sonicare BLE — Zahnbürste in Home Assistant mit Echtzeit-Sensoren

Hallo zusammen,

ich habe eine HACS-Integration für Philips Sonicare Zahnbürsten entwickelt, die euch über 30 Sensoren direkt in Home Assistant bringt — komplett lokal über Bluetooth, ohne Cloud.

Was kann die Integration?

  • Batterie — Ladestand in Prozent, Ladestatus
  • Live-Daten beim Putzen — Putzdauer, Anpressdruck (in Gramm!), Druckwarnung, Temperatur
  • Bürstenkopf-Tracking — Verschleiß in %, Typ, Seriennummer (NFC), Farbring-ID (wer putzt gerade?)
  • Session-Tracking — Aktuelle und gespeicherte Putzsitzungen
  • Putzmodus & Intensität — Clean, White+, Gum Health, Deep Clean+, Sensitive, Tongue Care
  • Motor-Laufzeit — Kumulative Betriebsstunden für Wartungsvorhersagen
  • Diagnose — Firmware, Modell, RSSI

Zwei Verbindungswege

  1. Direkt-Bluetooth — HA verbindet sich direkt mit der Zahnbürste
  2. ESP32 Bridge — Für Zahnbürsten außerhalb der BLE-Reichweite, über ESPHome

Screenshots

Installation

Über HACS als Custom Repository:

HACS → Integrationen → ⋮ → Eigene Repositories
URL: https://github.com/mtheli/philips_sonicare_ble
Kategorie: Integration

Danach wird die Zahnbürste automatisch erkannt, sobald sie auf der Ladestation steht (BLE-Advertisement aktiv).

Kein Pairing nötig — die Sonicare nutzt offenes GATT.

Getestete Modelle

Modell Status
DiamondClean 9000 (HX992B) Vollständig getestet

Grundsätzlich sollte jede BLE-fähige Sonicare mit dem selben BLE-Protokoll funktionieren (DiamondClean Smart, FlexCare, HX992X-Serie). Falls ihr ein anderes Modell habt — gerne testen und Feedback geben!

Toothbrush Card — Dashboard-Visualisierung

Passend zur Integration gibt es eine eigene Custom Lovelace Card, die eure Zahnbürste live auf dem Dashboard visualisiert:

  • Animiertes Zahn-SVG mit Live-Sektor-Tracking (4 Quadranten)
  • Chips für Batterie, Intensität und Putzmodus
  • Fortschrittsbalken basierend auf der Putzzeit
  • Erfolgs-Badge wenn alle Sektoren abgeschlossen sind
  • Bluetooth-Verbindungsstatus
  • Automatische Entity-Erkennung — kein YAML nötig
  • Light & Dark Mode, Mehrsprachig (DE/EN)
  • Funktioniert auch mit Oral-B (offizielle HA-Integration)

Installation via HACS:

HACS → Frontend → ⋮ → Eigene Repositories
URL: https://github.com/mtheli/toothbrush-card
Kategorie: Dashboard

Links

Feedback und Modell-Reports sind willkommen!

5 „Gefällt mir“

Sehr cool @mtheli du bist gerade echt im Flow! Ich feiere die Toothbrush Karte jeden Tag :smiling_face_with_sunglasses:

1 „Gefällt mir“

Danke für die netten Worte @SmartLive!

Irgendwie habe ich mir zum Ziel gesetzt alle Smarten Dinge die ich herumliegen habe, ordentlich an HA anzubinden. Und wenn es wo keine ordentliche Integration gibt, muss man halt selber ran :smiley:

Coole Sache! Hab keine Philips Zahnbürste, aber dafür eine Oralb. Werde die Card daher mal testen :slight_smile:
Wie hast du die Integration gemacht? Hast du das BT-Protokoll selbst reverse engineered?

Update: Card direkt installiert! Sieht super aus!! Danach habe ich schon lange gesucht. Danke!

1 „Gefällt mir“

@MarzyHA
Danke! Ja, ich habe das BT-Protokoll mit Tools untersucht und reverse engineered.

Hallo mtheli

Vielen Dank für deine Integration. Ich selber verwende eine Sonicare HX991M.
Ich konnte diese einbinden, aber alle Sensoren zeigen unbekannt.
Könntest du vielleicht mal nachsehen warum das so ist?
Aktuell benutze ich ein ESP32C3 mit dieser Konfig. Da kann ich meine Sonicare verbinden und sehe auch alle Sensoren. Hier mal die yaml, vielleicht kann es dir helfen weitere Sonicare in dein Integration einzubauen.


esp32_ble_tracker:
  scan_parameters:
    interval: 320ms
    window: 320ms
    active: true

ble_client:
  - mac_address: "24:E5:AA:A6:B7:D8"
    id: sonicare
    name: "Sonicare"
    auto_connect: true
    on_connect:
      then:
        - lambda: |-
            id(sonicare_connected) = true;
            ESP_LOGD("ble_client_lambda", "Connected to Sonicare");
            id(sonicare)->pair();
            id(sonicare_toothbrush_battery_value).set_update_interval(15000);
            id(sonicare_toothbrush_battery_value).call_setup();
            id(sonicare_toothbrush_head_nfc).set_update_interval(10000);
            id(sonicare_toothbrush_head_nfc).call_setup();
            id(sonicare_toothbrush_head_id).set_update_interval(11000);
            id(sonicare_toothbrush_head_id).call_setup();
            id(sonicare_toothbrush_strength).set_update_interval(10000);
            id(sonicare_toothbrush_strength).call_setup();

    on_disconnect:
      then:
        - lambda: |-
            ESP_LOGD("ble_client_lambda", "Disconnected from Sonicare");
            id(sonicare_connected) = false;
            id(sonicare_countdown_running) = false;
            id(sonicare_brush_countdown) = 0;  // ✅ Countdown reset bei Disconnect
            id(sonicare_brush_timer).publish_state(NAN);  // Keine Anzeige in HA
            id(sonicare_toothbrush_battery_value).set_update_interval(UINT32_MAX);
            id(sonicare_toothbrush_battery_value).call_setup();
            id(sonicare_toothbrush_head_nfc).set_update_interval(UINT32_MAX);
            id(sonicare_toothbrush_head_nfc).call_setup();
            id(sonicare_toothbrush_head_id).set_update_interval(UINT32_MAX);
            id(sonicare_toothbrush_head_id).call_setup();
            id(sonicare_toothbrush_strength).set_update_interval(UINT32_MAX);
            id(sonicare_toothbrush_strength).call_setup();

globals:
  - id: sonicare_connected
    type: bool
    restore_value: no
    initial_value: 'false'

  - id: sonicare_brush_countdown
    type: int
    restore_value: no
    initial_value: '0'

  - id: sonicare_countdown_running
    type: bool
    restore_value: no
    initial_value: 'false'

binary_sensor:
  - platform: template
    name: Sonicare Connection
    id: sonicare_ble_connection
    icon: "mdi:bluetooth-connect"
    lambda: |-
      return id(sonicare_connected);
    device_class: connectivity

sensor:
  - platform: ble_client
    ble_client_id: sonicare
    id: sonicare_toothbrush_battery_value
    name: Sonicare Battery
    type: characteristic
    service_uuid: 180F
    characteristic_uuid: 2A19
    notify: true
    update_interval: never
    unit_of_measurement: '%'
    accuracy_decimals: 0
    device_class: battery
    filters:
      - filter_out:
          - nan

  - platform: ble_client
    ble_client_id: sonicare
    id: sonicare_toothbrush_active_seconds
    name: Sonicare Active Time
    type: characteristic
    service_uuid: 477ea600-a260-11e4-ae37-0002a5d50002
    characteristic_uuid: 477ea600-a260-11e4-ae37-0002a5d54090
    notify: true
    update_interval: never
    device_class: duration
    accuracy_decimals: 0
    unit_of_measurement: s
    filters:
      - filter_out:
          - nan
          - "0"

  - platform: ble_client
    ble_client_id: sonicare
    id: sonicare_toothbrush_state_id
    name: Sonicare status id
    type: characteristic
    service_uuid: 477ea600-a260-11e4-ae37-0002a5d50001
    characteristic_uuid: 477ea600-a260-11e4-ae37-0002a5d54010
    notify: true
    update_interval: never
    internal: true
    filters:
      - filter_out:
          - nan
    on_value:
      then:
        - component.update: sonicare_toothbrush_state
        - lambda: |-
            if (id(sonicare_toothbrush_state_id).state == 2) {  // Run
              if (id(sonicare_brush_countdown) <= 0) {
                int mode = id(sonicare_toothbrush_mode_id).state;
                if (mode == 0) id(sonicare_brush_countdown) = 120;
                else if (mode == 1) id(sonicare_brush_countdown) = 160;
                else if (mode == 2) id(sonicare_brush_countdown) = 200;
                else if (mode == 3) id(sonicare_brush_countdown) = 180;
                else id(sonicare_brush_countdown) = 120;
              }
              id(sonicare_countdown_running) = true;
            } else if (id(sonicare_toothbrush_state_id).state == 0 || id(sonicare_toothbrush_state_id).state == 5) {
              id(sonicare_countdown_running) = false;
              id(sonicare_brush_countdown) = 0;
              id(sonicare_brush_timer).publish_state(NAN);
            } else {
              id(sonicare_countdown_running) = false;
            }

  - platform: ble_client
    ble_client_id: sonicare
    id: sonicare_toothbrush_mode_id
    name: Sonicare mode id
    type: characteristic
    service_uuid: 477ea600-a260-11e4-ae37-0002a5d50002
    characteristic_uuid: 477ea600-a260-11e4-ae37-0002a5d54080
    notify: true
    update_interval: never
    internal: true
    filters:
      - filter_out:
          - nan
    on_value:
      then:
        - component.update: sonicare_toothbrush_mode
        - component.update: sonicare_toothbrush_mode_time

  - platform: ble_client
    ble_client_id: sonicare
    id: sonicare_toothbrush_head_id
    name: Sonicare head id
    type: characteristic
    service_uuid: 477ea600-a260-11e4-ae37-0002a5d50006
    characteristic_uuid: 477ea600-a260-11e4-ae37-0002a5d54220
    notify: true
    update_interval: never
    internal: true
    filters:
      - filter_out:
          - nan
    on_value:
      then:
        - component.update: sonicare_toothbrush_head

  - platform: ble_client
    ble_client_id: sonicare
    id: sonicare_toothbrush_head_nfc
    name: Sonicare head nfc
    type: characteristic
    service_uuid: 477ea600-a260-11e4-ae37-0002a5d50006
    characteristic_uuid: 477ea600-a260-11e4-ae37-0002a5d542a0
    notify: true
    update_interval: never
    internal: true
    filters:
      - filter_out:
          - nan
    on_value:
      then:
        - component.update: sonicare_toothbrush_head

  - platform: ble_client
    ble_client_id: sonicare
    id: sonicare_toothbrush_strength
    icon: "mdi:toothbrush-electric"
    name: Sonicare Strength
    type: characteristic
    service_uuid: 477ea600-a260-11e4-ae37-0002a5d50002
    characteristic_uuid: 477ea600-a260-11e4-ae37-0002a5d540b0
    lambda: |-
      return (float(x[0]) + 1);
    notify: true
    update_interval: never
    filters:
      - filter_out:
          - nan

  # Countdown Sensor
  - platform: template
    name: "Sonicare Countdown"
    id: sonicare_brush_timer
    icon: "mdi:progress-clock"
    unit_of_measurement: "s"
    accuracy_decimals: 0
    update_interval: never
    lambda: |-
      if (id(sonicare_brush_countdown) > 0) {
        return id(sonicare_brush_countdown);
      } else {
        return NAN;
      }

interval:
  - interval: 1s
    then:
      - if:
          condition:
            and:
              - lambda: 'return id(sonicare_connected);'
              - lambda: 'return id(sonicare_toothbrush_state_id).state == 2;'
              - lambda: 'return id(sonicare_countdown_running);'
          then:
            - lambda: |-
                if (id(sonicare_brush_countdown) > 0) {
                  id(sonicare_brush_countdown) -= 1;
                  id(sonicare_brush_timer).publish_state(id(sonicare_brush_countdown));
                }

text_sensor:
  - platform: template
    name: Sonicare State
    id: sonicare_toothbrush_state
    icon: "mdi:toothbrush-electric"
    update_interval: never
    lambda: |-
      if (id(sonicare_toothbrush_state_id).state == 0) return {"Off"};
      else if (id(sonicare_toothbrush_state_id).state == 1) return {"Standby"};
      else if (id(sonicare_toothbrush_state_id).state == 2) return {"Run"};
      else if (id(sonicare_toothbrush_state_id).state == 3) return {"Charge"};
      else if (id(sonicare_toothbrush_state_id).state == 5) return {"Shutdown"};
      else if (id(sonicare_toothbrush_state_id).state == 6) return {"Validate"};
      else if (id(sonicare_toothbrush_state_id).state == 7) return {"LightsOut"};
      else return {};

  - platform: template
    name: Sonicare Mode
    id: sonicare_toothbrush_mode
    icon: "mdi:toothbrush-electric"
    update_interval: never
    lambda: |-
      if (id(sonicare_toothbrush_mode_id).state == 0) return {"Clean"};
      else if (id(sonicare_toothbrush_mode_id).state == 1) return {"White+"};
      else if (id(sonicare_toothbrush_mode_id).state == 2) return {"Gum Health"};
      else if (id(sonicare_toothbrush_mode_id).state == 3) return {"Deep Clean+"};
      else return {};

  - platform: template
    name: Sonicare Mode Time
    id: sonicare_toothbrush_mode_time
    icon: "mdi:toothbrush-electric"
    update_interval: never
    lambda: |-
      if (id(sonicare_toothbrush_mode_id).state == 0) return {"120 s"};
      else if (id(sonicare_toothbrush_mode_id).state == 1) return {"160 s"};
      else if (id(sonicare_toothbrush_mode_id).state == 2) return {"200 s"};
      else if (id(sonicare_toothbrush_mode_id).state == 3) return {"180 s"};
      else return {};

  - platform: template
    name: Sonicare Head
    id: sonicare_toothbrush_head
    icon: "mdi:toothbrush-electric"
    update_interval: never
    lambda: |-
      if (id(sonicare_toothbrush_head_nfc).state == 1) {
        if (id(sonicare_toothbrush_head_id).state == 0) return {"Adaptive Clean"};
        else if (id(sonicare_toothbrush_head_id).state == 1) return {"Adaptive White"};
        else if (id(sonicare_toothbrush_head_id).state == 2) return {"Tongue Care"};
        else if (id(sonicare_toothbrush_head_id).state == 3) return {"Adaptive Gums"};
        else return {"Unknown"};
      } else if (id(sonicare_toothbrush_head_nfc).state == 0) {
        return {"N/A"};
      } else {
        return {};
      }

Vielen Dank
toptobias

Hallo @toptobias,

vielen Dank für dein Feedback und die ausführliche ESPHome-Konfiguration! Das hilft sehr weiter.

Zum Problem „alle Sensoren unbekannt“:

Die HX991M verwendet die gleichen BLE-UUIDs wie die HX992X, sollte also grundsätzlich unterstützt werden. Damit ich der Ursache auf den Grund gehen kann, hätte ich ein paar Fragen:

  1. Nutzt du die Integration über direktes Bluetooth oder über den ESP32 als Bridge? (Im Config Flow gibt es beide Optionen)
  2. Lief deine ESPHome-Konfiguration gleichzeitig? Die Sonicare erlaubt nur eine aktive BLE-Verbindung — wenn ESPHome verbunden ist, kann die HA-Integration nicht zugreifen.
  3. Kannst du mir Debug-Logs schicken? Dazu in der configuration.yaml:
logger:                                                                                                                                                                               
  default: warning                                              
  logs:
    custom_components.philips_sonicare_ble: debug

Dann HA neustarten, die Zahnbürste kurz einschalten (damit sie advertised) und die Logs aus Settings → System → Logs kopieren. Damit kann ich genau sehen, wo die Reads fehlschlagen.

Was mir beim Vergleich mit deiner YAML aufgefallen ist:

Ich habe deine Mappings mit meinen Erkenntnissen der abgeglichen und ein paar Unterschiede gefunden:

Handle States:

  • State 5 existiert aus meiner Sicht nicht im BLE-Protokoll. Shutdown ist State 4 (den hast du nicht drin).
  • State 7 heißt bei dir „LightsOut“ statt bei mir „Background“.

Brush Head Types (Characteristic 0x4220):

  • Deine Werte 0 und 1 stimmen (Adaptive Clean, Adaptive White). Das ist ein Fehler bei mir. Danke für den Hinweis.
  • 2 und 3 sind bei dir vertauscht: 2 = Adaptive Gums, 3 = Tongue Clean (nicht umgekehrt).
  • Bei dir fehlen außerdem: 4 = Premium All-in-One, 5 = Sensitive, 6 = Non-RFID.

Sobald ich die Logs habe, kann ich dir mehr sagen. Danke nochmal für die Unterstützung!

Hallo mtheli

Vielen Dank für deine Rückmeldung. Ich habe deinen Rat befolgt und die fehlenden Einträge in meiner ESP32-C3 yaml korrigiert, nun sieht es schick aus.
Da ich keine originalen Bürstenköpfe mit Bluetooth nutze ist hat der Sensor noch nie angesprochen.

Was ich ganz nützlich fand, ich habe noch ein Countdown eingebaut, diesen lasse ich beim Zähneputzen auf der Ulanzi Uhr laufen, ist sehr praktisch, besser als Active Time.
Könntest du so ein Timer auch in deiner Intergation einbauen?

Verbunden mit ESP32-C3:

Nun zu deinen Fragen, ich nutze deine Integration direkt auf dem Raspberry wo HA drauf läuft.
Die Integration findet ja auch die Zahnbürste mit der korrektem Bluetooth MAC Adresse.
Zuvor hatte ich aber meinen ESP32-C3 Stromlos gemacht, damit die Zahnbürste bei deiner Integration erkannt wird.

Die Zahnbürste ist gekoppelt, aber er findet keine Sensoren:

Hier mal die log Dateien.

Logger: custom_components.philips_sonicare_ble.coordinator
Quelle: custom_components/philips_sonicare_ble/coordinator.py:755
Integration: Philips Sonicare (Dokumentation, Probleme)
Erstmals aufgetreten: 09:36:41 (100 Vorkommnisse)
Zuletzt protokolliert: 09:37:25

  • Failed to subscribe 477ea600-a260-11e4-ae37-0002a5d54091: Characteristic 477ea600-a260-11e4-ae37-0002a5d54091 was not found!
  • Failed to subscribe 477ea600-a260-11e4-ae37-0002a5d54070: Characteristic 477ea600-a260-11e4-ae37-0002a5d54070 was not found!
  • Failed to subscribe 477ea600-a260-11e4-ae37-0002a5d540d0: Characteristic 477ea600-a260-11e4-ae37-0002a5d540d0 was not found!
  • Failed to subscribe 477ea600-a260-11e4-ae37-0002a5d540d2: Characteristic 477ea600-a260-11e4-ae37-0002a5d540d2 was not found!
  • Failed to subscribe 477ea600-a260-11e4-ae37-0002a5d54230: Characteristic 477ea600-a260-11e4-ae37-0002a5d54230 was not found!

Beste Grüße
toptobias

Hallo @toptobias,

danke für dein Feedback und den Screenshot!

Ich glaube bei dir gab es das folgende Problem:

Die Zahnbürste hat sich während der Kopplung abgeschaltet, bevor die GATT Services gelesen werden konnten. Sonicare-Zahnbürsten gehen nach ca. 10–20 Sekunden in den Schlafmodus wenn sie nicht aktiv benutzt werden. Das Ergebnis: „Successfully connected“ wurde angezeigt, obwohl tatsächlich nichts gelesen werden konnte.

Ich habe versucht das in v0.3.0 zu verbessern.

Neuer Setup-Dialog
Der Bestätigungsdialog zeigt jetzt vor dem Verbinden den aktuellen Status der Zahnbürste:

  • :zzz: Sleeping — Zahnbürste schläft, bitte erst einschalten
  • :white_check_mark: Active — bereit zum Verbinden

Zusätzlich werden die erkannten BLE-Services angezeigt, damit man sofort sieht ob die Bürste erreichbar ist.

*Setup nur mit erfolgreicher Verbindung *
Das Setup kann nur noch abgeschlossen werden, wenn die Geräteinformationen (Modell, Seriennummer, Firmware, Batterie) tatsächlich gelesen werden konnten. Damit werden fehlerhafte Installationen verhindert.

Längeres Verbindungs-Timeout
Das BLE-Timeout wurde von 15 auf 30 Sekunden erhöht, was mehr Zeit für die Verbindung gibt.

So geht’s bei dir

  1. Update auf v0.3.0 über HACS
  2. Falls die alte Integration noch eingerichtet ist: entferne sie unter Einstellungen → Geräte & Dienste
  3. Schalte die Zahnbürste ein (Knopf drücken, sie muss vibrieren)
  4. Gehe zu Einstellungen → Geräte & Dienste — die Bürste sollte unter „Entdeckt“ erscheinen
  5. Klicke auf Konfigurieren — prüfe dass der Status :white_check_mark: Active anzeigt
  6. Klicke auf Absenden während die Bürste noch läuft

Die Zahnbürste bleibt ca. 2 Minuten im BLE-Modus wenn sie eingeschaltet ist — das reicht locker für die Kopplung.

Countdown-Timer
Gute Idee mit dem Countdown auf der Ulanzi-Uhr! Wir haben einen neuen Routine Countdown Sensor eingebaut, der während des Putzens die verbleibende Zeit runterzählt. Wenn die Routine abgeschlossen ist oder nicht geputzt wird, zeigt er „Nicht verfügbar“ an.

Freue mich auf dein Feedback ob es jetzt klappt!

Hallo mtheli,

Vielen Dank für deine Mühe. Doch leider habe ich wieder das Problem das keine einziger Sensor (außer Bluethooth Signal Stärke) angezeigt wird. Ich habe wie du es beschrieben hast gekoppelt, also die Zahnbürste eingeschaltet und dann deine Intergration geöffnet, die Zahnbürste wurde gefunden und eingebunden. Doch wie gesagt die Sensoren zeigen nichts an.
Ich denke ich habe wohl andere UUIDs als deine Sonicare.

Beste Grüße
toptobias

Hi @toptobias,

ich glaube ich weiß warum es bei dir über Direct BLE nicht funktioniert. Die HX991M braucht vermutlich BLE Bonding bevor Characteristics gelesen werden können — anders als meine HX992B die open GATT verwendet.

Auf deinem ESP32-C3 funktioniert es, weil du pair() im on_connect hast. Über Direct BLE am RPi macht die Integration aktuell kein Pairing — deshalb werden die Characteristics nicht gefunden.

Könntest du mir das schnell prüfen? Könntest du dich bitte mit nRF Connect am Handy zur Zahnbürste verbinden und schau ob ein Pairing-Dialog kommt? Das würde mir sehr helfen. Falls ja, ist das die Bestätigung.

Pairing-Support für die Integration ist in Arbeit — ein anderer User mit HX962V (ExpertClean) hat dasselbe Problem und testet gerade einen Fix.

Vielen Dank und LG;
Martin

1 „Gefällt mir“

Super Support von dir Martin!

2 „Gefällt mir“

Hallo Martin,

hier mal wie gewünscht die log Datei von nRF Connect.
Ich weiß nicht ob das wichtig ist, wenn die die Zahnbürste mit nRF Connect verbinden will fragt
diese speziell noch mal nach, ob sich das Handy mit der Zahnbürste verbinden soll.
Dannach sehe ich eine Kopplung der Zahnbürste auf deim iPhone unter Einstellungen Bluetooth.

Teil 1:

[08:48:08.915] Normal: Scanner On.
[08:48:11.583] Normal: Device Scanned.
[08:48:11.584] Debug: [Callback] centralManager(central, didDiscover: peripheral, advertisementData: ["kCBAdvDataLocalName": Philips Sonicare, "kCBAdvDataTimestamp": 796718891.580265, "kCBAdvDataRxSecondaryPHY": 0, "kCBAdvDataRxPrimaryPHY": 129, "kCBAdvDataIsConnectable": 1], rssi: -67)
[08:48:26.615] Verbose: Connecting...
[08:48:26.615] Debug: cbCentralManager.connect()
[08:48:27.660] Debug: [Callback] centralManager(central, didConnect: peripheral)
[08:48:27.660] Normal: Connected.
[08:48:27.660] Verbose: Discovering Services...
[08:48:27.660] Debug: peripheral.discoverServices(nil)
[08:48:31.404] Debug: [Callback] peripheral(peripheral, didDiscoverServices: nil)
[08:48:31.405] Verbose: Discovering Included Services for 477EA600-A260-11E4-AE37-0002A5D50002...
[08:48:31.405] Debug: peripheral.discoverIncludedServices(nil, for: 477EA600-A260-11E4-AE37-0002A5D50002)
[08:48:31.405] Verbose: Discovering Characteristics for 477EA600-A260-11E4-AE37-0002A5D50002...
[08:48:31.405] Debug: peripheral.discoverCharacteristics(nil, for: 477EA600-A260-11E4-AE37-0002A5D50002)
[08:48:31.405] Verbose: Discovering Included Services for 477EA600-A260-11E4-AE37-0002A5D50001...
[08:48:31.406] Debug: peripheral.discoverIncludedServices(nil, for: 477EA600-A260-11E4-AE37-0002A5D50001)
[08:48:31.406] Normal: Discovered 477EA600-A260-11E4-AE37-0002A5D50002, 477EA600-A260-11E4-AE37-0002A5D50001, Battery Service, Device Information, 477EA600-A260-11E4-AE37-0002A5D50005, 477EA600-A260-11E4-AE37-0002A5D50004, A651FFF1-4074-4131-BCE9-56D4261BC7B1, 477EA600-A260-11E4-AE37-0002A5D50006, 477EA600-A260-11E4-AE37-0002A5D50007, and 477EA600-A260-11E4-AE37-0002A5D50008 Services.
[08:48:31.406] Verbose: Discovering Characteristics for 477EA600-A260-11E4-AE37-0002A5D50001...
[08:48:31.406] Debug: peripheral.discoverCharacteristics(nil, for: 477EA600-A260-11E4-AE37-0002A5D50001)
[08:48:31.406] Verbose: Discovering Included Services for Battery Service...
[08:48:31.406] Debug: peripheral.discoverIncludedServices(nil, for: 180F)
[08:48:31.406] Verbose: Discovering Characteristics for Battery Service...
[08:48:31.406] Debug: peripheral.discoverCharacteristics(nil, for: 180F)
[08:48:31.406] Verbose: Discovering Included Services for Device Information...
[08:48:31.406] Debug: peripheral.discoverIncludedServices(nil, for: 180A)
[08:48:31.406] Verbose: Discovering Characteristics for Device Information...
[08:48:31.406] Debug: peripheral.discoverCharacteristics(nil, for: 180A)
[08:48:31.406] Verbose: Discovering Included Services for 477EA600-A260-11E4-AE37-0002A5D50005...
[08:48:31.406] Debug: peripheral.discoverIncludedServices(nil, for: 477EA600-A260-11E4-AE37-0002A5D50005)
[08:48:31.406] Verbose: Discovering Characteristics for 477EA600-A260-11E4-AE37-0002A5D50005...
[08:48:31.406] Debug: peripheral.discoverCharacteristics(nil, for: 477EA600-A260-11E4-AE37-0002A5D50005)
[08:48:31.406] Verbose: Discovering Included Services for 477EA600-A260-11E4-AE37-0002A5D50004...
[08:48:31.406] Debug: peripheral.discoverIncludedServices(nil, for: 477EA600-A260-11E4-AE37-0002A5D50004)
[08:48:31.406] Verbose: Discovering Characteristics for 477EA600-A260-11E4-AE37-0002A5D50004...
[08:48:31.406] Debug: peripheral.discoverCharacteristics(nil, for: 477EA600-A260-11E4-AE37-0002A5D50004)
[08:48:31.406] Verbose: Discovering Included Services for A651FFF1-4074-4131-BCE9-56D4261BC7B1...
[08:48:31.406] Debug: peripheral.discoverIncludedServices(nil, for: A651FFF1-4074-4131-BCE9-56D4261BC7B1)
[08:48:31.406] Verbose: Discovering Characteristics for A651FFF1-4074-4131-BCE9-56D4261BC7B1...
[08:48:31.406] Debug: peripheral.discoverCharacteristics(nil, for: A651FFF1-4074-4131-BCE9-56D4261BC7B1)
[08:48:31.406] Verbose: Discovering Included Services for 477EA600-A260-11E4-AE37-0002A5D50006...
[08:48:31.406] Debug: peripheral.discoverIncludedServices(nil, for: 477EA600-A260-11E4-AE37-0002A5D50006)
[08:48:31.406] Verbose: Discovering Characteristics for 477EA600-A260-11E4-AE37-0002A5D50006...
[08:48:31.406] Debug: peripheral.discoverCharacteristics(nil, for: 477EA600-A260-11E4-AE37-0002A5D50006)
[08:48:31.406] Verbose: Discovering Included Services for 477EA600-A260-11E4-AE37-0002A5D50007...
[08:48:31.406] Debug: peripheral.discoverIncludedServices(nil, for: 477EA600-A260-11E4-AE37-0002A5D50007)
[08:48:31.406] Verbose: Discovering Characteristics for 477EA600-A260-11E4-AE37-0002A5D50007...
[08:48:31.406] Debug: peripheral.discoverCharacteristics(nil, for: 477EA600-A260-11E4-AE37-0002A5D50007)
[08:48:31.406] Verbose: Discovering Included Services for 477EA600-A260-11E4-AE37-0002A5D50008...
[08:48:31.406] Debug: peripheral.discoverIncludedServices(nil, for: 477EA600-A260-11E4-AE37-0002A5D50008)
[08:48:31.406] Verbose: Discovering Characteristics for 477EA600-A260-11E4-AE37-0002A5D50008...
[08:48:31.406] Debug: peripheral.discoverCharacteristics(nil, for: 477EA600-A260-11E4-AE37-0002A5D50008)
[08:48:31.524] Debug: [Callback] peripheral(peripheral, didDiscoverIncludedServicesFor: 477EA600-A260-11E4-AE37-0002A5D50002, error: nil)
[08:48:31.524] Normal: Service Discovery returned nil Services.
[08:48:31.705] Debug: [Callback] peripheral(peripheral, didDiscoverCharacteristicsFor: 477EA600-A260-11E4-AE37-0002A5D50002, error: nil)
[08:48:31.706] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54070...
[08:48:31.706] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54070)
[08:48:31.706] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54080...
[08:48:31.706] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54080)
[08:48:31.706] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54090...
[08:48:31.706] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54090)
[08:48:31.707] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54091...
[08:48:31.707] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54091)
[08:48:31.707] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D540A0...
[08:48:31.707] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D540A0)
[08:48:31.707] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D540B0...
[08:48:31.707] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D540B0)
[08:48:31.708] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D540C0...
[08:48:31.708] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D540C0)
[08:48:31.708] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54082...
[08:48:31.708] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54082)
[08:48:31.715] Normal: Discovered 477EA600-A260-11E4-AE37-0002A5D54070, 477EA600-A260-11E4-AE37-0002A5D54080, 477EA600-A260-11E4-AE37-0002A5D54090, 477EA600-A260-11E4-AE37-0002A5D54091, 477EA600-A260-11E4-AE37-0002A5D540A0, 477EA600-A260-11E4-AE37-0002A5D540B0, 477EA600-A260-11E4-AE37-0002A5D540C0, and 477EA600-A260-11E4-AE37-0002A5D54082 Characteristics for Service 477EA600-A260-11E4-AE37-0002A5D50002.
[08:48:31.822] Debug: [Callback] peripheral(peripheral, didDiscoverIncludedServicesFor: 477EA600-A260-11E4-AE37-0002A5D50001, error: nil)
[08:48:31.823] Normal: Discovered Battery Service Included Services.
[08:48:31.823] Verbose: Discovering Characteristics for Battery Service...
[08:48:31.823] Debug: peripheral.discoverCharacteristics(nil, for: 180F)
[08:48:31.945] Debug: [Callback] peripheral(peripheral, didDiscoverCharacteristicsFor: 477EA600-A260-11E4-AE37-0002A5D50001, error: nil)
[08:48:31.946] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54010...
[08:48:31.946] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54010)
[08:48:31.946] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54020...
[08:48:31.946] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54020)
[08:48:31.946] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54022...
[08:48:31.946] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54022)
[08:48:31.947] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54030...
[08:48:31.947] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54030)
[08:48:31.947] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54040...
[08:48:31.947] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54040)
[08:48:31.947] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54050...
[08:48:31.947] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54050)
[08:48:31.953] Normal: Discovered 477EA600-A260-11E4-AE37-0002A5D54010, 477EA600-A260-11E4-AE37-0002A5D54020, 477EA600-A260-11E4-AE37-0002A5D54022, 477EA600-A260-11E4-AE37-0002A5D54030, 477EA600-A260-11E4-AE37-0002A5D54040, and 477EA600-A260-11E4-AE37-0002A5D54050 Characteristics for Service 477EA600-A260-11E4-AE37-0002A5D50001.
[08:48:32.004] Debug: [Callback] peripheral(peripheral, didDiscoverIncludedServicesFor: 180F, error: nil)
[08:48:32.004] Normal: Service Discovery returned nil Services.
[08:48:32.010] Normal: Appearance changed from Generic to Battery.
[08:48:32.122] Debug: [Callback] peripheral(peripheral, didDiscoverCharacteristicsFor: 180F, error: nil)
[08:48:32.123] Verbose: Discovering Descriptors for Characteristic Battery Level...
[08:48:32.123] Debug: peripheral.discoverDescriptors(for: 2A19)
[08:48:32.123] Normal: Discovered Battery Level Characteristics for Service Battery Service.
[08:48:32.182] Debug: [Callback] peripheral(peripheral, didDiscoverIncludedServicesFor: 180A, error: nil)
[08:48:32.182] Normal: Service Discovery returned nil Services.
[08:48:32.363] Debug: [Callback] peripheral(peripheral, didDiscoverCharacteristicsFor: 180A, error: nil)
[08:48:32.363] Verbose: Discovering Descriptors for Characteristic Manufacturer Name String...
[08:48:32.363] Debug: peripheral.discoverDescriptors(for: 2A29)
[08:48:32.363] Verbose: Discovering Descriptors for Characteristic Model Number String...
[08:48:32.364] Debug: peripheral.discoverDescriptors(for: 2A24)
[08:48:32.364] Verbose: Discovering Descriptors for Characteristic Serial Number String...
[08:48:32.364] Debug: peripheral.discoverDescriptors(for: 2A25)
[08:48:32.364] Verbose: Discovering Descriptors for Characteristic Hardware Revision String...
[08:48:32.364] Debug: peripheral.discoverDescriptors(for: 2A27)
[08:48:32.364] Verbose: Discovering Descriptors for Characteristic Firmware Revision String...
[08:48:32.364] Debug: peripheral.discoverDescriptors(for: 2A26)
[08:48:32.364] Verbose: Discovering Descriptors for Characteristic Software Revision String...
[08:48:32.364] Debug: peripheral.discoverDescriptors(for: 2A28)
[08:48:32.364] Verbose: Discovering Descriptors for Characteristic System ID...
[08:48:32.364] Debug: peripheral.discoverDescriptors(for: 2A23)
[08:48:32.364] Verbose: Discovering Descriptors for Characteristic IEEE 11073-20601 Regulatory Certification Data List...
[08:48:32.364] Debug: peripheral.discoverDescriptors(for: 2A2A)
[08:48:32.364] Verbose: Discovering Descriptors for Characteristic PnP ID...
[08:48:32.364] Debug: peripheral.discoverDescriptors(for: 2A50)
[08:48:32.367] Normal: Discovered Manufacturer Name String, Model Number String, Serial Number String, Hardware Revision String, Firmware Revision String, Software Revision String, System ID, IEEE 11073-20601 Regulatory Certification Data List, and PnP ID Characteristics for Service Device Information.
[08:48:32.424] Debug: [Callback] peripheral(peripheral, didDiscoverIncludedServicesFor: 477EA600-A260-11E4-AE37-0002A5D50005, error: nil)
[08:48:32.424] Normal: Service Discovery returned nil Services.
[08:48:32.485] Debug: [Callback] peripheral(peripheral, didDiscoverCharacteristicsFor: 477EA600-A260-11E4-AE37-0002A5D50005, error: nil)
[08:48:32.485] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54120...
[08:48:32.485] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54120)
[08:48:32.485] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54130...
[08:48:32.485] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54130)
[08:48:32.485] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54140...
[08:48:32.485] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54140)
[08:48:32.487] Normal: Discovered 477EA600-A260-11E4-AE37-0002A5D54120, 477EA600-A260-11E4-AE37-0002A5D54130, and 477EA600-A260-11E4-AE37-0002A5D54140 Characteristics for Service 477EA600-A260-11E4-AE37-0002A5D50005.
[08:48:32.544] Debug: [Callback] peripheral(peripheral, didDiscoverIncludedServicesFor: 477EA600-A260-11E4-AE37-0002A5D50004, error: nil)
[08:48:32.544] Normal: Service Discovery returned nil Services.
[08:48:32.665] Debug: [Callback] peripheral(peripheral, didDiscoverCharacteristicsFor: 477EA600-A260-11E4-AE37-0002A5D50004, error: nil)
[08:48:32.666] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D540D0...
[08:48:32.666] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D540D0)
[08:48:32.666] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D540D5...
[08:48:32.666] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D540D5)
[08:48:32.666] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D540E0...
[08:48:32.666] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D540E0)
[08:48:32.667] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54110...
[08:48:32.667] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54110)
[08:48:32.667] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54100...
[08:48:32.667] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54100)
[08:48:32.668] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D540D2...
[08:48:32.668] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D540D2)
[08:48:32.673] Normal: Discovered 477EA600-A260-11E4-AE37-0002A5D540D0, 477EA600-A260-11E4-AE37-0002A5D540D5, 477EA600-A260-11E4-AE37-0002A5D540E0, 477EA600-A260-11E4-AE37-0002A5D54110, 477EA600-A260-11E4-AE37-0002A5D54100, and 477EA600-A260-11E4-AE37-0002A5D540D2 Characteristics for Service 477EA600-A260-11E4-AE37-0002A5D50004.
[08:48:32.725] Debug: [Callback] peripheral(peripheral, didDiscoverIncludedServicesFor: A651FFF1-4074-4131-BCE9-56D4261BC7B1, error: nil)
[08:48:32.725] Normal: Service Discovery returned nil Services.
[08:48:32.845] Debug: [Callback] peripheral(peripheral, didDiscoverCharacteristicsFor: A651FFF1-4074-4131-BCE9-56D4261BC7B1, error: nil)
[08:48:32.845] Verbose: Discovering Descriptors for Characteristic A6510001-4074-4131-BCE9-56D4261BC7B1...
[08:48:32.845] Debug: peripheral.discoverDescriptors(for: A6510001-4074-4131-BCE9-56D4261BC7B1)
[08:48:32.846] Verbose: Discovering Descriptors for Characteristic A6510002-4074-4131-BCE9-56D4261BC7B1...
[08:48:32.846] Debug: peripheral.discoverDescriptors(for: A6510002-4074-4131-BCE9-56D4261BC7B1)
[08:48:32.846] Verbose: Discovering Descriptors for Characteristic A6510003-4074-4131-BCE9-56D4261BC7B1...
[08:48:32.846] Debug: peripheral.discoverDescriptors(for: A6510003-4074-4131-BCE9-56D4261BC7B1)
[08:48:32.846] Verbose: Discovering Descriptors for Characteristic A6510004-4074-4131-BCE9-56D4261BC7B1...
[08:48:32.846] Debug: peripheral.discoverDescriptors(for: A6510004-4074-4131-BCE9-56D4261BC7B1)
[08:48:32.847] Verbose: Discovering Descriptors for Characteristic A6510005-4074-4131-BCE9-56D4261BC7B1...
[08:48:32.847] Debug: peripheral.discoverDescriptors(for: A6510005-4074-4131-BCE9-56D4261BC7B1)
[08:48:32.852] Normal: Discovered A6510001-4074-4131-BCE9-56D4261BC7B1, A6510002-4074-4131-BCE9-56D4261BC7B1, A6510003-4074-4131-BCE9-56D4261BC7B1, A6510004-4074-4131-BCE9-56D4261BC7B1, and A6510005-4074-4131-BCE9-56D4261BC7B1 Characteristics for Service A651FFF1-4074-4131-BCE9-56D4261BC7B1.
[08:48:32.903] Debug: [Callback] peripheral(peripheral, didDiscoverIncludedServicesFor: 477EA600-A260-11E4-AE37-0002A5D50006, error: nil)
[08:48:32.903] Normal: Service Discovery returned nil Services.
[08:48:33.296] Debug: [Callback] peripheral(peripheral, didDiscoverCharacteristicsFor: 477EA600-A260-11E4-AE37-0002A5D50006, error: nil)
[08:48:33.296] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54210...
[08:48:33.296] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54210)
[08:48:33.297] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54220...
[08:48:33.297] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54220)
[08:48:33.297] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54230...
[08:48:33.297] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54230)
[08:48:33.298] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54240...
[08:48:33.298] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54240)
[08:48:33.298] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54250...
[08:48:33.298] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54250)
[08:48:33.298] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54254...
[08:48:33.298] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54254)
[08:48:33.299] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54260...
[08:48:33.299] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54260)
[08:48:33.299] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54270...
[08:48:33.299] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54270)
[08:48:33.299] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54280...
[08:48:33.299] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54280)
[08:48:33.300] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54290...
[08:48:33.300] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54290)
[08:48:33.300] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D542A0...
[08:48:33.300] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D542A0)
[08:48:33.300] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D542A2...
[08:48:33.300] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D542A2)
[08:48:33.301] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D542A4...
[08:48:33.301] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D542A4)
[08:48:33.301] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D542A6...
[08:48:33.301] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D542A6)
[08:48:33.301] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D542B0...
[08:48:33.301] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D542B0)
[08:48:33.301] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D542C0...
[08:48:33.301] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D542C0)
[08:48:33.310] Normal: Discovered 477EA600-A260-11E4-AE37-0002A5D54210, 477EA600-A260-11E4-AE37-0002A5D54220, 477EA600-A260-11E4-AE37-0002A5D54230, 477EA600-A260-11E4-AE37-0002A5D54240, 477EA600-A260-11E4-AE37-0002A5D54250, 477EA600-A260-11E4-AE37-0002A5D54254, 477EA600-A260-11E4-AE37-0002A5D54260, 477EA600-A260-11E4-AE37-0002A5D54270, 477EA600-A260-11E4-AE37-0002A5D54280, 477EA600-A260-11E4-AE37-0002A5D54290, 477EA600-A260-11E4-AE37-0002A5D542A0, 477EA600-A260-11E4-AE37-0002A5D542A2, 477EA600-A260-11E4-AE37-0002A5D542A4, 477EA600-A260-11E4-AE37-0002A5D542A6, 477EA600-A260-11E4-AE37-0002A5D542B0, and 477EA600-A260-11E4-AE37-0002A5D542C0 Characteristics for Service 477EA600-A260-11E4-AE37-0002A5D50006.

Beste Grüße
Tobias

Teil 2:

[08:48:33.352] Debug: [Callback] peripheral(peripheral, didDiscoverIncludedServicesFor: 477EA600-A260-11E4-AE37-0002A5D50007, error: nil)
[08:48:33.352] Normal: Service Discovery returned nil Services.
[08:48:33.476] Debug: [Callback] peripheral(peripheral, didDiscoverCharacteristicsFor: 477EA600-A260-11E4-AE37-0002A5D50007, error: nil)
[08:48:33.476] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54310...
[08:48:33.476] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54310)
[08:48:33.476] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54320...
[08:48:33.476] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54320)
[08:48:33.477] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54330...
[08:48:33.477] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54330)
[08:48:33.477] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54340...
[08:48:33.477] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54340)
[08:48:33.477] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54350...
[08:48:33.478] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54350)
[08:48:33.478] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54360...
[08:48:33.478] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54360)
[08:48:33.483] Normal: Discovered 477EA600-A260-11E4-AE37-0002A5D54310, 477EA600-A260-11E4-AE37-0002A5D54320, 477EA600-A260-11E4-AE37-0002A5D54330, 477EA600-A260-11E4-AE37-0002A5D54340, 477EA600-A260-11E4-AE37-0002A5D54350, and 477EA600-A260-11E4-AE37-0002A5D54360 Characteristics for Service 477EA600-A260-11E4-AE37-0002A5D50007.
[08:48:33.532] Debug: [Callback] peripheral(peripheral, didDiscoverIncludedServicesFor: 477EA600-A260-11E4-AE37-0002A5D50008, error: nil)
[08:48:33.532] Normal: Service Discovery returned nil Services.
[08:48:33.595] Debug: [Callback] peripheral(peripheral, didDiscoverCharacteristicsFor: 477EA600-A260-11E4-AE37-0002A5D50008, error: nil)
[08:48:33.596] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54410...
[08:48:33.596] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54410)
[08:48:33.596] Verbose: Discovering Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54420...
[08:48:33.596] Debug: peripheral.discoverDescriptors(for: 477EA600-A260-11E4-AE37-0002A5D54420)
[08:48:33.598] Normal: Discovered 477EA600-A260-11E4-AE37-0002A5D54410 and 477EA600-A260-11E4-AE37-0002A5D54420 Characteristics for Service 477EA600-A260-11E4-AE37-0002A5D50008.
[08:48:33.655] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54070, error: nil)
[08:48:33.657] Normal: Discovered Client Characteristic Configuration Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54070
[08:48:33.713] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54080, error: nil)
[08:48:33.714] Normal: Discovered Client Characteristic Configuration Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54080
[08:48:33.773] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54090, error: nil)
[08:48:33.775] Normal: Discovered Client Characteristic Configuration Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54090
[08:48:33.834] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54091, error: nil)
[08:48:33.835] Normal: Discovered Client Characteristic Configuration Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54091
[08:48:33.956] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D540A0, error: nil)
[08:48:33.957] Normal: Discovered Client Characteristic Configuration Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D540A0
[08:48:34.075] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D540B0, error: nil)
[08:48:34.077] Normal: Discovered Client Characteristic Configuration Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D540B0
[08:48:34.194] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D540C0, error: nil)
[08:48:34.195] Normal: Discovered Client Characteristic Configuration Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D540C0
[08:48:34.254] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54082, error: nil)
[08:48:34.255] Debug: [Callback] peripheral(peripheral, didDiscoverCharacteristicsFor: 180F, error: nil)
[08:48:34.255] Verbose: Discovering Descriptors for Characteristic Battery Level...
[08:48:34.255] Debug: peripheral.discoverDescriptors(for: 2A19)
[08:48:34.256] Normal: Discovered Client Characteristic Configuration Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54082
[08:48:34.257] Normal: Discovered Battery Level Characteristics for Service Battery Service.
[08:48:34.313] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54010, error: nil)
[08:48:34.314] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54020, error: nil)
[08:48:34.314] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54022, error: nil)
[08:48:34.315] Normal: Discovered Client Characteristic Configuration Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54010
[08:48:34.316] Normal: 477EA600-A260-11E4-AE37-0002A5D54020 has no Descriptors.
[08:48:34.316] Normal: 477EA600-A260-11E4-AE37-0002A5D54022 has no Descriptors.
[08:48:34.433] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54030, error: nil)
[08:48:34.434] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54040, error: nil)
[08:48:34.434] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54050, error: nil)
[08:48:34.434] Normal: Discovered Client Characteristic Configuration Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54030
[08:48:34.435] Normal: 477EA600-A260-11E4-AE37-0002A5D54040 has no Descriptors.
[08:48:34.435] Normal: 477EA600-A260-11E4-AE37-0002A5D54050 has no Descriptors.
[08:48:34.496] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 2A19, error: nil)
[08:48:34.496] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 2A29, error: nil)
[08:48:34.496] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 2A24, error: nil)
[08:48:34.496] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 2A25, error: nil)
[08:48:34.496] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 2A27, error: nil)
[08:48:34.497] Normal: Discovered Client Characteristic Configuration Descriptors for Characteristic Battery Level
[08:48:34.497] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 2A26, error: nil)
[08:48:34.497] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 2A28, error: nil)
[08:48:34.497] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 2A23, error: nil)
[08:48:34.497] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 2A2A, error: nil)
[08:48:34.497] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 2A50, error: nil)
[08:48:34.497] Normal: Manufacturer Name String has no Descriptors.
[08:48:34.497] Normal: Model Number String has no Descriptors.
[08:48:34.497] Normal: Serial Number String has no Descriptors.
[08:48:34.497] Normal: Hardware Revision String has no Descriptors.
[08:48:34.498] Normal: Firmware Revision String has no Descriptors.
[08:48:34.498] Normal: Software Revision String has no Descriptors.
[08:48:34.498] Normal: System ID has no Descriptors.
[08:48:34.498] Normal: IEEE 11073-20601 Regulatory Certification Data List has no Descriptors.
[08:48:34.499] Normal: PnP ID has no Descriptors.
[08:48:34.556] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54120, error: nil)
[08:48:34.557] Normal: 477EA600-A260-11E4-AE37-0002A5D54120 has no Descriptors.
[08:48:34.614] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54130, error: nil)
[08:48:34.616] Normal: Discovered Client Characteristic Configuration Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54130
[08:48:34.675] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54140, error: nil)
[08:48:34.676] Normal: Discovered Client Characteristic Configuration Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54140
[08:48:34.734] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D540D0, error: nil)
[08:48:34.735] Normal: Discovered Client Characteristic Configuration Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D540D0
[08:48:34.856] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D540D5, error: nil)
[08:48:34.857] Normal: 477EA600-A260-11E4-AE37-0002A5D540D5 has no Descriptors.
[08:48:34.915] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D540E0, error: nil)
[08:48:34.917] Normal: Discovered Client Characteristic Configuration Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D540E0
[08:48:34.974] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54110, error: nil)
[08:48:34.975] Normal: Discovered Client Characteristic Configuration Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54110
[08:48:35.035] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54100, error: nil)
[08:48:35.036] Normal: Discovered Client Characteristic Configuration Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54100
[08:48:35.092] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D540D2, error: nil)
[08:48:35.093] Normal: Discovered Client Characteristic Configuration Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D540D2
[08:48:35.156] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: A6510001-4074-4131-BCE9-56D4261BC7B1, error: nil)
[08:48:35.157] Normal: A6510001-4074-4131-BCE9-56D4261BC7B1 has no Descriptors.
[08:48:35.216] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: A6510002-4074-4131-BCE9-56D4261BC7B1, error: nil)
[08:48:35.217] Normal: Discovered Client Characteristic Configuration Descriptors for Characteristic A6510002-4074-4131-BCE9-56D4261BC7B1
[08:48:35.276] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: A6510003-4074-4131-BCE9-56D4261BC7B1, error: nil)
[08:48:35.277] Normal: Discovered Client Characteristic Configuration Descriptors for Characteristic A6510003-4074-4131-BCE9-56D4261BC7B1
[08:48:35.335] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: A6510004-4074-4131-BCE9-56D4261BC7B1, error: nil)
[08:48:35.336] Normal: A6510004-4074-4131-BCE9-56D4261BC7B1 has no Descriptors.
[08:48:35.395] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: A6510005-4074-4131-BCE9-56D4261BC7B1, error: nil)
[08:48:35.395] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54210, error: nil)
[08:48:35.395] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54220, error: nil)
[08:48:35.396] Normal: A6510005-4074-4131-BCE9-56D4261BC7B1 has no Descriptors.
[08:48:35.396] Normal: 477EA600-A260-11E4-AE37-0002A5D54210 has no Descriptors.
[08:48:35.397] Normal: 477EA600-A260-11E4-AE37-0002A5D54220 has no Descriptors.
[08:48:35.456] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54230, error: nil)
[08:48:35.456] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54240, error: nil)
[08:48:35.456] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54250, error: nil)
[08:48:35.456] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54254, error: nil)
[08:48:35.456] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54260, error: nil)
[08:48:35.456] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54270, error: nil)
[08:48:35.457] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54280, error: nil)
[08:48:35.457] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54290, error: nil)
[08:48:35.457] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D542A0, error: nil)
[08:48:35.457] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D542A2, error: nil)
[08:48:35.457] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D542A4, error: nil)
[08:48:35.457] Normal: Discovered Client Characteristic Configuration Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D54230
[08:48:35.457] Normal: 477EA600-A260-11E4-AE37-0002A5D54240 has no Descriptors.
[08:48:35.458] Normal: 477EA600-A260-11E4-AE37-0002A5D54250 has no Descriptors.
[08:48:35.458] Normal: 477EA600-A260-11E4-AE37-0002A5D54254 has no Descriptors.
[08:48:35.459] Normal: 477EA600-A260-11E4-AE37-0002A5D54260 has no Descriptors.
[08:48:35.459] Normal: 477EA600-A260-11E4-AE37-0002A5D54270 has no Descriptors.
[08:48:35.460] Normal: 477EA600-A260-11E4-AE37-0002A5D54280 has no Descriptors.
[08:48:35.461] Normal: 477EA600-A260-11E4-AE37-0002A5D54290 has no Descriptors.
[08:48:35.461] Normal: 477EA600-A260-11E4-AE37-0002A5D542A0 has no Descriptors.
[08:48:35.461] Normal: 477EA600-A260-11E4-AE37-0002A5D542A2 has no Descriptors.
[08:48:35.462] Normal: 477EA600-A260-11E4-AE37-0002A5D542A4 has no Descriptors.
[08:48:35.515] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D542A6, error: nil)
[08:48:35.515] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D542B0, error: nil)
[08:48:35.515] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D542C0, error: nil)
[08:48:35.515] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54310, error: nil)
[08:48:35.515] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54320, error: nil)
[08:48:35.515] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54330, error: nil)
[08:48:35.515] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54340, error: nil)
[08:48:35.516] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54350, error: nil)
[08:48:35.516] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54360, error: nil)
[08:48:35.516] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54410, error: nil)
[08:48:35.516] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 477EA600-A260-11E4-AE37-0002A5D54420, error: nil)
[08:48:35.516] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 2A19, error: nil)
[08:48:35.516] Normal: Discovered Client Characteristic Configuration Descriptors for Characteristic 477EA600-A260-11E4-AE37-0002A5D542A6
[08:48:35.517] Normal: 477EA600-A260-11E4-AE37-0002A5D542B0 has no Descriptors.
[08:48:35.517] Normal: 477EA600-A260-11E4-AE37-0002A5D542C0 has no Descriptors.
[08:48:35.517] Normal: 477EA600-A260-11E4-AE37-0002A5D54310 has no Descriptors.
[08:48:35.518] Normal: 477EA600-A260-11E4-AE37-0002A5D54320 has no Descriptors.
[08:48:35.518] Normal: 477EA600-A260-11E4-AE37-0002A5D54330 has no Descriptors.
[08:48:35.519] Normal: 477EA600-A260-11E4-AE37-0002A5D54340 has no Descriptors.
[08:48:35.519] Normal: 477EA600-A260-11E4-AE37-0002A5D54350 has no Descriptors.
[08:48:35.520] Normal: 477EA600-A260-11E4-AE37-0002A5D54360 has no Descriptors.
[08:48:35.520] Normal: 477EA600-A260-11E4-AE37-0002A5D54410 has no Descriptors.
[08:48:35.521] Normal: 477EA600-A260-11E4-AE37-0002A5D54420 has no Descriptors.
[08:48:35.521] Normal: Discovered Client Characteristic Configuration Descriptors for Characteristic Battery Level
[08:50:08.921] Normal: Scanner Off.
[08:50:27.122] Debug: [Callback] centralManager(central, didDisconnectPeripheral: peripheral, error: The specified device has disconnected from us.)
[08:50:27.122] Normal: Disconnected.

Hallo @toptobias ,

vielen Dank fürs Testen — damit ist es bestätigt: Deine HX991M erfordert BLE Bonding bevor Characteristics gelesen werden können. Das erklärt, warum die Integration bei dir keine Sensoren liefert, wenn du direkt per Bluetooth (Raspberry Pi etc.) verbindest.

Meine HX992X braucht kein Bonding — daher ist mir das beim Entwickeln nicht aufgefallen.

Gute Nachricht: Ein anderer User mit einer HX962V (ExpertClean) hatte dasselbe Problem und testet bereits einen Fix. Bonding funktioniert bei ihm schon, die Sensoren kommen durch.

Ich werde versuchen jetzt eine sauber Lösung in die Integration einzubauen, dann sollte es auch Geräte wie dein HX991M klappen.

Sobald die neue Version da ist, geb ich dir Bescheid.

Beste Grüße
Martin

Hallo @toptobias ,

danke nochmal für den nRF Connect Test — die Bestätigung mit dem Pairing-Dialog hat sehr geholfen!

v0.4.0 ist jetzt draußen mit vollem Pairing-Support für deine HX991M:

  • Die Integration erkennt beim Setup automatisch, dass deine Bürste BLE Bonding braucht
  • Pairing passiert automatisch über D-Bus (kein manuelles bluetoothctl nötig)
  • Im Setup-Dialog siehst du danach BLE Security: Paired (bonded)

Zum Testen:

  1. HACS → Philips Sonicare aktualisieren (v0.4.0)
  2. Home Assistant neu starten
  3. Bürste aufwecken (einschalten und eingeschalten lassen) → sollte automatisch erkannt werden
  4. Im Setup-Dialog auf Submit klicken → Pairing passiert im Hintergrund

Falls es nicht klappt: in den HA Logs nach philips_sonicare_ble schauen — dort steht jetzt klar ob „open GATT“ oder „BLE bonding required“.

Beste Grüße
Martin

1 „Gefällt mir“

Hallo Martin.

Super vielen Dank für deine Mühe. Nun klappt es auch bei meiner Zahnbürste. :grinning_face:
Ich sehe so viele Sensoren wie noch nie !

Super Support von Dir.
Beste Grüße
Tobias

2 „Gefällt mir“

@toptobias
Wunderbar. Das freut mich zu lesen. Danke für deine Testunterstützung!

Es ist schwer eine Integration zu bauen, wenn man nicht genug verschiedene Geräte zum Testen hat. Da hilft so ein Feedback sehr.

LG;
Martin

Hallo Martin

Mir ist da noch was aufgefallen. Die Zahnbürste ist verbunden und ich sehe alle Sensoren.
Nach dem Zähneputzen stelle ich die Bürste ab und nutze sie dann am Abend. Dann aber wird die Zahnbürste, von der Intergration ignoriert.
Erst ein Neustart der Intergartion erweckt alle Sensoren zum leben. Ich habe festgestellt, das dieses Problem so nach zwei Stunden auftaucht.
Es ist nicht ganz dringend, ich könnte ja eine Automation bauen die die Intergration aller 2 Stunden neu startet.
Ist nur ein Hinweis, falls du noch einen neue Version bauen magst.

Beste Grüße
Tobias

@toptobias
Ich würde das gerne genauer analysieren. Könntest du mir unter /config/logs gehen, dann auf raw logs und mir die relevante Auszuge zukommen lassen? Wenn die Zahnbürste weg ist, schläft der Coordinator, sollte dann aber vom Advertisment der Bürste beim Einschalten aufgeweckt werden.
Könntest du bitte ggf das Debug log der Integration einschalten, bevor du die Bürste aufweckst? Das wäre super.

Danke und LG
Martin