Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

node-alps

Package Overview
Dependencies
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

node-alps

node-alps は、アルプス電気社製「センサネットワークモジュール 開発キット」に BLE でアクセスするための node モジュールです。

  • 0.1.0
  • unpublished
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
0
Maintainers
1
Weekly downloads
 
Created
Source

node-alps

node-alps は、アルプス電気社製「センサネットワークモジュール 開発キット」に BLE でアクセスするための node モジュールです。

※ 本モジュールはアルプス電気社公式の node モジュールではありません。

依存関係

インストール

$ cd ~
$ npm install noble
$ npm install node-alps

目次


クイックスタート

デバイスの発見と接続

このサンプルコードでは、デバイスの発見方法、接続方法、切断方法を示します。

// Alps コンストラクタ
const Alps = require('node-alps');
// Alps オブジェクトの生成
const alps = new Alps();
// AlpsDevice オブジェクトを格納する変数
let device = null;

// Alps オブジェクトの初期化
alps.init().then(() => {
  // デバイスの発見を開始
  return alps.discover({
    duration: 5000, // 最大 5 秒待つ
    quick: true     // 1 個でもデバイスを見つけたら終了
  });
}).then((device_list) => {
  // デバイスを発見できたかを確認
  if(device_list.length === 0) {
    throw new Error('デバイスが見つかりませんでした。');
  }
  // 発見したデバイスを表す AlpsDevice オブジェクト
  device = device_list[0];
  console.log('デバイスが見つかりました: ' + device.advertisement.localName);
  // デバイスに接続
  console.log('接続します...');
  return device.connect();
}).then(() => {
  console.log('接続しました。');
  /*--------------------------------------
  * ここからデバイスに対して操作が可能になります。
  * ----------------------------------- */
  // デバイスを切断
  console.log('切断します...');
  return device.disconnect();
}).then(() => {
  console.log('切断しました。');
  process.exit();
}).catch((error) => {
  console.error(error);
  process.exit();
});

本モジュールを使うためには、まず、Alps コンストラクタから Alps オブジェクトを生成しなければいけません。上記コードでは、変数 AlpsAlps オブジェクトに該当します。

Alps オブジェクトは、init() メソッドを呼び出すことで、利用可能になります。Alps オブジェクトに実装されているメソッドは、すべて非同期となり、Promise オブジェクトを返します。

デバイスを操作するためには、Alps オブジェクトの discover() メソッドを使って、デバイスを発見します。このメソッドは 2 つの引数を与えることができます。上記コードでは、発見するための待ちの時間を表す duration プロパティに 5000 (5 秒) を指定しています。また、quick プロパティに true を指定することで、デバイスが 1 個発見された時点で、duraion プロパティに指定した待ち時間を待たずに、処理を終了させます。

discover() メソッドは、デバイスが発見されると、resolve() 関数には、発見したデバイスを表す AlpsDevice を格納した配列が与えられます。上記コードでは、発見したデバイスの 1 つを表す AlpsDevice を、変数 device にセットしています。

この時点ではまだ該当のデバイスを操作することはできません。そのためには、connect() メソッドを使って接続しなければいけません。接続が完了したら、AlpsDevice オブジェクトに実装されたその他のメソッドが利用できるようになります。

最後に、デバイスを切断するには、disconnect() メソッドを使います。

上記サンプルコードを実行すると、次のような結果が得られます。

デバイスが見つかりました: SNM00
接続します...
接続しました。
切断します...
切断しました。

環境系センサーのモニタリング

デバイスにはさまざまなセンサーが内蔵されていますが、その計測結果をモニターする際には、2 つのモードがあります。一つは、環境系センサーのモニターモード、もう一つは、モーション系センサーのモニターモードです。ここでは、環境系センサーのモニターモードの使い方について解説します。環境系センサーは、大気圧センサー、湿度センサー、温度センサー、UV センサー、周辺光センサーが該当します。

下記サンプルコードでは、環境系センサーのモニターモードでモニタリングを開始し、その結果をコンソールに都度表示します。そして、30 秒後にモニター処理を停止して切断します。

const Alps = require('node-alps');
const alps = new Alps();
let device = null;

