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