“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:
- Bluetooth Low Energy Monitor (ble_monitor) → Installieren
- 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)
- Einstellungen → Integrationen → Xiaomi BLE hinzufügen
- Waage einschalten (draufstellen), HA erkennt sie automatisch
- 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:
- Gerät hinzufügen
- MAC-Adresse der Waage eintragen (z.B. im BLE-Scanner oder xiaomi_ble ersichtlich)
- Encryption Key eintragen ← kritisch!
- Name vergeben (z.B. “Waage”)
Nach der Konfiguration entstehen folgende Entitäten:
| Entität | Beschreibung |
|---|---|
sensor.ble_weight_waage | Rohgewicht in kg |
sensor.ble_impedance_waage | Bioelektrische Impedanz (Ohm) |
sensor.ble_heart_rate_waage | Herzfrequenz beim Messen |
sensor.ble_rssi_waage | Signalstä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:
| Feld | Wert |
|---|---|
| Name | Dein Name |
| Geburtsdatum | YYYY-MM-DD |
| Geschlecht | male / female |
| Größe | in cm |
| Gewicht-Sensor | sensor.ble_weight_waage |
| Impedanz-Sensor | sensor.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ät | Beschreibung |
|---|---|
sensor.<NAME>_weight | Gewicht |
sensor.<NAME>_body_fat | Körperfett % |
sensor.<NAME>_muscle_mass | Muskelmasse kg |
sensor.<NAME>_bmi | BMI |
sensor.<NAME>_visceral_fat | Viszerales Fett |
sensor.<NAME>_bone_mass | Knochenmasse |
sensor.<NAME>_water | Wasseranteil % |
sensor.<NAME>_basal_metabolism | Grundumsatz 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
| Problem | Ursache | Fix |
|---|---|---|
Alle BLE-Sensoren unknown nach Neustart | Encryption Key fehlt in ble_monitor | Schritt 3 wiederholen |
bodymiscale: impedance_unavailable | Impedanz-Sensor falsch konfiguriert | bodymiscale neu konfigurieren, Schritt 4 |
| Nur Gewicht, kein Körperfett | Impedanz kommt nicht an | Kurz still stehen bis Waage piept |
| Sensoren kommen erst nach Minuten | Passiver BLE-Scan hat Verzögerung | Normal — 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 dauerhaftunknownbleiben: Troubleshooting-Guide.