NEWS
(gelöst) Buffer-Behandlung?
-
Ich habe noch ein kleines Problem mit der Auswertung eines Buffers.
das node.js module noble liefert den Bluetooth Hersteller als <buffer>Folgendes habe ich versucht, um die Info in einen lesbaren Text umzuwandeln:
Variante 1:
var herstellerBuffer = peripheral.advertisement.manufacturerData; var hersteller = ''; if (typeof herstellerBuffer != "undefined") { hersteller = herstellerBuffer.toString('utf8'); } else {hersteller = "undefinied"}
Und Variante 2:
var herstellerBuffer = peripheral.advertisement.manufacturerData; var hersteller = ''; if (typeof herstellerBuffer != "undefined") { hersteller = String.fromCharCode.apply(null, new Uint16Array(herstellerBuffer)); } else {hersteller = "undefinied"}
In beiden Fällen erhalte ich unlesbare Sonderzeichen, wie: Ls�@j���7 �f �
Help ;-)</buffer>
-
Hallo,
hersteller = herstellerBuffer.toString('hex');
ergibt:
javascript.1 script.js.test.bluetooth_le_scanner: debug1: hersteller: 4c000c0e00814e8c002dad07cd235a2c4552
-
Hi Headroom68,
danke. Das hatte ich auch schon probiert:-)
meinst du denn, dass dies das Ergebnis sein soll? ich würde einen lesbaren Namen erwarten
VG
Gesendet von iPhone mit Tapatalk
-
Hallo,
ja, ich fürchte nur, dass danach noch etwas zu tun ist.
'4c00' it z.b. Apple
https://www.bluetooth.com/specification … dentifiers
Ich habe mich noch nicht näher damit beschäftigt. Ich hatte versucht eine Anwesenheitserkennung mit btwatch zu machen.
Leider nur mit begrenztem Erfolg.
Leider wird das iPhone von noble beim scannen nicht erkannt.
-
Hallo,
ja, ich fürchte nur, dass danach noch etwas zu tun ist.
'4c00' it z.b. Apple
https://www.bluetooth.com/specification … dentifiers
Ich habe mich noch nicht näher damit beschäftigt. Ich hatte versucht eine Anwesenheitserkennung mit btwatch zu machen.
Leider nur mit begrenztem Erfolg.
Leider wird das iPhone von noble beim scannen nicht erkannt. `
Hi Headroom68,
Deine Antwort ist in meinem Urlaub untergegangen. Es ist wirklich einfach Hex.
Danke! Unabhängig davon, hatte ich das mittlerweile auch gefunden und eingebaut
Zu Deinem Problem:
Vorab. Sind das nicht zwei Themen? iPhone und btwatch?
Wir die btwatch nicht gefunden? Wenn doch, kannst Du doch schon damit arbeiten.
Zum iPhone:
Das BLE Skript sucht nur BLE Geräte (Geräte, die dauern Ihre Info per Bluetooth senden, z.B. das Gigaset G-Tag, solange es nicht an der App angemeldet ist). Sehr gut sind da die diversen Fitnesstrecker geeignet. Deine btwatch nicht?
Beim iPhone kannst Du es umgekehrt machen. Du benötigst ein Bacon, bzw. ein iBeacon, auf welches Du dann mit Geofency und dem Geofency Adapter reagieren kannst. So nutze ich das bisher schon länger mit einem Raspberry 2 als iBeacon, Geofency und dem Geofency Adapter.
Wenn ich mit meinem BLE Skript durch bin, kommt noch ein viel kürzeres Skript, mit dem Du aus dem Raspberry Pi 3 (oder andere kompatible Geräte, wie bei noble) ein Beacon/iBeacon machen kannst, sowie einen Bacon Scanner.
Dafür gibt es das node.js Modul bleacon, vom gleichen Entwickler, der auch noble veröffentlicht hat.
Ist ganz Simpel zu nutzen. Bei meinem Tests hat der BLE Scanner und das Skript für das iBeacon auch parallel auf einem Pi 3 funktioniert.
Vorab die Kurzversion für ein iBeacon Skript (Bluez (wenn es ein Linux Rechner ist) und und das node Modul "bleacon" müssen installiert sein):
!
var Bleacon = require('bleacon'); ! var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0'; var major = 0; // 0 - 65535 var minor = 0; // 0 - 65535 var measuredPower = -59; // -128 - 127 (measured RSSI at 1 meter) ! Bleacon.removeAllListeners('discover'); ! Bleacon.startAdvertising(uuid, major, minor, measuredPower); Bleacon.startScanning(); logs("#### START BEACON ####","warn"); ! Bleacon.on('discover', function(bleacon) { logs("uuid: " + bleacon.uuid + ", Major: " + bleacon.major + ", Minor: " + bleacon.minor,"info","darkorange"); }); ! /* setTimeout(function () { Bleacon.stopAdvertising(); logs("#### STOP BEACON ####","warn"); Bleacon.stopScanning(); //Bleacon.removeListener('discover'); Bleacon.removeAllListeners('discover'); }, 100000); ! */ !
Ohne das aaskommentierte Timeout am Ende sendet es dann dauerhaft, bis zum Neustart der Javascript-Instanz.
Was man sehr einfach machen kann:
- kurzes zweites Skript als Watchdog, welches den Listener ausschaltet, wenn das iBeacon Skript gestoppt wird.
Die im Skript eingestellt iBeacon Kennung findest Du auch in der iPhone App "Beccon". Dort ist es das Haustier
Wenn Du das Skript inkl. dem Timeout am Ende startest, wird das Haustier für 10 Sekunden vom iPhone mit Beecon gefunden.
Danach würde ich Geofency probieren.
Von mir wird mit der Zeit folgendes kommen:
-
BLE Scanner als Skript in der Aerotouch Version (komplett automatisch, jede Instanz, ohne Eingriffe)
-
BLE Scanner Adapter (hoffentlich g9
-
iBeacon/Beacon Skript für ein Beaconn und als Scanner
-
und dann der Adapter dafür (mache ich wohl vor den BLE Adapter, da das schneller geht)
bleacon findest Du hier: