forked from switchdoclabs/iBeacon-Scanner-
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathmain.js
77 lines (65 loc) · 1.45 KB
/
main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
var net = require('net');
//var player = require('play-sound');
var lastTimePlayed = 0;
var beacons = {};
var playSoundTimeout = null;
var pUuid = '53657272-616E-6574-6761-000000000000';
var server = net.createServer(function(stream) {
stream.on('data', function(c) {
console.log('data:', c.toString());
var beacs = c.toString().split(',')
if(beacs.length < 5) {
console.log('Not a proper input string');
return;
}
// exit if not proper iBeacon
//if(beacs[0].indexOf(pUuid) < 0) return;
try {
beacs[5] = beacs[5].replace(/ /g,'-');
beacs[6] = getDistance(beacs[4],beacs[3]);
beacons[beacs[0] + "_" + beacs[5]] = beacs;
} catch(e) {
console.log('Error during data');
console.log(e);
}
/*if(playSoundTimeout === null) {
playSound();
}*/
});
stream.on('end', function() {
startListening();
//server.close();
});
});
function startListening() {
server.listen('/tmp/ibeacon.sock');
}
function playSound() {
playSoundTimeout = null;
var play = false;
for(var key in beacons) {
console.log(beacons[key]);
if(beacons[key][6] < 1) {
play = true;
}
}
if(play) {
player.play('test.mp3');
playSoundTimeout = setTimeout(playSound,30000);
}
}
function getDistance(rssi,txpower) {
if(rssi === 0) {
return -1.0;
}
if(txpower === 0) {
return -1.0;
}
var ratio = rssi / txpower;
if(ratio < 1) {
return Math.pow(ratio,10);
} else {
return 0.89976*Math.pow(ratio,7.7095) + 0.111;
}
}
startListening();