alps.init().then(() => {
  return alps.discover({
    duration: 5000,
    quick: true
  });
}).then((device_list) => {
  if(device_list.length === 0) {
    throw new Error('デバイスが見つかりませんでした。');
  }
  device = device_list[0];
  console.log('デバイスが見つかりました: ' + device.advertisement.localName);
  console.log('接続します...');
  return device.connect();
}).then(() => {
  console.log('接続しました。');
  // 環境系センサーのモニター開始処理
  console.log('環境系センサーのモニターの準備を開始します...');
  return device.startMonitor({
    mode    : 0, // 環境系センサーモニターモード
    interval: 1  // レポート間隔 (秒)
  });
}).then(() => {
  console.log('モニターの準備ができました。');
  console.log('モニターを開始します。');
  // イベントリスナーをセット
  device.onnotify = (data) => {
    console.log(JSON.stringify(data, null, '  '));
  };

  // 30 秒後にモニターを停止して切断
  setTimeout(() => {
    // モニター停止処理
    device.stopMonitor().then(() => {
      console.log('モニターを停止しました。')
      return device.disconnect();
    }).then(() => {
      console.log('切断しました。');
      process.exit();
    }).catch((error) => {
      console.error(error);
      process.exit();
    });
  }, 30000);

}).catch((error) => {
  console.error(error);
  process.exit();
});

connect() メソッドでデバイスに接続した後、startMonitor() メソッドを使って、該当のデバイスに対して、センサー計測情報のレポートを要求します。

startMonitor() メソッドには 2 つのパラメータを指定することができます。パラメータ mode はモニター対象となるセンサーグループを表します。環境系センサーの場合は、0 を指定します。パラメータ interval はデバイスからのレポート間隔を表し、単位は秒です。上記コードでは、1 秒間隔でレポートするよう、指定しています。

センサー計測情報のレポートの要求が完了したら、そのレポートを受信するためのコールバック関数を onnotify イベントハンドラにセットします。レポートを受信するたびに、そのコールバック関数が呼び出され、その関数には計測結果を格納したオブジェクトが引数として与えられます。

モニターを停止するためには、stopMonitor() メソッドを呼び出します。

上記コードを実装すると、次のような結果がコンソールに出力されます。

デバイスが見つかりました: SNM00
接続します...
接続しました。
環境系センサーのモニターの準備を開始します...
モニターの準備ができました。
モニターを開始します。
{
  "pressure": 997.0392919813839,
  "humidity": 52.734375,
  "temperature": 24.2,
  "uv": 0.05154639175257732,
  "ambient": 150.86206896551724,
  "ambientLed": 260.10701545778835,
  "ambientFluorescent": 342.86833855799375,
  "timeStamp": {
    "day": 7,
    "month": 5,
    "year": 2017,
    "millisecond": 0,
    "second": 6,
    "minute": 4,
    "hour": 23
  },
  "dataIndex": 31
}

...

モニターを停止しました。
切断しました。

モーション系センサーのモニタリング

デバイスにはさまざまなセンサーが内蔵されていますが、その計測結果をモニターする際には、2 つのモードがあります。一つは、環境系センサーのモニターモード、もう一つは、モーション系センサーのモニターモードです。ここでは、モーション系センサーのモニターモードの使い方について解説します。モーション系センサーは、加速度センサー、地磁気センサーが該当します。

前述の環境系センサーのモニターのコードの startMonitor() メソッドに与えるパラメータを変えるだけで、モーション系センサーをモニターすることができます。

return device.startMonitor({
  mode    : 1,   // モーション系センサーモニターモード
  interval: 100  // レポート間隔 (秒)
});

パラメータ mode はモニター対象となるセンサーグループを表します。モーション系センサーの場合は、1 を指定します。パラメータ interval はデバイスからのレポート間隔を表し、単位はミリ秒です。環境系センサーモニターモードでは、その単位は秒でしたが、モーション系センサーモニターモードではミリ秒になりますので、注意してください。上記コードでは、100 ミリ秒間隔でレポートするよう、指定しています。

上記コードを実装すると、次のような結果が連続してコンソールに出力されます。

{
  "geoMagnetic": {
    "x": -14.7,
    "y": -34.5,
    "z": 116.85
  },
  "acceleration": {
    "x": 0.107666015625,
    "y": 0.01318359375,
    "z": -1.03125
  },
  "timeStamp": {
    "millisecond": 800,
    "second": 43,
    "minute": 33,
    "hour": 20
  },
  "dataIndex": 41
}

ビーコンの設定とモニタリング

