IFTTT対応コンセントのオフタイマーを作る(IFTTT+Alexa+GAS)

やりたいこと

スマホの過充電を防止するために、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時間になっています。

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時間という設定はできません…

この記事は参考になりましたか?(率直な投票お願いします!)
  • とても参考になった (1)
  • 少し参考になった (0)
  • 普通 (0)
  • 参考にならなかった (0)

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA