angularjsibeaconestimoteweb-bluetooth

Web bluetooth: How do I detect iBeacon?


I have been fiddling with the new web bluetooth functionality. I have one of these estimote beacons: http://developer.estimote.com/

I know the uuid for my beacon. Here is the code I am using(it is an angular app, hence $scope, $window):

$scope.runBT = runBT;
    function runBT() {
        let mobile = getMobileOperatingSystem();
        if (mobile === 'Android' || mobile === 'iOS') {
            $window.navigator.bluetooth.requestDevice({
                acceptAllDevices: true,
                optionalServices: ['b9407f30-f5f8-466e-aff9-25556b57fe6d']
            })
                .then(device => {
                    console.log('FOUND DEVICE: ', device);
                    device.watchAdvertisements();
                    device.addEventListener('advertisementreceived', interpretIBeacon);
                })
                .catch(error => { console.log(error); });
        }
    }

    function interpretIBeacon(event) {
        var rssi = event.rssi;
        var appleData = event.manufacturerData.get(0x004C);
        if (appleData.byteLength != 23 ||
            appleData.getUint16(0, false) !== 0x0215) {
            console.log({isBeacon: false});
        }
        var uuidArray = new Uint8Array(appleData.buffer, 2, 16);
        var major = appleData.getUint16(18, false);
        var minor = appleData.getUint16(20, false);
        var txPowerAt1m = -appleData.getInt8(22);
        console.log({
            isBeacon: true,
            uuidArray,
            major,
            minor,
            pathLossVs1m: txPowerAt1m - rssi});
    }

Solution

  • Sadly the watchAdvertisements method is not implemented yet. You may want to check the Implementation Status page at https://github.com/WebBluetoothCG/web-bluetooth/blob/master/implementation-status.md to know when this method will be supported in Chrome and other browsers.