0.0.1 • Published 7 years ago

node-alps-env v0.0.1

Weekly downloads
4
License
MIT
Repository
github
Last release
7 years ago

node-alps-env

node-alps-env は、node-alps は、アルプス電気社製「環境センサモジュール 開発キット」のセンサー子機からのデータを USB 受信モジュールを経由して取得するための node モジュールです。

環境センサモジュール 開発キットのセンサー子機経由で、以下のデータを受信することができます:

  • 温度
  • 湿度
  • 気圧
  • 照度
  • 開閉

依存関係

  • Node.js 6 +
  • serialport 5.0.0 +
    • すでに serialport モジュールがインストールされている場合は、そのバージョンを確認してください。node-omron-hvc-p2 は 5.0.0 より古いバージョンの serialport モジュールをもうサポートしていません。

インストール

$ cd ~
$ npm install serialport
$ npm install node-alps-env

目次


クイックスタート

次のサンプルコードは、USB 受信モジュールに接続し、センサー子機から送信されたデータを表示します。

const AlpsEnv = require('node-alps-env');

// USB 受信モジュールに接続
AlpsEnv.connect().then(() => {
  // センサー情報受信のイベントハンドラをセット
  AlpsEnv.onmessage = (data) => {
    // 受信データを出力
    console.log(JSON.stringify(data, null, '  '));
  };
}).catch((error) => {
  console.error(error);
});

上記コードは次のような結果を出力します。

{
  "no": 0,
  "txid": 14746066,
  "temp": 27.9,
  "humi": 60.8,
  "pres": 1000.31,
  "light": 484,
  "door": 1,
  "vbat": 2.9,
  "rssi": -79
}
{
  "no": 1,
  "txid": 14746066,
  "temp": 28.1,
  "humi": 61,
  "pres": 1000.29,
  "light": 484,
  "door": 1,
  "vbat": 2.9,
  "rssi": -79
}
{
  "no": 2,
  "txid": 14746066,
  "temp": 28.2,
  "humi": 60.9,
  "pres": 1000.29,
  "light": 484,
  "door": 1,
  "vbat": 2.9,
  "rssi": -79
}
...

AlpsEnv オブジェクト

node-alps-env を利用するためには、次の通り、node-alps-env モジュールをロードします:

const AlpsEnv = require('node-alps-env');

上記コードでは、変数 AlpsEnvAlpsEnv オブジェクトです。AlpsEnv オブジェクトは、以降のセクションで説明するとおり、いくつかのメソッドを持っています。

connect([params]) メソッド

connect() メソッドは、ホスト PC の USB ポートに接続された USB 受信モジュール探し、利用可能な状態にするための準備を行います。このメソッドは Promise オブジェクトを返します。

AlpsEnv.connect().then(() => {
  console.log('Connected.');
}).catch((error) => {
  console.error(error);
});

基本的に USB 受信モジュールがどのシリアルポートに接続されているかは知らなくても構いません。このメソッドは、適切な USB シリアルポートを自動的に探索します。さらに、ボーレートも指定する必要はありません。少なくとも最新の Linux ディストリビューション (Raspbian や Ubuntu)、Mac、Windows であれば期待通りに動作するはずです。

しかし、必ずしも USB 受信モジュールが接続された USB シリアルポートを発見できるとは限りません。その場合は、USB シリアルポートを指定することができます。

AlpsEnv.connect({path:'COM13'}).then(() => {
  console.log('Connected.');
}).catch((error) => {
  console.error(error);
});e.error(error);
});

connect() メソッドは次のプロパティを含むハッシュオブジェクトを引数に取ります:

プロパティ必須説明
path任意StringUSB 受信モジュールが接続されたシリアルポートを表すパスを指定します。(例: "COM3", "/dev/ttyACM0", "/dev/tty-usbserial1")

接続プロセスをできる限り早く終わらせたいなら、path を指定したほうが良いでしょう。なぜなら、自動スキャンモード (path を指定しない) は、ホスト PC の環境によって少し時間がかかるからです。

disconnect() メソッド

disconnect() メソッドは、USB ポートの USB 受信モジュールとのコネクションを開放 (切断) します。このメソッドは Promise オブジェクトを返します。

AlpsEnv.disconnect().then(() => {
  console.log('Disconnected.');
}).catch((error) => {
  console.error(error);
});

getSerialPortPath() メソッド

getSerialPortPath() メソッドは、USB 受信モジュールに割り当てられた USB シリアルポートを表すパスを返します。このメソッドは、他のメソッドとは異なり、Promise オブジェクトを返しませんので注意してください。

AlpsEnv.connect().then(() => {
  console.log('Serial Port Path: ' + AlpsEnv.getSerialPortPath());
}).catch((error) => {
  console.error(error);
});

上記コードが Windows で実行されたなら、次のような結果を返します:

Serial Port Path: COM13

もし上記コードが Raspbian で実行されたなら、次のような結果を返します:

Serial Port Path: /dev/ttyACM0

このメソッドは、USB 受信モジュールが connect() メソッドを使って接続されていなければ、空文字列を返します。

onmessage イベントハンドラ

AlpsEnv オブジェクトの onmessage プロパティは、USB 受信モジュールがセンサー子機からデータを受信したときに呼び出されるイベントハンドラです。

AlpsEnv.onmessage = (data) => {
  console.log(JSON.stringify(data, null, '  '));
};

イベントハンドラ関数には、受信したデータを表すハッシュオブジェクトが引き渡されます。このハッシュオブジェクトは次のプロパティがセットされています:

プロパティ説明
noNumberセンサー子機ごとの受信データのシーケンシャル番号。
txidNumberセンサー子機の ID
tempNumber温度 (°C)
humiNumber湿度 (%)
presNumber気圧 (hPa)
lightNumber照度 (lx)
doorNumber開 (open) なら 1, 閉 (close) なら 0
vbatNumberバッテリー電圧 (V)
rssiNumberRSSI (dBm)

センサー子機は、デフォルトでは 20 秒ごとにデータを送信します。しかし、ドアセンサーが反応した場合は、その場でデータを送信します。ただし、ドアセンサー反応のデータでは、temp, humi, pres, light, vbat プロパティの値は 0 になりますので、注意してください。


リリースノート

  • v0.0.1 (2017-09-10)
    • First public release

リファレンス


ライセンス

The MIT License (MIT)

Copyright (c) 2017 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.