MACをiBeaconデバイスに変更



%cat ibeacon.js ruby:[2.1.3]
console.log(process.version)
iBeacon = require('bleacon');
var uuid = '48534442-4C45-4144-80C0-1800FFFFFFFF';
var major = 3;
var minor = 3;
var measuredPower = -59;

iBeacon.startAdvertising(uuid,major,minor,measuredPower);

iPhoneあるいはandroidに"beacon入門"というアプリをダンロードして、
uuid,major,minorを上記のように設定しておく。

%node ibeacon.js ruby:[2.1.3]
module.js:349
Module._extensions[extension](this, filename);
^
Error: dlopen(/Users/outan/Dropbox/web/node.jstest/beacon-test/node_modules/bleacon/node_modules/noble/node_modules/xpc-connection/build/Release/binding.node, 1): Symbol not found: ___CFConstantStringClassReference
Referenced from: /Users/outan/Dropbox/web/node.jstest/beacon-test/node_modules/bleacon/node_modules/noble/node_modules/xpc-connection/build/Release/binding.node
Expected in: dynamic lookup

at Error (native)
at Module.load (module.js:349:32)
at Function.Module._load (module.js:305:12)
at Module.require (module.js:357:17)
at require (module.js:373:17)
at Object. (/Users/outan/Dropbox/web/node.jstest/beacon-test/node_modules/bleacon/node_modules/noble/node_modules/xpc-connection/index.js:3:15)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:349:32)
at Function.Module._load (module.js:305:12)

node 0.11.11だとnpm install bleacon でbignumのコンパイルに失敗する。nodeのバージョンが0.10.28だと成功しました
情報ありがとうございます。0.11以降だとネイティブ拡張の仕様で互換性のない変更が入ってるらしいので、bignumがそれに追従していないのだと思います。


%nvm ls ruby:[2.1.3]
v0.10.31
-> v0.11.13
system
default -> v0.11.13
node -> stable (-> v0.10.31) (default)
stable -> 0.10 (-> v0.10.31) (default)
unstable -> 0.11 (-> v0.11.13) (default)
iojs -> N/A (default)

%nvm use v0.10.31 ruby:[2.1.3]
Now using node v0.10.31 (npm v1.4.23)
outan@outan ~/Dropbox/web/node.jstest/beacon-test [develop]¹
%nvm ls ruby:[2.1.3]
-> v0.10.31
v0.11.13
system
default -> v0.11.13
node -> stable (-> v0.10.31) (default)
stable -> 0.10 (-> v0.10.31) (default)
unstable -> 0.11 (-> v0.11.13) (default)
iojs -> N/A (default)

が、新しいターミナルを開いたら、上記の情報が失われたようです。
デフォルトのバージョンを指定する必要がありそうです。
%nvm ls ruby:[2.1.3]
v0.10.31
-> v0.11.13
system

%nvm alias default v0.10.31 ruby:[2.1.3]
default -> v0.10.31

%cat ~/.nvm/alias/default ruby:[2.1.3]
v0.10.31



%node ibeacon.js ruby:[2.1.3]
dyld: lazy symbol binding failed: Symbol not found: _node_module_register
Referenced from: /Users/outan/Dropbox/web/node.jstest/beacon-test/node_modules/bleacon/node_modules/noble/node_modules/xpc-connection/build/Release/binding.node
Expected in: dynamic lookup

dyld: Symbol not found: _node_module_register
Referenced from: /Users/outan/Dropbox/web/node.jstest/beacon-test/node_modules/bleacon/node_modules/noble/node_modules/xpc-connection/build/Release/binding.node
Expected in: dynamic lookup

%lsal node_modules/ ruby:[2.1.3]
130696164 drwxr-xr-x@ 14 outan staff - 476B 6 8 23:03:34 2016 bleacon/
130697224 drwxr-xr-x@ 12 outan staff - 408B 6 8 23:04:42 2016 eddystone-beacon/

nodeのバージョン変更後、該当ディレクトリ配下のnode_modulesを作りなおす必要があるようです。


%rm -Rf node_modules ruby:[2.1.3]

outan@outan ~/Dropbox/web/node.jstest/beacon-test [develop]¹
%npm install -g bleacon ruby:[2.1.3]

> bignum@0.11.0 install /Users/outan/.nvm/v0.10.31/lib/node_modules/bleacon/node_modules/bignum
> node-gyp configure build

CXX(target) Release/obj.target/bignum/bignum.o
SOLINK_MODULE(target) Release/bignum.node
SOLINK_MODULE(target) Release/bignum.node: Finished
npm WARN optional dep failed, continuing bluetooth-hci-socket@0.3.4
npm WARN optional dep failed, continuing bluetooth-hci-socket@0.4.4

> xpc-connection@0.1.4 install /Users/outan/.nvm/v0.10.31/lib/node_modules/bleacon/node_modules/bleno/node_modules/xpc-connection
> node-gyp rebuild

CXX(target) Release/obj.target/binding/src/XpcConnection.o
SOLINK_MODULE(target) Release/binding.node
SOLINK_MODULE(target) Release/binding.node: Finished

