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

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Pi 3 als Bluetooth LE Scanner (Beispielscript)

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

      Hi ruhr70,

      @ruhr70:

      Das Datum der letzten Statusänderung wird nicht gesetzt?

      Gib mal Eine Info dazu, wenn ich was überprüfen muss. `

      Ich habe heute früh im Script das Datumsformat geändert:

      /*function datum(){
          return formatDate(new Date(), "YYYY-MM-DD,SS:mm");
      }*/
      
      function datum(){
          return formatDate(new Date(), "DD.MM.YYYY, SS:mm");
      }
      

      und das Script neu gestartet (wollte den Wert in VIS mit ausgeben - und da sieht die "deutsche" Schreibweise einfach schöner aus).

      Das Startdatum und Uhrzeit wurde sauber in den Datenpunkt geschrieben, aber keine weitern Statusänderungen - und ich war zwischendurch ein paar mal weg (die Pushover-Nachrichten sind angekommen).

      Habe es wieder auf das Original geändert und jetzt mal sehen, was kommt. Der Datenpunkt "lastStateDate" steht jetzt auf "2016-09-18,22:19".

      Mal abwarten.

      Gruß,

      Eric

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

        @Solear:

        Die Gigaset G-Tags haben eine ganz miese Eigenschaft :lol:

        Sie stoppen die Verbindung zum Raspi-iobroker sobald sie mit dem Handy und der Gigaset G.-Tag App verbunden sind. Hat mich einen halben Tag gekostet das Problem zu finden. `
        Hättest mal das ganze Thema durchlesen müssen. Wird irgendwo erwähnt.

        Aber stimmt, klasse Sache das Script in Verbindung mit den g-tags.

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

          Hallo mitsammen!

          Dies ist mein erster Eintrag in diesem Forum. Kam erst über node-red und HomeMatic auf ioBroker und nach den ersten Versuchen hab ich versucht einige Funktionen die ich bis jetzt in node-red abgebildet habe auf ioBroker in scripts zu übertragen.

          Hab natürlich auch das Bluetooth script probiert aber es hat mir nie meine Telefone gelistet (son'st 'ne Menge) obwohl mein script in node-red funktionierte.

          Deshalb wollte ich mal meinen Lösungsansatz mit euch teilen. Übrigens, er ist kombiniert mit WLAN-ping, also fragt Bluetooth und WLAN ab.

          Als Voraussetzung war bei mir nur````
          sudo apt-get install fping

          
          Das script basiert auf fping für WLAN und hcitool für BT. Es benutzt die Möglichkeit eine BT-MAC-Adresse nach dem Namen zu fragen welche natürlich nur antwortet wien das Gerät da ist. Aber es funktioniert auch wenn das Gerät nicht verbunden/gepairt ist.
          
          Es wird bei mir mit Zählern verwendet und minütlich ausgeführt. Wenn ein Teil 10 Minuten weder auf BT noch auf WLAN erreichbar ist dann gilt es als Abwesend.
          
          Wenn alle abwesend sind wird noch ein anderes flag gesetzt.
          
          Damit kann ich prüfen ob meine Frau oder ich anwesend sind. Da wir beide WLAN und BT immer eingeschaltet haben funktioniert das auch noch auf der Terasse oder im Garten wo das BT nicht mehr reicht.
          
          

          var patt = new RegExp(" is alive");
          var startcount = 10;
          var numscan = 0;
          var thisscan = 0;
          var somealive = false;

          var scanList = {
          "Phone1": {
          ip: "Galaxy7e.fritz.box",
          bt: "3C:BB:xx:xx:xx:xx"
          },
          "Phone2": {
          ip: "GalaxyALPHA.fritz.box",
          bt: "FC:19:xx:xx:xx:xx"
          }
          };

          for (var item in scanList) {
              logs("Create " + item + " " + JSON.stringify(scanList[item]));
              var di = "Ping."+ item ;
          
              createState(di + '.anwesend', false, { // Datenpunktname ohne Leerzeichen und Sonderzeichen, wie er in den Objekten angelegt wird
                  name: 'PersonAnwesend',           // Lesbarer Name des Datenpunkts
                  desc: 'Ist die Person anwesend?',   // Beschreibung des Datenpunkts
                  type: 'boolean',                         // Bescreibung des Typ, wie: number, string, boolean
                  unit: ''                              // Einheit, wenn benötigt 
              });
          
              createState(di + '.count', 0, { // Datenpunktname ohne Leerzeichen und Sonderzeichen, wie er in den Objekten angelegt wird
                  name: 'CounterAnwesend',           // Lesbarer Name des Datenpunkts
                  desc: 'Ist die Person anwesend?',   // Beschreibung des Datenpunkts
                  type: 'number',                         // Bescreibung des Typ, wie: number, string, boolean
                  unit: ''                              // Einheit, wenn benötigt 
              });
          
              createState(di + '.ip', false, { // Datenpunktname ohne Leerzeichen und Sonderzeichen, wie er in den Objekten angelegt wird
                  name: 'LastIPAnwesend',           // Lesbarer Name des Datenpunkts
                  desc: 'Ist die Person mit fping erkannt worden?',   // Beschreibung des Datenpunkts
                  type: 'boolean',                         // Bescreibung des Typ, wie: number, string, boolean
                  unit: ''                              // Einheit, wenn benötigt 
              });
          
              createState(di + '.btname', "undefined", { // Datenpunktname ohne Leerzeichen und Sonderzeichen, wie er in den Objekten angelegt wird
                  name: 'LastIPAnwesend',           // Lesbarer Name des Datenpunkts
                  desc: 'Ist die Person mit fping erkannt worden?',   // Beschreibung des Datenpunkts
                  type: 'string',                         // Bescreibung des Typ, wie: number, string, boolean
                  unit: ''                              // Einheit, wenn benötigt 
              });
          
              createState(di + '.bt', false, { // Datenpunktname ohne Leerzeichen und Sonderzeichen, wie er in den Objekten angelegt wird
                  name: 'LastBTAnwesend',           // Lesbarer Name des Datenpunkts
                  desc: 'Ist die Person mit Bluetooth erkannt worden?',   // Beschreibung des Datenpunkts
                  type: 'boolean',                         // Bescreibung des Typ, wie: number, string, boolean
                  unit: ''                              // Einheit, wenn benötigt 
              });
          
          } 
          
              createState('Ping.anyanwesend', false, { // Datenpunktname ohne Leerzeichen und Sonderzeichen, wie er in den Objekten angelegt wird
                  name: 'AnyPersonAnwesend',           // Lesbarer Name des Datenpunkts
                  desc: 'Ist irgend eine Person anwesend?',   // Beschreibung des Datenpunkts
                  type: 'boolean',                         // Bescreibung des Typ, wie: number, string, boolean
                  unit: ''                              // Einheit, wenn benötigt 
              });
          

          function scanOne(key,item) {
          var ids = instanz+"Ping."+key + ".";
          logs("Scan " + key + " " + JSON.stringify(item), 'debug2');
          exec('hcitool name ' + item.bt, cb(function (error, stdout, stderr) {
          logs('hcitool '+ item.bt + " = " + stdout, 'debug2');

              if (error) {
                  logs('hcitool name '+item.bt+' error: ' + error, 'debug2');
              } else {
                  if (stdout > "") {
                      item.btname = stdout.trim();
                      item.bthere = true;
                  } else {
                      item.bthere = false;
                  }
              }
              logs("Scaned hcitool " + key + " " + JSON.stringify(item), 'debug2');
              exec('fping ' + item.ip, cb(function (error, stdout, stderr) {
                  logs('fping '+ item.ip + " = " + stdout, 'debug2');
                  if (error) {
          

          // logs('fping '+item.ip+' error: ' + error, 'debug2');
          logs('fping '+item.ip+' error: unreachable', 'debug2');
          item.iphere = false;
          } else {
          if (patt.test(stdout)) {
          item.iphere = true;
          } else {
          item.iphere = false;
          }
          }
          setState(ids + 'ip', item.iphere);
          setState(ids + 'bt', item.bthere);
          if (item.btname)
          setState(ids + 'btname', item.btname);
          var here = item.iphere || item.bthere;
          var cnt = getState(ids + "count").val;
          var anw = getState(ids + "anwesend").val
          if (here) {
          cnt = startcount;
          anw = true;
          somealive = true;
          } else {
          cnt = --cnt;
          if (cnt<0)
          cnt = 0;
          if (cnt === 0) {
          anw = false;
          }
          }
          setState(ids + "count",cnt);
          setState(ids + "anwesend",anw);
          logs("Scaned " + key + " " + JSON.stringify(item), 'debug2');
          thisscan = ++thisscan;
          if (thisscan == numscan) {
          // last scanned item!
          logs("anyanwesend = " + somealive, "debug2");
          setState(instanz + "Ping.anyanwesend",somealive)
          }
          }));
          }));

          }

          // =============================================================================
          // Hauptprogramm (wird beim Scriptstart und im schedule ausgeführt)
          // =============================================================================
          function pingAll() {

          thisscan = numscan = 0;
          somealive = false;
          for (var key in scanList) {
              numscan = ++numscan;
              scanOne(key, scanList[key]);
          }
          

          }

          
          Danke für die Hilfe welche ich im Forum schon gefunden habe!
          
          Frank
          1 Reply Last reply Reply Quote 0
          • ruhr70
            ruhr70 last edited by

            Super!

            Werde das Skript am Wochenende nutzen! Klasse Lösung.

            Das Du die Handys mit dem BLE Skript nicht findest liegt daran, dass die Handys Ihre Kennung nicht per BLE senden. Für iPhones gibt es Apps, die nur funktionieren, solange die App aktiv ist. Also nicht zu gebrauchen. Ob sich das unter iOS 10 geändert hat, habe ich nicht getestet.

            Für Android müsste es Apps geben.

            Ansonsten gibt es viele Geräte, die BLE nutzen, wie Fitnessarmbänder und halt die g-Tags.

            Ich nutze das BLE Skript übrigens derzeit auch nur zum testen 🙂

            Meine Anwesenheitserkennung funktioniert mit einer Kombi aus Geofency, Türkontakt und WLAN Scan.

            Werde dass aber mit dem BLE Skript und Deiner Lösung noch ergänzen/verfeinern.

            Klasse Arbeit!

            Gesendet von iPad mit Tapatalk

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

              Ja, ich kenne das Problem mit the BT-LE, aber ich will keine Apps installieren.

              Mit dem hcitool kann man Geräte checken die weder gepairt sind noch irgeneine App laufen haben, einige Bedingung ist dass BT an ist und ich die BT-Adresse kenne.

              1 Reply Last reply Reply Quote 0
              • T
                thorque last edited by

                Ich habe ioBroker auf einem RaspPi2 installiert. Welchen Bluetooth-Dongle kann ich dafür am besten verwenden?

                VG

                Thorsten

                1 Reply Last reply Reply Quote 0
                • Homoran
                  Homoran Global Moderator Administrators last edited by

                  Hallo Thorsten und Willkommen im Forum.

                  @ruhr70 wird da bestimmt mehr zu sagen können, aber es muss auf jeden Fall einer mit Bluetooth 4.0 sein.

                  @ruhr70 Und wenn wir schonmal dabei sind: ichhabe gerade eben etwas verrücktes gemacht, wir hatten ja schon in Wuppertal drüber gesprochen.

                  Ich habe dein Script auf dem NUC PPYH laufen lassen. Diese Fehlermeldung kam:

                  ! ````
                  22:44:44.606 [info] javascript.0 Start javascript script.js.Bluetoothscanner
                  22:44:44.606 [info] javascript.0 script.js.Bluetoothscanner: --== script.js.Bluetoothscanner ==-- gestartet. Instanz: "javascript.0.", Loglevel: info
                  22:44:44.606 [info] javascript.0 script.js.Bluetoothscanner: Liste bluetoothBlacklistManufacturerData auf gültige Werte geprüft. Anzahl Einträge: 3
                  22:44:44.606 [info] javascript.0 script.js.Bluetoothscanner: Liste bluetoothBlacklistMac auf gültige Werte geprüft. Anzahl Einträge: 2
                  22:44:44.607 [info] javascript.0 script.js.Bluetoothscanner: registered 0 subscriptions and 0 schedules
                  22:44:45.607 [info] javascript.0 script.js.Bluetoothscanner: Kommando Bluetooth Scanner an: true
                  22:44:45.608 [error] host. Error: Could not start scanning, state is poweredOff (not poweredOn) at Noble.startScanning (/opt/iobroker/node_modules/iobroker.javascript/node_modules/noble/lib/noble.js:71:17) at startScan (script.js.Bluetoothscanner:1368:11) at Object. (script.js.Bluetoothscanner:1745:13) at Object.subs.callback (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1251:48) at /opt/iobroker/node_modules/iobroker.javascript/javascript.js:571:48 at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:3018:17) at checkPatterns (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:567:17) at Object.utils.adapter.stateChange (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:245:17) at that.states.States.change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:2120:37) at RedisClient. (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:88:25) at emitThree (events.js:97:13) at RedisClient.emit (events.js:175:7) at return_pub_sub (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/redis/index.js:782:18) at RedisClient.return_reply (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/redis/index.js:825:9) at JavascriptRedisParser.Parser.returnReply (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/redis/index.js:188:18) at JavascriptRedisParser.execute (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/redis/node_modules/redis-parser/lib/parser.js:415:12) at Socket. (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/redis/index.js:267:27) at emitOne (events.js:77:13) at Socket.emit (events.js:169:7) at readableAddChunk (_stream_readable.js:153:18) at Socket.Readable.push (_stream_readable.js:111:10) at TCP.onread (net.js:536:20)

                  
                  Der NUC hat das WiFi/BT Modul, aber wahrscheinlich nicht aktiv und/oder nicht 4.0
                  
                  EDIT: Nee kein BT 4.0 sondern BT 4.2 ;-)
                  
                  [http://www.intel.com/content/www/us/en/ … brief.html](http://www.intel.com/content/www/us/en/wireless-products/dual-band-wireless-ac-3165-brief.html)
                  
                  Gruß
                  
                  Rainer
                  1 Reply Last reply Reply Quote 0
                  • S
                    Solear last edited by

                    Bluetooth 4.0 reicht nicht. Es muss 4.0 LE sein.

                    NUC BT geht nicht. Habe ich auch schon probiert. Dem NUC Bluetooth Modul fehlt LE.

                    Das Script benötigt aber Bluetooth LE (Low Energy). Das ist das für die Beacons und die ständige (passive) Verbindung zwischen Bluetooth Geräten. Finde ich auch Schade, dass der NUC kein Bluetooth LE hat.

                    Was aber hervorragend funktioniert ist der Raspi 3 mit dem integriertem Bluetooth Modul.

                    Man kann auch einen USB-Bluetooth Adapter kaufen, zB der "USB Bluetooth 4.0 Low Energy-Mikrosteckadapter" von Plugable Technologies auf Amazon für 15 €. Der nutzt den Broadcom Chipsatz welcher auch von Linux problemlos unterstützt wird.

                    1 Reply Last reply Reply Quote 0
                    • Homoran
                      Homoran Global Moderator Administrators last edited by

                      @Solear:

                      NUC BT geht nicht. Habe ich auch schon probiert. Dem NUC Bluetooth Modul fehlt LE. `
                      Du hast ja auch den NUC NUC6i3SYH.

                      in meinem PPYH ist eim m2 modul verbaut, das Datenblatt habe ich oben verlinkt.

                      Demnach hat zumindest dieses Modul angeblich 4.2 LE
                      ` > Bluetooth 4.2® Smart Ready (Low Energy)

                      Dual mode Bluetooth 4.2® connects to the newest low energy Bluetooth® products as well as your familiar devices, such as headsets, keyboard, mice and more. `

                      Das Datenblatt zu deinem musst du selber suchen 😉

                      EDIT: auf der Schachtel steht nur BT 4.0 aber die gleiche Modulnummer (????)

                      Gruß

                      Rainer

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

                        Das hat meiner auch, sogar 4.1 (dein 4.0)

                        Dann ist das vielleicht doch nur ein Treiberproblem beim NUC.

                        Hatte mit````
                        apt-get install bluetooth bluez libbluetooth-dev libudev-dev bt-tools

                        
                        Dann muss ich das nochmal probieren.
                        
                        Ich meine aber, ruhr70 hatte das hier irgendwo schon bestätigt, dass das mit dem Script nicht auf dem NUC läuft.
                        1 Reply Last reply Reply Quote 0
                        • Homoran
                          Homoran Global Moderator Administrators last edited by

                          @Solear:

                          Ich meine aber, ruhr70 hatte das hier irgendwo schon bestätigt, dass das mit dem Script nicht auf dem NUC läuft. `
                          Das hatte er mir auch gesagt, liegt aber IMHO an ESXi. Da wird das BT nicht in die virtuelle Maschine geroutet.

                          Deswegen hatte ich es mit einer direkten Debian-Installation versucht.

                          Gruß

                          Rainer

                          1 Reply Last reply Reply Quote 0
                          • Homoran
                            Homoran Global Moderator Administrators last edited by

                            @Solear:

                            Dann ist das vielleicht doch nur ein Treiberproblem beim NUC. `
                            Habe das hier gefunden, vielleicht hilft das trotzdem:

                            http://www.intel.com/content/www/us/en/ … 05511.html

                            und wenn, dann kannst du mir sagen, was ich damit machen muss 😉

                            Dürfte ein Kernel-Problem sein, die Treiber sind erst ab 4.2:

                            ~$ uname -r
                            3.16.0-4-amd64
                            
                            

                            Gruß

                            Rainer

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

                              Der NUC ist ja auch nicht sichtbar (betrieben mit Windows 7, 10 oder Ubuntu 16.4) für andere LE-Geräte (die den Raspi 3 mit dem ScannerScript). Bluetooth selbst funktioniert ja. Nur das Dauerfeuer LE scheinbar nicht.

                              Ich probiere es nochmal.

                              1 Reply Last reply Reply Quote 0
                              • Homoran
                                Homoran Global Moderator Administrators last edited by

                                In meinem NUC6i5 befindet sich laut Windows Systeminformationen der Dual Band Wireless-AC 8260

                                der hat laut http://www.intel.com/content/www/us/en/wireless-products/wireless-product-selection-guide.html zwar BT 4.2 aber kein LE

                                EDIT: Wenn man dann aber auf den Link klickt steht da doch LE! Da soll einer schlau draus werden.

                                Wie bekomme ich denn diese Info unter Debian auf dem PPYH?

                                Gruß

                                Rainer

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

                                  @Homoran:

                                  In meinem NUC6i5 befindet sich laut Windows Systeminformationen der Dual Band Wireless-AC 8260

                                  der hat laut http://www.intel.com/content/www/us/en/wireless-products/wireless-product-selection-guide.html zwar BT 4.2 aber kein LE

                                  EDIT: Wenn man dann aber auf den Link klickt steht da doch LE! Da soll einer schlau draus werden. `

                                  Ja, irgendwie war mir so. Kein LE obwohl man eigentlich damit rechnet.

                                  Für Debian: Probiere mal:

                                  lspci -v

                                  hwinfo –short

                                  sudo lshw –short

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

                                    Echtes BLE scheint nur der Intel Wireless AC 18265 zu haben: http://www.intel.com/content/www/us/en/ … 18265.html

                                    Den würde ich auch kaufen und in den NUC einbauen, aber ich finde keinen Shop für den :?

                                    1 Reply Last reply Reply Quote 0
                                    • Homoran
                                      Homoran Global Moderator Administrators last edited by

                                      Danke,
                                      @Solear:

                                      lspci -v `

                                      `02:00.0 Network controller: Intel Corporation Device 3165 (rev 81)
                                              Subsystem: Intel Corporation Device 4010
                                              Flags: fast devsel, IRQ 11
                                              Memory at 81300000 (64-bit, non-prefetchable) [disabled] [size]
                                              Capabilities: <access denied=""></access>` 
                                      
                                      Die beiden anderen Befehle mag er nicht:
                                      `~~[code]~~hwinfo –short
                                      -bash: hwinfo: Kommando nicht gefunden.
                                      
                                       sudo lshw –short
                                      sudo: lshw: Kommando nicht gefunden
                                      [/code]`
                                      
                                      Gruß
                                      
                                      Rainer[/size]
                                      
                                      1 Reply Last reply Reply Quote 0
                                      • Homoran
                                        Homoran Global Moderator Administrators last edited by

                                        @Solear:

                                        Echtes BLE scheint nur der Intel Wireless AC 18265 `
                                        Laut der Tabelle ja,

                                        aber in dem "http://www.intel.com/content/www/us/en/wireless-products/dual-band-wireless-ac-8260-brief.html" steht bei allen 3 (18260, 8260, 3165) exakt das gleiche unter BT

                                        Gruß

                                        Rainer

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

                                          Mh, in der PDF dazu steht explizit BLE.

                                          Vielleicht muss man im Bios was aktivieren. Ich probiere es heute Abend noch einmal.

                                          1 Reply Last reply Reply Quote 0
                                          • Homoran
                                            Homoran Global Moderator Administrators last edited by

                                            Aber die http://www.intel.com/content/www/us/en/support/network-and-i-o/wireless-networking/000005511.html sind erst ab Kernel 4.2!

                                            Habe es eben auch nochmal mit meinem NUC6i5 versucht. Der RasPi3 mit dem Script sieht ihn nicht 😞

                                            Gruß

                                            Rainer

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            838
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

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