NEWS
MQTT Bluetooth BLE Anwesenheitserkennung mit ESP32
-
Arduino ESP32 Projekt
Personen Präsenz im Zimmer durch: iBeacon, Mi Band fitness tracker, smartwatch aufspüren.
MQTT Anwesenheitserkennung per Bluetooth BLE für HausautomatisierungDie Idee
In jedem Raum befindet sich bluetooth Präsenzmelder auf Basis von ESP32 – Modul. Jedes bluetooth Präsenzmelder ist über WLAN mit Hausnetz verbunden und sendet die bluetooth MAC Adressen per mqtt an den smart home. Ich trage ein Fitness Tracker Xiaomi Mi Band, der kann so eingestellt werden, dass auch in verbundenen Zustand, bluetooth advertising Daten sendet. Natürlich kann statt Fitness Tracker, ein beliebige iTag, iBeacon verwendet werden. Der muss natürlich immer dabei sein. So kriegt mein smart home in welchem Zimmer ich mich gerade befinde mit. So kann Hausautomatisierung Software z.b. Telefonanrufe in richtige Zimmer leiten. Meine Position anderen Personen im Haus mitteilen. -
Hallo,
wie hast du die Module Aufgebaut?
Also Mit Netzteil Batterie oder anders.
Ich möchte so etwas aktuell auch bauen Es soll aber nur in der Nähe der Türe sin um zu erkenne welcher Schlüssel da ist. An jedem hängt ein ITAG.
Danke -
Finde ich auch eine super Idee!?!
Wäre der Betrieb mit Batterie sinnvoll und könnte man sich auch den Ladezustand bzw. Spannung übermitteln lassen?
Wenn die Batterie nen Jahr hält, wäre das doch schon super, oder?
Dann könnte man auch einfach abfragen .... (zB) Wo liegt meine Uhr , Antwort wäre zB. Liegt im "Wohnzimmer"...
-
Hallo,
genau das will ich gerade nachbauen.
Allerdings bringt er mir mit dem Code aus dem Oben angegebenen Link immer einen Fehler.C:\Users\laval\OneDrive\Documents\Arduino\ESP32 BTE MQTT\ESP32-MQTT-BTE-DHT22\ESP32-MQTT-BTE-DHT22.ino: In function 'void loop()': ESP32-MQTT-BTE-DHT22:97:16: error: 'MQTT' has not been declared mqtt.publish(MQTT::Publish(MQTT_Name, NachrichtJSON).set_qos(QoS)); // JSON per MQTT senden ^ Mehrere Bibliotheken wurden für "WiFi.h" gefunden Benutzt: C:\Users\laval\OneDrive\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.2\libraries\WiFi Nicht benutzt: C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.21.0_x86__mdqgnx93n4wtt\libraries\WiFi exit status 1 'MQTT' has not been declared
Woran liegt das?
Danke -
Edit: ich habe noch nicht den Hinweis beachtet. Ist bestimmt wichtig. Hast du es gemacht?
"Verwendete MQTT Bibliothek ist MQTT client library for Arduino(vom Imroy)."@Lordcyber ich bin leider auch nicht so fit damit. Bei mir ähnlicher Fehler.
Arduino: 1.8.9 (Windows Store 1.8.21.0) (Windows 10), Board: "AI Thinker ESP32-CAM" C:\Users\Marcellus\Documents\Arduino\ESP32_BT-scanner\ESP32_BT-scanner.ino: In function 'void setup()': ESP32_BT-scanner:65:8: error: 'class PubSubClient' has no member named 'set_server' mqtt.set_server(MQTT_server, MQTT_port); // MQTT Port einstellen ^ ESP32_BT-scanner:66:20: error: 'MQTT' has not been declared if (mqtt.connect(MQTT::Connect(MQTT_Name).set_auth(MQTT_User, MQTT_Pass))) ^ ESP32_BT-scanner:69:18: error: 'MQTT' has not been declared mqtt.publish(MQTT::Publish("hallo", MQTT_Name).set_qos(QoS)); // im Topic hallo Präsenzmelder Name schreiben ^ C:\Users\Marcellus\Documents\Arduino\ESP32_BT-scanner\ESP32_BT-scanner.ino: In function 'void loop()': ESP32_BT-scanner:96:16: error: 'MQTT' has not been declared mqtt.publish(MQTT::Publish(MQTT_Name, NachrichtJSON).set_qos(QoS)); // JSON per MQTT senden ^ ESP32_BT-scanner:107:18: error: 'MQTT' has not been declared mqtt.connect(MQTT::Connect(MQTT_Name).set_auth(MQTT_User, MQTT_Pass)); ^ Mehrere Bibliotheken wurden für "WiFi.h" gefunden Benutzt: C:\Users\Marcellus\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.2\libraries\WiFi Nicht benutzt: C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.21.0_x86__mdqgnx93n4wtt\libraries\WiFi exit status 1 'class PubSubClient' has no member named 'set_server' Ungültige Bibliothek C:\Users\Marcellus\Documents\Arduino\libraries\esp-epaper-29-ws-20171230-gemu-1.0 in keine Header-Dateien (.h) in C:\Users\Marcellus\Documents\Arduino\libraries\esp-epaper-29-ws-20171230-gemu-1.0 gefunden gefunden Ungültige Bibliothek C:\Users\Marcellus\Documents\Arduino\libraries\esp-epaper-29-ws-20171230-gemu-1.0 in keine Header-Dateien (.h) in C:\Users\Marcellus\Documents\Arduino\libraries\esp-epaper-29-ws-20171230-gemu-1.0 gefunden gefunden Dieser Bericht wäre detaillierter, wenn die Option "Ausführliche Ausgabe während der Kompilierung" in Datei -> Voreinstellungen aktiviert wäre.
-
@lobomau
ich habe jetzt einen Andere Library benutzt und alles neu geschrieben. Jetzt funktioniert es bei mir.
Da sind eben alle Befehle anders..
aber es funktioniert so. -
kannst du mir dein Arduino Sketch mal geben?
Das originale läuft bei mir null, bereits beim Überprüfen des Sketches von @mischaka Sketch bekomme ich die Fehlermeldung Globale Variablen verwenden 57900 Bytes (17%) des dynamischen Speichers, 269780 Bytes für lokale Variablen verbleiben. Das Maximum sind 327680 Bytes. obwohl ich extra die 16MB ESP32 gekauft hatte, damit ich von @mischaka den WiFi Manager mit installieren kann,....
no ide why
Vielen Dank
Jan
-
Einen schönen guten Abend.
Ich hoffe, euch allen geht es gut.
seit ihr hier schon weitergekommen?
Ich sitze da schon einige Stunden dran und habe eine Lib, nach der anderen nachinstalliert und dürfte jetzt alle Libs haben.
Aber ich bekomme jetzt folgende Fehlermeldung:
In file included from C:\Users\ICH\Dokumente\Arduino\ESP32_anwesenheit\ESP32_anwesenheit.ino:14:0: C:\Users\ICH\Dokumente\Arduino\libraries\pubsubclient-master\src/PubSubClient_JSON.h:29:54: error: 'ArduinoJson::Internals' has not been declared Connect& set_will(String willTopic, ArduinoJson::Internals::JsonPrintable<J>& willMessage, uint8_t willQos, bool willRetain) { ^ C:\Users\ICH\Dokumente\Arduino\libraries\pubsubclient-master\src/PubSubClient_JSON.h:29:78: error: expected ',' or '...' before '<' token Connect& set_will(String willTopic, ArduinoJson::Internals::JsonPrintable<J>& willMessage, uint8_t willQos, bool willRetain) { ^ In file included from C:\Users\ICH\Dokumente\Arduino\ESP32_anwesenheit\ESP32_anwesenheit.ino:14:0: C:\Users\ICH\Dokumente\Arduino\libraries\pubsubclient-master\src/PubSubClient_JSON.h: In member function 'MQTT::Connect& MQTT::ConnectJSON::set_will(String, int)': C:\Users\ICH\Dokumente\Arduino\libraries\pubsubclient-master\src/PubSubClient_JSON.h:31:19: error: 'willQos' was not declared in this scope _will_qos = willQos; ^ C:\Users\ICH\Dokumente\Arduino\libraries\pubsubclient-master\src/PubSubClient_JSON.h:32:22: error: 'willRetain' was not declared in this scope _will_retain = willRetain; ^ C:\Users\ICH\Dokumente\Arduino\libraries\pubsubclient-master\src/PubSubClient_JSON.h:37:27: error: 'willMessage' was not declared in this scope _will_message_len = willMessage.measureLength() + 1; ^ C:\Users\ICH\Dokumente\Arduino\libraries\pubsubclient-master\src/PubSubClient_JSON.h: At global scope: C:\Users\ICH\Dokumente\Arduino\libraries\pubsubclient-master\src/PubSubClient_JSON.h:55:44: error: 'ArduinoJson::Internals' has not been declared PublishJSON(String topic, ArduinoJson::Internals::JsonPrintable<J>& object) : ^ C:\Users\ICH\Dokumente\Arduino\libraries\pubsubclient-master\src/PubSubClient_JSON.h:55:68: error: expected ',' or '...' before '<' token PublishJSON(String topic, ArduinoJson::Internals::JsonPrintable<J>& object) : ^ C:\Users\ICH\Dokumente\Arduino\libraries\pubsubclient-master\src/PubSubClient_JSON.h: In constructor 'MQTT::PublishJSON::PublishJSON(String, int)': C:\Users\ICH\Dokumente\Arduino\libraries\pubsubclient-master\src/PubSubClient_JSON.h:56:31: error: 'object' was not declared in this scope Publish(topic, nullptr, object.measureLength() + 1)
Kann mir da vielleicht jemand weiterhelfen?
Danke und bleibt gesund.
-
Sind weitere Smartwatches bekannt, die dauerhaft BLE Advertisements senden? Außer Xiaomi Mi Band?
Überlege mir eine Smartwatch zu kaufen und würde diese Funktion aktuell als wichtig ansehen.Habe in ioBroker schon mit triangulation der Position angefangen und würde das Thema gerne weiterverfolgen; aber nur mit Smartwatch statt aktuell Smartphone macht die Nutzung Sinn.
@mischaka
Wie lange hält dein Akku der Xiaomi Mi Band mit Dauer-BLE oder hast du inzwischen eine andere Uhr? -
@GiuseppeS wir haben die Mi Band 2 & 3 zu Hause im Einsatz. Beide senden ständig ihr BLE Signal was zuverlässig vom Pi3 detektiert wird. Akkus halten 2-3 Wochen.
-
@lobomau
Vielen Dank für die Rückmeldung. Top, dass der Akku auch so lange hält. Evtl sind noch weitere Alternativen bekannt. Ansonsten werde ich die nächsten Tage mal die Mi Band 4 oder 5 bestellen. Anscheinend ist es in der Mi Band Serie ein übliches Feature. -
Ich habs auch mal Versucht, die Mi Band kommt, ich hab aktuell ne Huawai, die bleibt leider stummt solange das Handy an ist. Mein Philipps TV gibt allerdings Laut von sich, ist aber etwas unhandlich
Meine Frage, ich hab hier nur ein alive Objekt, wie komme ich an die json Daten ran?
In der serielle Konsole sammelt er fleißig MAC Adressen.
Benutze den sonoff Adapter. Bin allerdings noch blutiger ioBroker Anfänger. -
@Vujagig
Du brauchst den mqtt Adapter. Grundsätzlich:Esp32 über mqtt -> mqtt broker -> mqtt Client
Ich selbst nutze mosquitto als mqtt Broker unter Linux und in ioBroker nutze ich den mqtt client Adapter. Bisher damit super gefahren. Es gibt für ioBroker auch einen mqtt Adapter mit broker+Client. Ist dir selbst überlassen. Mit mosquitto bin ich aber oft schon froh gewesen, außerhalb von ioBroker die Signale abfragen zu können (besser für Fehlersuche).
Im Sketch von Arduino musst du den Server mit IP und Port angeben. Sonoff kommuniziert zwar über mqtt aber die Messages bzw deren Aufbau sind wahrscheinlich sehr relevant für diesen Adapter.
Achte darauf, verschiedene Ports zwischen Sonoff und Standard mqtt zu nutzen. -
@GiuseppeS
Ah vielen dank, werde ich mal testen. Wobei ich irgendwo schon mal gehört hatte das jemand den Sonoff Adapter auch als generischen MQTT Adapter genommen hatte.
Morgen kommt das Mi Band. Überlege schon das auch als Keyless Entry für Auto und Garge zu nutzen. Wohnung und Haustür wird etwas komplizierter. Evtl lege ich die Adressen auch im ESP intern fest, für KFZ Nutzung eh notwendig. War schon erschrocken was hier in der Gegend alles auf Bluetooth rumbrüllt. In ner halben Stunde min 15 verschiedene Geräte und von mir kam nur der TV und evtl das Smartphone (muss ich aber noch verifizieren). Die Soudbar von einem Nachbar scheint sich im Dauerconnect Modus zu befinden, muss ich mich mal connecten und ordentliche Musik abspielen -
@Vujagig
Nur das mi band als Zugang für Haus oder Garage nutzen wäre grob fahrlässig, falls ich dich korrekt verstanden habe. Jeder, der iwie scannt könnte dein Signal klonen. Es sei denn du würdest Mac und manipulierte rolling Manufacturer Data (quasi als Schlüssel Code) nutzen. Aber sowas ist glaub mir der Mi nicht möglich.
Evtl könnte das Smartphone umfunktioniert werden, sodass z.B. der Code vom Google Authenticator gesendet werden könnte. Aber auch das ist nur ein Denkanstoß und übersteigt meine Programmierkenntnisse bei Weitem. -
@GiuseppeS nun bei der Wohnungstür geb ich dir schon Recht, da würd ich noch einen 2ten Faktor nehmen. Garage ist unkritisch und den Funksender der Zentralverriegelung vom Auto zu Kopieren ist einfacher, da gibt es fertige Produkte in einschlägigen Kreisen. Zum starten brauchst du immer noch den Zündschlüssel. Ist ein ziemlich alter Ford den kommst du mit jedem dritten Ford Schlüssel auf
Dazu kommt noch das security by obscurity hier ganz gut funktioniert weil wirklich niemand auf die Idee kommt. Da belauschen die eher Funkschlüssel. -
Moin,
ich hab das Ding auch mal aufgesetzt (paar kleine Bugs hat das Teil noch, z.B. sollte es einen Ordern im Broker erstellen um seine Infos dann dort zu sammeln...hab ich auch schon soweit umgesetzt).Ich habe jetzt ehr das Problem das mein Handy nicht erkannt wird. LE Beacons gehen aber ...
Workaround ist für mich der Beacon Simulator (auf Android), damit geht das soweit auch aber bei jedem Neustart von Bluetooth oder Handy habe ich leider eine andere MAC Adresse...das ist so nicht praktikabel (außer halt zum testen). Eine feste MAC lässt sich leider nicht einstellen, ist wohl Betriebssystem bedingt.
Hat jemand noch eine Lösung parat? Mit Handy? Ohne Beacon?
Es geht mir darum das meine Family IMMER ihr Handy dabei hat, es wäre schon wenn es damit ginge...
Ansonsten super Arbeit! Genau was ich gesucht habe!
Gruß,
Flo
-
@shooter
Auf Basis des Skripts aus dem ersten Post, habe ich meins erstellt.Optimierungen:
- nicht nur Mac sondern auch manufacturer data wird gesendet. Somit auch über das Smartphone nutzbar, da wechselnde iBeacon Mac mit Android App "Beacon Simulator", aber manu data bleibt konstant.
- Bugfix bzgl json string: keine Treffer beim Scan führten zu fehlerhaftem json. Ist nun korrigiert.
- im Namen der empfangenen ioBroker id steht auch der Ort des Absenders und dessen IP. Ort wird im ino Skript angegeben, aktuell "bett".
- Updates können ota über den Webserver eingespielt werden.
Übrigens: bei mir wird die Smartphone App mit dem Handy Neustart nicht automatisch gestartet. Nutze dafür die App Tasker, die ich eh aus verschiedenen Gründen installiert habe. Parallel zum Handy nutze ich neuerdings auch meine Mi Watch Band 5. Klappt einwandfrei.
-
-
@GiuseppeS
Vielen Dank für dein Script
Ich benötige mal Hilfe, das Script läuft und erkennt auch die Mac Adressen.
Bekomme keine Verbindung zum MQTT Adapter.
gibt es da irgend ein HowTo?
Danke