NEWS
MQTT Bluetooth BLE Anwesenheitserkennung mit ESP32
-
@utze86
Original Firmware:
Hatte heute die Firmware von einem Shelly gezogen und auf einem Tasmotized Shelly geflashed, hatte geklappt. Durch verschiedene Tests habe ich die Firmware aber unbrauchbar gemacht. Morgen lade ich die wieder und melde mich.Scanner:
Auch mein mi band wurde zum Teil von Tasmota nicht erkannt und phasenweise, wenn es erkannt wurde, kamen die rssi mal nach 2s, mal nach 15s.
Das mit espresense (crash) hatte mich so geärgert, dass ich keine Lust mehr darauf hatte. Hatte heute zwei Einstellungen korrigiert und trotzdem =crash.
Aber die Komplexität von espresense benötige ich nicht, ebenso ist tasmota eigentlich zu viel. Daher schreibe ich jetzt etwas von Grund auf neu.
Habe die bluetooth Bibliothek im shelly ohne crash getestet: Uhr wird sogar sekündlich (!!!) gefunden. Hoffe, dass es sich nicht verschlechtert, wenn die Wifi Verbindung dazu kommt.Nächsten Schritte:
- Erkennung der Schaltereingänge
- Schalten der Relais
- Übertragung der Werte über mqtt. Hier muss ich schauen, was alles übertragen wird. Es wäre sonst sehr viel. Zunächst nur MAC + RSSI + Status Eingänge
- Schalten der Relais über mqtt
- wenn noch Zeit und Motivation übrig: OTA Update ermöglichen
Meine minimal Idee für die Umsetzung hinsichtlich Shelly: die Statis der Schalter-Eingänge werden immer über mqtt übermittelt. Somit kann die Intelligenz (Schalter, Taster, mit Relay verknüpft, Rollladen oder Licht, etc.) vollständig über ioBroker umgesetzt werden.
-
@giuseppes
Hört sich mal wieder vielversprechend an ich bin gespannt was du berichtest. Morgen müsste mein neuer Controller zum flashen kommen. Dann teste ich mich nochmal parallel mit Tasmota und werde mal ein paar Shellys verbauen. Bin gespannt wie stabil das dann auch läuft. Nach deinem letzten Post bin ich da etwas skeptisch, dass das dauerhaft und stabil läuft. -
Wie laufen deine Versuche mit der bluetooth Bibliothek? Bist du schon weiter?
Ich habe inzwischen zwei Shellys mit Tasmota verbaut und die Signale vom MiBand kommen nach wie vor recht regelmäßig an. Neben dem Mi Band versuche ich grade noch ein weiteres BLE Gerät zu tracken. Hierzu nehme ich ein Gigaset BLE Beacon. Beide Geräte werden vom Shelly zuverlässig empfangen und im Tasmota Main Menu angezeigt. Allerdings habe ich das Problem, dass beide RSSI Werte in nur einen Datenpunkt IBEACON_RSSI im iobroker geschrieben werden. Das heißt ich kann bei meiner Auswertung im iobroker nicht mehr differenzieren ob das Signal vom Mi Band oder vom BLE Tag kommt. Hast du eine Idee wie ich es gelöst bekomme, dass Tasmota zwei Datenpunkte an den iobroker sendet, also bspw. IBEACON_RSSI_MiBand und IBEACON_RSSI_GigasetBeacon? Zur Auswertung nutze ich den Sonoff Adapter aber eventuell gibt es ja eine andere Möglichkeit.
Die zwei Geräte bekommt man übrigens einfach gescannt und gefiltert wenn man in der Tasmota-Konsole die Regel für zwei Geräte hintereinander weg eingibt, danke für den Tipp:
Rule2 ON System#Boot DO BLEAlias MACadresse1=Name1 MACAdresse2=Name2 endon -
@utze86
Wenn der Gigaset Tag immer mit der selben MAC sendet, kannst Du das so machen. Spätestens, wenn das Smartphone über iBeacon Simulator hinzukommt, klappt das Filtern nicht mehr, da dann die UUID verwendet werden müsste, Tasmota aber nur mac filtern kann. Zumindest habe ich nichts anderes gefunden.
Leider funktioniert der Sonoff Adapter nicht optimal mit den Scanner Werten. Du kannst alternativ den MQTT Client Adapter testen. Dann müsstest du alles über MQTT selbst steuern.Zu meiner Implementierung für den Shelly
Bisher umgesetzt:
- BLE Scanner für eine hinterlegte MAC. Werte kommen meist alle 1-2 Sekunden. Manchmal dauert es 3-4s.
- Erkennen der Schaltereingänge
- Schalten der Ausgänge
- Modus für Licht und Rollladen umschaltbar
- Rollladen über Positionsvorgabe steuerbar (bisher einfache Kalibrierung über manuelle Zeitmessung)
- OTA Updates möglich über PlatformIO
Bisher fest codiert, nicht optimal für Endanwender:
- WLAN und MQTT Server Konfiguration
- Konfiguration der Ein- und Ausgänge
- Filter für eine MAC
Geplant (in dieser Reihenfolge)
- Konfiguration der Ein- und Ausgänge über MQTT
- Filter erweitern auf mehrere MAC und über MQTT
- Filter erweitern auf iBeacon UUIDs
- Auf Github inkl Doku veröffentlichen
- Leistungsmessung für Shelly 2PM integrieren und darüber automatische Kalibrierung der Rollläden
- Leistungsmessung für Shelly 1PM
Die Leistungsmessungen sind absolut optional, wenn ich Langeweile haben sollte.
Einzig Wifi und Mqtt werde ich wahrscheinlich nicht zeitnah über WebUI implementieren können, da ich kein funktionierendes Beispiel habe. Bedeutet, jeder Endanwender muss selbst über PlatformIO kompilieren.
Es wurden zuletzt Shelly Plus 2PM mit DualCore gesichtet. Wenn ich eins davon in die Finger bekomme, würde ich versuchen, die Shelly Funktionalität in Espresense zu integrieren.
-
@giuseppes
Ich bin gespannt was daraus wird. Willst du deine Arbeit in Form eines eigenen Adapters oder eines Skripts veröffentlichen oder wie hast du das geplant?Was mein Problem mit den Datenpunkten angeht habe ich mir jetzt ein Workaround gebastelt. Und zwar kann man bei den Einstellungen im Sonoff Adapter einen Haken bei "für Tele/SENSOR" setzen. Daraufhin werde weitere Datenpunkte angelegt. In einem der Datenpunkte wird die Mac Adresse und in einem Datenpunkt wird der Gerätename zum soeben aktualisierten RSSI Wert geschrieben. Mit einem einfachen Blockly kann ich nun nach meinen Geräten filtern und den zugehörigen RSSI-Wert in einen eigens angelegten Datenpunkt mit meinem Gerätenamen schreiben. Je mehr Geräte und Shellys ich verwende desto umfangreicher wird das ganze natürlich aber mit 2 Shellys und 3 BLE-Geräten funktioniert das aktuell zuverlässig und noch übersichtlich. Da der Scan meiner Gtags zuverlässig funktioniert bin ich übrigens nicht darauf angewiesen zusätzlich mein Handy zu Scannen, dieses Problem umgehe ich somit. Über das Gtag will ich erstmal global erkennen ob jemand zuhause ist. Die Raumanwesenheit will ich dann wie geplant über das MiBand realisieren.
Ich denke mit deiner Lösung wird es alles einfach werden aber so versuche ich jetzt erstmal einen Start für mich zu finden. Wenn es bei dir dann läuft werde ich später sicherlich umswitchen. Als nächstes werde ich aber erstmal versuchen die originale Shelly Firmware von einer meiner originalen Shelly zu speichern, damit ich per Flash auch wieder zurück in den Ur-Zustand komme, bevor ich jetzt alle meine Shellys mit Tasmota bespiele. Somit könnte ich dann auch im Nachgang deine Lösung in mein System einbinden.
-
@utze86
Das mit den zusätzlichen States im Sonoff Adapter hatte ich auch gefunden. Nur bekam ich dort sync Probleme, manchmal stimmte die MAC bzw der Name nicht zum rssi. Aber da hatte ich noch nicht gefiltert.Das was ich gerade programmiere, wird über den mqtt Adapter von ioBroker absolut simpel nutzbar sein. Das funktioniert auch schon einwandfrei. Ich persönlich könnte es jetzt schon verwenden. Wenn ich es aber zur Verfügung stelle, dann müssen noch die oben genannten Punkte rein. Wifi Config wird dann auch über Access Point einstellbar sein. Hatte den allgemeinen Programmieraufwand etwas unterschätzt, daher komme ich gerade in einen zeitlichen Engpass. Ab Freitag fahre ich für knapp zwei Wochen weg. Danach kann ich weiter machen. Versuche den morgigen Tag noch effizient zu nutzen.
-
@giuseppes
Na dann wünsche ich dir in dem Sinne schöne Feiertage und eine erholsame Reise. -
Hi, ich habe mir vor Weihnachten ein MiBand 7 bestellt, was ich bisher leider nicht per Bluetooth über Tasmota mit den Shellys finden konnte. Nach etwas Recherche bin ich auf das hier gestoßen:
Wenn ich den Befehl BLEAddrFilter 1 in die Console eingeben wird das MiBand 7 ohne Probleme gefunden. Die Info kommt sicherlich etwas spät aber möglicherweise hilft dir das ebenfalls bei deiner Problematik weiter, dass du deine Pixel Watch bzw. die Amazfit GTS 4 Mini nicht findest.
Morgen werde ich "BLEAddrFilter 1" als Rule anlegen und dann wird das MiBand 7 hoffentlich regulär nach jedem Boot gefunden. Ich habe bisher keine Messung durchgeführt, aber das MiBand 7 wird gefühlt genau so häufig erkannt wie das MiBand 4
VG und einen guten Rutsch!
-
@utze86
Das wird wahrscheinlich die Ursache sein. Müsste ich mal testen, wenn ich wieder daheim bin. Wäre tatsächlich "etwas spät", aber natürlich danke für diese Info. Meine Pixel Watch habe ich ja inzwischen verkauft, da wäre es aber wie beim Smartphone eine random MAC Adresse. Die wurde über UUID gefunden, da kann man aber nicht filtern. Für meine aktuelle Uhr, die GTS4 Mini, könnte es aber sehr wahrscheinlich helfen. Ich hatte allerdings bei Tasmota das Problem, dass der Schalter Eingang sehr spät auslöste, wenn dieser als "detached" eingestellt wurde. Aber da, wo ich die Shelly für Rollläden einsetze, könnte ich evtl Tasmota reaktivieren.Müsste nochmals testen, wie synchron alle Signale eingehen, sodass dann der Sonoff Adapter für die Steuerung genutzt werden kann.
Ich gehe aber davon aus, dass ich mein angefangenes Projekt für die Shelly trotzdem zu Ende bringe. Da fehlt nicht mehr viel...Danke für die Info und auch dir schonmal einen guten Rutsch.
-
@utze86
Wie nun erwartet, hatte es mit Tasmota und "BLEAddrFilter 1" funktioniert. Meine GTS4 Mini wird alle 3-7 Sekunden gefunden. Werde aber zwei Nachmittage darauf verwenden, mein Tool fertigzustellen. Da klappt's deutlich häufiger und meine Hoffnung ist, dass ich für Rollläden eine Auto-Kalibrierung integrieren kann. -
@giuseppes
Gut, dass das schonmal klappt. Ich habe inzwischen weitere Shellys mit Tasmota verbaut und Werte aktuell die Signale aus. Das klappt bei 4 Stk. soweit schon ganz gut. Ich habe allerdings noch keine Abhängigkeiten festgelegt um meine Geräte/Beleuchtung hier zu steuern.Ich bin gespannt wie dein Tool läuft. Sag mal Bescheid wenn du soweit bist. Ich habe es inzwischen geschafft die Firmware von einer meiner Shellys zu sichern. Allerdings konnte ich dann von einem anschließend zurück geflashten Shelly nicht wieder auf Tasmota zurück. Der ESP Flasher zeigt mir hier immer eine Fehlermeldung. Ich kann mir aber gut vorstellen, dass die Anschlüsse am Shelly durch des gefummel mittlerweile so genudelt sind, dass ich kein anständigen Kontakt mehr zum flashen hinbekomme. Grundsätzlich komme ich aber wieder auf die originale FW zurück und bin daher schon sehr auf dein Tool gespannt. Ließe sich das Tool denn auf die Plus 1 Shellys anwenden/übertragen oder wird das "nur" auf deinen Plus 2 PM laufen?
-
@utze86
Grundsätzlich müsste das Tool auch auf Plus 1pm Modelle laufen. Es geht ja um den esp32, dieser ist in allen Plus Modellen verbaut. Konfiguration der Pins (Ein- und Ausgänge) sind simpel zu konfigurieren. Habe selbst keinen Plus 1pm, daher wäre es praktisch, wenn du es dann für mich testen könntest. Denke, dass ich diese Woche fertig werde. Komme nicht immer dazu zu programmieren, daher zieht sich das etwas. -
@utze86
Übrigens, zum Flashen habe ich mir das hier gegönnthttps://www.tindie.com/products/voltlog/voltlink-cp2102n-usb-serial-adapter-programmer/
Hatte zunächst selbst etwas gebastelt, aber es war immer viel Fummeln bis es klappte. Mit diesem Teil funktioniert es super.
-
@giuseppes
Okay das Teil ist schon praktisch. Werde mal sehen ob ich es mir auch zulege. Bisher geht das mit dem Flashen ganz gut aber man merkt nach ein paar mal hin und her, dass die Kontakte am Shelly durch sind.Gerne werde ich das Tool testen, sag einfach bescheid wenn du soweit bist. Ich hab übrigens den ganzen infachen shelly Plus 1 ohne PM. Sollte aber wie du schon sagst kein Problem sein. Bezüglich des Einrichtens der Ein- und Ausgänge würde ich mich dann ggf. Bei dir melden.
-
@utze86
Habe die erste Version hochgeladen:https://github.com/gsicilia82/ShellyNimBLE
Bin gespannt, wie gut deine MiBand7 gefunden wird. Bei mir ist es total kurios: Meine GTS4 Mini wird bis auf wenige Ausnahmen in 1-3 Sekunden gefunden. Meine MiBand6 aber nur alle 4-8 Sekunden...
Bin mit dem Projekt noch nicht ganz fertig. Etwas Komfort bei Shelly Plus2PM will ich noch ergänzen (Leistungsmessung wegen autom. Rollo-Kalibrierung).
[Ich will nachher auch prüfen ob ich einen Shelly OTA direkt flashen kann. Dank Github steht ein Link mit der Firmware zur Verfügung. Aber wahrscheinlich wird so etwas direkt unterbunden...
https://github.com/gsicilia82/ShellyNimBLE/releases/download/0.0.1/firmware.bin]
EDIT: Schade, klappt leider nicht mit OTA aufspielen auf original Firmware -
@giuseppes
So ich habe heute einen Shelly mit der firmware.bin geflashed. Ich komme über den AP auch auf die Maske zur Eingabe der WIFI-Daten, etc. Im Anschluss erhalte ich die Meldung:soweit so gut. Allerdings finde ich den Shelly anschließend nicht über meine Fritzbox. Ein Blick ins WLAN zeigt mir dann, dass der Shelly wieder im AP Mode ist. Also habe ich mal die Logs ausgelesen. Nach dem Flashen mit ESPtool erhalte ich immer die folgende Einträge:
[12:01:27]rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
[12:01:27]invalid header: 0x3b666972
[12:01:27]invalid header: 0x3b666972
[12:01:27]invalid header: 0x3b666972
[12:01:27]invalid header: 0x3b666972
[12:01:27]invalid header: 0x3b666972
[12:01:27]invalid header: 0x3b666972
[12:01:27]invalid header: 0x3b666972
[12:01:27]invalid header: 0x3b666972
[12:01:27]ets Jul 29 2019 12:21:46
[12:01:27]nach dem Flashen mit dem ESPFlasher erhalte ich folgende Einträge:
[12:03:47]
[12:03:47]devMode or deviceName is empty, starting CaptivaPortal
[12:03:47]Setting up AP Mode
[12:03:47]
[12:03:47]Brownout detector was triggered
[12:03:47]
[12:03:47]ets Jul 29 2019 12:21:46
[12:03:47]
[12:03:47]rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
[12:03:47]configsip: 188777542, SPIWP:0xee
[12:03:47]clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
[12:03:47]mode:DIO, clock div:2
[12:03:47]load:0x3fff0030,len:1184
[12:03:47]load:0x40078000,len:12784
[12:03:47]load:0x40080400,len:3032
[12:03:47]entry 0x400805e4
[12:03:48]Das ganze liest sich für mich nach nem Bootloop. Ich habe keine Ahnung wie das mit deiner Firmware zusammenhängen kann, bei den anderen FW's hatte ich das Problem bisher aber noch nicht. Probleme mit nem Bootloop hatte ich sonst immer nur am Anfang als ich immer die falsche Version von Tasmota geflashed habe. Da hatte sich damals allerdings nichtmal der AP aufgebaut.
-
@utze86
Hmmm, ich habe immer mit Platformio geflasht. Ich muss es wohl auch mit dem esptool testen. Eine Möglichkeit könnte sein, dass die Firmware nicht vollständig 4MB groß ist, die ich aus Platformio genommen habe.
Ich werde heute Abend mal mit dem esptool am Shelly 2pm testen und mich melden. Danke schonmal für den Test und die Rückmeldung.Edit:
Kurios finde ich auf jeden Fall, dass das Captive Portal kam und es erst danach nicht weiter ging.
Möglich ist dass die Partition für die Speicherung der Werte (nvs) quasi nicht existiert, weil die Firmware unvollständig sein könnte. -
@giuseppes
Wo du es grade sagst. Ich habe die Firmware über den Link gezogen:https://github.com/gsicilia82/ShellyNimBLE/releases/download/0.0.1/firmware.bin
Die Datei ist bei mir aber nur ca. 900KB groß.
-
@utze86
Damit flashed man nur die App Partition. Das wird der Fehler sein. Ich werde schauen, wie ich eine 4MB Firmware aus Platformio bekomme. Bin mit Platformio auch noch kein Profi, habe erst mit diesem Projekt damit angefangen. Aber durch die Integration in vscode ist es echt genial.
Falls ich es damit nicht schaffe, setze ich mein Shelly zurück und lese das Image über esptool aus. -
@utze86
Habe nun ein 4MB image unter dem selben Release hochgeladen. Es gibt firmware_update und firmware_full unter dem letzten Release. *_full enthält alle Partitionen. Habe es nun als Backup von meinem Shelly entnommen. Das Flashen auf einen anderen Shelly war erfolgreich. Bin also recht optimistisch für deinen Versuch.
Wie das in platformio geht, ist mir noch ein Rätsel; aber das esptool kann ich wohl auch für das mergen benutzen. Sind für mich gerade viele Lern-Baustellen gleichzeitig