NEWS
MQTT Bluetooth BLE Anwesenheitserkennung mit ESP32
-
@giuseppes Nochmal eine kleine Rückmeldung zum Shelly. Ich habe das Skript nochmal mit der aktuellen stable Firmware von Shelly getestet. Diesen letzten Test wollte ich dann noch nochmal durchführen als ich gesehen habe, dass es ein Update gibt. Hier habe ich allerdings ein ähnliches Problem wie du: Das Mi Band wird komischer Weise gar nicht mehr erkannt. Keine Ahnung ob es am BLE in Kombi mit dem Band und dem Shelly liegt. Andere Geräte werden teils mehrfach die Sekunde erkannt. Der Trend geht also weiter zu Tasmota.
Hast du eigentlich inzwischen eine Möglichkeit gefunden die Shelly Firmware wieder zurück auf den Shelly zu bekommen wenn dort einmal Tasmota installiert wurde? Bisher konnte ich online keine original Firmware finden. Die Firmware von einem anderen Shelly runter ziehen fällt aktuell leider Flach da mein USB/Serial Adapter scheinbar den Geist aufgegeben hat. Aber ich habe gesehen, dass die Shellys sich inzwischen OTA mit verschiedenen Firmwaren flashen lassen. Was natürlich mega praktisch ist, vorallem wenn die Dinger bereits verbaut sind. Also falls du eine originale Firmware hast wäre es cool wenn du sie mir zur Verfügung stellen könntest.
EDIT: OTA geht natürlich nicht von Original FW zu Tasmota
-
@utze86
Habe selbst noch keine original Firmware finden können, daher ist ein Flashen zurück auf original auch für mich nicht möglich. Über die Möglichkeit, die Firmware von einem anderem Gerät zu ziehen, hatte ich noch gar nicht nachgedacht.
Ich habe übrigens meine Pixel Watch verkauft und mir die Amazfit GTS 4 Mini geholt. Diese sendet, wie das Mi Band, konstant Advertisements. Aber auch diese wird vom Shelly nicht gefunden, egal ob original Firmware oder Tasmota. Daher habe ich nun meine zwei Test-Shelly auf Facebook zum Verkauf angeboten. Ich überlege nun original esp32 mit espresense zu verwenden. Ich hatte versucht espresense für die Shelly zu kompilieren, funktionierte anscheinend, aber irgendwas führt dann zu einem kritischen Fehler und der Shelly bootet. Hatte schon einen Schaltereingang zu Testzwecken im espresense Code integriert... überlege nun worauf ich mich konzentrieren soll. Zeit ist ein begrenztes Gut.
Werde mich mal schlau machen, wie ich Firmware von einem Shelly downloaden kann und melde mich wenn erfolgreich. -
Das klingt ja sehr ernüchternd. Sobald das bei mir mit dem flashen wieder funktioniert. Probiere ich nochmal die Variante mit Tasmota. Aber ist halt blöd zu wissen, dass wenn ich das Mi Band irgendwann durch ein anderes Armband tausche ich eventuell wieder Probleme mit dem Scannen bekomme. Der Wechsel zu "richtigen" ESP`s mir Espresence wäre wahrscheinlich die effektivste Lösung würde mich aber wieder vor das Problem stellen keine Unterputzlösung zu haben. Eventuell müsste ich mir hier nochmal Gedanken machen. Ich mache es davon abhängig wie es final mit Tasmota läuft. Allerdings würde ich auch langsam ganz gerne mal was umsetzen und nicht immer nur testen, wie du schon sagst die Zeit ist immer begrenzt...
Dein Angebot bei Facebook habe ich gestern übrigens verfolgt
Bezüglich zurückflashen der Firmware bin ich übrigens vor einiger Zeit auf dieses Video gestoßen. Möglicherweise funktioniert es über den gleichen weg mit den Shellys Gen. 2, müsste man mal testen. Ich persönlich kenne mich nicht wirklich mit Python aus, scheint mir jetzt aber auch nicht all zu komplex zu sein wenn man die Anleitung nutzt.
https://haus-automatisierung.com/projekt/2018/10/25/projekt-esp-firmware-klonen.html
-
@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.