Shelly BLU Motion Sensor - MQTT Befehl senden bei Bewegung

Dieses Script läuft auf Shelly Gen2/Gen3/Pro Geräten mit aktivierter BLE-Gateway-Funktion und lauscht auf BTHome v2-Werbepakete von Shelly BLU Motion. Sobald Bewegung erkannt wird, sendet das Script genau ein MQTT-Kommando, um zum Beispiel ein Licht, bei mir ein Display, einzuschalten. Wenn keine Bewegung mehr gemeldet wird, wird per MQTT wieder ausgeschaltet. Optional kann das Einschalten zusätzlich an einen Helligkeitswert (Lux) gekoppelt werden („nur einschalten, wenn es dunkel ist“).
Hier das Script bei GitHub
- https://github.com/alaub81/shelly/blob/main/shelly-mqtt-basic.js
- https://raw.githubusercontent.com/alaub81/shelly/refs/heads/main/shelly-mqtt-basic.js
Was macht das Script genau?
Das Script überwacht mehrere konfigurierte Bewegungsmelder und steuert darüber ein Licht via MQTT:
- Licht EIN (MQTT ON): Sobald mindestens ein definierter Motion-Sensor Bewegung meldet („ON“), wird die konfigurierte MQTT-Nachricht zum Einschalten veröffentlicht.
- Licht AUS (MQTT OFF): Erst wenn alle Sensoren keine Bewegung mehr melden („OFF“), wird die MQTT-Nachricht zum Ausschalten veröffentlicht.
- Optional: Dunkelheitsprüfung (Lux): Wenn aktiviert, schaltet das Script das Licht nur dann ein, wenn der gemessene Lux-Wert unter einem definierten Schwellwert liegt.
- ON wird nur gesendet, wenn der erste Sensor aktiv wird – OFF nur, wenn der letzte aktive Sensor zurück auf „keine Bewegung“ geht.
Voraussetzungen
Damit das Script funktioniert, müssen folgende Punkte erfüllt sein:
- Bluetooth (BLE) ist auf dem Shelly aktiviert.
- MQTT ist auf dem Shelly aktiviert und korrekt eingerichtet (Broker, Zugangsdaten, etc.).
- Die BLU-/BTHome-Sensoren senden BTHome v2 Pakete (UUID 0xFCD2).
- Der Shelly arbeitet als BLE Gateway (Scan-Funktion aktiv).
Konfiguration
Die Anpassung erfolgt über ein CONFIG-Objekt im Script. Relevante Parameter:
Allgemein
- debug (true/false) Aktiviert/Deaktiviert Debug-Logging.
- active (true/false) Schaltet zwischen aktivem und passivem BLE-Scanning um.
Dunkelheit / Lux (optional)
- useDarknessThreshold (true/false) Wenn true: Licht wird nur eingeschaltet, wenn es dunkel genug ist.
- darknessThreshold Lux-Schwellwert, unterhalb dessen es als „dunkel“ gilt.
Sensoren erlauben (Whitelist)
- allowedMacAddresses Liste der erlaubten MAC-Adressen der Motion-Sensoren.
Wichtig: MAC-Adressen müssen
- klein geschrieben sein
- mit Doppelpunkten getrennt sein Beispiel: 0b:ae:5f:33:9b:3c
MQTT (Lichtsteuerung)
- mqtt.topic MQTT-Topic, auf das veröffentlicht wird.
- mqtt.payloadOn / mqtt.payloadOff Payloads für Licht EIN/AUS (z. B. ON / OFF oder true / false oder JSON, je nach Zielsystem).
Funktionslogik (Bewegungszählung)
Das Script führt intern eine Art „Aktiv-Zähler“:
- Wird der erste Sensor aktiv → MQTT ON
- Werden weitere Sensoren aktiv → kein weiteres ON
- Wenn Sensoren inaktiv werden → Zähler sinkt
- Wird der letzte Sensor inaktiv → MQTT OFF
Dadurch bleibt das Licht an, solange irgendein Sensor noch Bewegung meldet.