[MacroDroid×IFTTT×GAS×LINEですぐできる生存確認bot]一定時間ロック解除をしなければLINEで時間と場所をグループに通知する
LINEからの通知機能が止まって友人へのLINEが数日くらい遅くなった時にとても心配され、確かに一人暮らしだと意識を失ったとき誰も助けてくれず孤独死する!!!!!と思いこのbotを作ろうと思いました。
とりあえず12時間以上スマホを触らないければLINEの指定したグループに通知が行くようにしたい.
まず流れです
1.Macrodroidでロック解除するたびにアプリの変数に時刻とGoogleMapURLを一時的に保存
2. 30分ごとにMacrodroidからIFTTT Webfookで変数込みでHTTP Get
3. IFTTTが受けっとったデータをGoogle スプレッドシートへそのまま書き込む
4. 12時間ごとにGASで書き込まれた最新のロック解除時刻と現在時刻の時間差を確認
5. 12時間以上あればLINE Notifyにfetchして時刻と場所をグループに通知する
1.ロック解除のときに時刻と場所を一時的に記録する
まずMacrodroidのマクロで以下のように設定しグローバル変数を設定
2. IFTTTに最新の時刻と場所をGetで送信する
まずIFTTTを設定する.webhookの有効化と右上のDocumentation自分宛てのKeyの確認.Make your own Applets で This にWebhooksを選択.Event Nameは適当に今回はsendlivelog. That にGoogle Sheetsを選択.Add row ~選択でとりあえずdefaultのままでおk.IFTTTのWebhook関連の説明は他の記事でたくさんあるので詳しくは割愛
つぎにMacrodroidの設定は以下
電源が切れても生存確認をしてほしいので一定間隔でログをスプレッドシートで保存する.
トリガーがすこし問題でした.僕のHonor9のせいか分かりませんがそのままだと実行しなかったので一定間隔のアラーム機能を使うにチェックしています.[追記あり]
電池消費が気になれば間隔をのばして1時間等にしてもよいかも
GETするURLにDcumentにあった自分のkeyを含めたURLをコピペしてそのあとに右のボタンで変数を選択して下のようにする.変数とかイベントの名前もそれに応じて変える.
https://maker.ifttt.com/trigger/sendlivelog/with/key/{自分のkey}?value1=[v=time]&value=[v=mapurl]
これで30分ごとにロック解除した場所と時間がスプレッドシートに書き込まれる.
3. GASとLINE Notifyをつなげる.
LINE NotifyからAPIキーを手に入れる.PCまたはスマホのChromeならPC版サイト表示で右上のマイページを開くとアクセストークンの発行(開発者向け)という項目があるのでそこからまずは1対1のトークンを記録する.一連の流れが上手く行ったら家族なり友人のグループにする.
スプレッドシートのスクリプト エディタから以下を入力.
function survivalConfirme(){
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet(); // 現在のシートを取得
var daterange = sheet.getRange("C"+sheet.getLastRow());
var opendate = new Date(daterange.getValues())
var nowdate = new Date();
var subtime = (nowdate-opendate)/1e3/60/60;//millisecからhourに変換
console.log(subtime)
if(subtime >12){
gensendmessage();
}
}
function gensendmessage() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var daterange = sheet.getRange("C"+sheet.getLastRow());
var urlrange = sheet.getRange("D"+sheet.getLastRow());
var date = daterange.getValue();
var locationURL = urlrange.getValue();
var notify_message = "最後にスマホを開いた日時:"+date+"\n場所:"+locationURL;
LINEsendHttpPost(notify_message)
}
function LINEsendHttpPost(content){
var token = "hogehoge"; //入手したLINEのトークン入力
var options =
{
"method" : "post",
"payload" : {"message": "\n"+content,
},
"headers" : {"Authorization" : "Bearer "+ token}
};
UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}
LINEとのつなげ方はこことかを参考にした.https://e-shikumi-labo.com/25022019/2820.html
実行する関数をsurvivalConfirmeにして試した後、時計マークから飛んでトリガーを時間主導型の12時間おきに設定
おしまい
*検証のために6時間しか試しておらず実際に12時間おいてやってないので不具合あるかもしれません.ついスマホを触ってしまい全体の検証が難しい.
追記
使用しているとHTTPGetがうまく動いてませんでした.AndroidとHuawei端末による電池の最適化によるものでした.
Android端末全般は設定の検索項目の電池の最適化->Macrodoidを許可しないを設定
追加でHueawei端末は電池->アプリ起動->Macrodoidの手動で管理を許可お合わせて設定するといけました.
前々からLINE等で通知来なかったのでこの機会にほかのアプリも設定しました.