“Viele Daten hat der Todesstern gesammelt. Deine Körperzusammensetzung gehört jetzt auch dazu.”

Was du am Ende hast

Nach dieser Anleitung liefert deine Xiaomi Körperwaage bei jeder Wägung automatisch:

  • Gewicht
  • Körperfett %
  • Muskelmasse
  • BMI
  • Viszerales Fett
  • Knochenmasse, Wasseranteil, Grundumsatz

Alles als HA-Entitäten — für Dashboards, Automationen, Verlaufsgraphen.

Voraussetzungen

  • Home Assistant (HAOS oder Supervised)
  • Xiaomi Körperwaage mit BLE (z.B. MJTZC01YM, Mi Body Composition Scale 2)
  • Bluetooth-Adapter am HA-Host (intern oder USB-Dongle)
  • HACS installiert

Architektur

Waage (BLE) → ble_monitor (passiver Scanner) → bodymiscale (Berechnung) → HA-Entitäten

Zwei Custom Integrations spielen zusammen:

  • ble_monitor: Lauscht passiv auf BLE-Pakete der Waage, dekodiert Gewicht + Impedanz
  • bodymiscale: Nimmt Gewicht + Impedanz und berechnet daraus Körperfett, Muskelmasse etc. (basierend auf Alter, Größe, Geschlecht)

Schritt 1: HACS-Integrationen installieren

In HACS → Integrationen → Suche:

  1. Bluetooth Low Energy Monitor (ble_monitor) → Installieren
  2. bodymiscale → Installieren

Danach HA neu starten.

Schritt 2: Waage mit HA pairen (Encryption Key holen)

Neuere Xiaomi-Waagen (MiBeacon V5) verschlüsseln ihre BLE-Daten. Du brauchst den Bindkey (Encryption Key).

Option A: Über xiaomi_ble (einfachster Weg)

  1. Einstellungen → Integrationen → Xiaomi BLE hinzufügen
  2. Waage einschalten (draufstellen), HA erkennt sie automatisch
  3. Integration konfigurieren — HA speichert den Bindkey intern

Den Key dann aus der Config auslesen:

ssh <USER>@<HA-HOST>

sudo cat /homeassistant/.storage/core.config_entries | python3 -c "
import sys, json
data = json.load(sys.stdin)
for e in data['data']['entries']:
    if e.get('domain') == 'xiaomi_ble':
        d = e.get('data', {})
        if 'bindkey' in str(d).lower() or 'key' in str(d).lower():
            print(json.dumps(d, indent=2))
"

Option B: Mi Fit App + Bluetooth Sniffer

Mit Tools wie Xiaomi Cloud Tokens Extractor oder direkt über die Mi Fit App den Bindkey exportieren.

Schritt 3: ble_monitor konfigurieren

Einstellungen → Integrationen → Bluetooth Low Energy Monitor → Konfigurieren:

  1. Gerät hinzufügen
  2. MAC-Adresse der Waage eintragen (z.B. im BLE-Scanner oder xiaomi_ble ersichtlich)
  3. Encryption Key eintragen ← kritisch!
  4. Name vergeben (z.B. “Waage”)

Nach der Konfiguration entstehen folgende Entitäten:

EntitätBeschreibung
sensor.ble_weight_waageRohgewicht in kg
sensor.ble_impedance_waageBioelektrische Impedanz (Ohm)
sensor.ble_heart_rate_waageHerzfrequenz beim Messen
sensor.ble_rssi_waageSignalstärke

Wichtig: Den Encryption Key direkt in der ble_monitor UI eintragen — nicht nur in xiaomi_ble. Beide Integrationen teilen die Konfiguration nicht automatisch.

Schritt 4: bodymiscale konfigurieren

Einstellungen → Integrationen → bodymiscale → Gerät hinzufügen:

FeldWert
NameDein Name
GeburtsdatumYYYY-MM-DD
Geschlechtmale / female
Größein cm
Gewicht-Sensorsensor.ble_weight_waage
Impedanz-Sensorsensor.ble_impedance_waage

Wichtig: Beide Sensoren müssen aus derselben Integration kommen (beide von ble_monitor). Mischung aus xiaomi_ble (Gewicht) + ble_monitor (Impedanz) führt zu unzuverlässigen Berechnungen.

Nach der Konfiguration entstehen:

EntitätBeschreibung
sensor.<NAME>_weightGewicht
sensor.<NAME>_body_fatKörperfett %
sensor.<NAME>_muscle_massMuskelmasse kg
sensor.<NAME>_bmiBMI
sensor.<NAME>_visceral_fatViszerales Fett
sensor.<NAME>_bone_massKnochenmasse
sensor.<NAME>_waterWasseranteil %
sensor.<NAME>_basal_metabolismGrundumsatz kcal
bodymiscale.<NAME>Gesamt-Status (ok / problem)

Schritt 5: Dashboard

Beispiel-Dashboard-Card für die Körperzusammensetzung:

type: horizontal-stack
cards:
  - type: tile
    entity: sensor.<NAME>_weight
    name: Gewicht
    icon: mdi:scale-bathroom
    vertical: true
  - type: tile
    entity: sensor.<NAME>_body_fat
    name: Körperfett
    icon: mdi:percent
    vertical: true
  - type: tile
    entity: sensor.<NAME>_muscle_mass
    name: Muskelmasse
    icon: mdi:arm-flex
    vertical: true
  - type: tile
    entity: sensor.<NAME>_bmi
    name: BMI
    icon: mdi:human
    vertical: true

Verlaufsgraph (30 Tage):

type: statistics-graph
title: Gewicht Verlauf
entities:
  - entity: sensor.<NAME>_weight
    name: Gewicht
days_to_show: 30
period: day
chart_type: line
stat_types:
  - mean

Verifikation

Auf die Waage stellen, Messung abwarten (Waage zeigt Gewicht an + piept). Danach:

HA_TOKEN="<DEIN-HA-TOKEN>"

curl -s -H "Authorization: Bearer $HA_TOKEN" \
  "http://<HA-HOST>:8123/api/states" | python3 -c "
import sys, json
states = json.load(sys.stdin)
for eid in ['sensor.ble_weight_waage', 'sensor.ble_impedance_waage']:
    s = next((x for x in states if x['entity_id'] == eid), None)
    if s: print(f'{eid}: {s[\"state\"]}')
"

Wenn beide Werte kommen → bodymiscale rechnet automatisch → alle sensor.<NAME>_* Entitäten füllen sich.

Häufige Probleme

ProblemUrsacheFix
Alle BLE-Sensoren unknown nach NeustartEncryption Key fehlt in ble_monitorSchritt 3 wiederholen
bodymiscale: impedance_unavailableImpedanz-Sensor falsch konfiguriertbodymiscale neu konfigurieren, Schritt 4
Nur Gewicht, kein KörperfettImpedanz kommt nicht anKurz still stehen bis Waage piept
Sensoren kommen erst nach MinutenPassiver BLE-Scan hat VerzögerungNormal — keine Aktion nötig

Neustart-Falle: Nach jedem HA-Neustart sind die Sensoren kurz unknown. Erst nach der nächsten Wägung kommen Werte. Das ist normal. Wenn sie dauerhaft unknown bleiben: Troubleshooting-Guide.