ビーコンには、"Normal Advertising"、"Sensor Beacon"、"General Beacon" という 3 つのモードがあり、本モジュールは、すべてのモードへの変更および受信をサポートしています。以下のサンプルでは、デバイスに接続後、ビーコンモードを "Sensor Beacon" モードに変更し、切断してから、ビーコンをモニターします。

const Alps = require('node-alps');
const alps = new Alps();
let device = null;

alps.init().then(() => {
  return alps.discover({
    duration: 5000,
    quick: true
  });
}).then((device_list) => {
  if(device_list.length === 0) {
    throw new Error('デバイスが見つかりませんでした。');
  }
  device = device_list[0];
  console.log('デバイスが見つかりました: ' + device.advertisement.localName);
  console.log('接続します...');
  return device.connect();
}).then(() => {
  console.log('接続しました。');
  // センサービーコンモードに変更
  console.log('ビーコンモードを設定中...');
  return device.setBeaconMode({
    mode  : 1, // センサービーコンモード
    format: 0  // 0: 環境系センサー, 1: モーション系センサー
  });
}).then((data) => {
  console.log('ビーコンモードを設定しました。');
  // 切断
  return device.disconnect();
}).then(() => {
  console.log('切断しました。');

  // ビーコンのモニターを開始
  console.log('ビーコンのモニターを開始します。');
  alps.startScan();

  // ビーコン受信用のコールバック関数をセット
  alps.onadvertisement = (ad) => {
    console.log(JSON.stringify(ad, null, '  '));
  };

  // 10 秒後にビーコンのモニターを停止
  setTimeout(() => {
    alps.stopScan();
    process.exit();
  }, 10000);

}).catch((error) => {
  console.error(error);
  process.exit();
});

ビーコンモードを変更するには、setBeaconMode() メソッドを使います。パラメータ mode に 1 をセットすると、"Sensor Beacon" モードになります。"Sensor Beacon" モードには 2 つのフォーマットがあります。一つは主に環境センサー計測値がセットされるフォーマットで、もう一つは、主にモーション系センサー計測値がセットされるフォーマットです。上記コードでは、環境系センサーの計測値がセットされるフォーマットを指定しています。

ビーコンをキャッチするためには、事前にデバイスとの接続を切断する必要があります。切断後に、startScan() メソッドを使って、ビーコンのモニターを開始することができます。ビーコンのデータを取得するためには、onnotify イベントハンドラにコールバック関数をセットします。ビーコンを受信するたびに、このコールバック関数が呼び出されます。その際に、ビーコンのデータを格納したオブジェクトが引数に与えられます。

最後に、ビーコンのモニターを停止するには、stopScan() メソッドを使います。なお、startScan() メソッドと stopScan() メソッドは、いずれも非同期処理ではないため、他のメソッドとは異なり、Promise オブジェクトを返しません。

上記コードを実行すると、次のような結果がビーコン受信の都度コンソールに表示されます。

{
  "id": "28a183e158f3",
  "uuid": "28a183e158f3",
  "address": "28:a1:83:e1:58:f3",
  "localName": "SNM00",
  "rssi": -59,
  "companyId": "0272",
  "acceleration": {
    "x": 0.0791015625,
    "y": -0.037353515625,
    "z": -1.027587890625
  },
  "pressure": 997.1705195696956,
  "humidity": 48.28125,
  "temperature": 25.06,
  "uv": 0.07731958762886597,
  "ambientLight": 86.20689655172413
}

Alps オブジェクト

node-alps を利用するためには、まず、次のように node-alps モジュールをロードします。

const Alps = require('node-alps');

上記コードから ALps コンストラクタが得られます。この Alps コンストラクタから、次のように、 Alps オブジェクトを生成します。

const alps = new Alps();

Alps コンストラクタは、オプションで引数を受け取ります。もし引数を与える場合は、以下のプロパティを持ったハッシュオブジェクトでなければいけません。

プロパティ必須説明
nobleNoble任意noble モジュールの Noble オブジェクト

node-alps モジュールは、BLE でデバイスと通信を行うために、noble モジュールを使います。もし、noble モジュールを使って他の BLE デバイスに接続するのであれば、自身で Noble オブジェクトを生成し、このモジュールに引き渡すことができます。もし Noble オブジェクトが引き渡さなければ、node-alps モジュールは、自動的に Noble オブジェクトを生成します。

次のコードは、Alps コンストラクターに Noble オブジェクトを引き渡す方法を示しています。

const noble = require('noble');
const Alps = require('node-alps');
const alps = new Alps({'noble': noble});

