Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. BLE MQTT JSON auswerten Anwesenheitserkenung

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    BLE MQTT JSON auswerten Anwesenheitserkenung

    This topic has been deleted. Only users with topic management privileges can see it.
    • L
      Lordcyber last edited by

      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 S 2 Replies Last reply Reply Quote 0
      • R
        roland1000 @Lordcyber last edited by

        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 Reply Quote 0
        • F
          Felsdrache last edited by

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

          1 Reply Last reply Reply Quote 0
          • R
            roland1000 last edited by

            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 Reply Quote 0
            • F
              Felsdrache last edited by Felsdrache

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

              R screendj 2 Replies Last reply Reply Quote 0
              • R
                roland1000 @Felsdrache last edited by

                Hallo Felsdrache

                Wie sagt man alle wege führen nach Rom👍 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 Reply Quote 0
                • S
                  senger1985 @Lordcyber last edited by senger1985

                  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 Reply Quote 0
                  • screendj
                    screendj @Felsdrache last edited by

                    @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 Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    996
                    Online

                    31.7k
                    Users

                    79.6k
                    Topics

                    1.3m
                    Posts

                    javascript monitoring
                    5
                    8
                    959
                    Loading More Posts
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes
                    Reply
                    • Reply as topic
                    Log in to reply
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                    The ioBroker Community 2014-2023
                    logo