📖 Handbuch
Vollständige Dokumentation für BLE Presence v1.0
Voraussetzungen
Master (Raspberry Pi)
- Raspberry Pi Zero 1W/2W / 3/4/5 mit Bluetooth
- DietPi OS (Trixie)
- LAN/WLAN-Zugang
- Python 3.9+
- PHP 8.x mit Apache
- Mosquitto MQTT Broker
Scanner
- ESP32-WROOM, ESP32-S3
- Stromversorgung via USB
- WLAN-Zugang
Zu trackende Geräte
Jedes BLE-Gerät, das regelmäßig Advertisements sendet — z.B. BLE-Tags, Shelly-Geräte, iBeacons. Protokolle: BLE/Eddystone/BTHome.
Button-Events funktionieren aktuell nur mit BTHome Devices, z.B. Shelly BLU Button.
Aufgrund der wechselnden MAC-Adresse eignen sich keine AirTags und AirTag-kompatible Geräte.
Empfehlung: Shelly BLU Button, Feasycom Eddystone Devices.
Geräte-Katalog
Hier findest du eine Übersicht kompatibler BLE-Geräte, die mit BLE Presence getestet wurden. Die Tabelle wird laufend erweitert.
| Hersteller | Bezeichnung | Formfaktor | Protokolle | UUID konfig. | Button | Batterie | Lebensdauer | Bewertung | Bezugsquelle | Preis ca. |
|---|---|---|---|---|---|---|---|---|---|---|
| Shelly | BLU Button | Button | BTHome | — | ✅ | ✅ CR2032 | ~1 Jahr | ⭐⭐⭐⭐⭐ | shelly.com | ~10 € |
| Shelly | BLU Door/Window | Sensor | BTHome | — | — | ✅ CR2032 | ~1 Jahr | ⭐⭐⭐⭐ | shelly.com | ~15 € |
| Feasycom | FSC-BP108 | Tag | Eddystone / iBeacon | ✅ | — | ✅ CR2477 | ~2–3 Jahre | ⭐⭐⭐⭐⭐ | feasycom.com | ~8 € |
| Feasycom | FSC-BP104 | Tag | Eddystone / iBeacon | ✅ | — | ✅ CR2032 | ~1 Jahr | ⭐⭐⭐⭐ | feasycom.com | ~5 € |
| Android Handy | Beacon Scope App | Smartphone | iBeacon / Eddystone / AltBeacon | ✅ | — | — | — | ⭐⭐⭐ | Google Play | Kostenlos |
Feasycom-Tags werden ab Werk mit einer Standard-UUID ausgeliefert. Diese muss vor der Nutzung über die Feasycom-App geändert werden, da sonst alle Tags die gleiche Kennung senden und nicht unterscheidbar sind.
Geräte mit konfigurierbarer UUID sind ideal, da sie eine feste Kennung senden. Geräte mit wechselnder MAC-Adresse (z.B. AirTags) funktionieren nicht mit BLE Presence.
Android App
Für die Einrichtung und Konfiguration von BLE-Tags wird die jeweilige Hersteller-App benötigt.
Hersteller-Apps
| Hersteller | App | Funktionen |
|---|---|---|
| Feasycom | Feasycom Tool | UUID/Namespace konfigurieren, Sende-Intervall, TX Power, Protokoll wählen |
| Shelly | Shelly Smart Control | Button-Aktionen konfigurieren, Firmware-Updates |
UUID konfigurieren
Bei Geräten mit konfigurierbarer UUID (z.B. Feasycom-Tags) wird die UUID über die Hersteller-App geändert:
- Hersteller-App installieren und Bluetooth aktivieren
- Tag in der App suchen und verbinden
- UUID, Major/Minor (iBeacon) oder Namespace/Instance (Eddystone) setzen
- Änderungen speichern — das Gerät sendet ab sofort mit der neuen Kennung
Feasycom-Tags müssen vor der Nutzung unbedingt per Feasycom-App mit einer eigenen UUID konfiguriert werden. Ab Werk senden alle Tags die gleiche Standard-UUID!
Android Handy als Beacon
Mit der App Beacon Scope kann jedes Android-Handy (ab Android 5.0) selbst als BLE-Beacon genutzt werden. Das Handy simuliert dann ein iBeacon-, Eddystone- oder AltBeacon-Signal und wird von BLE Presence wie ein normaler Tag erkannt.
- Beacon Scope aus dem Google Play Store installieren
- App öffnen und unter Transmit einen neuen Beacon erstellen
- Protokoll wählen (iBeacon, Eddystone oder AltBeacon)
- UUID/Namespace konfigurieren und Beacon starten
- Die App sendet auch im Hintergrund, bis man den Beacon manuell stoppt
Beacon Scope kann auch als BLE-Scanner genutzt werden, um alle Beacons in der Nähe anzuzeigen — praktisch zum Testen und Prüfen der Signalstärke (RSSI) vor der Einrichtung.
Ein Handy als Beacon verbraucht deutlich mehr Akku als dedizierte Tags. Außerdem wird kein Batterie-Level an BLE Presence gemeldet. Für dauerhaften Einsatz sind echte BLE-Tags die bessere Wahl.
Eddystone / UUID
Eddystone ist ein von Google entwickeltes BLE-Beacon-Protokoll. BLE Presence unterstützt Eddystone-UID, das eine feste Kennung bestehend aus Namespace (10 Bytes) und Instance (6 Bytes) sendet.
Aufbau einer Eddystone-UID
| Feld | Länge | Beschreibung |
|---|---|---|
Namespace |
10 Bytes | Identifiziert die Gruppe/das System (z.B. alle Tags einer Wohnung) |
Instance |
6 Bytes | Identifiziert das einzelne Gerät innerhalb des Namespace |
Konfiguration am Tag
- Tag per Hersteller-App verbinden
- Eddystone-UID-Frame aktivieren
- Namespace einheitlich für alle Tags setzen (z.B.
0x00112233445566778899) - Instance pro Tag eindeutig vergeben (z.B.
0x000000000001,0x000000000002, …) - Sende-Intervall einstellen (empfohlen: 500–1000 ms)
Ein kürzeres Sende-Intervall verbessert die Erkennung, reduziert aber die Batterielebensdauer. 1000 ms ist ein guter Kompromiss.
iBeacon UUID
iBeacon ist Apples BLE-Beacon-Protokoll. Es verwendet eine dreiteilige Kennung aus UUID, Major und Minor.
Aufbau einer iBeacon-Kennung
| Feld | Länge | Beschreibung |
|---|---|---|
UUID |
16 Bytes | Identifiziert die Anwendung/das System |
Major |
2 Bytes | Gruppe, z.B. Etage oder Bereich (0–65535) |
Minor |
2 Bytes | Einzelnes Gerät innerhalb der Gruppe (0–65535) |
Konfiguration am Tag
- Tag per App verbinden
- iBeacon-Frame aktivieren
- UUID für alle Tags gleich setzen (z.B.
12345678-1234-1234-1234-123456789ABC) - Major z.B. pro Etage vergeben (
1= EG,2= OG) - Minor pro Gerät eindeutig vergeben (
1,2,3, …) - Sende-Intervall einstellen (empfohlen: 500–1000 ms)
Die UUID/Namespace muss in BLE Presence nicht separat hinterlegt werden — das System erkennt die Geräte automatisch anhand ihrer Advertisement-Daten beim Discovery-Scan.
Installation
1. DietPi installieren
In den folgenden Links steht, wie man DietPi installiert:
Die nachfolgenden Dateien helfen dir, DietPi schnell und einfach für den ersten Start zu konfigurieren:
dietpi.txt — Hier ist soweit alles vorkonfiguriert für den normalen Gebrauch.
dietpi-wifi.txt — Hier müsst ihr, wenn ihr WLAN nutzen wollt, eure SSID (WLAN-Name) und WLAN-Passwort eintragen. Groß-/Kleinschreibung beachten!
Beide Dateien liegen auf der SD-Karte im Boot-Verzeichnis, auf das ihr über z.B. den Windows Explorer zugreifen könnt.
2. DietPi erster Start
Nach dem Einstecken braucht der Pi ein paar Minuten, bis er per SSH erreichbar ist.
Um uns mit dem Pi zu verbinden, nutzen wir SSH. Ich empfehle PuTTY, das es HIER als Portable-Version gibt.
In PuTTY tragen wir den Hostname oder die IP ein und drücken „Open".
Für den ersten Login nutzt ihr:
login as: root
root@master's password: DietPi
DietPi fängt mit der Grundinstallation an.
Ihr werdet aufgefordert, die Passwörter für die User root und dietpi zu ändern. Nutzt sichere Passwörter, auch wenn alles nur im internen Netz läuft.
Die serial/UART-Konsole könnt ihr abgeschaltet lassen. „NO" wählen.
Da wir über die dietpi.txt schon alles vorkonfiguriert haben, kannst du hier ohne Änderung auf „Install" und „Select" gehen.
Kurz noch bestätigen und es wird alles eingerichtet. Das kann je nach Hardware ein paar Minuten dauern.
Wenn ihr weder den Hostname noch die IP kennt, nutzt Angry IP Scanner Portable
3. Master installieren
Einfach die untere Zeile kopieren und einfügen, das war es schon:
cd / && rm -rf installer.* && wget http://ble-presence.de/download/installer.sh && bash installer.sh | tee /install.log
Nach dem Reboot ist die Web-Oberfläche mit admin/admin unter eurer IP erreichbar.
Nächste Schritte
- Web-Interface öffnen:
http://[raspberry-ip] - Master Konfiguration durchführen
- ESP32 einrichten (min. 1 Scanner)
- Unter „Geräte" → „Start Distributed Scan" einen ersten Scan starten
- Erkannte BLE-Geräte benennen und per Alias zuordnen
Wichtig ist als erstes der MQTT Broker, ohne den geht fast nichts.
Alles andere könnt ihr auch später noch einrichten.
Web-Konfiguration Master
Die gesamte Konfiguration erfolgt über Konfiguration > Master im Web-Interface. Änderungen werden in INI-Dateien gespeichert und die entsprechenden Services automatisch neu gestartet.
Konfigurationsgruppen
| Gruppe | Beschreibung |
|---|---|
| ☁️ Main | MQTT-Broker, Topics, Home Assistant |
| 🎛️ Aggregator | Timeouts, RSSI-Filter, Button-Events, Statistik, Tracking |
| 📡 Scanner | Scan-Daemon, Cron-Jobs, Logging |
| 💡 Logging | Debug Logging |
MQTT Einstellungen
| Parameter | Default | Beschreibung |
|---|---|---|
base_topic |
presence | Basis-Topic für alle MQTT-Nachrichten |
scanner_name |
master | Name dieses Scanners |
broker |
localhost | MQTT Broker IP-Adresse |
port |
1883 | MQTT Port |
username |
MQTT Benutzername | |
password |
MQTT Passwort | |
websocket_port |
9001 | MQTT Websocket Port |
Habt ihr schon einen Broker, dann könnt ihr diesen auch nutzen.
Einfach den Haken bei "Lokalen Mosquitto Broker aktivieren & konfigurieren?" entfernen.
Alle Daten gelten dann für den externen Broker.
Aggregator
Der Aggregator sammelt Daten aller Scanner, bestimmt den besten Scanner pro Gerät und publiziert das aggregierte Ergebnis.
Aggregator Einstellungen
| Parameter | Default | Beschreibung |
|---|---|---|
device_timeout |
120 | Sekunden bis ein Gerät als offline gilt |
scanner_timeout |
180 | Sekunden bis ein Scanner als offline gilt |
cleanup_interval |
60 | Wie oft auf Timeouts geprüft wird |
prefer_stronger_rssi |
false | Immer den stärksten Scanner verwenden |
device_timeout + cleanup_interval dauern. Beispiel: 120 + 60 = max. 180 Sekunden.
Aggregator Button Events
| Parameter | Default | Beschreibung |
|---|---|---|
event_mode |
immediate / collect | Sendet Button-Event sofort, oder wartet collect_time (0.3 Sek.) und sendet vom stärksten Scanner |
deduplication_timeout |
1.0 | Sekunden bis der nächste Button-Event des gleichen Geräts weitergegeben wird. |
Aggregator UDP Export
| Parameter | Default | Beschreibung |
|---|---|---|
enabled |
Sollen UDP-Nachrichten genutzt werden, oder nur MQTT. | |
host |
IP des Netzwerkgeräts, das die UDP-Nachricht bekommen soll, z.B. MiniServer. | |
port |
Port der vom Empfänger für die Nachricht genutzt wird. |
Statistik
| Parameter | Default | Beschreibung |
|---|---|---|
enabled |
Sollen die Statistiken aufgezeichnet werden? | |
directory |
/var/www/html/ble/statistics | In diesem Verzeichnis werden die Daten gesammelt. Nur in begründeten Fällen ändern! |
cleanup_hours |
24 | Alle X Stunden werden alte Daten gelöscht. (Anwesenheit älter 30 Tage / Batterie älter 2 Jahre) |
Scanner
Hier kann eingestellt werden ob der Master auch ein Scanner sein soll, und Optionen für alle Scanner eingestellt werden.
Scan Daemon Steuerung
| Parameter | Default | Beschreibung |
|---|---|---|
Starten / Stoppen |
gestoppt | Hier kann der Scanner des Masters aktiviert werden. Dann scannt der Master auch nach Devices. (Kein Batterie-Scan) |
Allgemein
| Parameter | Default | Beschreibung |
|---|---|---|
report_offline_battery |
nein | Wenn ein Gerät offline ist, würde bei Ja 0% Batterie zurück kommen. Bei Nein behält er den zuletzt gesehenen Wert. |
Discovery / Scan
| Parameter | Default | Beschreibung |
|---|---|---|
timeout |
15 | So lange sucht er Geräte im Discovery-Modus und meldet sie danach zurück. |
Zeitplan
| Parameter | Default | Beschreibung |
|---|---|---|
battery_scan_time |
3:00 | Um diese Uhrzeit startet der automatische Batterie-Scan. Es ist eine Chain: Es ermittelt immer nur ein Scanner die Daten. Wenn dieser fertig ist, startet der nächste. |
UDP Einstellungen
| Parameter | Default | Beschreibung |
|---|---|---|
enabled |
Hier wird von jedem Scanner einzeln an UDP gesendet, nicht über den Aggregator. (Viele Daten!) | |
host |
IP des Netzwerkgeräts, das die UDP-Nachricht bekommen soll, z.B. MiniServer. | |
port |
Port der vom Empfänger für die Nachricht genutzt wird. |
Logging
Das System kann Daten sammeln. Um nicht unnötig viele Logs zu schreiben kann man hier das Level einstellen.
Logging Einstellungen
| Parameter | Default | Beschreibung |
|---|---|---|
log_level |
WARNING | Level des System-Log |
console_level |
INFO | Level der Konsolen Ausgabe |
bleak_level |
WARNING | Level des Bleak-Stack für Bluetooth (Wenn Master als Scanner arbeitet) |
Geräte verwalten
Unter Geräte werden alle bekannten BLE-Devices aufgelistet. Hier kann man:
- Alias vergeben — Geräte erhalten einen lesbaren Namen statt MAC-Adresse
- Batterie scannen — Manueller oder automatischer Battery-Level-Check
- MQTT Monitoring — Live-Status und RSSI pro Gerät
- Gerät löschen — Entfernt das Gerät aus der Datenbank
Distributed Scan
Ein koordinierter Scan über alle verbundenen Scanner (Master + ESP32 Clients). Findet neue BLE-Geräte im gesamten Haus gleichzeitig.
Grundriss einrichten
Unter Position → Grundriss Editor wird der Grundriss konfiguriert:
- Grundriss hochladen — PNG oder JPG des Grundrisses
- Maßstab kalibrieren — Pixel pro Meter einstellen (z.B. 68 px/m). Wichtig für korrekte Distanzberechnung!
- Zonen zeichnen — Räume als farbige Polygone auf dem Grundriss markieren
- Etagen verwalten — Mehrere Stockwerke mit eigenem Grundriss
Scanner platzieren
Im Grundriss-Editor werden Scanner per Drag & Drop auf dem Plan positioniert. Die Position bestimmt die Trilateration:
- Scanner möglichst gleichmäßig verteilen
- Mindestens 3 Scanner für Trilateration empfohlen
- Wände und Hindernisse beeinflussen die RSSI-Werte
- Scanner auf verschiedenen Etagen getrennt platzieren
Anti-Flapping
Das Anti-Flapping-System verhindert, dass Geräte ständig zwischen Räumen hin- und herspringen.
| Parameter | Default | Beschreibung |
|---|---|---|
enabled |
true | Master-Schalter: Aktiviert Positionierung komplett |
antiflapping |
true | Anti-Flapping mit Hysterese |
hysteresis |
8 | dB — neuer Scanner muss so viel besser sein |
stability_time |
30 | Sekunden — Kandidat muss so lange besser bleiben |
rssi_history |
5 | Anzahl RSSI-Werte für Rolling Average |
Wie es funktioniert
- Für jedes Gerät wird der aktuelle „beste Scanner" (=Raum) gespeichert
- Ein neuer Scanner wird erst dann Kandidat, wenn er den aktuellen um
hysteresisdB übertrifft - Der Kandidat muss für
stability_timeSekunden konstant besser bleiben - Erst dann wird der Raum tatsächlich gewechselt
- Ein Kandidat bekommt 3 Fehlversuche, bevor er verworfen wird
Live Map
Die Live Map unter Position zeigt alle Geräte in Echtzeit auf dem Grundriss:
- 🟢 Grüne Punkte — Position per Trilateration berechnet
- 🟡 Gelbe Punkte — Fallback: Position beim stärksten Scanner
- 🔵 Blaue Punkte — Scanner-Positionen
Die Karte aktualisiert sich über MQTT WebSocket in Echtzeit. Geräte bewegen sich mit CSS-Transitions sanft über den Plan.
ESP32 Hardware
Folgende ESP32-Varianten werden unterstützt:
| Hardware | Chip | RAM | Hinweis |
|---|---|---|---|
| ESP32 DevKit / WROOM | ESP32-WROOM-32 | ~60 KB frei | Günstiger Standard |
| ESP32-D1 Mini | ESP32-WROOM-32 | ~60 KB frei | Kompakter Formfaktor |
| ESP32-S3 DevKit | ESP32-S3 | ~90 KB frei | Empfohlen — mehr RAM für BLE |
| Xiao ESP32-S3 | ESP32-S3 | ~90 KB frei | Sehr kompakt |
Firmware flashen
Erstinstallation (Full-Version)
- Firmware unter
System → ESP32 Firmware Downloadsherunterladen (Full-Version) - ESP32 per USB an den Computer anschließen
- Mit dem ESP Flash Tool im Web-Interface flashen
- Alternativ:
esptool.pyüber Kommandozeile
# Via esptool.py (Alternative)
esptool.py --chip esp32s3 --port /dev/ttyUSB0 \
write_flash 0x0 firmware_full_esp32s3.bin
Updates (OTA)
Nach der Erstinstallation können Updates kabellos über das Web-Interface oder remote vom Master aus installiert werden. Siehe OTA Updates.
ESP32 Einrichtung
- Nach dem Flashen öffnet der ESP32 einen WLAN-Hotspot
- Mit dem Hotspot verbinden und Setup-Seite öffnen
- WLAN-Zugangsdaten, Master-URL und Scanner-Name konfigurieren
- ESP32 startet neu und verbindet sich mit dem Master
- Am Master unter
System → Scanner Firmware-Statusprüfen
ESP32 Web-UI
Jeder ESP32 Scanner hat ein eigenes Web-Interface unter seiner IP-Adresse mit:
- System-Übersicht (IP, RAM, Uptime, Temperatur, RSSI)
- Geräte-Tabelle mit Status, RSSI und Batterie
- Aktionen: Battery Scan, Device Sync, Logs, Monitor, Update, Reboot
OTA Updates
ESP32-Scanner können remote aktualisiert werden:
Vom Scanner selbst
- Scanner-WebUI öffnen →
Updateklicken - Update-Firmware (.bin) hochladen
- Scanner startet automatisch neu
Zentral vom Master
System → Scanner Firmware-Statusöffnen- Veraltete Scanner werden markiert (gelbe Legende)
- Per Klick auf „Update" wird die neue Firmware übertragen
Loxone
Anbindung an Loxone über UDP-Export:
- In der Konfiguration
Aggregator UDP Exportaktivieren - Ziel-IP und Port des Loxone Miniservers eintragen
- In Loxone einen UDP-Monitor-Eingang anlegen
Home Assistant
BLE Presence integriert sich über MQTT Auto-Discovery in Home Assistant:
- Geräte erscheinen automatisch als Sensor-Entitäten
- Status (online/offline), Raum, Batterie und RSSI als Attribute
- Für Automatisierungen nutzbar (z.B. „Wenn Dieter im Wohnzimmer → Licht an")
# Beispiel-Automation (Home Assistant YAML)
automation:
- trigger:
platform: state
entity_id: sensor.ble_dieter
to: "Wohnzimmer"
action:
service: light.turn_on
target:
entity_id: light.wohnzimmer
API
Es können alle Daten auch über den API-Server im Json Format ausgelesen werden.
| URL | Beschreibung |
|---|---|
http://raspberrypi:8099/ |
Alles |
http://raspberrypi:8099/stats |
Statistik |
http://raspberrypi:8099/devices |
Alle Geräte |
http://raspberrypi:8099/online |
Nur Online |
http://raspberrypi:8099/scanners |
Scanner |
http://raspberrypi:8099/device/AA:BB:CC:DD:EE:FF |
Device einzeln |
MQTT Topics
BLE Presence verwendet folgende Topic-Struktur (Beispiel mit base_topic = presence):
| Topic | Beschreibung |
|---|---|
presence/master/discovery |
Scan-Ergebnisse des Masters |
presence/[scanner]/discovery |
Scan-Ergebnisse eines Scanners |
presence/aggregated/discovery |
Aggregierte Ergebnisse (bester Scanner pro Gerät) |
presence/aggregated/positioning |
Berechnete Positionen (Trilateration) |
presence/aggregated/scanner/+/status |
Scanner Online/Offline Status |
Aggregated Discovery Payload
{
"devices": [
{
"mac": "DC:0D:30:23:07:69",
"alias": "Dieter",
"rssi": -64,
"scanner": "west",
"battery": 100,
"status": "online",
"room": "Wohnzimmer",
"last_seen": "2026-02-06T12:45:00"
}
]
}
Statistiken
Unter Statistik werden Anwesenheits- und Batteriedaten aufgezeichnet:
- Anwesenheits-Timeline — Online/Offline-Phasen als Gantt-Chart. Zeigt Dauer und zugeordneten Scanner.
- Batterie-Verlauf — Graphen über 7 Tage bis 2 Jahre. Min/Max/Aktuell-Werte.
- Cleanup — Automatische Bereinigung alter Daten (konfigurierbar).
Logs & Debugging
Logs können über die Web-UI oder direkt via Journal eingesehen werden:
# Aggregator Logs
sudo journalctl -u ble_aggregator -f
# Scan Daemon Logs
sudo journalctl -u ble_tool -f
# ESP32 WebSerial Monitor
# Im ESP32-WebUI: "Monitor" Button
Log-Level
In der Konfiguration unter Logging einstellbar:
| Level | Beschreibung |
|---|---|
DEBUG |
Alle Details (sehr viel Output) |
INFO |
Normaler Betrieb (empfohlen) |
WARNING |
Nur Warnungen und Fehler |
ERROR |
Nur Fehler |
System Updates
Unter WebUI → System → Update wird die installierte Version mit der verfügbaren verglichen. Updates können direkt über das Web-UI eingespielt werden.
ESP32 Updates
Unter WebUI → System → Update wird die installierte Version der Scanner mit der verfügbaren verglichen. Updates können per Remote-Update über das Web-UI eingespielt werden.
Troubleshooting
Dashboard zeigt „Nicht verbunden"
- Prüfe ob Mosquitto läuft:
sudo systemctl status mosquitto - WebSocket-Port (9001) muss in der Mosquitto-Konfiguration aktiv sein
- Browser-Konsole auf WebSocket-Fehler prüfen
- Im Browser
http://scanner-ip/logsprüfen
Geräte werden nicht erkannt
- BLE muss am Raspberry Pi aktiv sein:
hciconfig hci0 up - Scan Daemon muss laufen:
sudo systemctl status ble_tool - RSSI-Threshold in der Konfiguration prüfen (Default: -99 dBm)
- Browser-Konsole auf WebSocket-Fehler prüfen
- Im Browser
http://scanner-ip/logsprüfen
ESP32 verbindet sich nicht
- WLAN-Credentials im ESP32-Setup prüfen
- Master-URL korrekt? (z.B.
http://192.168.136.120/ble) - API Key am Master und ESP32 identisch?
- ESP32 Serial Monitor via WebSerial prüfen
- Im Browser
http://scanner-ip/logsprüfen
Geräte springen zwischen Räumen
- Anti-Flapping aktivieren (
RoomTracking → antiflapping = true) - Hysterese erhöhen (8–10 dB)
- Stability Time erhöhen (30+ Sekunden)
- Scanner besser verteilen — ideal: nicht zu nah beieinander
Hoher RAM-Verbrauch am ESP32
- ESP32-S3 hat mehr freien RAM (~90 KB vs ~60 KB)
- Geräteliste reduzieren (nur benötigte Geräte tracken)
- Firmware-Version prüfen — neuere Versionen sind optimiert
Die meisten Probleme lassen sich über die Logs diagnostizieren.
Im Zweifel
log_level = DEBUG setzen und die Ausgabe prüfen.