init() メソッド

A Alps オブジェクトは生成した時点ではまだ利用することができません。利用前に、init() メソッドを使って初期化しなければいけません。

alps.init().then(() => {
  // ここから Alps オブジェクトに実装されたメソッドを使うことができます。
}).catch((error) => {
  console.error(error);
});

init() メソッドは Promise オブジェクトを返します。Alps オブジェクトの初期化が成功したら、以降で説明する各種メソッドを呼び出すことが可能となります。

discover([params]) メソッド

discover() メソッドは、アルプス電気社センサネットワークモジュールを発見します。このメソッドは Promise オブジェクトを返します。このメソッドには次のパラメーターを格納したハッシュオブジェクトを引き渡すことができます。

プロパティ必須説明
durationNumber任意発見処理の待ち時間をミリ秒で指定します。デフォルト値は 5000 (5 秒) です。
quickBoolean任意true を指定したら、最初にデバイスを発見した時点で、発見処理を終了し、duration の値に関わらず、resolve() 関数が呼び出されます。デフォルト値は false です。
idFilterString任意ここに指定した値が、デバイスの ID (id) に前方一致するもののみを発見の対象とし、それ以外は無視します。
nameString任意デバイスのローカル名を指定します。アドバタイズパケットのローカル名と完全一致したものが発見対象となります。デフォルト値は SNM00 です。本モジュールにはローカル名を変更する API は用意されていませんが、もし別のツールを使ってローカル名を変更すると、そのデバイスを発見できません。その場合に、このパラメータに変更後のローカル名を指定することで、デバイスを発見できるようにします。

以下のサンプルでは、the durationdiscover() メソッドに引き渡して、発見処理を 10 秒にしています。

alps.init().then(() => {
  return alps.discover({
    duration: 10000
  });
}).then((device_list) => {
  // Do something...
}).catch((error) => {
  console.error(error);
});

discover() メソッドは、発見処理を終えると、発見したデバイスを表す AlpsDevice オブジェクトを格納した Array オブジェクトを resolve() 関数に引き渡します。もし、1 つ発見したらすぐに発見処理を終了して結果を得たいなら、quick プロパティに true をセットします。

alps.init().then(() => {
  return alps.discover({
    duration: 10000,
    quick: true
  });
}).then((device_list) => {
  // Do something...
}).catch((error) => {
  console.error(error);
});

scartScan([params]) メソッド

startScan() メソッドは、デバイスから送出されるアドバタイズパケットのスキャンを開始します。このメソッドは、次のプロパティを持つハッシュオブジェクトを引数に取ります。

プロパティ必須説明
idFilterString任意ここに指定した値が、デバイスの ID (id) に前方一致するもののみを発見の対象とし、それ以外は無視します。。
nameString任意デバイスのローカル名を指定します。アドバタイズパケットのローカル名と完全一致したものが発見対象となります。デフォルト値は SNM00 です。本モジュールにはローカル名を変更する API は用意されていませんが、もし別のツールを使ってローカル名を変更すると、そのデバイスを発見できません。その場合に、このパラメータに変更後のローカル名を指定することで、デバイスを発見できるようにします。

パケットを受信する都度、onadvertisement イベントハンドラにセットしたコールバック関数が呼び出されます。このコールバック関数には、AlpsAdvertisement オブジェクトが引き渡されます。

// アドバタイズパケット受信のコールバック関数をセット
alps.onadvertisement = (ad) => {
  console.log(JSON.stringify(ad, null, '  '));
};

// スキャン開始
alps.startScan();

// 60 秒後にスキャン停止
setTimeout(() => {
  alps.stopScan();
  process.exit();
}, 60000);

スキャンの停止には、stopScan() メソッドを使います。なお、startScan() および stopScan() メソッドはいずれも非同期処理ではないため、他のメソッドとは異なり、Promise オブジェクトは返しません。

デバイスの電源を入れた直後で何も設定を変更していなければ、次のようなビーコンデータが連続して得られます。

{
  "id": "28a183e158f3",
  "uuid": "28a183e158f3",
  "address": "28:a1:83:e1:58:f3",
  "localName": "SNM00",
  "rssi": -59
}

ビーコンのデータは、ビーコンモードによって異なります。詳細は setBeaconMode() メソッド、および、AlpsAdvertisement オブジェクトを参照してください。

stopScan() メソッド

