Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Pi 3 als Bluetooth LE Scanner (Beispielscript)

    NEWS

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    Pi 3 als Bluetooth LE Scanner (Beispielscript)

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

      falls mal jemand spielen möchte…

      <size size="150">Bluetooth LE Scanner für den Raspberry Pi 3</size>

      (oder andere Rechner mit Bluetooth 4.0- Linux, Windows oder Mac OS X)

      Installation:

      1.) Für Linux: Linux Bluetooth Protokoll Stack - BlueZ installieren (für Windows und Mac OS X, s.u.)

      sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
      

      2.) "noble" in der Javascript Instanz (Config) eintragen (ohne Anführungszeichen)

      3.) globales Skript: logs() (Post Nr. 2) in die globalen Skripte kopieren und starten

      4.) Bluetooth Scanner Skript (Post Nr. 3) in Skripte kopieren und starten

      Fertig. Skript läuft mit den Default-Einstellungen und legt alle Datenpunkte unter javascript.x.Bluetooth an.

      Voraussetzungen

      • raspberry Pi 3 oder einen Linux-Rechner, der BlueZ unterstützt mit Bluetooth 4.0

      Für Windows und Mac OS X Rechner siehe: https://github.com/sandeepmistry/noble#prerequisites

      • ioBroker Javascript-Adapter ab Version 2.x

      Rückstandslos aus ioBroker löschen:

      • beide Skripte löschen

      • Pfad javascript.x.Bluetooth in den Objekten löschen (ein Mausklick unter Admin/Objekte)

      1 Reply Last reply Reply Quote 0
      • ruhr70
        ruhr70 last edited by

        .

        Globales Skript logs()

        Version: 0.1.1

        logs() ermöglicht ein abgestuftes Logging innerhalb eines Skripts.

        Falls jemand das globale Script nicht einsetzen möchte kann man am Anfang des Bluetooth Skripts einfach folgendes einfügen:

        function logs(text,level,color) {
        	//log(text,"debug"); // Kommentar entfernen, wenn Logging erwünscht
        }
        

        globales Skript logs():

        ! ````
        // globale Funktion: logs(logtext,level,color)
        // Version: 0.1.1
        ! // Beschreibung: Ermöglicht innerhalb eines Javascript-Scripts unterschiedliche Loglevel
        // Benutzung, wie log() mit der zusätzlichen Option die Ausgabefarbe zu überschreiben
        ! // Übergabeparameter: logtext der Text, der als Log ausgegeben werden soll
        // level [optional] der Loglevel der Meldung als String
        // der level (mögliche Werte definiert in JSON loglevels), in dem der Text ausgegeben werden soll
        // color [optional] die html-Farbe der Meldung als String, siehe z.B.: http://tomheller.de/theholycymbal/html-farben.html
        // "none" -> es wird die Standardfarbe von log() im Level Info ausgegebn.
        // nichts angegeben -> es werden die Farben ais dem JSON loglevels je nach level ausgegeben
        // html-Farbe übergeben -> es wird die übergebenen Farbe ausgegeben
        ! // Rückgabe: Gibt den aktuellen Loglevel für diesen Aufruf zurück.
        // Gültiger level beim Aufruf -> der im Script definierte Loglevel wird zurückgegeben
        // kein Level angegeben -> es wird der Level "info" verwendet und zurückgegeben
        // ungültiger Level -> es wird der Level "info" verwendet und zurückgegeben
        ! // Infos: Benötigt im Javascript, welches die Funktion logs() verwendet
        // die Variabele loglevel, z.B. var loglevel = "info";
        //
        // 0.1.1 Default Loglevel ergänzt
        ! // -----------------------------------------------------------------------------
        ! // globale Scripte werden vor dem eigentlichen Script als Text reinkopiert
        // daher kann im globalen Script eine Variable einen Defaultwert enthalten
        ! var loglevel = 'info'; // Default Loglevel, wenn der Loglevel im aufrufenden Script nicht definiert ist

        ! // -----------------------------------------------------------------------------
        // Script Log - logs() - ANFANG
        // -----------------------------------------------------------------------------
        var loglevels = {
        "debug2": {"level": -2, "leveltext":"debug2: ", "color": "blue"},
        "debug1": {"level": -1, "leveltext":"debug1: ", "color": "mediumblue"},
        "debug": {"level": 0, "leveltext":"debug0: ", "color": "darkblue"},
        "debug0": {"level": 0, "leveltext":"debug0: ", "color": "mediumblue"},
        "info": {"level": 10, "leveltext":"", "color": "none"},
        "warn": {"level": 20, "leveltext":"warn: ", "color": "darkorange"},
        "error": {"level": 30, "leveltext":"error:", "color": "darkred"}
        };
        ! function logs (logtext,level,color) {
        ! // in der Funktion den gesetzten Level überprüfen
        if (typeof level == 'undefined') {level = 'info'}
        if (level in loglevels) {} else {
        log("ungültiger loglevel " + level + " in Funktion logs() im Script","warn");
        log("loglevel für das Script auf Stufe: " + loglevel + " gesetzt.","warn");
        level = 'info';
        loglevel = level;
        }

        // den im Script konfigurierten Loglevel prüfen
        // zum Scriptstart muss die Variable loglevel deklariert werden
        // z.B.:
        // var loglevel = "warn";
        if (typeof loglevel == 'undefined') {loglevel = 'info'}
        if (loglevel in loglevels) {} else {
            var loglevelError = loglevel;
            loglevel = 'info';      // Loglevel auf Info stellen, wenn kein gültiger Loglevel im Script deklariert ist
            log("ungültiger loglevel für logs() in der Konfiguration im Script","error");
            log("variable loglevel am Anfang des Scripts einem gültigen Wert zuweisen","error");
            log('im Script konfigurierter loglevel: ' 
            + loglevelError + ' -> geändert in: ' 
            + loglevel) + '',"warn";
        }
        

        ! // Farbe ernitteln
        if (typeof color == 'undefined') {color = loglevels[level].color}
        ! // Log je nach eingestelltem Loglevel ausgeben
        var levelConf = loglevels[loglevel].level;
        var levelLogs = loglevels[level].level;
        if (levelLogs >= levelConf) {
        if (color == "none") {
        log(loglevels[level].leveltext + logtext);
        } else {
        log('' + loglevels[level].leveltext + logtext + '');
        }
        }
        ! return loglevel;
        }
        // -----------------------------------------------------------------------------
        // Script Log - logs() - ENDE
        // -----------------------------------------------------------------------------
        ! ````

        1 Reply Last reply Reply Quote 0
        • ruhr70
          ruhr70 last edited by

          .

          Script: "Bluetooth Scanner für Raspberry Pi 3 (oder andere kompatible Geräte mit BT)"

          Version: 0.4.1

          ACHTUNG: 0.2.16 Ein Datenpunkt wurde geändert. Objektzweig Bluetooth vor Neuinstallation löschen.

          0.4.1 (14.06.2016) - fix: manuelles löschen über Control.Delete_Device

          0.4.0 (17.04.2016) - diverse Erweiterungen

          0.2.16 (30.03.2016) - Fehler beseitigt, wenn im ersten Durchlauf 0 Geräte gefunden wurden

          0.2.15 (29.03.2016) - Fehlerkorrekturen, Channelnamen umbenannt

          0.2.13 (28.03.2016) - Kalibrierung hinzugefügt, Distanzberechnung optimiert, Optimierungen

          0.2.10 (27.03.2016) - Blacklistbehandlung hinzugefügt, Script aufgeräumt

          0.2.8 (26.03.2016) - Channelname möglichst lesbar soweit bekannt, Optimierungen

          0.2.7 (25.03.2016) - Optimierungen, Hersteller anhand der Mac-Adresse, neue Datenpunkte, neue Funktionen

          Skript Bluetooth Scanner:

          zum Download:

          http://forum.iobroker.net/viewtopic.php … 266#p28266

          1 Reply Last reply Reply Quote 0
          • ruhr70
            ruhr70 last edited by

            Ziele des Skripts

            1.) Nutzung zur Anwesenheitserkennung über Bluetooth "Tags" oder anderen Geräte, die dauerhaft Bluetooth Funkfeuer aussenden..

            2.) Geräteüberwachung per Bluetooth als Alternative zum Ping.

            3.) Einfach als Bluetooth Scanner

            4.) Für Indoor Ortung

            Wenn das Skript Sinn macht und auch ein gewisser Bedarf besteht wird das vielleicht mein zweites Projekt für einen Adapter 🙂

            Bei mir wird es nicht auf meiner ioBroker Hauptinstallation eingesetzt, sondern auf einen eigenen Raspberry Pi 3, der einige Spezialaufgaben mit einer zweiten ioBorker Installation übernehmen wird.

            Ein Bluetooth Sender am Schlüsselbund wäre die zuverläslichste Anwesenheitserkennung.

            Anspruch an das endgültige Skript

            • möglichst wenig oder kein Eingriff für den User (ist jetzt schon der Fall)

            • Verhalten komplett über Datenpunkte konfigurierbar (als wäre es eine Konfigurationsseite eines Adapters). Expertenmodus: Einstellungen im Skript.

            Bisherige Erfahrung

            • ein Fitbit One sendet dauerhaft und kann zum Tracking verwendet werden

            • Mi Band von simpixo kann ebenfalls für das dauerhafte Tracking verwendet werden

            • Ti SensorTag CC2650STK sendet dauerhaft

            • Ein Gigaset G-Tag funktioniert ebenfalls, solange er nicht an der G-Tag App angemeldet ist. http://www.amazon.de/Gigaset-Bluetooth- … aset+g-tag

            • Garmin vívosmart HR

            • Garmin Forerunner 920 / 008706e5

            • ein Apple Pencil sendet nur selten. Allerdings taucht der selbe Pencil schon mit zwei Mac-Adressen auf. (kann nicht zur Anwesenheitserkennung genutzt werden, würde aber auch kein Sinn machen)

            • Mein Lichtwecker Withings Aura sendet dauerhaft Bluetooth. Das Skript könnte zur Überwachung des Lichtweckers genutzt werden und dann mich alternativ anders wecken, sollte der Wecker "ausgefallen sein" (Gong, Licht einschalten, Sonos, …).

            Langzeittest

            Momentan läuft das Skript ein paar Tage vor sich hin, ums zu sehen, was passiert (Lastverhalten bei vielen Devices). Danach geht es in der Programmierung weiter.

            Im Skript lädt sich einstellen, welche Mindestsignalstärke (rssi) ein Gerät haben muss, damit es mit Datenpunkten angelegt werden soll. Derzeit sind es -100 dB. Stellt mal eine größere Zahl ein, z.B. -80 dB, werden weiter entfernte Geräte nicht gescannt und damit auch keine Datenpunkte erzeugt.

            todos

            • Test mit anderer Hardware als den Pi 3 (ein Pi 1 und 2 mit externen USB-Bluetooth Dongle wird auch getestet. Davon habe ich noch ein paar rumstehen)

            • Dokumentation in diesem Thread. Screenshots. Skript Beschreibung (im Skript selbst steht schon einiges)

            • ERLEDIGT:Herstellernamen im Skript lesbar hinbekommen (Javascript Pufferbehandlung…)

            • ERLEDIGT: Whitelist. Nur bekannte Geräte scannen (ist sehr schnell eingebaut)

            • Interne Optimierungen und mehr Features

            geplante Erweiterungen

            • Datenpunkt: Liste als JSON aller gefundenen neuen Devices mit Datum und Uhrzeit

            • Per Datenpunkt Switch: Scan neuer Geräte für einen einstellbaren Zeitpunkt,z.B eine Stunde. Neue Geräte werden dann in einen eigen Zweig zusätzlich erfasst. Zweck: neue Geräte schnell identifizieren; "Besuch" auf BLE scannen.

            Über ein kurzes Feedback würde ich mich freuen, falls jemand das auch testet. Hat es sofort geklappt, gab es Stolpersteine, ging es gar nicht, Probleme, Nutzen, Wünsche, Verbesserungsvorschläge, Ideen…?

            1 Reply Last reply Reply Quote 0
            • S
              simpixo last edited by

              Interessant! Muss ich wohl mal selbst ausprobieren! Werden auch BLUETHOOTH LE Geräte gefunden!?

              Gesendet von meinem iPhone mit Tapatalk

              1 Reply Last reply Reply Quote 0
              • ruhr70
                ruhr70 last edited by

                @simpixo:

                … Werden auch BLUETHOOTH LE Geräte gefunden!? `

                Genau um die geht es 🙂

                Das node.js Modul noble:

                A Node.js BLE (Bluetooth Low Energy) central module

                https://github.com/sandeepmistry/noble#prerequisites

                [EDIT] Ich habe dann auch mal die Überschrift geändert. Danke!

                1 Reply Last reply Reply Quote 0
                • S
                  simpixo last edited by

                  Also ich habe beim ersten installieren des noble Paket, haufenweise Fehler kassiert, erst nachdem ich folgende Pakete installiert habe wurde es korrekt installiert

                  sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev

                  Vielleicht solltest du das in deinem ersten Beitrag erwähnen [emoji6]

                  Ich teste dann mal weiter

                  Gesendet von iPad mit Tapatalk

                  1 Reply Last reply Reply Quote 0
                  • ruhr70
                    ruhr70 last edited by

                    oh

                    Schande über mein Haupt

                    Du hast natürlich recht. Bluez ist Voraussetzung. Ergänze ich noch 🙂

                    Gesendet von iPhone mit Tapatalk

                    [EDIT] @simpixo: ich habe das in der Beschreibung ergänzt. Danke!

                    1 Reply Last reply Reply Quote 0
                    • S
                      simpixo last edited by

                      Hatte ich auf meinen Raspi 3 noch nicht drauf 😉 aber jetzt läuft es und hat mein Mi Band gefunden [emoji6][emoji1360]

                      Gesendet von meinem iPhone mit Tapatalk

                      1 Reply Last reply Reply Quote 0
                      • ruhr70
                        ruhr70 last edited by

                        ich sehe das hier in Tapatalk nicht…

                        wenn Du nur Dein Mi Band scannen willst... oben im Script ist eine Variable, in der jetzt nur ein leeres Array deklariert wird [], d.h. scanne alles.

                        Wenn Du da die mac Deines Mi Bands einträgst scannt das Skript nur noch das Mi Band.

                        ["badefee12345"]

                        Gesendet von iPhone mit Tapatalk

                        1 Reply Last reply Reply Quote 0
                        • S
                          simpixo last edited by

                          Geilomat [emoji1360][emoji1360][emoji1360]

                          Gesendet von meinem iPhone mit Tapatalk

                          1 Reply Last reply Reply Quote 0
                          • ruhr70
                            ruhr70 last edited by

                            @simpixo:

                            Gesendet von meinem iPhone mit Tapatalk `

                            Hat das eigentlich geklappt?

                            Es ging um die Variable serviceUUIDs. Mir viel dann noch ein, dass ich noch gar nicht getestet hatte, ob dort die Mac-Adresse rein muss oder die UUID. Ich gehe mal von der Mac-Adresse aus.

                            1 Reply Last reply Reply Quote 0
                            • derAuge
                              derAuge last edited by

                              habe nun mein RPi3 neu aufgesetzt

                              nach anleitung installiert

                              und es läuft :!:

                              Nun mal schauen was alles so gesehen wird

                              Gruß

                              Jürgen

                              1 Reply Last reply Reply Quote 0
                              • derAuge
                                derAuge last edited by

                                es wird nun ein Gerät gefunden (Welches auch immer ? )

                                Tab4 nicht

                                SmatePhone nicht

                                BlackBarry nicht

                                (mal eine Nacht drüber schlafen)

                                Gruß

                                Jürgen

                                1 Reply Last reply Reply Quote 0
                                • ruhr70
                                  ruhr70 last edited by

                                  Hi Jürgen,

                                  danke für das Feedback!

                                  Tab4, SmartPhone und BlackBerry sind keine BLE Geräte.

                                  Mein iPhone, iPads und Macs werden auch nicht angezeigt.

                                  Gefunden werden Geräte, die dauerhaft Bluetooth aussenden, wie Fitnessarmbänder, Bluetooth Tags und Geräte, die sich über Bluetooth zur Konfiguration bemerkbar machen, wie der Aura Lichtwecker.

                                  Warum der Samsung Fernseher der Nachbarn ständig funkt, wenn er an ist… so kann ich denen einen monatlichen Report über deren Fernsehkonsum erstellen 🙂

                                  ich hoffe, dass der Gigaset G-tag dazugehört. Am Wochenende werde ich es wissen.

                                  wenn ja kommt der G-tag ans Schlüsselbund und ergänzt meine Anwesenheitserkennung um die dann zuverlässigste Methode.

                                  Bisher mache ich das per:

                                  • Ping auf die iPhones

                                  (in der jetzigen ioBroker Installation gestoppt, da der Ping Adapter auf dem iMac Probleme macht). Funktioniert auch nur, wenn man bei Ankunft den Bildschirm vom iPhone aktiviert oder es am Ladegerät hängt

                                  • ein Raspberry Pi 2 mit Bluetooth Stick als iBeacon und Geofency. Funktioniert besser als die Erkennung über WLAN und Ping. Ist aber auch nicht ganz perfekt. Wenn der Akku vom iPhone leer ist z.B. nicht und manchmal schwankt die Erkennung. Und es zerrt am Akku.

                                  Den Schlüssel hat man immer bei sich und die Batterie soll über ein Jahr halten.

                                  Fitnissarmbänder oder Sticks, wie den Fitbit One sind auch schon oft vorhanden und werden auch oft dauerhaft getragen.

                                  Danke schon einmal für Dein Feedback!

                                  Würde mich interessieren, was da bei dir funkt. Dürfte aber nicht so einfach rauszufinden sein 🙂

                                  Gesendet von iPhone mit Tapatalk

                                  1 Reply Last reply Reply Quote 0
                                  • ruhr70
                                    ruhr70 last edited by

                                    Hallo Jürgen,

                                    eine kleine Ergänzung. Wenn Du aus Deinen Androids ein Bacon machst, dann dürften die auch funktionieren.

                                    ich habe mal nach einer passenden App gegoogelt:

                                    https://play.google.com/store/apps/deta … uickbeacon

                                    Gruß,

                                    Michael

                                    1 Reply Last reply Reply Quote 0
                                    • derAuge
                                      derAuge last edited by

                                      315_bt.png

                                      nun sind es bereis 6 Geräte geworden

                                      Gruß

                                      Jürgen

                                      1 Reply Last reply Reply Quote 0
                                      • ruhr70
                                        ruhr70 last edited by

                                        @derAuge:

                                        nun sind es bereis 6 Geräte geworden `

                                        Hi Jürgen,

                                        Danke für die Info! Laut Screenshot sind es bei Dir nur zwei Geräte (CountAll = 2), ein Gigaset G-tag und ein Samsung TV.

                                        Freue mich gerade. D.h. das G-Tag wird funktionieren 😉

                                        Sind das Deine Geräte (Samsung Fernseher und das/der G-tag)?

                                        VG,

                                        Michael

                                        1 Reply Last reply Reply Quote 0
                                        • derAuge
                                          derAuge last edited by

                                          @ruhr70:

                                          Laut Screenshot sind es bei Dir nur zwei Geräte `

                                          stimmt. Da hatte ich das Bild gemacht.

                                          inzwischen hat er bereits 11 devices gesehen.

                                          und Ja

                                          Es ist ein Samsung TV und

                                          ein Gigaset ?

                                          Gruß

                                          Jürgen

                                          1 Reply Last reply Reply Quote 0
                                          • ruhr70
                                            ruhr70 last edited by

                                            @derAuge:

                                            ein Gigaset ? `

                                            Ein Gigaset G-tag:

                                            http://www.amazon.de/Gigaset-Bluetooth- … aset+g-tag

                                            Wenn es nicht Deins ist, dann war vielleicht jemand in der Nähe mit so einem Ding.

                                            Auf jeden Fall geht es mir u.a. darum. Ich hab eins zum Test bestellt und mich schon gefreut, dass es bei Dir erkannt wird 🙂

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            963
                                            Online

                                            31.6k
                                            Users

                                            79.4k
                                            Topics

                                            1.3m
                                            Posts

                                            28
                                            254
                                            53967
                                            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