6 Minuten
ESPhome Bluetooth Low Energy Hub

Dieser Post enthält Themen, die bereits in zwei vorherige Posts beschrieben wurden:
Viele IoT-Geräte funken ihre Daten über Bluetooth LE. Um diese ins Smarthome integrieren zu können benötigt man ein Gerät mit Bluetooth-Schnittstelle, das als Broker fungiert. Ich nutze dafür seit Jahren zuverlässig einen Raspberry Pi Zero, der in Anbetracht des schlichten Abfangens und Weiterleitens von Paketdaten, unterfordert und überdimensioniert ist. Ein solches Bluetooth Hub lässt sich mittels eines ESP32 und ESPhome mit deutlich geringerem Stromverbrauch und Konfigurationsaufwand realisieren.
Umgezogen werden bei mir die folgenden Bluetooth Sensoren, die nun vom ESP32 ausgelesen und an Homeassistant weitergereicht werden:
Vorraussetzungen
Benötigt werden:
- ESP32 bspw. die Variante ESP32 D1 Mini, die ich für dieses Projekt verwendet habe
- ESPhome Add-On für Hass.io
- Chrome bzw. Edge Browser oder ESPhome Flasher zum einmaligen flashen der Firmware
Konfiguration
ESPhome Add-On
Im ersten Schritt muss das ESPhome Add-On installiert, aktiviert und gestartet werden. Anschließend kann über SMB oder das VS-Code-Add-On eine Datei namens secrets.yaml
angelegt werden, in der alle sensitiven Daten, wie WiFi-Passwörter oder Atomraketenstartcodes hinterlegt werden können. Diese Einträge können mittels Variablen bei der Konfiguration verwendet werden.
Die Datei muss im Pfad ./config/esphome/secrets.yaml
erstellt und kann anschließend diesem Schema und Beispieleinträgen gefüllt werden:
wifi_ssid: LanSolo
wifi_passwd: Wurstjunge12
ota_passwd: S4mtpf0te
ap_passwd: GoBBerw4rz3
Nach der Anlage der Datei, kann diese auch direkt aus dem ESPhome Dashboard in Homeassistant editiert werden. Dafür steht das Schlosssymbol neben dem Button SECRETS
zur verfügung:

