もくじ
やりたいこと
スマホの過充電を防止するために、2時間でスマートコンセントをオフにしたい!
また、アレクサに喋りかけるだけで、タイマーをセットしたい!
(無料で実現したい!)
必要なもの
- Googleアカウント(Google Apps Scriptを使います)
- IFTTTアカウント
- スマートコンセント(IFTTTでオン・オフできるもの)
- アレクサ(今回は…)
下調べ
自分の買ったコンセントは、専用のアプリ上でタイマーをセット可能です。しかし、アレクサ(IFTTT)ではタイマーをセットすることが不可能でした。そこで、アレクサに話しかけるだけでオフタイマーをオンにできるようにしたいと思います。
少しネットで調べると、MESHというアプリを使えばできるらしいです
(参考:https://chasuke.com/mesh_ifttt/)。しかし、MESH(6000円〜)を購入する必要があったり、アプリがバックグラウンドで実行されるため、スマホ自体の電池持ちが悪くなる可能性があります。
そもそも、Linuxのコマンド的に考れば、sleep(2h)で済む話なので、アレクサの2倍の値段である6000円も払いたくないと思い、自作を決意しました。
しかし、少し考えればわかることですが、Sleepコマンドを2時間も使うのは愚かですし、IFTTTからLinuxマシンに(httpとかで)リクエストを送るには、Linuxをウェブ上に公開することが必要なので、NASとかセキュリティとかめんどくさい…
そこで、「Google Apps Script」を使うことで、解決しました!
やり方
10分で作った概要図
IFTTT上でコンセントオフのアプレットを作る
https://ifttt.com/createにて、Webhookがあったらコンセントをオフというアプレットを作ります。(Webhookってのは、要は特定のURLにアクセスがあったらオフっていう意味です)
WebhookのURLはhttps://ifttt.com/maker_webhooksの右上のDocumentationを押すと入手できます。{event}のところは、アプレットを作るときに指定した文字列(上の例ではhogehoge)になります。
(参考:http://oita.oika.me/2017/09/16/ifttt-push-to-phone/)
Google Apps Script(GAS)を作成
※適宜、保存してください
1. Googleドライブを開いて、Google Apps Scriptを新規作成
図のように、GASスクリプトを作ります。(選択肢がない場合は「Google Apps Script 新規作成」とかでググってください())
2. 以下のコードをコピペ
コピペして保存してください。
IFTTTのURLを、↑で作ったものに変えてください。
時間(var dif
)はご自由に変えてください。例では、60*60*2
秒で2時間になっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | function stopusb() { // コンセントをストップ Logger.log('stop usb') PropertiesService.getScriptProperties().setProperty("time","1E15"); UrlFetchApp.fetch("https://maker.ifttt.com/trigger/{event}/with/key/{yourkey}"); // URL変えてください } function doGet() // webhookを受ける { timer(); return HtmlService.createHtmlOutputFromFile('index'); } function check() // check時間経過したらオフ { var now=Date.now() now=Math.round(now/1000) var hikaku = PropertiesService.getScriptProperties().getProperty("time"); hikaku=Number(hikaku) var dif=60*60*2 // 時間、必要に応じて変えてください Logger.log(now-hikaku-dif) if (now>=hikaku+dif){ stopusb(); } } function timer(){ // タイマーをオン var now=Date.now() now=Math.round(now/1000) PropertiesService.getScriptProperties().setProperty("time",now); } |
(難しいコードでもないと思うので、なんとなく理解するといいかもしれません…)
3. index.htmlを作成
アクセスしたときに表示されるindex.htmlを作ります。何も追記しなくてもいいと思います。
4. プロジェクトのプロパティから変数を追加
このスクリプトは、変数として時間を保持します。そこで、プロパティサービスというものを用います。
スクリプトのプロパティ欄を開いて、「追加」みたいなところから追加してください
このコードでは変数名(プロパティ)は「time」、初期値は適当に「1E15」などとしておいてください。
5. トリガーを設定
Linuxでいうところのcronみたいなものを設定します。1分おきに関数「check」を実行し、時間が経過してたら、IFTTTを実行してコンセントをオフにします。
6. スクリプトを公開
IFTTTからアクセスできるように、スクリプトを公開します。
「全員(匿名含む)」にしておくのを忘れないように。
最後に出てくるURLをコピーして持っておきます。
7. IFTTTアプレットを設定
今回は、アレクサに語りかけるとタイマーをオンにしたいので、「IF アレクサ, THEN Webhook(GASスクリプトのURL)」というアプレットを設定します。
まとめ
ソニーに6000円課金せずとも、IFTTTで操作できるコンセントタイマーを作ることができました!
IFTTTで操作できる製品すべてに使える方法なので、コンセントタイマーのみならず色々使えると思います。
参考になったら幸いです。((そしてこの記事を広めていただければ幸いです))
ただし、1分おきにチェックするので、厳密に2時間という設定はできません…