Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. BLE MQTT JSON auswerten Anwesenheitserkenung

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    378

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.9k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.3k

BLE MQTT JSON auswerten Anwesenheitserkenung

Scheduled Pinned Locked Moved Skripten / Logik
javascriptmonitoring
8 Posts 5 Posters 1.2k Views 5 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • L Offline
    L Offline
    Lordcyber
    wrote on last edited by
    #1

    Hallo,
    es geht mir darum zu Protokollieren wann wer da ist. Dazu habe ich 2 GTags.
    Mit Radar wäre es am Einfachsten. Aber leider reicht die Reichweite nicht.

    Da aber im Zimmer neben dran ein ESP für Temperatur und Heizungssteuerung war habe ich diesen jetzt durch einen ESP32 ersetzt.

    Dieser sendet per Mqtt die Anwesenden BLEs als JSon an den IoBroker
    Das sieht dann so aus:

    mqtt.0.ESP32.BLE

    {"00:1a:22:0d:d5:2a":-87,"00:1a:22:0d:d9:e6":-83,"7c:2f:80:c4:6e:e8":-67}
    

    Wie schaffe ich es jetzt daraus so etwas wie bei Radar2 mit Anwesend Ja/Nein zu machen?
    Er soll im Prinzip genau das wie im Radar machen. Wenn der GTAG 5 Minuten nicht erkannt wird Anwesenheit auf Nein stellen.
    Danke

    Gruß
    Mike

    Thinkcentre M92 mit Proxmox / Iobroker als VM unter Debian

    R S 2 Replies Last reply
    0
    • L Lordcyber

      Hallo,
      es geht mir darum zu Protokollieren wann wer da ist. Dazu habe ich 2 GTags.
      Mit Radar wäre es am Einfachsten. Aber leider reicht die Reichweite nicht.

      Da aber im Zimmer neben dran ein ESP für Temperatur und Heizungssteuerung war habe ich diesen jetzt durch einen ESP32 ersetzt.

      Dieser sendet per Mqtt die Anwesenden BLEs als JSon an den IoBroker
      Das sieht dann so aus:

      mqtt.0.ESP32.BLE

      {"00:1a:22:0d:d5:2a":-87,"00:1a:22:0d:d9:e6":-83,"7c:2f:80:c4:6e:e8":-67}
      

      Wie schaffe ich es jetzt daraus so etwas wie bei Radar2 mit Anwesend Ja/Nein zu machen?
      Er soll im Prinzip genau das wie im Radar machen. Wenn der GTAG 5 Minuten nicht erkannt wird Anwesenheit auf Nein stellen.
      Danke

      R Offline
      R Offline
      roland1000
      wrote on last edited by
      #2

      Hallo Lordcyber

      Hast du es schon hinbekommen ? Wenn nein dann melde dich bitte . Ich habe eine Lösung mit vier Esp32 gefunden. Hab ein einfaches script gebastelt . Seit gut eine Woche ohne Probleme.

      LG Roland1000

      1 Reply Last reply
      0
      • F Offline
        F Offline
        Felsdrache
        wrote on last edited by
        #3

        Hallo Roland stell doch mal deine Lösung allen zur Verfügung interresiert mich auch.

        1 Reply Last reply
        0
        • R Offline
          R Offline
          roland1000
          wrote on last edited by
          #4

          Hallo Felsdrache

          Meine Lösung die bis jetzt gut funktioniert hat :

          1. OpenMqttgateway herunter laden und entsprechend konfigurieren . Wichtig nur Topic & Wlan und Mqtt ändern da sämtliche Esp32 in die Datenpunkte schreiben . Nicht wundern wenn im Mqtt nur ein daten punkt mit den BT-Adressen erscheint. Nur die IP Adressen im Router werden unterschiedlich sein.
          2. Esp32 BT mit der OpenMqttgateway flashen
          3. Manuell Datenpunkte erstellen die auf true und false schalten
          4. Node Red installieren
          5. Unter Einstellung die Paleten verwaltung search suchen und instalieren
          6. Den Flow schreiben (leider kann ich noch kein Javascript bin dabei zu lernen ):
          [
              {
                  "id": "4196bf2b.d2cca",
                  "type": "tab",
                  "label": "Anwesend",
                  "disabled": false,
                  "info": ""
              },
              {
                  "id": "6026bae4.94b5f4",
                  "type": "ioBroker in",
                  "z": "4196bf2b.d2cca",
                  "name": "home/OpenMQTTGateway_ESP32_BLE/BTtoMQTT/00BBC143B32C",
                  "topic": "mqtt.0.home.OpenMQTTGateway_ESP32_BLE.BTtoMQTT.00BBC143B32C",
                  "payloadType": "value",
                  "onlyack": false,
                  "func": "rbe",
                  "gap": "",
                  "x": 270,
                  "y": 240,
                  "wires": [
                      [
                          "1a48be59.f49182"
                      ]
                  ]
              },
              {
                  "id": "1a48be59.f49182",
                  "type": "json",
                  "z": "4196bf2b.d2cca",
                  "name": "Name1",
                  "property": "payload",
                  "action": "",
                  "pretty": false,
                  "x": 640,
                  "y": 240,
                  "wires": [
                      [
                          "3f55c36b.4b96fc"
                      ]
                  ]
              },
              {
                  "id": "3f55c36b.4b96fc",
                  "type": "object-search",
                  "z": "4196bf2b.d2cca",
                  "name": "Name1_BT",
                  "process": "values",
                  "search": "00:BB:C1:43:B3:2C",
                  "searchType": "msg",
                  "deep": true,
                  "location": "payload",
                  "locationType": "msg",
                  "output": "true",
                  "outputType": "msg",
                  "x": 890,
                  "y": 240,
                  "wires": [
                      [
                          "6fd2c207.ff0f9c"
                      ]
                  ]
              },
              {
                  "id": "7546ba23.73e194",
                  "type": "ioBroker out",
                  "z": "4196bf2b.d2cca",
                  "name": "Datenpunkt",
                  "topic": "Datenpunkt",
                  "ack": "true",
                  "autoCreate": "true",
                  "x": 1350,
                  "y": 240,
                  "wires": []
              },
              {
                  "id": "6fd2c207.ff0f9c",
                  "type": "trigger",
                  "z": "4196bf2b.d2cca",
                  "op1": "true",
                  "op2": "false",
                  "op1type": "bool",
                  "op2type": "bool",
                  "duration": "210",
                  "extend": true,
                  "units": "s",
                  "reset": "00:BB:C1:43:B3:2C",
                  "bytopic": "topic",
                  "name": "",
                  "x": 1080,
                  "y": 240,
                  "wires": [
                      [
                          "7546ba23.73e194"
                      ]
                  ]
              },
              {
                  "id": "3ca86dca.30a802",
                  "type": "ioBroker in",
                  "z": "4196bf2b.d2cca",
                  "name": "home/OpenMQTTGateway_ESP32_BLE/BTtoMQTT/0209082CD0C3",
                  "topic": "mqtt.0.home.OpenMQTTGateway_ESP32_BLE.BTtoMQTT.0209082CD0C3",
                  "payloadType": "value",
                  "onlyack": true,
                  "func": "all",
                  "gap": "",
                  "x": 280,
                  "y": 400,
                  "wires": [
                      [
                          "695962f2.92a32c"
                      ]
                  ]
              },
              {
                  "id": "695962f2.92a32c",
                  "type": "json",
                  "z": "4196bf2b.d2cca",
                  "name": "Name2",
                  "property": "payload",
                  "action": "",
                  "pretty": false,
                  "x": 650,
                  "y": 400,
                  "wires": [
                      [
                          "9d5cd1a1.13853"
                      ]
                  ]
              },
              {
                  "id": "9d5cd1a1.13853",
                  "type": "object-search",
                  "z": "4196bf2b.d2cca",
                  "name": "Name2_BT",
                  "process": "values",
                  "search": "02:09:08:2C:D0:C3",
                  "searchType": "msg",
                  "deep": false,
                  "location": "payload",
                  "locationType": "msg",
                  "output": "true",
                  "outputType": "msg",
                  "x": 880,
                  "y": 400,
                  "wires": [
                      [
                          "5884e1e5.a2dfa"
                      ]
                  ]
              },
              {
                  "id": "5884e1e5.a2dfa",
                  "type": "trigger",
                  "z": "4196bf2b.d2cca",
                  "op1": "true",
                  "op2": "false",
                  "op1type": "bool",
                  "op2type": "bool",
                  "duration": "210",
                  "extend": true,
                  "units": "s",
                  "reset": "02:09:08:2C:D0:C3",
                  "bytopic": "topic",
                  "name": "",
                  "x": 1100,
                  "y": 400,
                  "wires": [
                      [
                          "d95af90e.fdf548"
                      ]
                  ]
              },
              {
                  "id": "d95af90e.fdf548",
                  "type": "ioBroker out",
                  "z": "4196bf2b.d2cca",
                  "name": "Datenpunkt",
                  "topic": "",
                  "ack": "true",
                  "autoCreate": "false",
                  "x": 1370,
                  "y": 400,
                  "wires": []
              }
          ]
          
          1. Den Trigger Baustein muss angepasst werden das man nicht davon ausgehen kann das die Bt-Tracker nicht alle gleich sind mit der ansprechzeit.
            Ich hatte anfangszeit noch viele false schaltungen .
          2. Bestellt euch ruhig noch ein bis zwei Esp32 mehr. Da die reichweite begrenzt ist .So das ist meine Lösung bis jetzt. Ich höffe ich konnte euch damit helfen

          Lg Roland1000

          1 Reply Last reply
          0
          • F Offline
            F Offline
            Felsdrache
            wrote on last edited by Felsdrache
            #5

            So habe ich eine Anwesenheit hergestellt.
            Das funktioniert auch ganz gut soweit.
            a63ca1a0-dec2-4483-a7d6-453f3ba52e55-grafik.png
            Gruss Achim

            R screendjS 2 Replies Last reply
            0
            • F Felsdrache

              So habe ich eine Anwesenheit hergestellt.
              Das funktioniert auch ganz gut soweit.
              a63ca1a0-dec2-4483-a7d6-453f3ba52e55-grafik.png
              Gruss Achim

              R Offline
              R Offline
              roland1000
              wrote on last edited by
              #6

              Hallo Felsdrache

              Wie sagt man alle wege führen nach Rom:+1: Sieht gut aus .Ich habe daran 3 Monate gebastelt (nach Feierabend) bis es funtkioniert hat. Jetzt möchte ich versuchen über ein Oled Display (2.4zoll) so eine art mini Konsole zu bauen .Diese werde ich dann zum steuern des iobrokers verwenden . Gucken wir mal was passiert.

              LG Roland1000

              1 Reply Last reply
              0
              • L Lordcyber

                Hallo,
                es geht mir darum zu Protokollieren wann wer da ist. Dazu habe ich 2 GTags.
                Mit Radar wäre es am Einfachsten. Aber leider reicht die Reichweite nicht.

                Da aber im Zimmer neben dran ein ESP für Temperatur und Heizungssteuerung war habe ich diesen jetzt durch einen ESP32 ersetzt.

                Dieser sendet per Mqtt die Anwesenden BLEs als JSon an den IoBroker
                Das sieht dann so aus:

                mqtt.0.ESP32.BLE

                {"00:1a:22:0d:d5:2a":-87,"00:1a:22:0d:d9:e6":-83,"7c:2f:80:c4:6e:e8":-67}
                

                Wie schaffe ich es jetzt daraus so etwas wie bei Radar2 mit Anwesend Ja/Nein zu machen?
                Er soll im Prinzip genau das wie im Radar machen. Wenn der GTAG 5 Minuten nicht erkannt wird Anwesenheit auf Nein stellen.
                Danke

                S Offline
                S Offline
                senger1985
                wrote on last edited by senger1985
                #7

                Hey @Lordcyber & roland1000,

                ich bin auch gerade dabei, mit dem ESP32 eine Anwesenheitskontrolle zu erstellen.

                Zur Grundlage habe ich dieses Tutorial benutzt:
                http://esp32-server.de/mqtt-ble/

                Was bei mir aber massig Fehler rausgehauen hat.

                Dann habe ich versucht es umzuschreiben(meine Skills sind noch recht gering)

                /*
                  MQTT Bluetooth (BLE) Anwesenheitserkennung. Raum präsenzmelder für Hausautomatisierung. Personen präsenz im Zimmer durch:
                  iBeacon, Mi Band fitness tracker, smartwatch aufspüren. Publish ist MQTT_Name, Daten MAC und RSSI in JSON Format alle 10s
                  {
                  "28:A1:83:E1:58:8E":-60,
                  "ea:5f:8d:69:be:56":-80
                  }
                FHEM, Node-RED, iobroker, openHAB, Domoticz     */
                
                #include <WiFi.h>
                #include <WiFiClient.h>
                #include <PubSubClient.h>
                #include <MQTT.h>
                #include <ArduinoJson.h>
                #include <PubSubClient_JSON.h>
                #include <BLEDevice.h>
                #include <BLEScan.h>
                #include <BLEAddress.h>
                
                // MQTT Zugangsdaten
                #define MQTT_server "192.168.xxx.xx"
                #define MQTT_port 1xxx
                #define MQTT_User "xxx"
                #define MQTT_Pass "xxxxxx"
                #define MQTT_Name "Schlafzimmer_anwesenheit"    // gleichzeitig publish Name
                #define QoS 0
                
                const char* ssid = "Nixfüreuch"; // WLAN Zugangsdaten Eintragen
                const char* password = "xxxxxx";
                
                int scanTime = 10; //sek. iBeacon Suchzeit und MQTT Berichtinterval
                BLEScan* pBLEScan ;
                
                // --------------- MQTT Variablen ---------------------------------------
                WiFiClient espClient;
                PubSubClient client(espClient);
                
                void setup()
                {
                  int i;
                  Serial.begin(115200);
                  Serial.println("");
                  Serial.println("Start");
                
                  // --------------------- WiFi ---------------------------------------------
                  Serial.println("Warte auf Verbindung");
                  WiFi.mode(WIFI_STA);   ;
                  WiFi.begin(ssid, password);
                  Serial.println("");
                  int timout = 0;
                  while (WiFi.status() != WL_CONNECTED)
                  {
                    delay(500);
                    Serial.print("O");
                    timout++;
                    if  (timout > 20) // Wenn Anmeldung nicht möglich
                    {
                      Serial.println("");
                      Serial.println("Wlan verbindung fehlt");
                      ESP.restart(); // ESP32 neu starten
                    }
                  }
                  Serial.println("");
                  Serial.print("IP Addresse: ");
                  Serial.println(WiFi.localIP());
                
                  // ---------------------- MQTT ---------------------------------------------------
                  client.setServer(MQTT_server, MQTT_port); // MQTT Port einstellen
                  if (client.connect("192.168.xxx.xx", "xxxxxx", "xxxxxx"))
                  {
                    Serial.println("Mit MQTT verbunden");
                    client.subscribe(MQTT_Name); // im Topic hallo Präsenzmelder Name schreiben
                  }
                
                  Serial.println("Starte BLE Scanner");
                  BLEDevice::init("");
                  pBLEScan = BLEDevice::getScan();
                  pBLEScan->setActiveScan(true);   // Aktives Bluetooth Scannen
                  pBLEScan->setInterval(100);
                  pBLEScan->setWindow(99);
                }
                
                void loop()
                {
                  int j;
                  String NachrichtJSON;
                  BLEScanResults foundDevices = pBLEScan->start(scanTime); // BLE Scanen
                
                  NachrichtJSON = "{\r\n";     // JSON Format vorbereiten
                
                  for (j = 0; j < foundDevices.getCount(); j++) // Alle Gefundene Bluetooth Device durchgehen
                  {
                    NachrichtJSON = NachrichtJSON + "\"" + foundDevices.getDevice(j).getAddress().toString().c_str() + "\":";
                    if (j != foundDevices.getCount() - 1)  NachrichtJSON = NachrichtJSON + String(foundDevices.getDevice(j).getRSSI()) + ",\r\n";
                    else NachrichtJSON = NachrichtJSON + String(foundDevices.getDevice(j).getRSSI()) + "\r\n}";
                  } // Alle gefundene MACs durchgehen
                  // diese "if" spührt das letzte Eintragung und beendet den json Datensatz.
                  pBLEScan->clearResults(); // Speicher freigeben
                  //client.publish(MQTT_Name, NachrichtJSON).set_qos(QoS)); // JSON per MQTT senden
                  Serial.println(NachrichtJSON);
                  //Serial.println(NachrichtJSON);
                  delay(100);
                  if (WiFi.status() != WL_CONNECTED)  ESP.restart(); // Wenn Wlan fehlt neustarten
                  if (client.connected())
                  {
                    client.loop();
                  }
                  else
                  {
                    Serial.println("MQTT Verbindung fehlt"); // Wenn MQTT Verbindung fehlt dann neu verbinden
                    reconnect();
                  } // ende MQTT Verbindung ja/nein
                }
                
                void reconnect()
                {
                  // Loop until we're reconnected
                  while (!client.connected())
                  {
                    Serial.print("Attempting MQTT connection...");
                    // Create a random client ID
                    String clientId = "ESPClient-";
                    clientId += String(random(0xffff), HEX);
                    // Attempt to connect
                    //if you MQTT broker has clientID,username and password
                    //please change following line to    if (client.connect(clientId,userName,passWord))
                    if (client.connect("192.168.xxx.xx", "xxxxxx", "xxxxxx"))
                    {
                      Serial.println("connected");
                      //once connected to MQTT broker, subscribe command if any
                      client.subscribe("OsoyooCommand");
                    } else {
                      Serial.print("failed, rc=");
                      Serial.print(client.state());
                      Serial.println(" try again in 5 seconds");
                      // Wait 6 seconds before retrying
                      delay(6000);
                    }
                  }
                }
                

                Als Fehlermeldung bekomme ich folgende Ausgabe:

                no matching function for call to 'PubSubClient::publish(const char [25], String&)'
                

                Meine Recherche hat ergeben, dass die Funktion client.publish() einen string, bzw. eine Zeichenkette erfordert. Ich aber einen falschen Datentype übermittel.

                Ich weiß aber leider nicht, wo in dem Script der Fehler hängt.

                Vielleicht wisst ihr ja, was ich da falsch mache?

                Danke und bleibt gesund.

                EDIT:
                Ich habe es inzwischen geschafft, dass das Programm läuft.
                Aber nun habe ich das Problem, dass meine Android Wear Smartwatch nicht gefunden wird.

                1 Reply Last reply
                0
                • F Felsdrache

                  So habe ich eine Anwesenheit hergestellt.
                  Das funktioniert auch ganz gut soweit.
                  a63ca1a0-dec2-4483-a7d6-453f3ba52e55-grafik.png
                  Gruss Achim

                  screendjS Offline
                  screendjS Offline
                  screendj
                  wrote on last edited by
                  #8

                  @felsdrache ich versuche es gerade bei mir. Leider verstehe ich das nicht so richtig.
                  Kannst du mir das vielleicht etwas besser erklären ?

                  LG
                  Lexi

                  1 Reply Last reply
                  0
                  Reply
                  • Reply as topic
                  Log in to reply
                  • Oldest to Newest
                  • Newest to Oldest
                  • Most Votes


                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  526

                  Online

                  32.7k

                  Users

                  82.5k

                  Topics

                  1.3m

                  Posts
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                  ioBroker Community 2014-2025
                  logo
                  • Login

                  • Don't have an account? Register

                  • Login or register to search.
                  • First post
                    Last post
                  0
                  • Home
                  • Recent
                  • Tags
                  • Unread 0
                  • Categories
                  • Unreplied
                  • Popular
                  • GitHub
                  • Docu
                  • Hilfe