Damit ist die Basis geschaffen, um die Konfiguration des Mikrokontrollers anzulegen. Im ESPhome Dashboard wird mit einem Klick auf das (+)-Icon eine neue Node erzeugt. So heißen die einzelnen eingebundenen Mikrokontroller, auf denen ESPhome läuft.
MiFlora Pflanzensensoren
Benötigt wird lediglich die MAC-Adresse des Sensors, um die Daten zu empfangen. In Firmwareversionen vor 2.3.1 sendeten die Pflanzensensoren noch ihren Batteriestand. Dies ist mit neueren Firmwares leider nicht mehr möglich.
Eine Beispielkonfiguration:
- platform: xiaomi_hhccjcy01
mac_address: "C4:7C:23:69:63:08"
temperature:
name: "Vietnamchili Temperature"
moisture:
name: "Vietnamchili Moisture"
illuminance:
name: "Vietnamchili Illuminance"
conductivity:
name: "Vietnamchili Soil Conductivity"
Ein kleiner Tipp noch zum Troubleshooting:
Meine Sensoren liefen auf der Firmware 2.7.0
. Damit konnten nicht zuverlässig Werte empfangen werden. Man kann die Firmware der Sensoren leicht mit der App Flower Care (Android / iOS) updaten. Die App setzt jedoch einen Account bei Xiaomi vorraus.
MiScale v1
Für die Waage von Xiaomi sollte der ESP32 das aktuelle Gewicht auslesen und zeitgleich noch einen weiteren Sensor für den BMI berechnen und an Homeassistant Senden. Die Berechnung des BMI hatte ich zuvor on Homeassitant mit einem Template Sensor gelöst. Diese Aufgabe kann nun der Mikrocontroller übernehmen. Auch für die Waage muss die MAC-Adresse bekannt sein:
- platform: xiaomi_miscale
mac_address: 'C4:3F:13:E0:AC:82'
weight:
id: "miscale_weight"
name: "Miscale Weight"
icon: mdi:scale-bathroom
accuracy_decimals: 1
on_value:
then:
- lambda: |-
const float bmi_factor = 0.29860551;
return id(miscale_bmi).publish_state(x * bmi_factor);
- platform: template
id: "miscale_bmi"
name: "Miscale BMI"
icon: mdi:human-pregnant
unit_of_measurement: ""
accuracy_decimals: 1
Diese Konfiguration enthält zwei Sensoren für Gewicht und BMI. Wird das Gewicht ausgelesen erfolgt automatisch die Berechnung des BMI. Der Faktor 0.29860551
muss gemäß der eigenen Körperwerte angepasst werden und setzt sich aus dem Kehrwert des Quadrats der Körperhöhe [m] zusammen:
Tipp zum Abschluss:
Für die Xiaomi Waage gibt es eine Custom Component, die es erlaubt mehrere Benutzer zu tracken und einen erweiterten Fundus an generierten Fitnessdaten liefert.
Mithermometer
Auch die Mithermometer lassen sich einfach über die MAC-Adresse einbinden. Am einfachsten lassen sie sich auslesen, wenn man den Advertising Type auf den Wert Custom
setzt. Wie das geht, habe ich in dem ursprünglichen Post zu dem Thermometer bereits beschrieben. Dort wurde jedoch der Funkstandard (Advertising Type) ATC1441
genutzt. Im gleichen Menü kann der Standard gewechselt werden.
Ein Konfiguration für ESPhome sieht dann wie folgt aus:
- platform: pvvx_mithermometer
mac_address: "A6:C3:23:E0:A8:42"
temperature:
name: "Mithermometer Kueche Temperature"
humidity:
name: "Mithermometer Kueche Humidity"
battery_level:
name: "Mithermometer Kueche Battery Level"
battery_voltage:
name: "Mithermometer Kueche Battery Voltage"
Vollständige Konfiguration des ESP32
Nun müssen nur noch alle drei Teilkonfigurationen zusammengeführt, kompiliert und auf den Mikrocontroller geflasht werden. In dieser Konfiguration können die Variablen aus der secrets.yaml
verwendet werden. Eine vollständige Konfiguration könnte wie folgend aussehen. Wichtig ist, dass ggf. der Eintrag im Feld board:
angepasst wird, wenn eine abweichende Variante vom ESP32 verwendet wird.
Der Platzhalter YOUR_GENERATED_ID
muss durch eine selbstgenerierte ID ersetzt werden. Diese kann direkt auf der ESP Home Webseite generiert und kopiert werden.
esphome:
name: esp32-btle-hub
comment: ESP32 Bluetooth LE Hub
platform: ESP32
board: esp32dev
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "YOUR_GENERATED_ID"
ota:
password: !secret ota_passwd
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_passwd
fast_connect: true
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Btle-Hub Fallback Hotspot"
password: !secret ap_passwd
captive_portal:
esp32_ble_tracker:
sensor:
# XIAOMI MISCALE
- platform: xiaomi_miscale
mac_address: 'C4:3F:13:E0:AC:82'
weight:
id: "miscale_weight"
name: "Miscale Weight"
icon: mdi:scale-bathroom
accuracy_decimals: 1
on_value:
then:
- lambda: |-
const float bmi_factor = 0.29860551;
return id(miscale_bmi).publish_state(x * bmi_factor);
- platform: template
id: "miscale_bmi"
name: "Miscale BMI"
icon: mdi:human-pregnant
unit_of_measurement: ""
accuracy_decimals: 1
# XIAOMI THERMOMETER
- platform: pvvx_mithermometer
mac_address: "A6:C3:23:E0:A8:42"
temperature:
name: "Mithermometer Kueche Temperature"
humidity:
name: "Mithermometer Kueche Humidity"
battery_level:
name: "Mithermometer Kueche Battery Level"
battery_voltage:
name: "Mithermometer Kueche Battery Voltage"
# XIAOMI MIFLORA PLANT SENSOR
- platform: xiaomi_hhccjcy01
mac_address: "C4:7C:23:69:63:08"
temperature:
name: "Vietnamchili Temperature"
moisture:
name: "Vietnamchili Moisture"
illuminance:
name: "Vietnamchili Illuminance"
conductivity:
name: "Vietnamchili Soil Conductivity"
Dieser Code muss im ESPhome Add-On im Editor zur Node eingegeben, gespeichert und kompilliert werden.
Firmware flashen
Im ESPhome Add-On gibt es mehrere Möglichkeiten eine Firmware auf den ESP32 zu installieren:

Der einfachste Weg ist die erste Option den Mikrocontroller direkt aus dem Browser heraus zu flashen. Vorraussetzung dafür ist der Browser Chrome oder Edge. Mit Firefox klappt es nicht.
Ich nutze immer die letzte Option des manuellen Downloads und lade die Firmware herunter und flashe sie anschließend mit dem ESPhome Flasher. Dieser Vorgang muss nur einmal erfolgen, da Nodes später Over-The-Air geupdated werden können.
Ist der Flashvorgang erfolgreich durchlaufen wird der ESP32 automatisch neu starten.
ESP32 Node in Hass einbinden
Homeassistant erkennt nach dem erfolgreichen Flashvorgang den ESP32 automatisch und bietet an diesen zu integrieren. Beim initialen Verbinden mit dem Controller muss dann das definierte Passwort, welches in der Variable !secret api_passwd
hinterlegt ist, eingegeben werden. Anschließend stehen alle Sensoren in Homeassistant zur Verfügung.
Sollte die automatischer Erkennung der Node nicht klappen, kann diese auch manuell eingebunden werden indem man im Menü Configuration > Devices & Services
den Button Add Integration
klickt und dort den Eintrag ESPHome
auswählt.
bluetooth esp32 miscale mithermometer miflora xiaomi
homeautomation sensoren esphome microcontroller
1080 Wörter
2022-01-13 23:11