状況が整うとき
Llama のイベントは、状況が整ったときに実行されます。
…でも、その詳細な動作は複雑です。
特に「状況が整う」ってどういうこと?
これをちゃんと把握すると、非常に柔軟に Llama のプログラムが作れるようになります。
状況の整う時
例えば、「WiFi 接続中なら」という状況が付けられたイベントは、どういうときに実行されるのでしょうか?
日本語的に考えれば、「WiFi接続中」ならば、いつでも実行されそうです。
いつでもって…いつでも? 繰り返し? だとしたら何秒ごとに?
実際には、状況が整った、を厳密に言えば「整っていなかったのが、整ったとき」です。
つまり、「接続していなかった WiFi が、接続したとき」が、「WiFi 接続中なら」のイベントが実行されるタイミングです。
「家で」という状況のイベントなら、「家に入った瞬間」だけが実行されるタイミング。
じゃぁ、「接続中なら」とか「家で」とか曖昧に書かないで、「接続したとき」とか「家に入ったとき」と書けばいいじゃないか、とお叱りが来そうです。
しかし、この書き方にはちゃんとした理由があるのです。
繰り返し
イベントは、繰り返し実行を指定することもできます。これは、イベント編集時の「高度機能...」の中で指定できます。
たとえば、5分毎に繰り返し実行、という指定をした場合、状況が「整った瞬間」に実行が行われ、以降「持続している間」定期的に実行し続けます。
この場合、「家で」という状況は、まさに家に居る間中、と言うことになります。
この繰り返しは、当然のことながら状況が変わると終了します。
遅延
イベントは、遅延実行を指定することもできます。こちらも「高度機能...」の中で指定できます。
状況が整った瞬間から何分か後に行動を起こす、と言うのが基本です。
しかし、実際に行動を起こすときにもう一度状況を確かめて、状況が変わっていたら行動を中止することもできます。
この「もう一度状況を確かめる」際には、状況が変わった瞬間を求めているわけではありません。
むしろ、状況が持続していることが重要でしょう。
(持続していなくても、「数分後に同じ」であれば良いのだけど)
複数状況の組み合わせ
「家で WiFi接続中なら」という状況は、両方が同時に変化することを求めてはいません。
すでに家に居るときに、WiFi 接続によって状況が整えば、全体として状況が整ったことになります。
このような場合「先に整っていた状況」をフィルタとよび、「最後に整うことで全体を整えた状況」を、トリガと呼びます。
いくつかの例外はありますが、ほぼすべての状況は、トリガにもフィルタにもなれます。
OR 状況の組み合わせ
「[家で か WiFi接続中なら]」と言う状況の場合、どちらか片方が整えば、状況が整ったことになります。
すでに「家で」で状況が整っている場合に、「WiFi接続中なら」が新たに整ったらどうなるでしょうか?
実は、OR 状況の作成時に、「再度の状況確認」のチェックの有無で動作を決めることができます。
チェックありなら、先の例は行動を起こします。
全体としてすでに状況が整っていても、新たに状況が整ったなら行動を起こす、ということです。
チェック無しなら、行動を起こしません。
全体としてすでに状況が整っていれば、以降は新たな行動は起こさない、ということです。
例外
ほぼすべての「状況」が、トリガにもフィルタにもなりますが、例外がいくつかあります。
「テザリング」は、テザリングの有効/無効をフィルタとして使うことはできますが、単体でトリガとして使うことはできません。
つまり、「テザリングの開始」や「終了」をきっかけに動作するイベントを作ることはできない、ということです。
「場所を出た」は、トリガにはなりますが、フィルタになりません。名前どおり「出た」瞬間にしか整わないためです。
フィルタとして使いたい場合は、「場所に居ない」を使います。こちらは、トリガにもフィルタにもなります。トリガとして整うタイミングは、「場所を出た」と同じです。
対するイベントは、「入った/居る」となっているので、トリガにもフィルタにもなれます。