stopScan() メソッドは、デバイスから送出されるアドバタイズパケットのスキャンを停止します。詳細は startScan() メソッドを参照してください。

onadvertisement イベントハンドラ

onadvertisement プロパティにコールバック関数をセットすると、アドバタイズパケットのスキャンがアクティブな間 (startScan() メソッドが呼び出されてから stopScan() メソッドが呼び出されるまで)、アドバタイズパケットを受信する都度、そのコールバック関数が呼び出されます。

詳細は startScan() メソッドを参照してください。


AlpsDevice オブジェクト

AlpsDevice オブジェクトは、Alpsdiscover() メソッドを呼び出すことによって発見されたデバイスを表します。

プロパティ

AlpsDevice オブジェクトには、以下のプロパティが実装されています。

プロパティ説明
advertisementAlpsAdvertisementこのオブジェクトは、デバイスが発見されたときに受信したアドバタイズパケットを表します。詳細は、 AlpsAdvertisement オブジェクトを参照してください。
connectedBooleanデバイスが接続しているとき、この値は true になり、そうでなければ、false になります。
ondisconnectFunctionこのプロパティにセットされた関数は、デバイスが切断されたときに呼び出されます。詳細は、ondisconnect イベントハンドラを参照してください。
onnotifyFunctionこのプロパティにセットされた関数は、センサー情報を受信した都度に呼び出されます。詳細は、onnotify イベントハンドラを参照してください。

ondisconnect イベントハンドラ

ondisconnect は、デバイスが切断されたときに呼び出されるイベントハンドラです。

device.ondisconnect = (reason) => {
  console.log('切断されました。');
  console.dir(reason);
};

デバイスとの接続が切断されると、次のような結果を表示します。

Disconnected.
{ wasClean: false }

ondisconnect にセットされたコールバック関数には、切断理由を表すプロパティ wasClean を含んだオブジェクトが引き渡されます。wasClean プロパティの値が ture の場合は、disconnect() メソッドによって切断されたことを表します。もし false の場合は、意図せぬ切断を表します。

環境によっては、ondisconnect は意図せぬ切断の場合のみにしか呼び出されませんので注意してください。つまり、このコールバック関数が呼び出されたとき、wasClean は常に false であり、それは意図せぬ切断を意味していることになります。したがって、disconnect() メソッドの呼び出しによる切断のトリガーとして ondisconnect イベントハンドラを使うことは推奨されません。また、実際に ondisconnect イベントハンドラを使う際には、念のために、wasClean の値が false であることを確認することを推奨します。

onnotify イベントハンドラ

onnotify は、startMonitor() メソッドによってセンサー情報のモニターが開始された後、デバイスから送られてくるセンサー情報の通知を受け取るためのイベントハンドラです。詳細は、startMonitor() メソッドを参照してください。

connect() メソッド

connect() メソッドは、デバイスとのコネクションを確立します (ペアリング)。このメソッドは Promise オブジェクトを返します。

以下のサンプルコードは、デバイスとのコネクションを確立してから、最後にコネクションを切断します。

device.connect().then(() => {
  console.log('接続しました。');
  /*--------------------------------------
  * ここからデバイスに対して操作が可能になります。
  * ----------------------------------- */
  // デバイスを切断
  return device.disconnect();
}).then(() => {
  console.log('切断しました。');
  process.exit();
}).catch((error) => {
  console.error(error);
  process.exit();
});

disconnect() メソッド

disconnect() メソッドは、デバイスとの接続を切断します。このメソッドは Promise オブジェクトを返します。詳細は connect() メソッドを参照してください。

なお、デバイスに対する操作が終わったら、必ず disconnect() メソッドを使ってコネクションを切断してください。もしコネクションを切断せずにスクリプトが終了してしまうと、しばらくの間、そのデバイスに接続できなくなる可能性がありますので注意してください。もし接続に失敗するようであれば、デバイスの電源を OFF にしてから、再度、ON にしてみてください。

setBeaconMode(params) メソッド

setBeaconMode() メソッドは、デバイスが発するビーコン (アドバタイズパケット) のモードを切り替えます。以下のサンプルコードは、ビーコンモードを Sensor Beacon モードに切り替えます。

このメソッドの具体的なコードの書き方は、クイックスタートの「ビーコンの設定とモニタリング」を参照してください。

このメソッドには、設定パラメータを持ったハッシュオブジェクトを引数に与えますが、切り替えたいモードによって、以下の通り、パラメータが異なります。

