ものづくり

GASからLINE Notifyを使ってLINE通知する方法

thumbnail
n-mukineer
前の記事
GASで作ったAPIにM5StackからPOSTする方法
GASで作ったAPIにM5StackからPOSTする方法
えぬ
えぬ

M5Stackで行っていた「LINE Notifyへの通知」と「Ambientへの送信」をいよいよGASにやってもらいます!今回の記事ではLINE Notifyへの通知をやってみます!

CO2濃度が1000ppm超えたらLINE Notifyを使ってLINE通知

GAS画面で作業をしていきます!Webアプリ開発ではバックエンド処理と言ったりもしますが、「受け取ったデータに対して何かしらのロジックを適用してアクションする」ということをやっていきます。

これから実装するロジックを日本語を書いてみるとこんな感じですね。

CO2データを受け取ったら、CO2濃度が1000ppm以上であるかどうかを確認し、1000ppm以上である場合はLINE Notifyに通知する(1000ppm未満の場合は何もしない)」

ロジックを実装するときは、実装前に日本語で書いてみることをおすすめします(フローチャートやシーケンス図など使えるともっといいですね)。

日本語でうまく説明できないロジックは、実装したときに見落としに気づかずバグを埋め込んでしまうことにもつながってしまいます。

LINE Notifyトークンをスクリプトプロパティに登録する

LINE Notifyを使用するため、GASの「スクリプトプロパティ」にLINE Notifyトークンを登録します。

LINE Notifyトークンの取得方法については、以下の記事も参考にしてみてください!ここからはLINE Notifyトークンを取得できている前提で進めていきます。

あわせて読みたい
プログラムから通知を送信できるLINE Notifyの始め方
プログラムから通知を送信できるLINE Notifyの始め方

さて、「スクリプトプロパティ」についてですが、LINE Notifyトークンをはじめパスワードなどの機密情報は、ソースコード上に直接書くのは好ましいものではありません。GASの場合は「スクリプトプロパティ」にそのような情報を定義しておくことができます。

以下の手順でLINE Notifyトークンをスクリプトプロパティに登録していきます。

GASの設定画面を開き、「スクリプトプロパティを追加」を選択する
スクリプトプロパティを保存する
  • 「プロパティ」に「LINE_NOTIFY_TOKEN」
  • 「値」に事前に取得しておいたLINE Notifyトークン

を入力し「スクリプトプロパティを保存」をクリックします。

LINE Notify通知メソッドを定義する

スクリプトのdoPostメソッドとは別にlineNotifyというメソッドを定義します。

LINE Notifyはテキストのほかにリンクや画像を送ることができるのですが、今回は簡単にするためにテキストだけを引数に指定するようにしています。

const LINE_NOTIFY_API = 'https://notify-api.line.me/api/notify';
const LINE_NOTIFY_TOKEN = PropertiesService.getScriptProperties().getProperty('LINE_NOTIFY_TOKEN');

function doPost(e) {
  const body = JSON.parse(e.postData.contents) 
  const co2 = body.co2;
  const temp = body.temp;
  console.log(`CO2濃度: ${co2}ppm`);
  console.log(`温度:${temp}℃`)
}

function lineNotify(text) {
  const options = {
      "method"  : "post",
      "payload" : {"message": text},
      "headers" : {"Authorization":"Bearer " + LINE_NOTIFY_TOKEN}
   }
  UrlFetchApp.fetch(LINE_NOTIFY_API, options)
}

lineNotifyメソッドをテストする

GASは、メソッド単位でテスト実行することができます。

LINE Notifyテスト送信用のメソッドtestLineNotifyを作成してテストしてみます

const LINE_NOTIFY_API = 'https://notify-api.line.me/api/notify';
const LINE_NOTIFY_TOKEN = PropertiesService.getScriptProperties().getProperty('LINE_NOTIFY_TOKEN');

function doPost(e) {
  const body = JSON.parse(e.postData.contents) 
  const co2 = body.co2;
  const temp = body.temp;
  console.log(`CO2濃度: ${co2}ppm`);
  console.log(`温度:${temp}℃`)
}

function lineNotify(text) {
  const options = {
      "method"  : "post",
      "payload" : {"message": text},
      "headers" : {"Authorization":"Bearer " + LINE_NOTIFY_TOKEN}
   }
  UrlFetchApp.fetch(LINE_NOTIFY_API, options)
}

function testLineNotify() {
  lineNotify('テスト通知じゃあああああああああああい!')
}

コードを保存したら、実行するメソッドを選択し「実行」をクリックします。(実行権限の承認依頼画面が出たら、承認してください。)

