2020年11月13日金曜日

Nature RemoとGASを使って温度・湿度をリアルタイムで記録する。

Nature RemoとGASを使って原木椎茸を栽培しているビニールハウス内の温度・湿度をリアルタイムで記録できるようにしてみました。

これができますと、「【計画編】原木椎茸の収穫のタイミングで通知してくれるものを作ってみる。」で書いたような「積算温度から収穫のタイミングを通知してくれるもの」が作れます。スマート化へ向けた第一歩です。



Nature Remoというのはスマホから家電などを操作するためのスマートリモコンなのですが、APIが公開(https://developer.nature.global/)されていてセンサーから得られるデータをリアルタイムに取得することが可能です。(今回はリモコンとしての機能は使いません。)

モデルはmini/2/3とありますが、2もしくは3であれば温度・湿度(と照明・人感)のセンサーがついています。miniですと温度のみです。後々分析の幅も広がりそうなので、湿度も測定できる3を購入しました。

-----
追記(2021-1-14)

購入時に気がついていなかったのですが、湿度の測定範囲が30〜70%なので、それ以上のレンジでの測定が必要となる場合にはNature Remoでは難しそうです。トリガー目的であればいいですが、分析目的であれば別の方法を考えた方が良さそうです。温度のみであればminiで大丈夫です。
-----

このデータをGAS(Google Apps Script)を使ってスプレッドシートに書き込みます。

データの取得にはNature Remoの設置場所(今回はビニールハウス内)にWi-Fi環境が必要となるため、最低限の容量で使用できるHIS Mobileのビタッ!プランを契約、合わせて富士ソフトのモバイルWi-Fiルーター「+F FS030W」を購入しました。


これで必要な道具はそろいました。

ちなみにここまでにかかった費用は、

・Nature Remo 3 - 9,980円
・HIS Mobile 事務手数料 - 3,300円
・+F FS030W - 10,300円

合計 23,580円(税込)です。

小規模農家でもこのくらいの初期費用であれば、実験として軽い気持ちでスマート農業に取り組めますね。


以下、設定方法です。


① Nature Remoの初期設定

セットアップにWi-Fi接続が必要になりますが、今回用意したモバイルWi-Fiルーターで接続してしまうと貴重な容量を食ってしまうため、容量を気にしなくていい別のWi-Fiを利用した方がいいかも知れません。接続するWi-Fiは後から変更できます。


② ビニールハウスに設置

こんな感じでビニールハウス内に設置しました。



電気はもともと引いてあり天井を通っているので、延長コードで引っ張ってきました。かっちり固定はせずメッシュのバッグに入れてぶら下げました(測定値に影響あるかも?)。撒水時も避ければまぁ大丈夫そうです。

写真ではほぼ見えないですがモバイルWi-Fiルーターも一緒にバッグに入っています。記録を開始するにはNature RemoのWi-Fi設定を更新してモバイルWi-Fiルーターに接続します。

Nature Remoの測定値の校正のため別の温湿度計も設置。


③ スプレッドシートの準備


スプレッドシートは見出しとして1行目に「タイムスタンプ」「温度」「湿度」「温度校正値」「湿度校正値」と手入力。

シート名は「log」にしておきます(GASでこの名前で使います)。

Nature Remoではセンサーから取得する温度と湿度の値を校正することができます。APIから取得する温度・湿度は校正後の値となるため、後から調整が必要になった時のために校正値も取得しておきます。


④ コードの作成

スプレッドシートの「ツール」→「スクリプト エディタ」でGASを開きます。

コードは以下の通り。

var access_token = "Nature Remo アクセストークン";

var spreadsheet = SpreadsheetApp.openById("スプレッドシート ID");
var sheet = spreadsheet.getSheetByName("log");
 
function main() {
  var data = getNatureRemoData();
  var lastRow = sheet.getLastRow();
  sheet.insertRows(lastRow + 1);
  setData(data, lastRow + 1);
}
 
function getNatureRemoData() {
  var url = "https://api.nature.global/1/devices";
  var headers = {
    "Content-Type" : "application/json;",
    'Authorization': 'Bearer ' + access_token,
  };
  var options = {
    "method" : "get",
    "headers" : headers,
  };

  var data = JSON.parse(UrlFetchApp.fetch(url, options));
  
  return data;
}

function setData(data, row) {
  sheet.getRange(row, 1).setValue(new Date());
  sheet.getRange(row, 2).setValue(data[0].newest_events.te.val);
  sheet.getRange(row, 3).setValue(data[0].newest_events.hu.val);
  sheet.getRange(row, 4).setValue(data[0].temperature_offset);
  sheet.getRange(row, 5).setValue(data[0].humidity_offset);
} 

書き換えが必要なのは次の2ヵ所です。

・1行目「Nature Remo アクセストークン」

https://home.nature.global/ より発行できます。後から再表示ができないのでメモしておきます。


・3行目「スプレッドシート ID」

該当するスプレッドシートを開いた状態でアドレスバーURLの下記部分に表示されます。ちょっと長めです。

https://docs.google.com/spreadsheets/d/ここの値をコピペ/edit#gid=0


GAS初回実行時は承認が必要となります。無料のGoogleアカウントの場合「このアプリは確認されていません」というページが表示されます。ここで「安全なページに戻る」をクリックすると実行できませんので、「詳細」→「プロジェクト名(安全ではないページ)に移動」から承認します。


⑤ トリガー設定

定期的にmain関数を実行するためにトリガー設定をします。

「トリガーを追加」より、

・「実行する関数を選択」→ main
・「実行するデプロイを選択」→ Head
・「イベントのソースを選択」→ 時間主導型
・「時間ベースのトリガーのタイプを選択」→ 分ベースのタイマー
・「時間の間隔を選択(分)」→ 15 分おき
・「エラー通知設定」→ 今すぐ通知を受け取る

時間の間隔は適宜変更してください。


⑥ 記録開始


うまくデータが取れました。

通信容量に関しては記録開始から2週間程度で21MBでした。ブレはあるかと思いますがビタッ!プランの月に100MBまでのプランで十分そうですね。

月々の運用費は通信費180円(税別)と電気代幾ばくとなります。


***

ということで、Nature RemoとGASを使って温度・湿度をリアルタイムで記録する方法でした。

現在、このデータを元に積算温度を計算したり、通知を出したりといろいろ試しているのですが、思った以上に有用そうだなというのが感触です。栽培技術の向上にもつなげられるのではなかろうかと。


・関連投稿
GASで動的な栽培管理用データ閲覧Webページを作る。

【計画編】原木椎茸の収穫のタイミングで通知してくれるものを作ってみる。

小さく始めるスマート農業


また、今回はビニールハウス内という通常の屋内よりは多少過酷な環境下での使用となるため(初心者の)電子工作が必要になるRaspberry Piを使う方法はやめました。でも楽しそうなので、そのうち何かの場面で使ってみたいですね。


Twitter(@nkkmd)、Instagram(@nkkmd)も日々更新中です。