NEWS
MQTT Bluetooth BLE Anwesenheitserkennung mit ESP32
-
@utze86
Die aktuellen Shellies können mit Tasmota scannen, habe ich zufällig auf Facebook in der iobroker Gruppe gelesen. Tasmota konnte zuletzt für die Shellies als alternative Firmware verwendet werden. Daher würde ich Mal behaupten, dass sich das Scannen und die Relais Funktionen nicht gegenseitig ausschließen.
Habe es selbst noch nicht getestet, da ich noch keine Plus Geräte von Shelly besitze -
@da-phreak @GiuseppeS danke für die Infos. Damit ist die Akku/Batterie Alternative wohl gestorben.
Ein Shelly 1 Plus hab ich noch zuhause. Ich werde den mal mit Tasmota flashen und gucken was passiert. Sollte der Shelly die Relais Funktion verlieren habe ich mir überlegt den Shelly mit ESPresens zu Flashen und hinter eine Steckdose zu setzten. Da benötige ich ja nur Dauerstrom und keine Schalterfunktion. Wenn es funktioniert wären die Shellys zwar etwas teurer als die ESP's, dafür hätte ich aber eine Unterputzlösung und bräuchte keine zusätzliche Stromversorgung.
Gibt es etwas was dagegen spricht?
Viele Grüße
Utze86 -
@utze86 und hast du das mal getestet? ich suche quasi auch sowas in der Art um meine espresence Devices möglichst versteckt im Haus zu verteilen.
-
Hey zusammen,
ich hatte noch 10x ESP32s aus einem anderem Projekt über gehabt und hatte diese heute mal in alte iPhone USB Adapter eingebaut und vorher mit ESPresence geflasht.
Das Script mit der Trieangulierung ist 1a für Einstöckige Wohnungen, ich hatte es gerade mal im Erdgeschoss ausprobiert.
Da wir drei Stockwerke haben wäre da nur die Frage, wie man es hier am besten aufsetzt.
Im Erdgeschoss hatte ich in der Küche / Wohnzimmer drei ESP32 verteilt.
Dahinter grenzt dann praktisch ein Schlafzimmer, nur eben ein Stockwerk darüber.
Über dem Wohnzimmer ist ein zweites Schlafzimmer und ein Büro.
Theoretisch würde ich sagen, dass wenn man mit dem Script alle drei Stockwerke abbildet (natürlich in jedem Stockwerk genügend ESP's verteilt), dass das Script nicht richtig tracken kann, da wir hier praktisch ja in's Dreidimensionale gehen müssen und die Höhe der ESP's mit angegeben werden müsste.
Ebenfalls wenn man je Stockwerk ein Script laufen lässt, kann es sein, dass man hier praktisch doppelt in unterschiedlichen Stockwerken anwesend ist, oder?
Habt Ihr sonst eine Idee, wie man das ggf. umsetzen kann?
Liebe Grüsse
-
@stolly82
https://synyx.de/blog/fingerprinting-indoor-positionsbestimmung-mit-bluetooth-low-energy-2-2/Mit Fingerprint Methode sollte es funktionieren. Müsstest dir selbst was programmieren. So wie das gedanklich überschlage, wäre zumindest die Erstellung einer Karte der Wohnung bzw Haus unnötig.
-
@giuseppes said in MQTT Bluetooth BLE Anwesenheitserkennung mit ESP32:
@stolly82
https://synyx.de/blog/fingerprinting-indoor-positionsbestimmung-mit-bluetooth-low-energy-2-2/Mit Fingerprint Methode sollte es funktionieren. Müsstest dir selbst was programmieren. So wie das gedanklich überschlage, wäre zumindest die Erstellung einer Karte der Wohnung bzw Haus unnötig.
Ja, mit der Karte hast du recht.
Ich muss mal überlegen, wie ich das realisieren kann, ich vermute das wird etwas kompliziert.
Mit der Triangolierung fand ich ganz witzig, dass man da eben nicht so viel definieren muss (wobei es natürlich auch ungenau ist).
Ggf. geht dann auch ein Ansatz mit dem Script von dir, dass ich Bedingungen mit einbaue "Wenn Distance von ESP1,2,3 < 3m, ignoriere ESP5,9,6" und lege die Karten nebeneinander,...
Mit der Fingerprint Methode muss ich sonst mal schauen, ob das über eine Server- Lösung klappen kann, ohne dass ich das hier mit allen Geräten machen muss (das habe ich bei dem Artikel noch nicht so ganz verstanden).
-
@stolly82
Das mit dem Fingerprint funktioniert so dass du jede für dich relevante Position "anlernen" musst. Dabei beachtest du alle Sensoren mit deren Werten. Dadurch werden lokale Ungenauigkeiten auch beachtet. Zum Beispiel ist ein Sensor hinter dem Schrank evtl nur 1m entfernt, könnte aber über espresense mit 3m angezeigt werden. Wenn du das ganze mit Skript generisch lösen möchtest ist es natürlich aufwendig. Aber wenn du die Werte pro Position manuell notietst und im Skript verwendest, würde es sich in Grenzen halten. -
@bicmac nein, leider noch nicht getestet. Das wird wohl ein Projekt für die kommenden Wintermonate. Da ich das ganze ebenfalls über mehrere Stockwerke realisieren müsste bin ich aber gespannt was hier bei der aktuellen Diskussion raus kommt.
Könnte man nicht eine Abfrage erstellen, dass wenn ich mich einem bestimmten esp nähere, dass dadurch quasi festgelegt wird auf welcher Etage ich mich befinde? Sobald die Etage dann erkannt wurde, könnte man ja nurnoch esps für die Auswertung hinzu ziehen die sich nur auf der betretenen Etage befinden und die restlichen esp werden für die Auswertung ausgeblendet.
-
@bicmac Das Projekt mit den Shellys liegt leider bis auf weiteres auf Eis. Ich habe es leider nicht geschafft die Shelly's erfolgreich zu flashen. Nach dem aufspielen von Espresense erzeugen die Shellys keine WLAN AP und verfallen in einen Bootloop. Auch das Aufspielen von Esp Home und Tasmota Bluetooth führte leider nur zum gleichen Ergebnis. Hat hier jemand einen Tipp?
Alternativ besteht die Möglichkeit die Esp32 Mini mit einem 220V-5V Netzteil zu versehen und vor eine Steckdose zu schlalten. Es gibt da passende Netzteile von Azdelivery. Das Gerät wäre insgesamt etwa genau so groß wie ein Shelly. Allerdings müsste das Netzteil mit dem Esp32, am besten ohne Platine, verlötet werden und befindet sich dann nicht in einem abgeschlossen Gehäuse. Für mich als Hobbyelektiker wäre das keine Alternative da ich mir das Haus nicht abfackeln will. Wenn hier jemand der mehr Ahnung hat, eine Anleitung oder Lösung dafür hätte wäre das für mich eine Option. Ich möchte mir aber keine Eigenkonstruktion in die Wände basteln. Für Hilfe wäre ich an der Stelle dankbar.
-
@utze86
Hast du die korrekte esp32 Version von tasmota aufgespielt? Die Shelly haben SingleCore, nicht DualCore, was üblicherweise bei esp32 der Fall ist.Habe selbst erfolgreich ein Shelly Plus 2pm geflashed und verwende es für das Licht. Rollläden mit Tasmota muss ich mich bzgl Kalibrierung einlesen, scheint komplex zu sein.
Habe von hier das binary zum flashen:
(ganz unten solo1 bluetooth)
https://github.com/Jason2866/Tasmota-specials/tree/firmware/firmware/tasmota32/otherBLE muss dann über Einstellungen eingeschaltet werden. Außerdem muss das Scannen per Rule eingerichtet werden, damit es nach reboot weiter funktioniert. Nutze folgende Regeln:
- Rule1 ON System#Boot DO iBeacon 1 endon
- Rule2 ON System#Boot DO BLEAlias E861515FF02E=Giuseppe endon
- Rule3 ON System#Boot DO Backlog iBeaconPeriod 10; iBeaconOnlyAliased 1; BLEMaxAge 20 endon
- Rule1 1
- Rule2 1
- Rule3 1
Mit diesen Regeln wird alle 10 Sekunden ein Scanvorgang gestartet und nur mit Alias versehene MAC Adressen per mqtt übermittelt.
Für den Shelly Plus 2pm gilt folgende Tasmota config:
{"NAME":"Shelly Plus 2PM","GPIO":[320,0,192,0,0,0,1,1,225,224,0,0,0,0,193,0,0,0,0,0,0,608,3840,32,0,0,0,0,0,640,0,0,3456,4736,0,0],"FLAG":0,"BASE":1}
Edit:
Bekomme über den Sonoff Adapter alle ca. 12/13 Sekunden den rssi Wert vom Shelly. Funktioniert also ganz gut. Gefiltert wird leider nicht wie bei espresense. -
@giuseppes ich habe tatsächlich nicht gesehen, dass es auch eine 1-Kern Version von Tasmota Bluetooth gibt. Das könnte mir wirklich weiter helfen. "Leider" bin ich aktuell im Urlaub und kann deinen Vorschlag erst am Wochenende testen.
Kann ich die Scanfrequenz über Ibeacon period noch weiter runter setzten, weißt du ob es eine Untergrenze gibt? Ich denke grundsätzlich wäre ein Wert je Sekunde für eine Raumerkennung praktisch.
Lässt sich dein Shelly weiterhin schalten, oder kannst du mit dem Shelly "nurnoch" Ble scannen?
-
@utze86
Bei meinem ersten Versuch hatte ich auch meinen Shelly in bootloop und war nach Recherche über das Thema SingleCore gestolpert. Glücklicherweise bin ich im Netz auf das verlinkte Repo mit entsprechenden Versionen gestoßen.Bzgl des Scan Intervalls: ich habe keine Grenzen in tasmota gefunden. Hatte die Zeit zu Testzwecken auf 5s und 8s gesetzt, allerdings wurde meine Uhr dennoch alle >10s übermittelt. Von einem esp32 mit espresense weiß ich, dass meine Uhr alle 7-8 Sekunden sendet. Keine Ahnung woran die Erkennung >10s nun liegt. Optimal ist es nicht, aber in Kombi mit Bewegungsmelder gut nutzbar. Anwesenheit würde dann per BWM in einem Bereich erkannt werden und die Abwesenheit über "rssi > x" detektiert werden. Somit wäre Präsenz über BWM sofort erkannt und die Abwesenheit nach ca. 15s oder 30s (wenn zwei Messungen gewartet wird).
-
@utze86
Da sind ja noch weitere unbeantwortete Fragen in deinem Beitrag:Ein Wert pro Sekunde wäre klasse, aber sendet dein "Beacon" auch wirklich jede Sekunde? Espresense scannt wohl kontinuierlich, damit kannst du deinen Sende Intervall prüfen. Leider kam ich mit Tasmota auf eine höhere Intervall Zeit als mit ESPresense.
Der Shelly funktioniert natürlich ohne Probleme mit Tasmota. Shelly nur für ble Scan zu verwenden hätte ich nicht gemacht. Dafür wäre mir der Mehrwert zu gering.
-
KORREKTUR:
Habe nochmal mit Tasmota getestet, den Intervall zu reduzieren. Es funktioniert doch! Rules werden immer nur übernommen wenn einmalig aus/an oder nach einem esp Neustart. Bei einer Sekunde war mir etwas zu viel traffic, außerdem unnötig. Habe es nun auf 3 Sekunden eingestellt, somit sollte ich jeden zweiten Intervall meine Uhr "erwischen". Klappt super. Meine Motivation das Thema weiter zu verfolgen, nimmt weiter zu. -
@giuseppes
Danke für die vielen Hinweise. Ich habe die Hardware für die Varianten Shelly mit Tasmota und esp32 mit Espresene Zuhause und werde am Wochenende mal beide Varianten testen. Bewegungsmelder habe ich ebenfalls noch ein paar zuhause.
Ich werde den Ansatz verfolgen die Shelly Variante mit so wenig Bewegungsmeldern wie möglich umzusetzen. Zwischendurch sind ja auch Gäste im Haus, mal sehen wie ich dass dann umsetze ohne, dass der BWM ständig Licht AN/ Licht AUS macht.Aktuell ist der Plan, dass ich meine Anwesenheit über ein Mi Band 4 tracke. Ich habe ehrlich gesagt, keine Ahnung wie oft das funkt. Ich hatte eigentliche erwartet, dass der Esp das Mi Band innerhalb eines gewünschten Intervalls anpingt. Wenn das ganze vielversprechend läuft denke ich aber über eine neueres Modell oder eine neue Smart Watch nach. Welches Gerät nutzt du bei dir zum tracken?
Der Erfolg mit der Reduzierung des Intervalls klingt viel versprechend. Genau wie, dass du das Thema wieder intensiver verfolgen willst. Am Wochenende klemme ich mich dann auch mal dran.
-
@utze86
Benutze selbst die Mi Band 5. BLE Advertisements werden einfach im Intervall gesendet, da ist nichts mit ping. Klasse wäre es wenn beim Sender das Intervall eingestellt werden könnte, ist aber bei der Mi nicht der Fall. -
Welche Shellys haben denn alle einen ESP32 verbaut?
Ich muss selbst mal eben schauen was ich verbaut habe
Ich habe bei uns im EG1
- Küche 2x Dimmer 2 (ESP32)
- Wohnzimmer 3x Dimmer 2 (ESP32)
- Wohnzimmer 1x Shelly 2.5 (??)
- Flur 1x Dimmer (??)
- WC 1x Shelly 1
EG2
- Büro 2x 2.5 (??)
- Flur 2 2x 2.5 (??)
- Bad 2 Shelly RBBW 2 (??)
Und im OG leider,...
- Treppenhaus 1x Dimmer (??)
- Kind 1 Dimmer (??)
- Kind 2 Dimmer (??)
- Chill Dimmer (??)
- Netzwerk Raum Shelly 2.5 (??)
- Schlafzimmer 1 1x Dimmer (??)
- Gästezimmer 1x DImmer (??)
- Wandschrank 2.5 (??)
- Schlafzimmer 2 1x Dimmer 2 (ESP32)
- Schlafzimmer 2 1x RGBW 2 (??)
- Bad 1x Shelly 1 (??)
- Bad 1x Dimmer (??)
OG2
- Mitte 1x Shelly 2.5 (??)
- Büro2 1x Shelly 1 (??)
Aussenbereich
- 4x Shelly 2.5 (??)
Ich hoffe, dass hier ein paar von geeinigt sind, so dass ich nicht überall externe ESP32 positionieren muss,...
-
@stolly82
Die neuen Plus Modelle verwenden esp32 (SingleCore). Wenn deine Shelly älter sind, werden es wohl noch keine esp32 Modelle sein -
@giuseppes so hab am Wochende den ersten Shelly wie von dir beschrieben geflashed. Hat soweit auch alles gut geklappt. Ich habe die Scanfrequenz mal probeweise auf eine Sekunde gestellt und der Iobroker wirft mir mit von meinem Mi Band 4 ca alle 3 bis 12 Sekunden eine Rssi Wert aus. Das Intervall streut also doch schon sehr, im. Zweifel sollte man das mit den Bewegungsmeldern aber gut in den Griff bekommen.
Im nächsten Schritt werde ich dann mal ein paar mehr shellys flashen und dann auch verbauen.
Verfolgt du noch den Ansatz mit der über die Triangulation? Um zu bestimmen in welchem Raum ich mich befinde würde ich einen Ansatz mit Schnittflächen verfolgen. Indem sich die Rssi Werte von verschiedenen Shellys in einem Raum überschneiden.
Ich bin mir allerdings noch nicht sicher ob ich mit durchschnittlichen Werten arbeiten soll oder ob ich die direkten Rssi Werte nehme. Die Durchschnittlichen Werte mache das ganze doch bestimmt etwas träger, wie wären deine Erfahrungen?
-
@utze86
Zum Intervall inkl ioBroker:
Check am besten in der Tasmota Console vom Shelly, wie häufig da tatsächlich deine Uhr erkannt wird. Innerhalb ioBroker läuft das mit dem sonoff Adapter nicht optimal. Wenn zu viele Aktualisierungen kommen, schafft es der Adapter nicht, die rssi Werte und mac bzw. uid synchron in die States zu schreiben. Evtl müsste man mqtt Adapter verwenden und selbst verarbeiten. Dann wäre alles innerhalb eines json. Leider müsste dann auch die Steuerung über mqtt laufen... Hier bin ich allgemein noch am testenPositionsbestimmung:
Triangulation bringt mit ble rssi nichts. Schwankungen sind zu extrem. Daher habe ich das Thema Fingerprint ins Auge gefasst. Jede interessante Position wird angelernt. D.h. zu jeder Position werden rssi Werte aufgezeichnet und später zum Gegenprüfen wieder verwendet.
Nachteil: sich frei im Raum bewegen führt nicht dazu dass es in einer 2D oder gar 3D Karte nachvollziehbar ist. Es ist mit ble nur ein scheinbarer Nachteil, da es aktuell wegen der rssi Streuung immens viele Sprünge gäbe.
Vorteil: Abweichungen der rssi Werte aufgrund der Scanner Positionen (verdeckt, hinterm Schrank o.ä.) wird beim Anlernen direkt mit berücksichtigt. Die Frage hierbei ist, wie sich die rssi Schwankungen bei diesem Verfahren bemerkbar machen.Fingerprint ist im Vergleich zur Triangulation etwas komplexer in der ioBroker Umsetzung, da Interaktionen nötig sind (start anlernen, welche Position?). Daher müsste ich mit etwas html die VIS einbinden. Werde vsl. im Dezember damit starten.
Zu deinem Ansatz mit den Schnittflächen: Du meinst quasi triangulation innerhalb des Raumes. Das würde sehr viele Shelly / Scanner benötigen, oder versteh ich dich falsch?
Original rssi ist zwar schneller aber schwankt deutlich. Ich hatte mal mit Mittelwerten experimentiert, das war ok aber träger. Im Code von ESPresense habe ich gesehen, dass sie den median von den letzten 3 Werten nehmen. Das finde ich sehr geschickt, da einzelne Ausreißer quasi 0 berücksichtigt werden und die Trägheit noch ok ist.