NEWS

noble restart scan in JS nur nach Instanz-Restart

  • Starter

    Hallo,

    will bei mir daheim zwei Geräte bzgl. RSSI "beobachten". Es gibt zwar den BLE Adapter, aber dieser ist für mich etwas oversized, da ich auch keine weiteren Daten meiner Gerätschaften benötige; nur RSSI zur Distanzschätzung.
    Ich habe nun ein Mini-Skript erstellt: das Scannen funktioniert einmalig einwandfrei aber wenn ich das Skript stoppe und erneut starte, wird nichts mehr gescannt. Erst wenn ich die vollständige Javascript-Instanz seitens iobroker restarte, funktioniert es wieder (einmalig).

    Hier mein Skript:

    const noble = require('@abandonware/noble');
    
    noble.on('stateChange', function (state) {
      if (state === 'poweredOn') {
        noble.startScanning([],true);
      } else {
        noble.stopScanning();
      }
    });
    
    noble.on('scanStop', () => {
        console.log("Scan stopped...")
    });
    
    noble.on('scanStart', () => {
        console.log("Scan started...")
    });
    
    
    noble.on('discover', function (peripheral) {
      console.log(`peripheral discovered (${peripheral.id} with address <${peripheral.address}, ${peripheral.addressType}>, connectable ${peripheral.connectable}, RSSI ${peripheral.rssi}:`);
    });
    
    function exit() {
        noble.stopScanning();
        noble.removeAllListeners("discover");
        noble.removeAllListeners("stateChange");
    }
    onStop(exit, 100);
    
    

    Beim ersten Versuch erhalte ich wie erwartet solche Log-Meldungen mit Skript-Start/Stop

    23:02:18.548	info	javascript.1 (30243) script.js.AA_Instanz1_Test.BLE_Noble_Test: Scan started...
    23:02:18.579	info	javascript.1 (30243) script.js.AA_Instanz1_Test.BLE_Noble_Test: peripheral discovered (5f24b28dd2d7 with address <5f:24:b2:8d:d2:d7, random>, connectable false, RSSI -67:
    23:02:18.681	info	javascript.1 (30243) script.js.AA_Instanz1_Test.BLE_Noble_Test: peripheral discovered (5f24b28dd2d7 with address <5f:24:b2:8d:d2:d7, random>, connectable false, RSSI -67:
    23:02:18.789	info	javascript.1 (30243) script.js.AA_Instanz1_Test.BLE_Noble_Test: peripheral discovered (5f24b28dd2d7 with address <5f:24:b2:8d:d2:d7, random>, connectable false, RSSI -67:
    23:02:18.822	info	javascript.1 (30243) script.js.AA_Instanz1_Test.BLE_Noble_Test: peripheral discovered (25f623eeff98 with address <25:f6:23:ee:ff:98, random>, connectable false, RSSI -64:
    23:02:18.831	info	javascript.1 (30243) script.js.AA_Instanz1_Test.BLE_Noble_Test: peripheral discovered (c311ae7748d2 with address <c3:11:ae:77:48:d2, public>, connectable true, RSSI -75:
    23:02:18.898	info	javascript.1 (30243) script.js.AA_Instanz1_Test.BLE_Noble_Test: peripheral discovered (5f24b28dd2d7 with address <5f:24:b2:8d:d2:d7, random>, connectable false, RSSI -67:
    23:02:19.002	info	javascript.1 (30243) script.js.AA_Instanz1_Test.BLE_Noble_Test: peripheral discovered (5f24b28dd2d7 with address <5f:24:b2:8d:d2:d7, random>, connectable false, RSSI -67:
    23:02:19.091	info	javascript.1 (30243) script.js.AA_Instanz1_Test.BLE_Noble_Test: peripheral discovered (25f623eeff98 with address <25:f6:23:ee:ff:98, random>, connectable false, RSSI -77:
    23:02:19.111	info	javascript.1 (30243) script.js.AA_Instanz1_Test.BLE_Noble_Test: peripheral discovered (5f24b28dd2d7 with address <5f:24:b2:8d:d2:d7, random>, connectable false, RSSI -68:
    23:02:19.212	info	javascript.1 (30243) Stop script script.js.AA_Instanz1_Test.BLE_Noble_Test
    23:02:19.221	info	javascript.1 (30243) script.js.AA_Instanz1_Test.BLE_Noble_Test: Scan stopped...
    

    Wenn ich nun das Skript erneut starte und stoppe erscheint nur

    23:03:45.405	info	javascript.1 (30243) Start javascript script.js.AA_Instanz1_Test.BLE_Noble_Test
    23:03:45.411	info	javascript.1 (30243) script.js.AA_Instanz1_Test.BLE_Noble_Test: registered 0 subscriptions and 0 schedules
    23:03:48.606	info	javascript.1 (30243) Stop script script.js.AA_Instanz1_Test.BLE_Noble_Test
    23:03:48.727	info	javascript.1 (30243) script.js.AA_Instanz1_Test.BLE_Noble_Test: Scan stopped...
    23:03:48.729	info	javascript.1 (30243) script.js.AA_Instanz1_Test.BLE_Noble_Test: Scan stopped...
    

    Kurioserweise erscheint mit jedem Start/Stop eine zusätzliche Log-Zeile mit Scan stopped....
    Meine Vermutung ist, dass ich mit dem Skript-Stop etwas seitens noble nicht stoppe, das wiederum verhindert wieder den Scan-Start.

    Um zukünftige Probleme zu vermeiden, würde ich zumindest diesen Prozess sauber abschließen, bevor ich mit den Abfragen das Skript erweitere. Könnt ihr mir helfen?
    AlCalzone?

    Danke

    EDIT:
    Wenn ich den Befehl noble.startScanning([],true); ohne Bedingungen ausführe, startet zwar das Scanning, aber es erscheint zweimal Scan started... und im Anschluss Scan stopped.... Irgendwas läuft dann weiterhin nicht rund würde ich sagen.

  • Developer

    GiuseppeS Fürchte da muss ich dich enttäuschen: https://github.com/noble/noble/issues/299
    noble bzw. die zugrunde liegenden libs können das nicht, ohne den Prozess komplett zu beenden. Am besten lässt du dein Skript in einer eigenen Adapter-Instanz laufen.

    AKST created this issue in noble/noble

    open Add API to "stop" noble #299

  • Starter

    AlCalzone
    Okay, war felsenfest davon überzeugt, ich würde was vergessen. Danke für die Rückmeldung, werde das mit der eigenen Instanz in Betracht ziehen 👍

Suggested Topics

1.8k
Online

34.6k
Users

40.7k
Topics

557.9k
Posts