ESP32 BLE Anwesenheitserkennung in Home Assistant
ESP32 BLE Anwesenheitserkennung in Home Assistant: ESPresense, ESPHome BLE Tracker und Companion App im Vergleich — Schritt für Schritt erklärt.
Affiliate-Hinweis: Einige Links in diesem Artikel sind Affiliate-Links. Beim Kauf über diese Links erhalten wir eine kleine Provision — für dich ändert sich am Preis nichts.
Warum BLE-Anwesenheitserkennung?
Bewegungsmelder sind dumm. Klingt hart, ist aber so. Ein PIR-Sensor merkt, wenn du durch den Flur rennst — aber sobald du auf der Couch sitzt und Netflix schaust, denkt er nach fünf Minuten, der Raum sei leer. Licht aus, Heizung runter, du fluchst im Dunkeln.
Die Lösung heißt Bluetooth Low Energy (BLE) Anwesenheitserkennung mit einem ESP32. Statt auf Bewegung zu reagieren, erkennt das System, ob sich ein bestimmtes Gerät — dein Smartphone, deine Smartwatch, ein BLE-Beacon — tatsächlich im Raum befindet. Solange du da bist, weiß Home Assistant Bescheid. Egal ob du dich bewegst oder nicht.
In diesem Artikel zeige ich dir drei bewährte Methoden, wie du das umsetzt:
- ESPresense — eigenständige Firmware mit MQTT-Anbindung
- ESPHome BLE Tracker — direkt in ESPHome integriert
- Home Assistant Companion App — BLE Transmitter auf dem Smartphone
Für jede Methode bekommst du eine konkrete Einrichtung, YAML-Configs und Automations-Beispiele, die du sofort verwenden kannst.
Was ist BLE-Anwesenheitserkennung und warum brauchst du sie?
Bluetooth Low Energy (BLE) ist ein stromsparendes Funkprotokoll, das in praktisch jedem modernen Smartphone, jeder Smartwatch und vielen IoT-Geräten steckt. Diese Geräte senden regelmäßig sogenannte Advertisement-Pakete — kurze Funksignale, die ihre Anwesenheit ankündigen.
Ein ESP32 hat einen eingebauten BLE-Empfänger. Wenn du in jedem Raum einen ESP32 platzierst, kann jeder davon diese Signale empfangen und die Signalstärke (RSSI) messen. Daraus lässt sich ableiten, welcher ESP32 dem Gerät am nächsten ist — und damit in welchem Raum sich die Person befindet.
Vorteile gegenüber Bewegungsmeldern
| Eigenschaft | Bewegungsmelder (PIR) | BLE-Anwesenheit |
|---|---|---|
| Erkennt Stillsitzen | ❌ | ✅ |
| Raumgenaue Zuordnung | ❌ | ✅ |
| Personenunterscheidung | ❌ | ✅ |
| Reaktionszeit | Sofort | 5–30 Sekunden |
| Kosten pro Raum | 10–25 € | 5–10 € (ESP32) |
Der große Vorteil: Du kannst nicht nur erkennen, ob jemand da ist, sondern auch wer. Das eröffnet Automationen wie: „Wenn Philipp ins Büro geht, starte seine Playlist. Wenn Sarah ins Wohnzimmer kommt, dimme das Licht auf 60 %.”
Methode 1: ESPresense — Der Spezialist
ESPresense ist eine eigenständige Firmware für den ESP32, die speziell für BLE-Anwesenheitserkennung entwickelt wurde. Sie ist das ausgereifteste Projekt in diesem Bereich und bietet Features, die über einfaches Tracking hinausgehen.
Was kann ESPresense?
- Raumgenaue Ortung über RSSI-Triangulation
- Fingerprinting von Geräten (auch ohne feste MAC-Adresse)
- iOS-Unterstützung über Identity Resolving Keys (IRK)
- MQTT-Integration — perfekt für Home Assistant
- Web-UI zur Konfiguration direkt auf dem ESP32
Hardware-Voraussetzungen
Du brauchst pro Raum:
- 1x ESP32-Board (empfohlen: ESP32-C3 Mini (2er-Pack) oder ESP32-S3 DevKit — stromsparend und günstig)
- 1x USB-C Ladegerät 40W (4-Port) + Kabel
- Dein Smartphone oder eine Smartwatch als Beacon
Ein ESP32-DevKit bekommst du für unter 5 € — das ist günstiger als jeder vernünftige Bewegungsmelder.
Installation
-
Firmware flashen: Geh auf espresense.com/firmware und flashe die Firmware direkt im Browser über Web Serial. Kein zusätzliches Tool nötig.
-
WLAN konfigurieren: Nach dem Flashen öffnet der ESP32 einen eigenen Access Point. Verbinde dich damit und gib deine WLAN-Zugangsdaten ein.
-
MQTT konfigurieren: In der Web-UI (erreichbar über die IP des ESP32) trägst du deinen MQTT-Broker ein:
- MQTT Host: IP deines Brokers (z. B.
192.168.1.100) - MQTT Port:
1883 - Room Name: Der Name des Raums (z. B.
wohnzimmer)
- MQTT Host: IP deines Brokers (z. B.
-
Gerät enrollen: Unter
http://IP-DES-ESP/uikannst du Geräte hinzufügen. Für Android-Smartphones reicht die MAC-Adresse. Für iOS-Geräte brauchst du den IRK (Identity Resolving Key) — ESPresense hat dafür einen Enroll-Button in der UI.
MQTT-Topics
ESPresense sendet die Daten an strukturierte Topics:
espresense/rooms/wohnzimmer/DEVICE-ID
Die Payload enthält unter anderem:
distance— geschätzte Entfernung in Meternrssi— Signalstärke (je negativer, desto weiter weg)name— Gerätename
Home Assistant Integration
Wenn dein MQTT-Broker läuft, erkennt Home Assistant die ESPresense-Geräte automatisch per MQTT Discovery. Du bekommst für jedes Gerät einen device_tracker mit dem aktuellen Raum als State.
Falls du die automatische Discovery nicht nutzt, kannst du den Sensor auch manuell anlegen:
mqtt:
sensor:
- name: "Philipp Entfernung Wohnzimmer"
state_topic: "espresense/rooms/wohnzimmer/philipp-handy"
value_template: "{{ value_json.distance }}"
unit_of_measurement: "m"
Methode 2: ESPHome BLE Tracker
Wenn du bereits ESPHome nutzt, brauchst du keine separate Firmware. ESPHome hat eine eingebaute esp32_ble_tracker-Komponente, die BLE-Geräte erkennen kann.
Wann ESPHome statt ESPresense?
- Du nutzt den ESP32 bereits für andere Sensoren (Temperatur, Luftfeuchtigkeit, Stromverbrauch)
- Du willst alles in einer Firmware verwalten
- Du brauchst keine Triangulation über mehrere Räume
Basis-Konfiguration
esp32_ble_tracker:
scan_parameters:
interval: 1100ms
window: 1100ms
active: true
binary_sensor:
- platform: ble_presence
mac_address: "AA:BB:CC:DD:EE:FF"
name: "Philipp Anwesend"
device_class: presence
Diese einfache Config erkennt, ob ein Gerät mit der angegebenen MAC-Adresse in BLE-Reichweite ist. Die binary_sensor-Entity wird on, sobald das Gerät erkannt wird, und off, wenn es verschwindet.
RSSI-basierte Entfernung
Für eine grobe Entfernungsschätzung kannst du den RSSI-Wert als Sensor exponieren:
sensor:
- platform: ble_rssi
mac_address: "AA:BB:CC:DD:EE:FF"
name: "Philipp RSSI Büro"
filters:
- exponential_moving_average:
alpha: 0.3
send_every: 1
Der Exponential Moving Average glättet die Werte — BLE-Signalstärke schwankt naturgemäß stark.
Format BLE Tracker (HACS-Integration)
Für eine komfortablere Lösung gibt es den Format BLE Tracker als HACS-Integration. Diese nutzt die BLE-Proxy-Funktion von ESPHome und verarbeitet die Daten direkt in Home Assistant:
- HACS installieren (falls noch nicht vorhanden)
- In HACS nach „Format BLE Tracker” suchen und installieren
- Integration in Home Assistant hinzufügen
- Geräte zuweisen
Der Vorteil: Du bekommst eine saubere UI zur Geräteverwaltung und Raumzuordnung, ohne YAML-Dateien bearbeiten zu müssen.
Methode 3: Home Assistant Companion App
Die einfachste Methode — aber auch die eingeschränkteste. Die Home Assistant Companion App auf deinem Smartphone kann als BLE Transmitter fungieren und regelmäßig BLE-Signale senden.
Einrichtung (Android)
- Home Assistant Companion App öffnen
- Einstellungen → Companion App → Sensoren → BLE Transmitter
- BLE Transmitter aktivieren
- Transmit Power und Intervall konfigurieren
Einrichtung (iOS)
Auf iOS ist die BLE-Transmitter-Funktion eingeschränkter, weil Apple den Hintergrund-Bluetooth-Zugriff limitiert. Die App sendet im Hintergrund seltener Signale. Für zuverlässige Erkennung empfehle ich auf iOS eher ESPresense mit IRK-Enrollment.
Vor- und Nachteile
Vorteile:
- Keine zusätzliche Hardware (ESP32 wird trotzdem als Empfänger gebraucht)
- Einfachste Einrichtung
Nachteile:
- Akkuverbrauch auf dem Smartphone
- iOS sendet im Hintergrund unzuverlässig
- Keine Triangulation ohne zusätzliches Setup
Vergleich: Welche Methode passt zu dir?
| Kriterium | ESPresense | ESPHome BLE | Companion App |
|---|---|---|---|
| Raumgenauigkeit | ⭐⭐⭐ | ⭐⭐ | ⭐ |
| iOS-Support | ⭐⭐⭐ (IRK) | ⭐ | ⭐⭐ |
| Einrichtungsaufwand | Mittel | Gering | Sehr gering |
| Multi-Raum | ✅ Triangulation | ⚠️ Manuell | ❌ |
| Zusätzliche Sensoren | ❌ Nur BLE | ✅ Alles in ESPHome | ❌ |
| MQTT erforderlich | ✅ | ❌ | ❌ |
| Akkuverbrauch Handy | Keiner | Keiner | Mittel |
Meine Empfehlung:
- ESPresense, wenn du raumgenaue Erkennung in mehreren Räumen willst. Das ist die Königsdisziplin.
- ESPHome BLE Tracker, wenn du bereits ESP32s mit ESPHome im Einsatz hast und einfach Anwesenheit pro Raum ergänzen willst.
- Companion App, wenn du nur wissen willst, ob jemand zuhause ist (nicht in welchem Raum).
Praxis: Automationen mit BLE-Anwesenheit
Jetzt wird’s spannend. Eine Anwesenheitserkennung ist nur so gut wie die Automationen, die darauf aufbauen. Hier ein paar Beispiele:
Licht an bei Betreten, aus bei Verlassen
automation:
- alias: "Büro Licht an wenn Philipp da"
trigger:
- platform: state
entity_id: sensor.espresense_philipp_handy
to: "buero"
action:
- service: light.turn_on
target:
entity_id: light.buero_decke
data:
brightness_pct: 80
color_temp_kelvin: 4000
- alias: "Büro Licht aus wenn Philipp weg"
trigger:
- platform: state
entity_id: sensor.espresense_philipp_handy
from: "buero"
action:
- delay: "00:02:00"
- condition: not
conditions:
- condition: state
entity_id: sensor.espresense_philipp_handy
state: "buero"
- service: light.turn_off
target:
entity_id: light.buero_decke
Der 2-Minuten-Delay beim Ausschalten verhindert Flackern, falls das BLE-Signal kurz aussetzt.
Heizung nach Person steuern
Anwesenheitserkennung ist der perfekte Partner für eine smarte Heizungssteuerung — wer nicht da ist, muss auch nicht heizen.
automation:
- alias: "Wohnzimmer Heizung nach Anwesenheit"
trigger:
- platform: state
entity_id: binary_sensor.philipp_anwesend_wohnzimmer
action:
- service: climate.set_temperature
target:
entity_id: climate.wohnzimmer
data:
temperature: >
{% if trigger.to_state.state == 'on' %}
21
{% else %}
17
{% endif %}
Musik folgt dir durchs Haus
automation:
- alias: "Musik folgt Philipp"
trigger:
- platform: state
entity_id: sensor.espresense_philipp_handy
condition:
- condition: state
entity_id: media_player.spotify
state: "playing"
action:
- service: media_player.select_source
target:
entity_id: media_player.spotify
data:
source: "{{ trigger.to_state.state | replace('_', ' ') | title }}"
Tipps für zuverlässige Erkennung
ESP32 Platzierung
- Mittig im Raum montieren, nicht in einer Ecke
- Höhe: 1,5–2 Meter (etwa Brusthöhe)
- Abstand zu Metall und dicken Wänden halten
- Direkte Sichtlinie zum typischen Aufenthaltsort ist ideal
Signalstabilität
BLE-Signale schwanken — das ist normal. Diese Maßnahmen helfen:
- Glättung: Exponential Moving Average in ESPHome oder Absorption-Filter in ESPresense
- Hysterese: Gerät erst als „weg” markieren, wenn es 30–60 Sekunden nicht mehr gesehen wurde
- Max Distance: In ESPresense kannst du eine maximale Entfernung pro Raum setzen — alles darüber gilt als „nicht im Raum”
Mehrere Räume kalibrieren
Bei ESPresense lohnt sich die Kalibrierung der absorption- und tx_power-Werte:
- Stell dich mit deinem Smartphone 1 Meter vor den ESP32
- Notiere den RSSI-Wert
- Passe
absorptionan, bis die angezeigte Entfernung ungefähr 1 Meter zeigt - Wiederhole für jeden Raum
Häufige Probleme und Lösungen
Android-Gerät wird nicht erkannt
- Stelle sicher, dass Bluetooth und Standort aktiviert sind
- Prüfe, ob die Home Assistant Companion App im Hintergrund laufen darf (Akku-Optimierung deaktivieren)
- Manche Android-Hersteller (Xiaomi, Huawei) killen aggressiv Hintergrund-Apps
iOS-Gerät springt zwischen Räumen
- Nutze IRK statt MAC-Adresse (Apple randomisiert BLE-MACs)
- Erhöhe die Glättung (höherer
absorption-Wert in ESPresense) - Verringere das Scan-Intervall
ESP32 verliert WLAN
- Nutze ein Board mit externer Antenne für besseren WLAN-Empfang
- Setze einen statischen DHCP-Lease im Router
- Bei ESPresense: Aktiviere den Watchdog-Timer für automatischen Neustart
Fazit
BLE-Anwesenheitserkennung mit dem ESP32 ist eins der besten Upgrades, die du deinem Smart Home verpassen kannst. Für unter 10 € pro Raum bekommst du eine Erkennung, die Bewegungsmeldern in jeder Hinsicht überlegen ist — zumindest wenn es darum geht, ob jemand da ist, nicht nur ob sich gerade jemand bewegt hat.
ESPresense ist die beste Wahl für Multi-Raum-Setups mit präziser Ortung. ESPHome BLE Tracker ist perfekt, wenn du deine bestehenden ESPHome-Nodes erweitern willst. Und die Companion App taugt als schneller Einstieg zum Ausprobieren.
Fang mit einem Raum an — Büro oder Wohnzimmer, wo du die meiste Zeit verbringst. Wenn das läuft, ist die Erweiterung auf weitere Räume ein Kinderspiel.
Weiterführende Artikel:
- ESP32 mit ESPHome in Home Assistant einbinden
- MQTT-Broker in Home Assistant mit Mosquitto einrichten
- Home Assistant Automationen für Anfänger
- Stromverbrauch messen mit ESP32 und Home Assistant
- FRITZ!Box in Home Assistant einbinden — wer keine BLE-Hardware verbauen will, kann Anwesenheit auch per Router-Integration erkennen.