これまでのおさらい
- Raspberry piにNode.jsをインストールする
- Node.jsでrequestモジュールを使ってHTTPリクエストを実行する
- Node.jsでIFTTTのWebhooksを使う(requestモジュール利用)
- Node.jsからobnizでBME280(気温、湿度、気圧)センサーを動かす
今回のお話
- node.jsをcrontabで定期実行する。
前回書いたコードは、「BME280センサーの値を読み取り、Google スプレッドシートに書き込む」というものでした。
これは一回だけ実行する作りになっています。
このままでは、毎回手動で実行する必要があります。
// デバイスに接続constObniz=require("obniz");// デバイスに接続varobniz=newObniz("****-****");//Obnizの番号を指定varwebclient=require("request");obniz.onconnect=asyncfunction(){constifttt_event="Record";//イベント名constifttt_secret_key="あなたのキーを書く";//キーconstIFTTT_URL_GoogleSheets='https://maker.ifttt.com/trigger/'+ifttt_event+'/with/key/'+ifttt_secret_key;constbme280=obniz.wired("BME280",{vio:0,vcore:1,gnd:2,csb:3,sdi:4,sck:5,sdo:6});awaitbme280.applyCalibration();awaitbme280.setIIRStrength(1);val=awaitbme280.getAllWait();//obniz画面表示obniz.display.clear();obniz.display.print("temperature:"+val.temperature.toFixed(1))//気温obniz.display.print("humidity:"+val.humidity.toFixed(1))//湿度obniz.display.print("pressure:"+val.pressure.toFixed(1))//気圧//送信データ作成constp1=val.temperature.toFixed(1);constp2=val.humidity.toFixed(1);constp3=val.pressure.toFixed(1);//IFTTTリクエストwebclient.post({url:IFTTT_URL_GoogleSheets,headers:{"content-type":"application/json"},body:JSON.stringify({'value1':p1,'value2':p2,'value3':p3})},function(error,response,body){console.log(body);});obniz.close();//Obniz切断}
Node.jsのコードを定期実行する方法
- crontabで定期実行する方法 ⇒ 参考:crontabの書き方
- node-cronを使う方法 ⇒ 参考:Node Cron
今回は、crontabで試してみます。
crontabの設定
crontabでは、コマンドのフルパスが必要です。
whichコマンドで、nodeコマンドのフルパスを調べます。/home/pi/.nodebrew/current/bin/node
の部分を使います。~/myapp/BME280.js
の部分が実行するファイルです。
pi@raspberrypi:~/myapp $which node
/home/pi/.nodebrew/current/bin/node
crontabは、-eオプションが編集です。
pi@raspberrypi:~/myapp $crontab -e
先程調べたnodeのフルパスを指定し、実行するファイルを指定します。
以下の設定を登録しました。*/10
の部分が、10分周期で実行の意味となります。
参考:crontabの書き方
*/10 * * * * /home/pi/.nodebrew/current/bin/node ~/myapp/BME280.js
-lオプションがリスト表示です。
pi@raspberrypi:~/myapp $crontab -l(略)
*/10 * * * * /home/pi/.nodebrew/current/bin/node ~/myapp/BME280.js
実行結果
Google スプレッドシートのデータを見てみます。
crontabで実行されたコードによって、10分周期に気温、湿度、気圧が記録されています。