Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Hardware
  4. MQTT Bluetooth BLE Anwesenheitserkennung mit ESP32

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.5k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.1k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    2.8k

MQTT Bluetooth BLE Anwesenheitserkennung mit ESP32

Geplant Angeheftet Gesperrt Verschoben Hardware
242 Beiträge 26 Kommentatoren 45.9k Aufrufe 32 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • W Wildbill

    @giuseppes Den kenne ich, der bringt mir aber nichts, da dort, wo ich gerne die Anwesenheit per BT classic prüfen würde, keiner meiner Rechner steht und mir selbst ein Raspi nur für diese eine Aufgabe etwas zu viel Overkill wäre. Zumal ich da jetzt auch extra einen kaufen müsste oder zumindest einen BT-Dongle für einen alten Raspi 1, der noch rumliegt.
    Via ESP32 wäre halt schön schlank und ich hätte alles da, bis auf den passenden Sketch...

    Gruss, Jürgen

    G Offline
    G Offline
    GiuseppeS
    schrieb am zuletzt editiert von
    #34

    @wildbill
    Habe gerade kurz google bemüht aber bzgl. BTClassic auch kaum was gefunden, höchstens Hinweise, dass der esp32 das könnte...
    Der einfache Weg für dich könnte sein, auf dem Android die App "Beacon Simulator" zu installieren. Das würde mit dem hier gezeigten Sketch funktionieren.
    Aber nicht jedes Smartphone kann das. Selbst bei aktuellen Modellen gibt es Unterschiede. Mein Huawei P30 Pro sendete einwandfrei, mein aktuelles Smartphone, ein OnePlus 8 Pro, weil einfach nichts senden...

    Ich benutze in Verbindung mit dem esp32 die xiaomi mi band 5.

    W 1 Antwort Letzte Antwort
    0
    • G GiuseppeS

      @wildbill
      Habe gerade kurz google bemüht aber bzgl. BTClassic auch kaum was gefunden, höchstens Hinweise, dass der esp32 das könnte...
      Der einfache Weg für dich könnte sein, auf dem Android die App "Beacon Simulator" zu installieren. Das würde mit dem hier gezeigten Sketch funktionieren.
      Aber nicht jedes Smartphone kann das. Selbst bei aktuellen Modellen gibt es Unterschiede. Mein Huawei P30 Pro sendete einwandfrei, mein aktuelles Smartphone, ein OnePlus 8 Pro, weil einfach nichts senden...

      Ich benutze in Verbindung mit dem esp32 die xiaomi mi band 5.

      W Online
      W Online
      Wildbill
      schrieb am zuletzt editiert von
      #35

      @giuseppes Es ist leider ein wirkliches Seniorenhandy. Kein Android, kein Apple, kein Internet. Sondern ein einfaches Klapphandy von Doro. Klappe auf, Anruf annehmen, Klappe zu auflegen, dazu drei Kurzwahltasten. Da ist leider nix mit Apps installieren. Aber BT classic hat es drin.
      Dass mit dem ESP32 in Verbindung mit diesem Handy BT Classic geht, habe ich bereits getestet. Es gibt ja durchaus Sketche um sich manuell vom Handy aus per BT classic mit dem ESP zu verbinden. Das hat geklappt. Und hätte ich auf dem Handy Apps installierne können, dann hätte ich Eingaben auch sicher auf der seriellen Console gesehen. Also die Hardware kann alles. Nur sind alle BT-Scanner die ich gefunden habe immer nur für BLE. Für BT classic gibt es immer nur Beispiele, um sich per Terminal-App zu verbinden. Warum auch immer...
      Meiner Mutter mit >70 Jahren möchte ich deshalb aber jetzt auch nicht mehr Android oder so näherbringen. Die kommt mit dem Handy gerade so klar, alles andere wäre 100% nix.

      Gruss, Jürgen

      W 1 Antwort Letzte Antwort
      0
      • W Wildbill

        @giuseppes Es ist leider ein wirkliches Seniorenhandy. Kein Android, kein Apple, kein Internet. Sondern ein einfaches Klapphandy von Doro. Klappe auf, Anruf annehmen, Klappe zu auflegen, dazu drei Kurzwahltasten. Da ist leider nix mit Apps installieren. Aber BT classic hat es drin.
        Dass mit dem ESP32 in Verbindung mit diesem Handy BT Classic geht, habe ich bereits getestet. Es gibt ja durchaus Sketche um sich manuell vom Handy aus per BT classic mit dem ESP zu verbinden. Das hat geklappt. Und hätte ich auf dem Handy Apps installierne können, dann hätte ich Eingaben auch sicher auf der seriellen Console gesehen. Also die Hardware kann alles. Nur sind alle BT-Scanner die ich gefunden habe immer nur für BLE. Für BT classic gibt es immer nur Beispiele, um sich per Terminal-App zu verbinden. Warum auch immer...
        Meiner Mutter mit >70 Jahren möchte ich deshalb aber jetzt auch nicht mehr Android oder so näherbringen. Die kommt mit dem Handy gerade so klar, alles andere wäre 100% nix.

        Gruss, Jürgen

        W Online
        W Online
        Wildbill
        schrieb am zuletzt editiert von
        #36

        @GiuseppeS Ich habe nun doch eine kleine BLE beacon für den Schlüsselbund gekauft. Der ist auch immer am Mann (an der Frau) und alles funktioniert.

        Gruß, Jürgen

        1 Antwort Letzte Antwort
        1
        • W Online
          W Online
          Wildbill
          schrieb am zuletzt editiert von Wildbill
          #37

          @GiuseppeS Muss nochmal blöd fragen, weil ich grad irgendwie auf dem Schlauch stehe. Zum testen hatte ich mir die MQTT-Messages an einen Mosquitto-Testserver geschickt, den ich mit FHEM abfrage. Dort bekam ich für jedes gefundene Gerät einen eigenen Datenpunkt und konnte direkt darauf reagieren.
          Nun wollte ich mir den Umweg über FHEM sparen und die Daten direkt an den MQTT-Broker in iobroker schicken, der sowieso läuft. Die Daten kommen auch an, aber leider habe ich nur einen Datenpunkt, der alle enthält:

          [{"manuData": "8f3a109e405c6fe27c23448103fa010ff3f11000","mac": "44:23:7c:e2:6f:5e","rssi": -86}, {"manuData": "8f3a1055a08b33dfce55c8103f545ff3f11000","mac": "5c:e5:0c:df:33:8d","rssi": -82}, {"manuData": "8f3a109e40d279bc190648103fd46ff3f11000","mac": "64:90:c1:9b:27:0f","rssi": -83}, {"manuData": "8f3a109e40522da2c190648103fa47ff3f11000","mac": "64:90:c1:a2:2d:54","rssi": -73}, {"manuData": "00789ce77308b0a2c190648103f748ff3f11000","mac": "78:9c:e7:07:30:8b","rssi": -80}, {"manuData": "4c0215fda5693a4e24fb1afcfc6eb7647825275165c1","mac": "dc:0d:7f:05:26:47","rssi": -83}, {"manuData": "0000e77308b0a2c190648103ffcaff3f11000","mac": "e8:f2:e2:cd:2f:05","rssi": -68}]
          

          Wie kann ich denn da auf ein ebstimmtes Gerät triggern? Also, wenn es Daten schickt, setze einen Datenpunkt "Anwesenheit" auf true, wenn keine Daten kommen, setzte ihn auf false. Ich habe auch schon mehrere Scripte hier im Forum getestet, die JSON-Strings in einzelne Datenpunkte aufteilen, aber irgendwie bin ich zu doof. Muss glaub doch noch Javascript lernen... :confounded:

          Gruss, Jürgen

          G 1 Antwort Letzte Antwort
          0
          • W Wildbill

            @GiuseppeS Muss nochmal blöd fragen, weil ich grad irgendwie auf dem Schlauch stehe. Zum testen hatte ich mir die MQTT-Messages an einen Mosquitto-Testserver geschickt, den ich mit FHEM abfrage. Dort bekam ich für jedes gefundene Gerät einen eigenen Datenpunkt und konnte direkt darauf reagieren.
            Nun wollte ich mir den Umweg über FHEM sparen und die Daten direkt an den MQTT-Broker in iobroker schicken, der sowieso läuft. Die Daten kommen auch an, aber leider habe ich nur einen Datenpunkt, der alle enthält:

            [{"manuData": "8f3a109e405c6fe27c23448103fa010ff3f11000","mac": "44:23:7c:e2:6f:5e","rssi": -86}, {"manuData": "8f3a1055a08b33dfce55c8103f545ff3f11000","mac": "5c:e5:0c:df:33:8d","rssi": -82}, {"manuData": "8f3a109e40d279bc190648103fd46ff3f11000","mac": "64:90:c1:9b:27:0f","rssi": -83}, {"manuData": "8f3a109e40522da2c190648103fa47ff3f11000","mac": "64:90:c1:a2:2d:54","rssi": -73}, {"manuData": "00789ce77308b0a2c190648103f748ff3f11000","mac": "78:9c:e7:07:30:8b","rssi": -80}, {"manuData": "4c0215fda5693a4e24fb1afcfc6eb7647825275165c1","mac": "dc:0d:7f:05:26:47","rssi": -83}, {"manuData": "0000e77308b0a2c190648103ffcaff3f11000","mac": "e8:f2:e2:cd:2f:05","rssi": -68}]
            

            Wie kann ich denn da auf ein ebstimmtes Gerät triggern? Also, wenn es Daten schickt, setze einen Datenpunkt "Anwesenheit" auf true, wenn keine Daten kommen, setzte ihn auf false. Ich habe auch schon mehrere Scripte hier im Forum getestet, die JSON-Strings in einzelne Datenpunkte aufteilen, aber irgendwie bin ich zu doof. Muss glaub doch noch Javascript lernen... :confounded:

            Gruss, Jürgen

            G Offline
            G Offline
            GiuseppeS
            schrieb am zuletzt editiert von GiuseppeS
            #38

            @wildbill
            Ich mache das wie folgt:
            In meinem Skript ist die MAC oder die Manu Data notiert und in dem JSON suche ich danach. Das Ergebnis, wenn vorhanden, schreibe ich in ein separates State extra für dieses Gerät. Ist in Javascript geschrieben. Könnte ich auch zur Verfügung stellen.

            Bzgl JSON musste ich zu Beginn auch viel Try&Error durchmachen, inkl Google. Aber ich sag mal so: hier ist es eine klare kleine Aufgabe. Mit einer entsprechenden Vorlage sollte man klar kommen.

            W 1 Antwort Letzte Antwort
            0
            • G GiuseppeS

              @wildbill
              Ich mache das wie folgt:
              In meinem Skript ist die MAC oder die Manu Data notiert und in dem JSON suche ich danach. Das Ergebnis, wenn vorhanden, schreibe ich in ein separates State extra für dieses Gerät. Ist in Javascript geschrieben. Könnte ich auch zur Verfügung stellen.

              Bzgl JSON musste ich zu Beginn auch viel Try&Error durchmachen, inkl Google. Aber ich sag mal so: hier ist es eine klare kleine Aufgabe. Mit einer entsprechenden Vorlage sollte man klar kommen.

              W Online
              W Online
              Wildbill
              schrieb am zuletzt editiert von
              #39

              @giuseppes Ja gerne. Ich tippsel mir gerade die Finger wund und versuche aus verschiedenen Scripten, die ich hier im Forum zum Thema JSON parsen finde, was zusammenzustupfen, aber irgendwie will es nicht so ganz. Wenn Du mir da einen Denkanstoß geben könntest, würde ich das sicher angepasst bekommen.

              Mir fehlen halt die Grundlagen der Javascript-Befehle und dann wird es da schon schwer. Mit Blockly fühle ich mich sehr wohl, aber das ist hier fehl am Platz.
              Worin ich aber recht gut bin, ist Scripte anderer dann zu verstehen und für meine Zwecke anzupassen. :blush:

              Gruss, Jürgen

              G 1 Antwort Letzte Antwort
              0
              • W Wildbill

                @giuseppes Ja gerne. Ich tippsel mir gerade die Finger wund und versuche aus verschiedenen Scripten, die ich hier im Forum zum Thema JSON parsen finde, was zusammenzustupfen, aber irgendwie will es nicht so ganz. Wenn Du mir da einen Denkanstoß geben könntest, würde ich das sicher angepasst bekommen.

                Mir fehlen halt die Grundlagen der Javascript-Befehle und dann wird es da schon schwer. Mit Blockly fühle ich mich sehr wohl, aber das ist hier fehl am Platz.
                Worin ich aber recht gut bin, ist Scripte anderer dann zu verstehen und für meine Zwecke anzupassen. :blush:

                Gruss, Jürgen

                G Offline
                G Offline
                GiuseppeS
                schrieb am zuletzt editiert von
                #40

                @wildbill
                Geht klar, dann setze ich mich gleich mal an den PC. Nur vorab als Tip: Es ist eigentlich ein Array mit mehreren JSON Objekten.

                W 1 Antwort Letzte Antwort
                0
                • G GiuseppeS

                  @wildbill
                  Geht klar, dann setze ich mich gleich mal an den PC. Nur vorab als Tip: Es ist eigentlich ein Array mit mehreren JSON Objekten.

                  W Online
                  W Online
                  Wildbill
                  schrieb am zuletzt editiert von
                  #41

                  @giuseppes Das habe ich ziemlich am Anfang schon festgestellt. Erster Schritt war, den Inhalt des Datenpunktes mal in einen Online JSON Parser zu schieben und zu schauen, wie die Struktur genau ist. Array machte es dann für mich nicht leichter. Das meiste, was ich gefunden habe, waren JSON ohne Array und meist noch mit fester Struktur. Hier im Array ändern sich ja auch immer mal die Nummern der einzelnen Geräte, je nachdem, was ankommt und gerade nicht gehört wird...

                  Gruss, Jürgen

                  G 1 Antwort Letzte Antwort
                  0
                  • W Wildbill

                    @giuseppes Das habe ich ziemlich am Anfang schon festgestellt. Erster Schritt war, den Inhalt des Datenpunktes mal in einen Online JSON Parser zu schieben und zu schauen, wie die Struktur genau ist. Array machte es dann für mich nicht leichter. Das meiste, was ich gefunden habe, waren JSON ohne Array und meist noch mit fester Struktur. Hier im Array ändern sich ja auch immer mal die Nummern der einzelnen Geräte, je nachdem, was ankommt und gerade nicht gehört wird...

                    Gruss, Jürgen

                    G Offline
                    G Offline
                    GiuseppeS
                    schrieb am zuletzt editiert von GiuseppeS
                    #42

                    @wildbill

                    
                    // erstelle States für Zielwerte
                    createState("VIS.bleScan.Pino.RawWemos");
                    createState("VIS.bleScan.Pino.AvgWemos");
                    
                    // nachfolgend kann auch manuData statt MAC eingetragen werden
                    // dann müsste unten der Vergleich auf manuData statt mac erfolgen
                    // z.B. val[dev].manuData.includes(pino) statt val[dev].mac.includes(pino)
                    let pino = "ed:4b:90:40:e7:ba";
                    
                    // für Berechnung gleitender Mittelwert
                    let arrPinoWemos = [0,0,0,0,0,0];
                    
                    
                    on({id: "mqtt-client.0.bleScan.bett_192_168_192_49", change: "ne"}, function (obj) {
                    
                        // Array in val schreiben
                        let val = JSON.parse(obj.state.val);
                        
                        // Array durchlaufen
                        for ( let dev=0; dev < val.length; dev++){
                            //console.log(val[dev].mac + " | " + val[dev].rssi + " | " + val[dev].manuData);
                            
                            // Wenn MAC des betrachteten Array Elements oben definierte MAC enthält...
                            if( val[dev].mac.includes(pino) ) {
                                
                                // Schreibe RSSI Wert direkt in das RAW State (oben definiert)
                                setState("javascript." + instance + ".VIS.bleScan.Pino.RawWemos", val[dev].rssi);
                    
                                // ab hier gleitender Mittelwert über letzte 6 Elemente (kann oben auch größer definiert werden)
                                arrPinoWemos.shift();
                                arrPinoWemos.push(val[dev].rssi);
                                let sum = arrPinoWemos.reduce((a, b) => a + b, 0);
                                let avg = (sum / arrPinoWemos.length) || 0;
                                setState("javascript." + instance + ".VIS.bleScan.Pino.AvgWemos", Math.round(avg));
                            }
                        };
                    });
                    

                    Habe ergänzende Kommentare hinzugefügt. Sollte hoffentlich selbsterklärend sein. Wenn nicht, einfach nachfragen ;-)

                    W S 2 Antworten Letzte Antwort
                    1
                    • G GiuseppeS

                      @wildbill

                      
                      // erstelle States für Zielwerte
                      createState("VIS.bleScan.Pino.RawWemos");
                      createState("VIS.bleScan.Pino.AvgWemos");
                      
                      // nachfolgend kann auch manuData statt MAC eingetragen werden
                      // dann müsste unten der Vergleich auf manuData statt mac erfolgen
                      // z.B. val[dev].manuData.includes(pino) statt val[dev].mac.includes(pino)
                      let pino = "ed:4b:90:40:e7:ba";
                      
                      // für Berechnung gleitender Mittelwert
                      let arrPinoWemos = [0,0,0,0,0,0];
                      
                      
                      on({id: "mqtt-client.0.bleScan.bett_192_168_192_49", change: "ne"}, function (obj) {
                      
                          // Array in val schreiben
                          let val = JSON.parse(obj.state.val);
                          
                          // Array durchlaufen
                          for ( let dev=0; dev < val.length; dev++){
                              //console.log(val[dev].mac + " | " + val[dev].rssi + " | " + val[dev].manuData);
                              
                              // Wenn MAC des betrachteten Array Elements oben definierte MAC enthält...
                              if( val[dev].mac.includes(pino) ) {
                                  
                                  // Schreibe RSSI Wert direkt in das RAW State (oben definiert)
                                  setState("javascript." + instance + ".VIS.bleScan.Pino.RawWemos", val[dev].rssi);
                      
                                  // ab hier gleitender Mittelwert über letzte 6 Elemente (kann oben auch größer definiert werden)
                                  arrPinoWemos.shift();
                                  arrPinoWemos.push(val[dev].rssi);
                                  let sum = arrPinoWemos.reduce((a, b) => a + b, 0);
                                  let avg = (sum / arrPinoWemos.length) || 0;
                                  setState("javascript." + instance + ".VIS.bleScan.Pino.AvgWemos", Math.round(avg));
                              }
                          };
                      });
                      

                      Habe ergänzende Kommentare hinzugefügt. Sollte hoffentlich selbsterklärend sein. Wenn nicht, einfach nachfragen ;-)

                      W Online
                      W Online
                      Wildbill
                      schrieb am zuletzt editiert von
                      #43

                      @giuseppes Perfekt, läuft.
                      Vielen vielen Dank. Da hätte ich noch eine Weile rumgemacht. Ich glaube auch, ich habe im Array eine Ebene übersehen gehabt. Aber nun kommen die Daten einwandfrei. :+1:

                      Gruss, Jürgen

                      G 1 Antwort Letzte Antwort
                      1
                      • W Wildbill

                        @giuseppes Perfekt, läuft.
                        Vielen vielen Dank. Da hätte ich noch eine Weile rumgemacht. Ich glaube auch, ich habe im Array eine Ebene übersehen gehabt. Aber nun kommen die Daten einwandfrei. :+1:

                        Gruss, Jürgen

                        G Offline
                        G Offline
                        GiuseppeS
                        schrieb am zuletzt editiert von
                        #44

                        @wildbill
                        Gern geschehen :v:

                        W 1 Antwort Letzte Antwort
                        0
                        • G GiuseppeS

                          @wildbill
                          Gern geschehen :v:

                          W Online
                          W Online
                          Wildbill
                          schrieb am zuletzt editiert von
                          #45

                          @giuseppes Habe heute ein kleines Problem festgestellt. Wenn ich den MQTT-Adapter im iobroker neu starte, dann verbindet sich der ESP nicht mehr automatisch. Es kommt dann im Log

                          Client [bleScan/oben_192_168_100_94] has invalid password(undefined) or username(undefined)
                          

                          Scheint, als würde er keine neue Verbindung aushandeln. Ich muss ihn dann einmal neu starten (aus- und wieder einstecken) und schon läuft er wieder. Bevor ich ihn jetzt umflashe und den Umweg über meinen Mosquitto nehmen lasse, bringt mir das überhaupt was? Der ist auch mit user/password versehen. Handelt der das anders?

                          Gruss, Jürgen

                          G 1 Antwort Letzte Antwort
                          0
                          • W Wildbill

                            @giuseppes Habe heute ein kleines Problem festgestellt. Wenn ich den MQTT-Adapter im iobroker neu starte, dann verbindet sich der ESP nicht mehr automatisch. Es kommt dann im Log

                            Client [bleScan/oben_192_168_100_94] has invalid password(undefined) or username(undefined)
                            

                            Scheint, als würde er keine neue Verbindung aushandeln. Ich muss ihn dann einmal neu starten (aus- und wieder einstecken) und schon läuft er wieder. Bevor ich ihn jetzt umflashe und den Umweg über meinen Mosquitto nehmen lasse, bringt mir das überhaupt was? Der ist auch mit user/password versehen. Handelt der das anders?

                            Gruss, Jürgen

                            G Offline
                            G Offline
                            GiuseppeS
                            schrieb am zuletzt editiert von
                            #46

                            @wildbill
                            Ich verwende im Heimnetz kein User/Pass über mqtt. Außerdem nutze ich auf meinem PC direkt Mosquitto, im ioBroker nur den mqtt-Client. Dass sich der esp32 nicht neu verbindet, ist mir bisher nicht aufgefallen. Es ist in den letzten Monaten 1 mal passiert, dass er nicht verbunden war. Grund war unklar. Jedenfalls hängt es nicht mit den PC Neustarts zusammen, die finden allein wegen Backup min. 1/Woche statt.

                            W 1 Antwort Letzte Antwort
                            0
                            • G GiuseppeS

                              @wildbill
                              Ich verwende im Heimnetz kein User/Pass über mqtt. Außerdem nutze ich auf meinem PC direkt Mosquitto, im ioBroker nur den mqtt-Client. Dass sich der esp32 nicht neu verbindet, ist mir bisher nicht aufgefallen. Es ist in den letzten Monaten 1 mal passiert, dass er nicht verbunden war. Grund war unklar. Jedenfalls hängt es nicht mit den PC Neustarts zusammen, die finden allein wegen Backup min. 1/Woche statt.

                              W Online
                              W Online
                              Wildbill
                              schrieb am zuletzt editiert von Wildbill
                              #47

                              @giuseppes Ja, es wird mit user/password zusammenhängen. Komischerweise hat nur der ESP mit dem blescan das Problem. Ein paar andere, unter Anderem mit ESPEasy verbinden sofort wieder.
                              Aber, ich frage mich gerade auch, warum ich im MQTT vom iobroker user/pass drin habe. Der ist nicht im Internet, da hängt nur der Mosquitto. Dann nehme ich es im iobroker einfach raus und sollte passen. Danke.

                              Gruss, Jürgen

                              EDIT: Das wars auch. User password raus und sofort haben sich alle Geräte inclusive dem ESP mit blescan wieder verbunden. Wenn nur alles so einfach wäre...

                              1 Antwort Letzte Antwort
                              1
                              • M Offline
                                M Offline
                                Muchul
                                schrieb am zuletzt editiert von
                                #48

                                Hallo zusammen, da ich nicht programmieren kann wollte ich am Wochenende mal versuchen dies hier umzusetzen:
                                https://docs.openmqttgateway.com/
                                Kennt das villeicht jemand hier?

                                1 Antwort Letzte Antwort
                                0
                                • M Offline
                                  M Offline
                                  Muchul
                                  schrieb am zuletzt editiert von Muchul
                                  #49

                                  Habe jetzt mehrere ESP 32 mit OpenMQTTGateway bestückt und drei Mi Band 5 auf die withelist gesetzt.
                                  Funktioniert soweit erstmal gut.
                                  Habt ihr einen Tipp für mich, wie die Zuordnung zu den Zimmern gemacht wird.

                                  Außerdem muss ich an zwei der drei handys Bluetooth ausschalten, damit die Bänder überhaupt gesehen werden.
                                  Wie habt ihr das Problem gelöst?

                                  Habe testweise Nachdem die Bander von de ESP32 erkannt werden, Bluetooth wieder eingeschaltet und die Bänder werden weiterhin erkannt.

                                  Ach ja, falls es jemanden interessiert, es werden einzelne Datenpunkte angelegt:

                                  0dd2ceac-fdc5-441d-a6a6-1bf87fcd8617-image.png

                                  1 Antwort Letzte Antwort
                                  0
                                  • G GiuseppeS

                                    @wildbill

                                    
                                    // erstelle States für Zielwerte
                                    createState("VIS.bleScan.Pino.RawWemos");
                                    createState("VIS.bleScan.Pino.AvgWemos");
                                    
                                    // nachfolgend kann auch manuData statt MAC eingetragen werden
                                    // dann müsste unten der Vergleich auf manuData statt mac erfolgen
                                    // z.B. val[dev].manuData.includes(pino) statt val[dev].mac.includes(pino)
                                    let pino = "ed:4b:90:40:e7:ba";
                                    
                                    // für Berechnung gleitender Mittelwert
                                    let arrPinoWemos = [0,0,0,0,0,0];
                                    
                                    
                                    on({id: "mqtt-client.0.bleScan.bett_192_168_192_49", change: "ne"}, function (obj) {
                                    
                                        // Array in val schreiben
                                        let val = JSON.parse(obj.state.val);
                                        
                                        // Array durchlaufen
                                        for ( let dev=0; dev < val.length; dev++){
                                            //console.log(val[dev].mac + " | " + val[dev].rssi + " | " + val[dev].manuData);
                                            
                                            // Wenn MAC des betrachteten Array Elements oben definierte MAC enthält...
                                            if( val[dev].mac.includes(pino) ) {
                                                
                                                // Schreibe RSSI Wert direkt in das RAW State (oben definiert)
                                                setState("javascript." + instance + ".VIS.bleScan.Pino.RawWemos", val[dev].rssi);
                                    
                                                // ab hier gleitender Mittelwert über letzte 6 Elemente (kann oben auch größer definiert werden)
                                                arrPinoWemos.shift();
                                                arrPinoWemos.push(val[dev].rssi);
                                                let sum = arrPinoWemos.reduce((a, b) => a + b, 0);
                                                let avg = (sum / arrPinoWemos.length) || 0;
                                                setState("javascript." + instance + ".VIS.bleScan.Pino.AvgWemos", Math.round(avg));
                                            }
                                        };
                                    });
                                    

                                    Habe ergänzende Kommentare hinzugefügt. Sollte hoffentlich selbsterklärend sein. Wenn nicht, einfach nachfragen ;-)

                                    S Offline
                                    S Offline
                                    Spezialtrick
                                    schrieb am zuletzt editiert von
                                    #50

                                    @giuseppes said in MQTT Bluetooth BLE Anwesenheitserkennung mit ESP32:

                                    @wildbill

                                    
                                    // erstelle States für Zielwerte
                                    createState("VIS.bleScan.Pino.RawWemos");
                                    createState("VIS.bleScan.Pino.AvgWemos");
                                    
                                    // nachfolgend kann auch manuData statt MAC eingetragen werden
                                    // dann müsste unten der Vergleich auf manuData statt mac erfolgen
                                    // z.B. val[dev].manuData.includes(pino) statt val[dev].mac.includes(pino)
                                    let pino = "ed:4b:90:40:e7:ba";
                                    
                                    // für Berechnung gleitender Mittelwert
                                    let arrPinoWemos = [0,0,0,0,0,0];
                                    
                                    
                                    on({id: "mqtt-client.0.bleScan.bett_192_168_192_49", change: "ne"}, function (obj) {
                                    
                                        // Array in val schreiben
                                        let val = JSON.parse(obj.state.val);
                                        
                                        // Array durchlaufen
                                        for ( let dev=0; dev < val.length; dev++){
                                            //console.log(val[dev].mac + " | " + val[dev].rssi + " | " + val[dev].manuData);
                                            
                                            // Wenn MAC des betrachteten Array Elements oben definierte MAC enthält...
                                            if( val[dev].mac.includes(pino) ) {
                                                
                                                // Schreibe RSSI Wert direkt in das RAW State (oben definiert)
                                                setState("javascript." + instance + ".VIS.bleScan.Pino.RawWemos", val[dev].rssi);
                                    
                                                // ab hier gleitender Mittelwert über letzte 6 Elemente (kann oben auch größer definiert werden)
                                                arrPinoWemos.shift();
                                                arrPinoWemos.push(val[dev].rssi);
                                                let sum = arrPinoWemos.reduce((a, b) => a + b, 0);
                                                let avg = (sum / arrPinoWemos.length) || 0;
                                                setState("javascript." + instance + ".VIS.bleScan.Pino.AvgWemos", Math.round(avg));
                                            }
                                        };
                                    });
                                    

                                    Habe ergänzende Kommentare hinzugefügt. Sollte hoffentlich selbsterklärend sein. Wenn nicht, einfach nachfragen ;-)

                                    Ich versuche gerade die Anwesenheitserkennung nachzubauen. Leider bekomme ich das Script von GiuseppeS nicht ans Laufen... Die Datenpunkte, die das Script anlegt, bleiben leider leer. Wenn ich das Script debugge erhalten ich den Fehler "Cannot redeclare block-scoped variable".
                                    Habt ihr eine Idee, wo der Fehler liegt?!

                                    Bildschirmfoto 2021-11-23 um 21.02.25.png

                                    G 1 Antwort Letzte Antwort
                                    0
                                    • S Spezialtrick

                                      @giuseppes said in MQTT Bluetooth BLE Anwesenheitserkennung mit ESP32:

                                      @wildbill

                                      
                                      // erstelle States für Zielwerte
                                      createState("VIS.bleScan.Pino.RawWemos");
                                      createState("VIS.bleScan.Pino.AvgWemos");
                                      
                                      // nachfolgend kann auch manuData statt MAC eingetragen werden
                                      // dann müsste unten der Vergleich auf manuData statt mac erfolgen
                                      // z.B. val[dev].manuData.includes(pino) statt val[dev].mac.includes(pino)
                                      let pino = "ed:4b:90:40:e7:ba";
                                      
                                      // für Berechnung gleitender Mittelwert
                                      let arrPinoWemos = [0,0,0,0,0,0];
                                      
                                      
                                      on({id: "mqtt-client.0.bleScan.bett_192_168_192_49", change: "ne"}, function (obj) {
                                      
                                          // Array in val schreiben
                                          let val = JSON.parse(obj.state.val);
                                          
                                          // Array durchlaufen
                                          for ( let dev=0; dev < val.length; dev++){
                                              //console.log(val[dev].mac + " | " + val[dev].rssi + " | " + val[dev].manuData);
                                              
                                              // Wenn MAC des betrachteten Array Elements oben definierte MAC enthält...
                                              if( val[dev].mac.includes(pino) ) {
                                                  
                                                  // Schreibe RSSI Wert direkt in das RAW State (oben definiert)
                                                  setState("javascript." + instance + ".VIS.bleScan.Pino.RawWemos", val[dev].rssi);
                                      
                                                  // ab hier gleitender Mittelwert über letzte 6 Elemente (kann oben auch größer definiert werden)
                                                  arrPinoWemos.shift();
                                                  arrPinoWemos.push(val[dev].rssi);
                                                  let sum = arrPinoWemos.reduce((a, b) => a + b, 0);
                                                  let avg = (sum / arrPinoWemos.length) || 0;
                                                  setState("javascript." + instance + ".VIS.bleScan.Pino.AvgWemos", Math.round(avg));
                                              }
                                          };
                                      });
                                      

                                      Habe ergänzende Kommentare hinzugefügt. Sollte hoffentlich selbsterklärend sein. Wenn nicht, einfach nachfragen ;-)

                                      Ich versuche gerade die Anwesenheitserkennung nachzubauen. Leider bekomme ich das Script von GiuseppeS nicht ans Laufen... Die Datenpunkte, die das Script anlegt, bleiben leider leer. Wenn ich das Script debugge erhalten ich den Fehler "Cannot redeclare block-scoped variable".
                                      Habt ihr eine Idee, wo der Fehler liegt?!

                                      Bildschirmfoto 2021-11-23 um 21.02.25.png

                                      G Offline
                                      G Offline
                                      GiuseppeS
                                      schrieb am zuletzt editiert von
                                      #51

                                      @spezialtrick

                                      Anscheinend wurde die Variable pino bereits vorher deklariert? Hast du das Skript aus Versehen doppelt eingefügt?

                                      1 Antwort Letzte Antwort
                                      0
                                      • S Offline
                                        S Offline
                                        Spezialtrick
                                        schrieb am zuletzt editiert von
                                        #52

                                        @giuseppes Danke für deine schnelle Rückmeldung.

                                        Nein ich habe das Skript lediglich einmal eingefügt. Ich habe pino nun mal gegen Alf ausgetauscht und bekommen leider den gleichen Fehler. :anguished:

                                        G 1 Antwort Letzte Antwort
                                        0
                                        • S Spezialtrick

                                          @giuseppes Danke für deine schnelle Rückmeldung.

                                          Nein ich habe das Skript lediglich einmal eingefügt. Ich habe pino nun mal gegen Alf ausgetauscht und bekommen leider den gleichen Fehler. :anguished:

                                          G Offline
                                          G Offline
                                          GiuseppeS
                                          schrieb am zuletzt editiert von
                                          #53

                                          @spezialtrick
                                          Dann poste hier bitte dein komplettes Skript. Kann mir noch vorstellen dass woanders Fehler sind und das hier ein Folgefehler.

                                          S 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          830

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe