3 Minuten
Xiaomi MiScale Waage in Homeassistant integrieren

Homeassistant unterstützt von Haus aus mehr als 1100 Komponenten. Leider zählt die Xiaomi MiScale Personenwaage nicht dazu. Das ist fürs Erste ärgerlich, aber gleichzeitig auch Ansporn kreative Wege einzuschlagen. Wer also gerne seinen Gewicht und ggf. dessen Verlauf im Frontend sehen möchte, braucht ein Programm, das Homeassistant die Daten der Waage in verwertbarer Weise zuspielt. Ich nutze dafür bt-mqtt-gateway. Das Gateway extrahiert die Daten diverser Bluetooth-Geräte und sendet sie über MQTT an Homeassistant.
MAC-Adresse der Waage herausfinden
Das geht am einfachsten mit dem hcitool
auf Linux. Einfach sicherstellen, dass Bluetooth am Gerät eingeschaltet ist und dann das Kommando ins Terminal tippen:
sudo hcitool lescan
Nun werden alle Bluetoothgeräte mit MAC-Adresse und Namen gelistet. Die Xiaomi-Waage hat bspw. den Namen MI_SCALE
. Die MAC-Adresse wird später benötigt und muss notiert werden.
BT-MQTT-GATEWAY
Installation
Die Installation wird auf der zugehörigen Githubseite ausführlich beschrieben. Zuerst müssen ein paar Abhängigkeiten auf Systemebene installiert werden. Anschließend wird ein virtualenv
angelegt, um die Installation der Python-Pakete sauber von den Systempaketen zu trennen.
sudo apt-get install git python3 python3-pip python3-wheel bluetooth bluez libglib2.0-dev
sudo pip3 install virtualenv
git clone https://github.com/zewelor/bt-mqtt-gateway.git
cd bt-mqtt-gateway
virtualenv -p python3 .venv
source .venv/bin/activate
sudo pip3 install -r requirements.txt
Konfiguration
Das Gateway benötigt eine Konfigurationsdatei. Ein Beispiel wird mit dem Gateway mitgeliefert. Dieses kann kopiert werden:
cp config.yaml.example config.yaml
nano config.yaml
Es müssen die Zugangsdaten zum MQTT-Broker und die MAC-Adresse der Waage eingetragen werden. Auch kann das Polling-Intervall angepasst werden, das bestimmt wie oft die Waage ausgelesen werden soll. Die config.yaml sollte am Ende so aussehen:
mqtt:
host: localhost/IP
username: USERNAME_MQTT_BROKER
password: PASSWORD_MQTT_BROKER
manager:
topic_subscription:
update_all:
topic: homeassistant/status
payload: online
workers:
miscale:
args:
mac: XX:XX:XX:XX:XX:XX
topic_prefix: miscale
update_interval: 3600
Sind alle Daten eingetragen und gespeichert, kann die erstellte Konfiguration getestet werden um zu schauen, ob die Waage erfolgreich ausgelesen wird:
sudo ./gateway.py
Systemd Service zum automatischen Starten anlegen
Es wird eine Beispielkonfiguration für einen Systemd Service mitgeliefert, die jedoch angepasst werden muss. Es muss der korrekte Pfad zum bt-mqtt-gateyway angepasst werden:
sudo cp bt-mqtt-gateway.service /etc/systemd/system/
sudo nano /etc/systemd/system/bt-mqtt-gateway.service (modify path of bt-mqtt-gateway)
Anschließend wird der Dienst registriert und aktiviert:
sudo systemctl daemon-reload
sudo systemctl start bt-mqtt-gateway
sudo systemctl status bt-mqtt-gateway
sudo systemctl enable bt-mqtt-gateway
Homeassistant
MQTT-Sensor für Gewicht
Homeassistant benötigt lediglich einen MQTT-Sensor, um den übermittelten Gewichtswert des Gateways entgegenzunehmen:
- platform: mqtt
name: "Gewicht"
state_topic: "miscale/weight/kg"
unit_of_measurement: "kg"
Template Sensor für BMI
Der Body-Mass-Index ergibt sich wie folgt aus dem Quotienten des Gewichts in Kg und der Körpergröße in Metern zum Quadrat:
Da das Gewicht in Kilogramm bereits in Homeassistant vorhanden ist, muss lediglich der hintenangestellte Faktor 1/h² ausrechnet werden. Bei einer Größe von bspw. 1,84m ergibt sich im Kehrwert also 0,29536862. Diesen Wert benötigen wird für den BMI-Sensor in Homeassistant. Der Sensor muss so aussehen und gibt den BMI-Wert auf eine Nachkommastelle heraus:
- platform: template
sensors:
bmi:
friendly_name: BMI
value_template: "{{ '%.1f' | format(states('sensor.gewicht') | float * 0.29536862) }}"