IFTTTのアクション発動の時間を制御する方法を発見しました!
IFTTTの可能性が大きく拡がるブレイクスルーです。
IFTTTの問題点
さまざまなWebサービスどうしを「トリガー」と「アクション」でつなぐことができて、いつも大変お世話になっている「IFTTT」。
IFTTT自動化とワークフロー
無料posted withアプリーチ
そのIFTTTの唯一ともいえる難点が、 トリガーに引っかかると有無を言わさずアクションが発動する点。
例えば、 「自宅に帰ってきたら部屋の照明を点灯したい」 と思っても、自宅に帰ってくるのは夜だけではありません。
僕は毎朝ウォーキングをしているのですが、それが終わって帰宅したら朝なのに照明が点く、というのでは困ります。
「帰宅したら」というトリガーに引っかかっても、日中にはアクション発動してほしくないところですが、IFTTT自体にはそれを制御する術はありません。
しかしこの度、この問題をついに解決することができました!
「IFTTTアクション発動の時間を制御する方法」を発見したのです。
IFTTTアクション発動時間制御の決め手は「MESH」
解決の鍵となるのは、SONYから発売されている「MESH」でした。
MESHとは
MESH:小さな便利を形にできる、ブロック形状の電子タグ|ソニー
「MESH」は、「明るさタグ」や「動きタグ」などのタグ(物理タグ)と、それを制御するスマートフォンアプリを組み合わせたもの。
MESHはIFTTTにも対応していて、MESHタグをIFTTTに対応したさまざまなWebサービスと繋げることができます。
このアプリを使います。
MESH – Creative DIY Toolkit
Sony Business Solutions Corporation無料posted withアプリーチ
なぜMESHアプリを使うのか?
MESHアプリは、物理タグとの間で信号を送受信する他、アプリの中に「モバイル」と「ロジック」というソフトウェアタグがあります。
「モバイル」はマイクやスピーカー、ミュージック等、アプリが入っているデバイスの中の機能を使えるタグ。
一方「ロジック」は、信号を送る/送らないの条件指定をするタグです。
「ロジック」の中には「And」「スイッチ」「タイマー」「カウンター」というタグがあり、その中の「タイマー」タグの条件として、「指定の時間だったら」というものを選べます。
これは、 「このタグに信号が流れてきたときの時刻が、このタグで指定した時間帯の範囲なら次のタグへ信号を送る」 というもの。
これはまさに、上に書いた「時間を制御する機能」そのもの。
IFTTTには、MESHが「信号を受け取ったら」というトリガーも、MESHに「信号を飛ばす」というアクションも両方あるので、時間の判定だけをMESHで行い、IFTTTのトリガーとアクションの橋渡しをさせようということです。
IFTTTとMESHの連携
レシピを作る前に、IFTTTとMESHを連携します。
MESHアプリの右上の…をタップすると、IFTTT設定という項目があります。
ここからIFTTT Keyが発行できるので、これを控えておきます。
続いてIFTTTでサービス一覧からMESHを選択し、 先ほどのIFTTT keyを入力するだけです。
これでデバイスに入ったMESHアプリとIFTTTのアカウントが連携されます。
なお、このIFTTT keyは、MESHアプリ1つに対して1つ発行されます。
これについては後述します。
IFTTT AppletとMESHレシピの作成
ここからはレシピを作りながら話を進めていきましょう。
(呼び方としては、IFTTTでは「Applet」、MESHでは「レシピ」と呼ぶのでややこしいですが。)
ここでやりたいことは、先ほどの例のとおり、 「夜に自宅に帰ってきたら、部屋の照明を点灯する」 ということにします。
これをIFTTT的に表現すると、
「(1)スマートフォンが指定したエリア内に入ったら((2)現在の時刻を判定して、夜だったら)(3)部屋の照明を点灯する信号を送る」。
括弧でくくったのは、ここはIFTTTでは解決できないところだからです。
そこは先ほど書いたMESHのタイマータグで解決します。
上記の(1)(2)(3)をAppletおよびレシピに当てはめると、
(1)【IFTTT】Locationで位置判定→MESHに信号を飛ばす
↓
(2)【MESH】IFTTTから信号が飛んできたら「タイマー」タグで時間判定→指定した時間帯なら、IFTTTに信号を飛ばす
↓
(3)【IFTTT】MESHから信号が飛んできたら、照明をつけるアクション発動
という3つのステップを踏むことになります。
では、作成手順を順を追って説明していきましょう。
1.【IFTTT】Locationで位置判定→MESHにEventIDを飛ばす
まずはIFTTT Appletを作ります。
this(トリガー)にLocation→You enter an areaを選択、自宅の周辺にジオフェンスを設定します。
続いてthat(アクション)。
MESH→Send an event to MESH appを選びます。
EventIDの入力欄があるので、もともと入っている内容を削除して適当な名前をつけます。
このEventIDは次の工程で使用するので、これを控えておきます。
ここでは「whenbackhome」と付けました。
2.【MESH】IFTTTからEventIDが飛んできたら、「タイマー」タグで時間の判定→指定した時間帯なら、IFTTTにEventIDを飛ばす
次はMESHアプリに移って、レシピを作ります。
「新しいレシピ」をタップして、キャンバス画面を開きます。
タグ一覧の一番右、連携タグのIFTTTタグをキャンバスにドラッグします。
(IFTTT連携していないとタグが表示されませんが、+ボタンからも追加、連携できます。)
このIFTTTタグをタップして設定画面を開きます。
上部の「>」をタップして条件を「受信したら」にしたら、イベントIDの入力欄に先ほどのID「whenbackhome」を入力して「OK」。
次に、タグ一覧の「ロジック」から「タイマー」タグをドラッグして配置。
タップして、設定で「指定の時間だったら」を選んで、時間帯を選択して「OK」。
ここでは、18:00〜6:00に設定します。
もうひとつIFTTTタグを下のタグ一覧からドラッグ。
今度は条件を「送信する」のまま、イベントIDに先ほどとは別の名前をつけます。
先ほどと同じように、これが次のIFTTT Appletで必要になります。
ここでは「lightmyroom」と付けました。
ここまでできたら、タグの右にあるタブをドラッグして線を伸ばして隣のタグに繋ぎ、このようにします。
つまりこのレシピは、
IFTTTから「whenbackhome」というEventIDが飛んできたら時間帯を判定。
現在時刻が18:00から6:00の間だったらIFTTTにEventID「lightmyroom」を飛ばす
という意味ですね。
これでMESHレシピは完成。
3.【IFTTT】MESHからEventIDが飛んできたら、照明をつけるアクション発動
再びIFTTTに戻り、新規Appletの作成です。
thisにMESH→Event from MESH app receivedを選択 EventIDに、先ほど作った「lightmyroom」を入力。
thatは、ここでは照明をつけるアクションなのですが、僕の自宅の照明(蛍光灯)は赤外線で操作できるようにしてあるので、Maker Webhooksで赤外線信号を飛ばすアクションを書きます。
蛍光灯を赤外線で操作する方法および赤外線をWebでコントロールする方法は下記過去記事参照。
赤外線リモコンスイッチ OCR-04で、部屋の照明をリモート操作可能にしてみました。 – ハミングスタジオブログ
プログラミング知識不要!IRKit×IFTTTで家電を制御するための最低限の手続き – ハミングスタジオブログ
Philips Hueを持っている人は、thatでPhilips Hueを選択して普通に点灯するアクションを作ればよいです。
参考までに、実際僕が作成したMaker Webhooksの記述内容です。
(上記記事内の画像を流用しています。)
長かったですが、これで完成です!
MESH(物理)タグは要らない…?
ここまで読んで、賢明な読者様ならきっと、
「あれ?どこにもMESHの物理タグが出てこない…」
とお思いのことでしょう。
実はこのMESHアプリで作成するレシピは、MESHの物理タグがなくても動作します(!)
上記の例の場合でも、IFTTTからMESHアプリにIDを飛ばして、アプリ内で時間帯を判定して、またIFTTTにIDを飛ばす、ということでは動作自体に何の不足もありませんよね。
MESHアプリを開いたまま実行すれば、タグをひとつも持っていなくてもちゃんと動作します。
ただ、このレシピをバックグラウンドで実行するためには、アプリの入ったデバイスと物理タグとのBluetooth接続が維持されていることが必須なのです。
アプリの仕様です。
物理タグを購入せずに使い放題というわけにはいかないということ。
そこはうまくできていますね(笑)
MESH物理タグ購入
仕方ないので(笑)購入します。
じゃあどのタグを購入するのか?
MESHアプリのバックグラウンド実行の条件は「デバイスが物理タグとBluetooth接続されていること」なので、
物理タグ自体をレシピに組み込む必要はありません(!!)
だから、いちばん安いタグを購入するも良し、いつか使いそうなタグを購入しておくも良し。
要は何でもいいのです。
僕は最初、物理タグをレシピに組み込まなければいけないと思っていたので、信号の検知(IFTTTでいうトリガー)ではなく実行側(IFTTTでいうアクション)のタグであるLEDタグを購入しましたが、レシピに組み込む必要がないと知り、他のにしておけばよかったと若干後悔。
点灯させるだけならPhilips Hueでできるし(Philips Hue自体がIFTTTに対応してるだけでなく、MESHアプリ内にもPhilips Hueと接続できる連携タグがあります)。
無事購入したら、ちゃんと物理タグをアプリと連携(Bluetoothペアリング)しておきましょう。
レシピには組み込まなくていいので、タグ一覧の左下のタグアイコンが点灯している(=Bluetooth接続されている)ことを確認してからホーム画面に戻りましょう。
IFTTTアクション発動時間の制御、大成功!
話が逸れましたが、購入した物理タグをアプリの入ったデバイスとBluetooth接続して、完成したApplet&レシピを実際に試してみました。
朝ウォーキングから帰ってきた時は照明は点灯せず、 そして夜に帰宅した時は、照明が点灯していました!
IFTTTアクション発動の時間制御、見事大成功です!
これで、夜自宅に帰ってきて、暗い中照明のスイッチを探す必要はもうなくなりました!
ちなみに、IFTTTはトリガー検知からアクション発動までに最大15分のタイムラグがあると言われていますが、Location(ジオフェンス)に関してはタイムラグが無いので、エリアに入るとすぐにアクションが発動します。
それ以外のWebサービスの場合は、Appletを2つ使うので単純計算で最大30分のタイムラグが発生することになりますが…さすがにそこまではないと思いたいですが。
なお、上記3のApplet(MESHからIDが飛んできたら照明を点灯する)は、調べてみたところほとんどタイムラグなく動作している模様です。
MESHアプリの注意点
IFTTTの使い方が分かる人なら、MESHアプリを使うのも難しくはないと思いますが、僕がハマった注意点をいくつか書いておきます。
1.アプリの入っているデバイスとMESHタグを一緒に置いておくこと
前述した「MESHアプリ1つに対してIFTTT keyが1つ」という件です。
これは、デバイスが違えばIFTTT keyが異なるので、同じアカウント(iPhoneでいえばApple ID)でも複数のデバイスでアプリを入れればそれぞれが別のIFTTT keyを持つことになります。
デバイス間でのレシピの同期、共有はできないということです。
例えば持ち歩き用のデバイスにレシピをセットして、物理タグを自宅に置いたまま外に出ると、Bluetooth接続が切れるのでレシピは動作しません。
物理タグとレシピの入ったアプリは常に一緒にないといけないので、持ち歩き用のデバイスにレシピを入れているなら、物理タグを一緒に持ち歩かなければいけません。
バッテリー消費しそうですね…
持ち歩きたくないなら、レシピは自宅にある別のデバイスに入れておく必要があります。
僕の場合は、常に自宅に置いている古いiPhoneにレシピを入れたので、物理タグは自宅に置いたままでいいのです。
ちなみに、当然ですがIFTTTに接続する必要があるので、Wi-Fi接続も必要です。
なお、上記レシピで位置情報を判定するほうのデバイス(持ち歩き用の新しいiPhone)はIFTTT(=Web)に繋がってさえいればいいので、物理タグと一緒にある必要はありません。
2.MESHアプリのレシピ(キャンバス画面)を開いた状態でホーム画面に戻る
バックグラウンド実行の条件として、「バックグラウンド実行が可能なのはキャンバス画面に描かれている1レシピのみです。」という記述がヘルプ内にあります。
レシピを開いた状態(この画面を「キャンバス画面」と言います)でアプリを閉じて(タスクの終了ではない)バックグラウンドに置いておく必要があります。
レシピ一覧画面の状態で閉じてしまいがちですが、それだとバックグラウンド実行されないので注意。
3.複数の動作をひとつのレシピに入れておく
これは2で書いたとおり、バックグラウンドで実行するためには、キャンバス画面を開いた状態でバックグラウンドに置いておかなければいけないのですが、これだと複数の動作をそれぞれ別のレシピに書いてもひとつしか実行できません。
だから、複数の動作を同時にバックグラウンド実行しておきたい場合は、ひとつのレシピ(キャンバス画面)の中に複数の動作を記述しておきます。 それぞれが繋がっていなくてもいいです。
IFTTTはほぼ無敵になった
例ではいろんな我が家のデバイスが絡んでいますが、肝心の発動時間制御に必要な追加負担はMESHの物理タグだけ。
最安のタグでも6,000円弱と、そんなにお安いものではないですが、IFTTTの使い道が格段に拡がると思えば大した負担ではないでしょう。
物理タグによってはまた新しく作業の自動化ができて楽しめるでしょうし、IFTTTの時間制御の問題で悩んでいるなら損はないと思います!
例では「指定の時間だったら」というタイマー条件だけを挙げていますが、その他の「待つ」「一定の間隔で」「指定のタイミングで」「指定の曜日だったら」も、 まだ実際に使ってはいませんが、使いようによってはかなり強力なツールになりそうです。
また、タイマー以外のソフトウェアタグも応用すれば、IFTTTはさらに大きな可能性が拡がり、ほぼ無敵になったと言ってもいいかもしれません!