高齢の親が一人暮らし。
人間ですから死ぬのは仕方ないにしても孤独死に長時間気づかないのはヤバい。
ということで世の中にはカメラやセンサーを使った「みまもり」サービスがたくさんあります。
しかしまぁ結構高い!最低でも月500円ぐらいから!!
。。。あれ?そんなに高くないか?wでも固定費はできるだけ下げたいところ。
ということで中古スマホ、無料アプリ、格安SIM、IFTTT、GASを使ってほぼ無料で「格安みまもりシステム」を作ってみました。
もくじ
1. 使ってないスマホに動体検知カメラアプリをインストール
スマホはWiFiまたはモバイルデータ通信ができるものを用意します。
私の実家はWiFiが飛んでいない環境なのでデータ通信専用SIMを入れたAndroidスマホを用意しました。いまはもう新規加入できないDMMモバイルですがSIM3枚まで使えるので便利です。
初期化して新たにGoogleアカウントを取って初期セットアップをしましたが既存のアカウントでもOKです。
動体検知カメラは無料の「Manything」を利用しました。
Manything ホームセキュリティカメラアプリ
Videoloft Ltd無料posted withアプリーチ
なお「Manything」じゃくても「IFTTT」に対応している動体検知アプリならなんでもOKです。
「Manything」でアカウントを作成し初期セットアップをしておいてください。
※IFTTT:WebサービスとWebサービスをつなげるWebサービス
2. 動体検知カメラアプリが「動き」を検知したらIFTTTに通知
「Manything」を起動しドアなどの生活動線に設置しておきます。
「Manything」はカメラに動くものが映るたびに通知(メールorプッシュ通知)を送ります。
ただこのままでは「見守りカメラ」ではなく「監視カメラ」です。
「24時間動体検知がなかったら通知する」という仕組みを作って「見守りカメラ」として運用します。
3. IFTTTからGooge Spreadsheetにログを残す
「Manything」は「IFTTT」との連携に対応しています。
「Manything」で動体検知したら「IFTTT」経由で「Googe Spreadsheet」に記録を残します。
※Googe Spreadsheet:Googleの作ったExcelみたいなWebサービス
Googe Spreadsheetにアクセスして新規スプレッドシートを作成します。ファイル名は「motionLog」にしました。
このファイルのURLに含まれる「シートID」を控えておいてください。
「Googe Spreadsheet」は「Google Apps Script」というAPIを使って外部から操作することができます。
今回は「IFTTT」から通知を受け取って「motionLog」シートに記録を残すようにします。
Googe Spreadsheetの「ツール」から「スクリプトエディタ」を起動します。
下記のコードをコピペして保存。「シートID」は先程記録した「シートID」を転記してください。
var id = 'シートID';
var sheet = SpreadsheetApp.openById(id).getSheetByName("シート1");
function doGet(e) {
var timestamp = [e.parameter.ts];
sheet.appendRow(timestamp);
}
doGet関数を使ってシートの一番下にパラメーターを転記しているだけです。
>>>Web Apps | Apps Script | Google Developers
作成したスクリプトを外部から操作できるように公開します。
「スクリプトエディタ」の「公開」から「ウェブアプリケーションとして導入」
Project version:New
Excute the app as:Me ← 自分=管理者権限で実行します
Who has access to the app:Anyone, even anonymous ← 誰でも実行OK、匿名ユーザーも可
公開したウェブアプリのURLが発行されるので控えておく。
このURLにパラメーター(?ts=123456789)を追加してアクセスしてみる。
例)https://script.google.com/macros/s/固有のID/exec?ts=123456789
セキュリティ確認が出てくるので許可する(初回のみ)
スプレッドシートにパラメーターが記憶されていることを確認する。
スポンサーリンク
4. 「Manything」と「IFTTT」と「GAS」を連携する
「IFTTT」にアクセス。アカウントがない場合はSing Up(新規アカウント作成)してください。
アバターからCreateを選択しIF+をクリック
「Manything」を探し出してクリック
「Manything」と「IFTTT」を連携させる。
認証画面が出るので「Manything」のアカウントで許可する。
「Manything」と「IFTTT」は下記のような条件で連携できる。
今回はまず「動体検知」である「Motion detected」を選択する。
連携させるデバイス(スマホ)を選択する。
トリガーの設定は終わったので今度は動作を設定する。
Then+をクリック
「webhooks」を探してクリック
「webhooks」は簡単に言えばURLにアクセスするための仕組み。
選択できるアクションは「Make a web request」だけなのでクリック。
URLは先程のWebアプリケーションURLの最後に「exec?ts={{EventDateTime}}」と付けたもの。
URL: https://script.goog・・・・exec?ts={{EventDateTime}}
Method: GET
Content Type: application/x-www-form-urlencoded
これで設定完了です。
カメラの前を通るたびにスプレッドシートにタイムスタンプが記録されます。
5. 24時間以上ログが残っていなかったら通知する
最後に24時間以上にわたり動体検知がされなければ指定されたメールアドレスに通知するようにします。
先程作った「doGet」スクリプトの下に「checkInterval」というスクリプトを新たに追加します。
function checkInterval(e) {
var toArray = ['メールアドレス'];
var lastTimestampText = sheet.getRange(sheet.getLastRow(),1).getValue();
// January 12, 2020 at 02:29PM
// MMM DD, YYYY at hh:mmA
//入力フォーマットを指定してmomentオブジェクトを作成
var lastMoment = Moment.moment(lastTimestampText, 'MMM DD, YYYY at hh:mmA')
//インターバル ミリ秒
var interval = Moment.moment() - lastMoment
//もし24時間(86,400,000ミリ秒)以上経過してたら通知
if (interval > 86400000){
MailApp.sendEmail(toArray, '動体検知がありません', '24時間以上動体検知されていません。\n前回の動体検知:'+lastTimestampText);
}
}
‘メールアドレス’には通知したいメールアドレスを入力してください。複数のアドレスにメールを送りたいなら下記のようにしてください。
[ ‘メールアドレス1’ , ‘メールアドレス2’ , ‘メールアドレス3’ ]
「Manything」から送られてくるタイムスタンプは「January 12, 2020 at 02:29PM」という形式なのでそのままでは日時として扱えません。
日付変換にMomentライブラリを利用していますので有効化してください。
リソース → ライブラリ
下記のプロジェクトコードで検索するとでてくるので追加します。
プロジェクトコード:MHMchiX6c1bwSqGM1PZiW_PxhMjh3Sh48
このときの最新バージョンは9でした。
「checkInterval」を1時間毎に自動実行するようにします。
スクリプトエディタの「編集」から「現在のプロジェクトのトリガー」
「トリガーを追加」
「checkInterval」を「時間主導型」で「1時間おき」に実行するようにして保存します。
これで1時間に一度、動体検知をチェックして、24時間以上検知されないときはメールでお知らせするみまもりシステムができました。
その他追加設定など
基本的にはこれでOKですがやっておいたほうがよい設定など
動作が確認できればスマホのプッシュ通知やメール通知は不要だと思います。「Manything」の「Settings」から通知をOFFにします。
LINEのMessaging APIを使えばメールではなくLineの通知もできると思います。
>>>LINE developers
GASからMessaging APIを直接叩くかGASでIFTTT経由でLINEにメッセージを送るのもできると思います。
とりあえずメールで通知が来ればOKなので私はこのままでしばらく使おうかと思います。