各モードでデバイスから送信されるビーコンデータの詳細は、AlpsAdvertisement オブジェクトを参照してください。

Normal Advertising モード

Normal Advertising モードは、アドバタイズパケットに Manufacturer Specific Data を持たないモードです。これは、デバイスの電源を入れた際のデフォルトのモードです。

プロパティ必須説明
modeNumber必須0 固定
intervalNumber任意アドバタイズパケットの送出間隔をミリ秒で指定します。指定可能な値の範囲は 30 ~ 10000 です。指定がなければ、100 (ミリ秒) がセットされます。
Sensor Beacon モード

Sensor Beacon モードは、ビーコンデータにデバイスのセンサーの計測値を含んだモードです。

プロパティ必須説明
modeNumber必須1 固定
intervalNumber任意アドバタイズパケットの送出間隔をミリ秒で指定します。指定可能な値の範囲は 30 ~ 10000 です。指定がなければ、100 (ミリ秒) がセットされます。
formatNumber任意パケットのフォーマットを指定します。0 は環境系センサー情報フォーマット、1 はモーション系センサー情報フォーマットを意味します。
accelerationRangeNumber任意加速度センサーの計測範囲を指定します。指定可能な値は 2, 4, 8, 12, 16 です。たとえば、2 を指定すると、±2G の範囲で計測します。指定がなければ 2 がセットされます。
General Beacon モード

General Beacon モードは iBeacon 相当のビーコンを発するモードです。

プロパティ必須説明
modeNumber必須2 固定
uuidString任意UUID を指定します。指定がなければ 00000000-0000-0000-0000000000000000 がセットされます。
majorNumber任意Major 番号を指定します。指定可能な値は 0 ~ 65535 です。指定がなければ 0 がセットされます。
manorNumber任意Minor 番号を指定します。指定可能な値は 0 ~ 65535 です。指定がなければ 0 がセットされます。

startMonitor([params]) メソッド

startMonitor() メソッドは、デバイスのセンサー情報のモニターを開始します。このメソッドは Promise オブジェクトを返します。

センサー情報のモニターは、2 つのモードがあります。一つは環境系センサーモードです。このモードでは、大気圧センサー、湿度センサー、温度センサー、UV センサー、照度センサーの計測値をモニターします。もひとつのモードはモーション系センサーモードです。このモードでは、地磁気センサーと加速度センサーの計測値をモニターします。

これらのモードでは、計測するセンサーの種類が違うことに加え、計測間隔も異なります。環境系センサーモードでは秒単位で間隔を指定するのに対し、モーション系ではミリ秒単位で間隔を指定します。

このメソッドには、パラメータ値を持ったハッシュオブジェクトを引数に与えますが、モードによって、このメソッドに与えるパラメーターが異なります。また、デバイスからのセンサー計測結果通知を受信すると、onnotify イベントハンドラにセットされたコールバック関数が非同期に呼び出され、計測結果のデータが引き渡されますが、そのデータもモードによって異なります。

環境系センサーモードのパラメータ
プロパティ必須説明
modeNumber必須0 固定
intervalNumber任意計測結果の送出間隔を秒で指定します。指定可能な値の範囲は 1 ~ 65535 です。指定がなければ、1 (秒) がセットされます。
device.startMonitor({
  mode    : 0, // 環境系センサーモード
  interval: 1  // 送信間隔 (秒)
}).then(() => {
  device.onnotify = (data) => {
    console.log(JSON.stringify(data, null, '  '));
  };
}).catch((error) => {
  console.error(error);
});

受信データは、以下の通りです。