実行結果はこちら。LINEに通知が来ていることが確認できました!(画像は実行ボタンを連打していますが、1回だけ押したらもちろん1回しか通知は来ません)

doPostメソッド内にロジックを実装する

ここでもう一度今回実装したいロジックを確認しておきましょう。

CO2データを受け取ったら、CO2濃度が1000ppm以上であるかどうかを確認し、1000ppm以上である場合はLINE Notifyに通知する(1000ppm未満の場合は何もしない)」

でしたね。これを少し分解していきます。

実行トリガ

まず、「いつ発動するか」つまり実行のトリガですが、今回の場合は「CO2データを受け取ったら」がトリガになります。なので、doPostが実行されたときにロジックを実行してあげればよさそうです。

LINE通知条件

次に、通知を出す条件ですが、「CO2濃度が1000ppm以上」となります。受け取ったデータからCO2濃度の値を取り出し、その値が1000以上かどうかを判定すればよさそうです。

LINE通知内容

最後に、通知する内容ですが、これは自分の好きなように決めましょう。今回はこのようにしてみます。「【集中力低下注意!】CO2濃度が1000ppmを超えました。今すぐ換気しましょう!現在のCO2濃度はXXXXppmです。」(XXXXには実測値が入る)

以上を実装したソースコードはこのようになります。

const LINE_NOTIFY_API = 'https://notify-api.line.me/api/notify';
const LINE_NOTIFY_TOKEN = PropertiesService.getScriptProperties().getProperty('LINE_NOTIFY_TOKEN');
const CO2_THRESHOLDS = {
  "lineNotify": 1000
};
const LINE_NOTIFY_TEXT = `【集中力低下注意!】CO2濃度が${CO2_THRESHOLDS.lineNotify}ppmを超えました。今すぐ換気しましょう!`;

function doPost(e) {
  const body = JSON.parse(e.postData.contents) 
  const co2 = body.co2;
  const temp = body.temp;
  console.log(`CO2濃度: ${co2}ppm`);
  console.log(`温度:${temp}℃`)

  if(co2 >= CO2_THRESHOLDS.lineNotify) {
    lineNotify(LINE_NOTIFY_TEXT + `現在のCO2濃度は${co2}ppmです。`);
  }
}

function lineNotify(text) {
  const options = {
      "method"  : "post",
      "payload" : {"message": text},
      "headers" : {"Authorization":"Bearer " + LINE_NOTIFY_TOKEN}
   }
  UrlFetchApp.fetch(LINE_NOTIFY_API, options)
}

function testLineNotify() {
  lineNotify('テスト通知じゃあああああああああああい!')
}

デプロイする

初めてのデプロイの場合

初めてデプロイを行う場合は以下の記事を参考にしてください。

あわせて読みたい
GASで作ったAPIにM5StackからPOSTする方法
GASで作ったAPIにM5StackからPOSTする方法

2回目以降のデプロイの場合

2回目以降のデプロイの場合は、1回目のデプロイと手順が異なりますので注意してください。

以下の流れでデプロイしましょう。

  1. 「デプロイ」をクリック
  2. 「デプロイを管理」をクリック
  3. 「編集」をクリック
  4. 「バージョン」で「新バージョン」を選択
  5. 「デプロイ」をクリック

「新しいデプロイ」を選択してデプロイしてしまうとウェブアプリのURLが変更されてしまいますので、必ず「デプロイを管理」から行うようにしましょう。

動作確認

M5Stackに息を吹きかけてわざと1000ppm以上にしてみます。

1分ほど待って…

えぬ
えぬ

キタ━━━ヽ(∀゚ )人(゚∀゚)人( ゚∀)ノ━━━!!

まとめ

今回はGASからLINE Notifyへの通知をやってみました。

  • ロジックを実装するときは一度日本語で書いてみる
  • 機密情報(パスワードやトークン)は直接コードに書かない
  • デプロイ前にメソッド単体でテストする
前の記事
GASで作ったAPIにM5StackからPOSTする方法
GASで作ったAPIにM5StackからPOSTする方法
シリーズを最初から読む
【超簡単電子工作】M5StackとCO2センサで自室のCO2濃度を測定してみた!
【超簡単電子工作】M5StackとCO2センサで自室のCO2濃度を測定してみた!
このブログを書いている人
えぬ
えぬ
N日後にムキムキになるエンジニア
WebアプリエンジニアとしてIoTシステムを開発中。30代折り返し。 趣味(モノづくり、プログラミング、筋トレ)や子育てのことを主に記事にします。 TOEIC: 900点/第一級陸上無線技術士/第3種電気主任技術者/技術士一次試験合格/基本情報技術者/第2種電気工事士/デジタル技術検定2級(情報・制御)
記事URLをコピーしました