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. Skripten / Logik
  4. BLE MQTT JSON auswerten Anwesenheitserkenung

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    493

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.7k

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

BLE MQTT JSON auswerten Anwesenheitserkenung

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascriptmonitoring
8 Beiträge 5 Kommentatoren 1.2k Aufrufe 5 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.
  • L Offline
    L Offline
    Lordcyber
    schrieb am zuletzt editiert von
    #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 Antworten Letzte Antwort
    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
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • F Offline
        F Offline
        Felsdrache
        schrieb am zuletzt editiert von
        #3

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

        1 Antwort Letzte Antwort
        0
        • R Offline
          R Offline
          roland1000
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • F Offline
            F Offline
            Felsdrache
            schrieb am zuletzt editiert von 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 Antworten Letzte Antwort
            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
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              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
                schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                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
                  schrieb am zuletzt editiert von
                  #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 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

                  325

                  Online

                  32.5k

                  Benutzer

                  81.8k

                  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