NEWS
noble restart scan in JS nur nach Instanz-Restart
-
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 Befehlnoble.startScanning([],true);
ohne Bedingungen ausführe, startet zwar das Scanning, aber es erscheint zweimalScan started...
und im AnschlussScan stopped...
. Irgendwas läuft dann weiterhin nicht rund würde ich sagen. -
@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. -
@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