Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [beantwortet] mehrfach Reaktion bei externen Subscription

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [beantwortet] mehrfach Reaktion bei externen Subscription

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

      Ich hoffe die Überschrift passt irgendwie und auch die Beschreibung 😉

      Für bessere Ideen… gerne 😉

      Ich wollte mir mit einem Pi 3 (BLE Bluetooth schon integriert) und dem node Modul noble einen Bluetooth Scanner mit Javascript erstellen, um diesen dann für weitere Aktionen nutzen zu können.

      noble.on('discover', function(peripheral){
      	// Bluetooth Device gefunden, dann..
      }
      
      

      Nun ist es so, dass diese "noble.on" bei jedem Beenden des Scripts irgendwie noch im Hintergrund weiterläuft.

      Wenn ich das Script dann wieder starte, wird jedes Bluetooth-Device zweimal gefunden. Beim 3. Start dreimal, usw.

      Um dieses Node Modul geht es:

      https://github.com/sandeepmistry/noble

      Im Script wird der Scan gestartet und auch nach einer Zeit beendet (soll später weiterlaufen). Das noble.on ist aber immer noch aktiv.

      function main() {
          noble.startScanning();
          log("start scanning");
      }
      setTimeout(main,        1000);
      
      function stopScan() {
          noble.stopScanning();
          logs("Stop scanning. Anzahl Bluetooth Devices gefunden: " + anzahlBluetoothDevices,"debug1");
      }
      
      setTimeout(stopScan,        30000);
      
      
      1 Reply Last reply Reply Quote 0
      • Bluefox
        Bluefox last edited by

        @ruhr70:

        Ich hoffe die Überschrift passt irgendwie und auch die Beschreibung 😉

        Für bessere Ideen… gerne 😉

        Ich wollte mir mit einem Pi 3 (BLE Bluetooth schon integriert) und dem node Modul noble einen Bluetooth Scanner mit Javascript erstellen, um diesen dann für weitere Aktionen nutzen zu können.

        noble.on('discover', function(peripheral){
        	// Bluetooth Device gefunden, dann..
        }
        
        

        Nun ist es so, dass diese "noble.on" bei jedem Beenden des Scripts irgendwie noch im Hintergrund weiterläuft.

        Wenn ich das Script dann wieder starte, wird jedes Bluetooth-Device zweimal gefunden. Beim 3. Start dreimal, usw.

        Um dieses Node Modul geht es:

        https://github.com/sandeepmistry/noble

        Im Script wird der Scan gestartet und auch nach einer Zeit beendet (soll später weiterlaufen). Das noble.on ist aber immer noch aktiv.

        function main() {
            noble.startScanning();
            log("start scanning");
        }
        setTimeout(main,        1000);
        
        function stopScan() {
            noble.stopScanning();
            logs("Stop scanning. Anzahl Bluetooth Devices gefunden: " + anzahlBluetoothDevices,"debug1");
        }
        
        setTimeout(stopScan,        30000);
        
        ```` `  
        

        Probiere mal statt on: once

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

          @Bluefox:

          Probiere mal statt on: once `

          Hi Bluefox,

          danke für die Anregung!

          Ich habe das von on( in once( geändert. Dann wird beim Scan nur noch das erste Bluetooth Device gefunden. Vorher waren es acht, bzw. 2x acht, usw.

          Ich kämpfe mal weiter. Jeder mühsame Schritt hilft auch (hoffentlich) beim Verständnis 🙂

          VG,

          Michael

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

            @ruhr70:

            @Bluefox:

            Probiere mal statt on: once `

            Hi Bluefox,

            danke für die Anregung!

            Ich habe das von on( in once( geändert. Dann wird beim Scan nur noch das erste Bluetooth Device gefunden. Vorher waren es acht, bzw. 2x acht, usw.

            Ich kämpfe mal weiter. Jeder mühsame Schritt hilft auch (hoffentlich) beim Verständnis 🙂

            VG,

            Michael `
            Vielleicht so probieren:

            function onDiscover (peripheral){
               // Bluetooth Device gefunden, dann..
            }
            
            function main() {
                noble.on('discover', onDiscover);
                noble.startScanning();
                log("start scanning");
            }
            setTimeout(main,        1000);
            
            function stopScan() {
                noble.removeListener('discover', onDiscover);
                noble.stopScanning();
                logs("Stop scanning. Anzahl Bluetooth Devices gefunden: " + anzahlBluetoothDevices,"debug1");
            }
            
            setTimeout(stopScan,        30000);
            
            1 Reply Last reply Reply Quote 0
            • ruhr70
              ruhr70 last edited by

              @Bluefox:

              Vielleicht so probieren:

              function onDiscover (peripheral){
                 // Bluetooth Device gefunden, dann..
              }
              
              function main() {
                  noble.on('discover', onDiscover);
                  noble.startScanning();
                  log("start scanning");
              }
              setTimeout(main,        1000);
              
              function stopScan() {
                  noble.removeListener('discover', onDiscover);
                  noble.stopScanning();
                  logs("Stop scanning. Anzahl Bluetooth Devices gefunden: " + anzahlBluetoothDevices,"debug1");
              }
              
              setTimeout(stopScan,        30000);
              ```` `  
              

              Danke!! 😉

              Bluefox ich bewundere Deine Hilfsbereitschaft und Geduld! Danke noch einmal!

              Von der Funktion her war das schon einmal ein Riesen Schritt.

              Vom Verständnis bin ich noch Meilen entfernt… :shock: :?:

              So Verhält ich das Script schon einmal wesentlich besser 🙂

              (auch wenn ich das noch nicht verstanden habe)

              (+)

              Es läuft immer einmal komplett durch, auch wenn man Restart im Editor drückt

              (-)

              Wenn man das laufende Script per stop/start neu startet, bevor der Timer noble.removeListener('discover', onDiscover); und noble.stopScanning(); ausgeführt hat, habe ich das gleiche Phänomen wie vorher.

              Die Frage ist, wie man ein Script beimStart "aufräumen" kann) (.removeListner)

              Dann habe ich mal versucht, das letzte Timeout mit noble.removeListener('discover', onDiscover); und noble.stopScanning(); wegzulassen:

              • dann wird nach einem Scan nie weitergescannt, auch wenn man das Script neu gestartet, da der Scan ja einmal durch ist und ich doppelte Einträge beim Start ausgeschlossen habe.

              ergo, darauf kann ich wohl nicht verzichten.

              Das Endziel soll sein, dass der Raspberry dauerhaft scannt. da wären wir wieder bei meinen Meilen 😉

              (001) Ich denke mal, dass ich mit dem setTimeout() den ersten Durchgang stoppen muss und dann den nächsten Durchgang direkt wieder starten muss, inkl. dem SetTimeOut für den Stop.

              Ich experimentiere mal weiter…

              [EDIT]

              Die Endlosschleife klappt ganz gut, wenn ich, wie oben unter (001) beschrieben nach dem Stop im Stop die StopFunktion selbst wieder aufrufe mit Start und Timer.

              Das Problem, was ich nicht lösen kann ist, dass das setTimeOut() bei einem Restart des Scripts im Hintergrund noch weiterläuft und dann das Discover sauber beendet, aber bei Script Stop/Start anscheinend nicht.

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

                @Bluefox:

                Vielleicht so probieren: `

                Danke noch einmal!

                Dank Deiner Hilfe bin ich schon einen Riesenschritt weiter 😉

                • zwei Datenpunkte

                • einer wenn der Scan aktiv ist, der nach dem Timeout prüft, ob der Scan weiter gehen soll

                • der andere um den Scan ein- und auszuschalten

                • Start ruft verzögert Stop auf

                • stop prüft ob wieder gestartet werden soll

                • start prüft ob eventuell noch ein Scan aktiv ist und wartet, wenn das der Fall ist

                • …

                Klappt soweit. 😄

                Das Problem, dass der Scan immer noch aktiv ist, wenn man im Scripteditor über Stop/Start das Script beendet und startet, bekomme ich leider nicht im Griff :?

                Kann man irgendwie vom Script aus das Modul noble stoppen und wieder starten?

                Oder eine andere Lösung?

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

                  @ruhr70:

                  @Bluefox:

                  Vielleicht so probieren: `

                  Danke noch einmal!

                  Dank Deiner Hilfe bin ich schon einen Riesenschritt weiter 😉

                  • zwei Datenpunkte

                  • einer wenn der Scan aktiv ist, der nach dem Timeout prüft, ob der Scan weiter gehen soll

                  • der andere um den Scan ein- und auszuschalten

                  • Start ruft verzögert Stop auf

                  • stop prüft ob wieder gestartet werden soll

                  • start prüft ob eventuell noch ein Scan aktiv ist und wartet, wenn das der Fall ist

                  • …

                  Klappt soweit. 😄

                  Das Problem, dass der Scan immer noch aktiv ist, wenn man im Scripteditor über Stop/Start das Script beendet und startet, bekomme ich leider nicht im Griff :?

                  Kann man irgendwie vom Script aus das Modul noble stoppen und wieder starten?

                  Oder eine andere Lösung? `
                  removeAllListeners wird dein Problem lösen.

                  function onDiscover (peripheral){
                     // Bluetooth Device gefunden, dann..
                  }
                  
                  function main() {
                      noble.removeAllListeners('discover');
                      noble.on('discover', onDiscover);
                      noble.startScanning();
                      log("start scanning");
                  }
                  setTimeout(main,        1000);
                  
                  function stopScan() {
                      noble.removeListener('discover', onDiscover);
                      noble.stopScanning();
                      logs("Stop scanning. Anzahl Bluetooth Devices gefunden: " + anzahlBluetoothDevices,"debug1");
                  }
                  
                  setTimeout(stopScan,        30000);
                  
                  1 Reply Last reply Reply Quote 0
                  • ruhr70
                    ruhr70 last edited by

                    @Bluefox:

                    removeAllListeners wird dein Problem lösen. `

                    Danke! 🙂 🙂

                    Versuche ich gleich. Ansonsten schaut es schon ganz gut aus 😉

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

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    790
                    Online

                    31.7k
                    Users

                    79.7k
                    Topics

                    1.3m
                    Posts

                    2
                    8
                    1138
                    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