プロパティ説明
pressureNumber大気圧 (hPa)
humidityNumber湿度 (%RH)
temperatureNumber温度 (degC)
uvNumberUV (mW/cm^2)
ambientNumber太陽光またはハロゲンランプを光源とした場合の照度 (Lx)
ambientLedNumberLED を光源とした場合の照度 (Lx)
ambientFluorescentNumber蛍光灯を光源とした場合の照度 (Lx)
timeStampObject計測時間
+- dayNumber
+- monthNumber
+- yearNumber西暦
+- millisecondNumberミリ秒
+- secondNumber
+- minuteNumber
+- hourNumber
dataIndexNumberセンサ計測シーケンス番号
{
  "pressure": 996.4881361104754,
  "humidity": 51.65625,
  "temperature": 24.04,
  "uv": 0.02577319587628866,
  "ambient": 129.3103448275862,
  "ambientLed": 222.94887039239,
  "ambientFluorescent": 293.8871473354232,
  "timeStamp": {
    "day": 8,
    "month": 5,
    "year": 2017,
    "millisecond": 0,
    "second": 10,
    "minute": 4,
    "hour": 1
  },
  "dataIndex": 29
}
モーション系センサーモードのパラメータ
プロパティ必須説明
modeNumber必須1 固定
intervalNumber任意計測結果の送出間隔をミリ秒で指定します。指定可能な値の範囲は 10 ~ 999 です。指定がなければ、200 (ミリ秒) がセットされます。
accelerationRangeNumber任意加速度センサーの計測範囲を指定します。指定可能な値は 2, 4, 8, 12, 16 です。たとえば、2 を指定すると、±2G の範囲で計測します。指定がなければ 2 がセットされます。

パラメータ interval の単位がモードによって違う点に注意してください。環境系センサーモードでは単位が秒ですが、モーション系センサーモードでは単位はミリ秒となります。

device.startMonitor({
  mode             : 1,   // モーション系センサーモード
  interval         : 200, // 送信間隔 (ミリ秒)
  accelerationRange: 2    // 加速度センサー計測範囲 (G)
}).then(() => {
  device.onnotify = (data) => {
    console.log(JSON.stringify(data, null, '  '));
  };
}).catch((error) => {
  console.error(error);
});

受信データは、以下の通りです。

プロパティ説明
geoMagneticObject地磁気センサーの情報
+- xNumberx 軸地磁気 (uT)
+- yNumbery 軸地磁気 (uT)
+- zNumberz 軸地磁気 (uT)
accelerationObject加速度センサーの情報
+- xNumberx 軸加速度 (G)
+- yNumbery 軸加速度 (G)
+- zNumberz 軸加速度 (G)
timeStampObject計測時間
+- millisecondNumberミリ秒
+- secondNumber
+- minuteNumber
+- hourNumber
dataIndexNumberセンサ計測シーケンス番号
{
  "geoMagnetic": {
    "x": -9,
    "y": -31.799999999999997,
    "z": 107.85
  },
  "acceleration": {
    "x": 0.10399882818221766,
    "y": -0.014647722279185586,
    "z": -1.022411015087154
  },
  "timeStamp": {
    "millisecond": 600,
    "second": 11,
    "minute": 58,
    "hour": 0
  },
  "dataIndex": 147
}

stopMonitor() メソッド

stopMonitor() メソッドは、startMonitor() メソッドによって開始されたセンサー情報モニターを停止します。このメソッドは Promise オブジェクトを返します。

device.stopMonitor().then(() => {
  console.log('モニターを停止しました。');
}).catch((error) => {
  console.error(error);
});

getStatus() メソッド

getStatus() メソッドは、バッテリー電圧、エラー情報などのデバイスの状態を取得します。このメソッドは Promise オブジェクトを返します。

device.getStatus().then((data) => {
  console.log(JSON.stringify(data, null, '  '));
}).catch((error) => {
  console.error(error);
});

上記コードは、以下のような結果を出力します:

{
  "error": {
    "pressure": false,
    "uv": false,
    "humidity": false,
    "magnetic": false,
    "acceleration": false
  },
  "rssi": -35,
  "battery": 3139,
  "memFull": false,
  "ack": 1
}

受信データは、以下の通りです。

プロパティ説明
errorObject
+- pressureBoolean気圧異常 (異常なら true、正常なら false がセットされます)
+- uvBooleanUV 異常 (異常なら true、正常なら false がセットされます)
+- humidityBoolean湿度異常 (異常なら true、正常なら false がセットされます)
+- magneticBoolean地磁気異常 (異常なら true、正常なら false がセットされます)
+- accelerationBoolean加速度異常 (異常なら true、正常なら false がセットされます)
rssiNumberモジュール側の受信 RSSI (単位: dBm)
batteryNumberバッテリ電圧 (単位: mV)
memFullBoolean内部メモリフルフラグ (フルなら true、そうでなければ false がセットされます)
ackNumberコマンドが正常に受け付けられたなら 1 (ACK)、コマンドの受付が許可されなかったら 2 (NACK)、それ以外(自動発行) なら 0 がセットされます。

AlpsAdvertisement オブジェクト

AlpsAdvertisement オブジェクトは、デバイスが発するアドバタイズパケットのデータを表します。アドバタイズパケットのデータは、ビーコンモードによって異なります。