> xpc-connection@0.1.4 install /Users/outan/.nvm/v0.10.31/lib/node_modules/bleacon/node_modules/noble/node_modules/xpc-connection
> node-gyp rebuild

CXX(target) Release/obj.target/binding/src/XpcConnection.o
SOLINK_MODULE(target) Release/binding.node
SOLINK_MODULE(target) Release/binding.node: Finished
bleacon@0.4.0 /Users/outan/.nvm/v0.10.31/lib/node_modules/bleacon
├── noble-device@1.4.0
├── debug@2.2.0 (ms@0.7.1)
├── bignum@0.11.0 (nan@2.4.0)
├── bleno@0.2.1 (bplist-parser@0.0.6, xpc-connection@0.1.4)
└── noble@1.6.0 (bplist-parser@0.0.6, xpc-connection@0.1.4)

globalにインストールしたけど、なぜか識別できないようです。
%node ibeacon.js ruby:[2.1.3]
module.js:340
throw err;
^
Error: Cannot find module 'bleacon'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object. (/Users/outan/Dropbox/web/node.jstest/beacon-test/ibeacon.js:1:73)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)


%npm install bleacon ruby:[2.1.3]

> bignum@0.11.0 install /Users/outan/Dropbox/web/node.jstest/node_modules/bleacon/node_modules/bignum
> node-gyp configure build

CXX(target) Release/obj.target/bignum/bignum.o
SOLINK_MODULE(target) Release/bignum.node
SOLINK_MODULE(target) Release/bignum.node: Finished
npm WARN optional dep failed, continuing bluetooth-hci-socket@0.3.4

> xpc-connection@0.1.4 install /Users/outan/Dropbox/web/node.jstest/node_modules/bleacon/node_modules/bleno/node_modules/xpc-connection
> node-gyp rebuild

CXX(target) Release/obj.target/binding/src/XpcConnection.o
SOLINK_MODULE(target) Release/binding.node
SOLINK_MODULE(target) Release/binding.node: Finished
bleacon@0.4.0 ../node_modules/bleacon
├── noble-device@1.4.0
├── debug@2.2.0 (ms@0.7.1)
├── bignum@0.11.0 (nan@2.4.0)
└── bleno@0.2.1 (bplist-parser@0.0.6, xpc-connection@0.1.4)

%node ibeacon.js ruby:[2.1.3]
v0.10.31

module.js:340
throw err;
^
Error: Cannot find module 'xpc-connection'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object. (/Users/outan/Dropbox/web/node.jstest/node_modules/noble/lib/mac/yosemite.js:7:21)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)

%npm install xpc-connection ruby:[2.1.3]
/
> xpc-connection@0.1.4 install /Users/outan/Dropbox/web/node.jstest/node_modules/xpc-connection
> node-gyp rebuild

CXX(target) Release/obj.target/binding/src/XpcConnection.o
SOLINK_MODULE(target) Release/binding.node
SOLINK_MODULE(target) Release/binding.node: Finished
xpc-connection@0.1.4 ../node_modules/xpc-connection
└── nan@2.4.0

%node ibeacon.js ruby:[2.1.3]
v0.10.31

android側のアプリでは以下のように検出できました。
iBeaconはiphoneというイメージでしたが、androidも問題ない?


iPhone -> Node.js

次にiPhoneで送信したiBeaconをNode.jsで受信する。Node.js側で受信するスクリプトはこんな感じ。

reciever.js
var Bleacon = require('bleacon');
Bleacon.startScanning();

Bleacon.on('discover', function(bleacon) {
console.dir(bleacon);
});


androidでiBeacon信号を送ろうとして、"beacon simulator"というアプリをダウンロードしたが、
使えないようなので、iphoneで"iBeacon Emitter"をダウンロードした。
が、デフォルト値は変更できないようです。

%node reciever.js ruby:[2.1.3]
{ uuid: 'f7826da64fa24e988024bc5b71e0893a',
major: 44066,
minor: 999,
measuredPower: -57,
rssi: -46,
accuracy: 0.487085755132592,
proximity: 'immediate' }
{ uuid: 'f7826da64fa24e988024bc5b71e0893a',
major: 44066,
minor: 999,
measuredPower: -57,
rssi: -46,
accuracy: 0.487085755132592,
proximity: 'immediate' }

“beacon manager"というアプリを利用(UUIDやmajor,minorなどは変更可能)
%node reciever.js ruby:[2.1.3]
{ uuid: '43e5e431e9a64c34a224166ad455a078',
major: 0,
minor: 0,
measuredPower: -59,
rssi: -42,
accuracy: 0.34164432192825195,
proximity: 'immediate' }
{ uuid: '43e5e431e9a64c34a224166ad455a078',
major: 0,
minor: 0,
measuredPower: -59,
rssi: -42,
accuracy: 0.34164432192825195,
proximity: 'immediate' }


bleachライブラリの中身分析:
"dependencies": {

"bignum": "^0.11.0",

"bleno": "^0.2.0",

"debug": "^2.2.0",

"noble": "^1.1.0",

"noble-device": "^1.1.0"

},


nobleがCentralとなるためのライブラリ、blenoがPeripherals となるためのライブラリのようです。