Arduinoで作るワイヤレス土壌湿度監視システム:Fastifyサーバー編

前回、Arduinoで作るワイヤレス土壌湿度監視システム:センサー編でArduino Unoを使って電池で動く土壌湿度センサーを作成したので、そのセンサー情報を受け取るサーバーを作成したいと思います。

方針

Raspberry Pi上にNode.jsでAPIサーバーを作成します。
フレームワークはFastifyを使用します。
手順は以下の通りです。

  1. FastifyでAPIサーバーのベースを作成する
  2. 土壌湿度センサーの情報を受け取るAPIを作成する
  3. 土壌湿度センサーから受け取った情報を処理するAPIを作成する
  4. 土壌湿度センサーから受け取った情報を処理するAPIをcronで定期的に呼び出す。
  5. 作成した処理をPM2でデーモン化する

1. FastifyでAPIサーバーのベースを作成する

ベースの作成は下記記事にまとめました。
これをもとにTypeScriptでAPIサーバーを作成します。

2.土壌湿度センサーの情報を受け取るAPIを作成する

下記機能を実装します。

  • 土壌湿度センサーからHTTP POSTで受けとったデータをローカル環境に保存する。
  • 受け取った値が前回より一定値以上増えていた場合は、水やりが発生したと判断し、メールを送信する。

詳細なプログラムは長くなるので割愛。

3. 土壌湿度センサーから受け取った情報を処理するAPIを作成する

下記機能を実装します。

  • ローカル環境に保存した土壌湿度センサーの値と現在のステータス情報を読み込み、以下の処理を実行する。
    • 土壌湿度センサーの値が一定値以下の場合、ワーニング、もしくはアラートメールを送信する。
    • 土壌湿度センサーの値を元にローカル環境の現在のステータス情報を更新する。
    • Firebaseに土壌湿度センサーの値と現在のステータス情報を保存する。

詳細なプログラムは長くなるので割愛。
土壌湿度センサーの値とステータス情報はそれぞれjson形式で保持しようと思います。

// 土壌湿度センサーの値
{
    "moisture": 900,
    "moisturePct": 95,
    "updateDate": "2017/11/18 23:25:53",
    "lastWateredDate": "2017/11/17 00:56:58"
}

// 現在のステータス情報
{
    "moisturePct": 95,
    "status": 10,
    "updateDate": "2017/11/18 13:55:42",
    "lastWateredDate": "2017/11/17 00:56:58"
}

4. 土壌湿度センサーから受け取った情報を処理するAPIをcronで定期的に呼び出す。

cronを使って、毎日朝8時に「土壌湿度センサーから受け取った情報を処理するAPI」を呼び出すようにします。

00 08 * * * curl localhost:3000/data-processing?date=`date +%Y/%m/%d`

5. 作成した処理をPM2でデーモン化する

PM2というNode.jsスクリプトをデーモン化するツールを使い、作成した処理をデーモン化します。
これにより、Raspberry Piの電源を入れると同時にAPIサーバーが起動するようになります。

npm install pm2 -g // インストール
pm2 start dist/server.js --name="hoge-server"  // 任意の名前を付けて起動
pm2 startup // サーバー起動時に自動的にpm2を自動開始する

以上で完成です。
次回はFirebaseに保存されたデータを元に、観葉植物の状態を確認できるアプリを作成します。


<参考>
node.js node.jsスクリプトをpm2でデーモン化する

The following two tabs change content below.
Akihiro Tanaka

Akihiro Tanaka

Engineer/UI Designer
UI設計を得意とするエンジニア。 現在はDApps開発しています。
好きな言語はTypeScript、好きなフレームワークはIonic、Angular。 趣味はハーレー、キャンプ、アンティーク。
WEB: http://tanakas.org/