Normal Advertising モード

プロパティ説明
idStringデバイスの ID
uuidStringデバイスの UUID
addressStringデバイスのアドレス
localNameStringデバイスのローカル名
rssiNumberRSSI
{
  "id": "28a183e158f3",
  "uuid": "28a183e158f3",
  "address": "28:a1:83:e1:58:f3",
  "localName": "SNM00",
  "rssi": -59
}

Sensor Beacon モード

Sensor Beacon モードには 2 つのフォーマットがあります。ひとつは、主に環境系センサーの情報を格納したフォーマット、もうひとつは、主にモーション系センサーの情報を格納したフォーマットです。

環境系センサーフォーマット
プロパティ説明
idStringデバイスの ID
uuidStringデバイスの UUID
addressStringデバイスのアドレス
localNameStringデバイスのローカル名
rssiNumberRSSI
companyIdStringBluetooth SIG に登録された企業 ID (0272 固定)
accelerationObject加速度センサーの情報
+- xNumberx 軸加速度 (G)
+- yNumbery 軸加速度 (G)
+- zNumberz 軸加速度 (G)
pressureNumber大気圧 (hPa)
humidityNumber湿度 (%RH)
temperatureNumber温度 (degC)
uvNumberUV (mW/cm^2)
ambientNumber太陽光またはハロゲンランプを光源とした場合の照度 (Lx)
ambientLedNumberLED を光源とした場合の照度 (Lx)
ambientFluorescentNumber蛍光灯を光源とした場合の照度 (Lx)
{
  "id": "28a183e158f3",
  "uuid": "28a183e158f3",
  "address": "28:a1:83:e1:58:f3",
  "localName": "SNM00",
  "rssi": -59,
  "companyId": "0272",
  "acceleration": {
    "x": 0.09228515625,
    "y": -0.002197265625,
    "z": -1.02685546875
  },
  "pressure": 997.0130464637217,
  "humidity": 51.375,
  "temperature": 24.2,
  "uv": 0,
  "ambient": 150.86206896551724,
  "ambientLed": 260.10701545778835,
  "ambientFluorescent": 342.86833855799375
}
モーション系センサーフォーマット
プロパティ説明
idStringデバイスの ID
uuidStringデバイスの UUID
addressStringデバイスのアドレス
localNameStringデバイスのローカル名
rssiNumberRSSI
companyIdStringBluetooth SIG に登録された企業 ID (0272 固定)
accelerationObject加速度センサーの情報
+- xNumberx 軸加速度 (G)
+- yNumbery 軸加速度 (G)
+- zNumberz 軸加速度 (G)
geoMagneticObject地磁気センサーの情報
+- xNumberx 軸地磁気 (uT)
+- yNumbery 軸地磁気 (uT)
+- zNumberz 軸地磁気 (uT)
pressureNumber大気圧 (hPa)
{
  "id": "28a183e158f3",
  "uuid": "28a183e158f3",
  "address": "28:a1:83:e1:58:f3",
  "localName": "SNM00",
  "rssi": -59,
  "companyId": "0272",
  "acceleration": {
    "x": 0.10546875,
    "y": -0.01611328125,
    "z": -1.027587890625
  },
  "geoMagnetic": {
    "x": -8.85,
    "y": -30.45,
    "z": 107.7
  },
  "pressure": 997.0130464637217
}

General Beacon モード

プロパティ説明
idStringデバイスの ID
uuidStringiBeacon の UUID
addressStringデバイスのアドレス
localNameStringデバイスのローカル名
rssiNumberRSSI
companyIdStringBluetooth SIG に登録された企業 ID (0272 固定)
majorNumberiBeacon の Major
minorNumberiBeacon の Minor
{
  "id": "28a183e158f3",
  "uuid": "00000000-0000-0000-0000000000000000",
  "address": "28:a1:83:e1:58:f3",
  "localName": "SNM00",
  "rssi": -59,
  "companyId": "0272",
  "major": 0,
  "minor": 0
}

リリースノート

  • v0.1.0 (2018-05-17)

    • getStatus() メソッドを新たにサポートしました。
  • v0.0.1 (2017-05-08)

    • First public release

リファレンス


ライセンス

The MIT License (MIT)

Copyright (c) 2017-2018 Futomi Hatano

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Keywords

FAQs

Package last updated on 17 May 2018

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc