条件が整うとき

Llama のイベントは、条件が整ったときに実行されます。


…でも、その詳細な動作は複雑です。

特に「条件が整う」ってどういうこと?


Llama のイベントが思うように動かない、という人は、ここで引っかかっている可能性が大。

逆に言えば、これをちゃんと把握すると、非常に柔軟に Llama のプログラムが作れるようになります。


条件の整う時

繰り返し遅延

複数条件の組み合わせ

フィルタとトリガ「条件すべてが」「条件どれかが」

トリガ条件の絞り込み

例外

実際の使いどころ



条件の整う時


例えば、「WiFi 接続中なら」という条件が付けられたイベントは、どういうときに実行されるのでしょうか?


日本語的に考えれば、「WiFi接続中」ならば、いつでも実行されそうです。

いつでもって…いつでも? 繰り返し? だとしたら何秒ごとに?


実際には、条件が整った、を厳密に言えば「整っていなかったのが、整ったとき」です。

つまり、「接続していなかった WiFi が、接続したとき」が、「WiFi 接続中なら」のイベントが実行されるタイミングです。


「家で」という条件のイベントなら、「家に入った瞬間」だけが実行されるタイミング。



じゃぁ、「接続中なら」とか「家で」とか曖昧に書かないで、「接続したとき」とか「家に入ったとき」と書けばいいじゃないか、とお叱りが来そうです。

しかし、この書き方にはちゃんとした理由があるのです。



繰り返し


イベントは、繰り返し実行を指定することもできます。これは、イベント編集時の「高度機能...」の中で指定できます。


たとえば、5分毎に繰り返し実行、という指定をした場合、条件が「整った瞬間」に実行が行われ、以降「持続している間」定期的に実行し続けます。


この場合、「家で」という条件は、まさに家に居る間中、と言うことになります。


この繰り返しは、当然のことながら条件が変わると終了します。




遅延


イベントは、遅延実行を指定することもできます。こちらも「高度機能...」の中で指定できます。


条件が整った瞬間から何分か後に動作を起こす、と言うのが基本です。

しかし、実際に動作を起こすときにもう一度条件を確かめて、条件が変わっていたら動作を中止することもできます。


この「もう一度条件を確かめる」際には、条件が変わった瞬間を求めているわけではありません。

むしろ、条件が持続していることが重要でしょう。


(持続していなくても、「数分後に同じ」であれば良いのだけど)



情報提供あり 2015.2.9

遅延の記述が間違えているのではないか、という指摘を頂きました。

僕が忙しくて確認とれていないのですが、情報だけ記しておきます。


遅延実行する際、条件が整ってから実行されるまでの間、状況の変化を見続けているようです。

そのため、上に書いた「持続していなくても~」は間違った情報となります。


このページが書かれて少し後に、遅延実行の仕組みが変わりました。(たしか 2012年末のこと…すでに遠い過去です)

どうやら、この際に上に書いてある動作とは、多少異なる動作になったものと思われます。

ということは、2年以上も間違った情報を流し続けていたわけで、非常に申し訳なく思います。


以上、十分な確認をしたら、記述を修正します。現在のところは、情報が間違っているかもしれない、と示唆するのみでとどめておきます。

最後になってしまいましたが、情報提供ありがとうございました。




複数条件の組み合わせ

ここまでは、繰り返そうが遅延仕様が、「条件が一つ」の場合の話をしていました。

ここから、複数条件の組み合わせの話になります。実は、条件の組み合わせは、裏で非常にややこしい処理が行われています。


フィルタとトリガ

まず、複数の条件は、当然のことながら「バラバラに」変化します。

Llama は、条件が変化すると、その条件変化によって実行されるイベントがないかを、チェックします。


内部的な話になりますが、Llama は「常に動いている」わけではありません。
常に動いていると、無駄に電池を消費してしまうからね。

Llama は OS に「なにか状況が変化したら教えてね」と頼んで、普段は寝ています。
そして、「携帯電波のIDが変化した」とか「WiFi接続が行われた」とか、重要な状況変化があった時だけ、OS から起こされるのです。

上に書いた「条件が変化すると~チェックします」というのは、OSに起こされて動作する、というLlama の仕組みによるものなのです。

さて、条件が変化して、Llama がチェック動作を行うとき、このきっかけになった(たった今変化した)条件のことを「トリガ」と呼び、その他の条件のことを「フィルタ」と呼びます。

トリガもフィルタも、すべての条件が整って、はじめてイベントが実行されます。


トリガは引き金、重要なきっかけの意味。フィルタは濾過機、必要なものだけを通すものの意味。
たとえトリガがLlama を動かしても、フィルタが阻止すればイベントは実行されません。

ちなみに、イベント実行のことは「ファイア(発火)」と呼ばれます。 引き金を引いたら銃口が火を噴くのです。


ほとんどの条件が、トリガにもフィルタにもなれます。しかし、中にはトリガにしかなれなかったり、フィルタにしかなれない条件もあります。

また、2013.4.21 公開のβ版では、一部の条件は「トリガとして動作しないように」設定できます。このことの詳細は後述します。


Llama が持っている条件のうちのいくつかは、「あると便利」だから条件になっていますが、OS が「重要な変化」として認識しないものです。
こういうものは、OS が Llama を起こしてくれないので、トリガにはなれないのです。

また、Llama の側で、わざわざ「状況が変化した瞬間」だけを整った、としている条件があります。
こういうものは、フィルタにはなれません。

トリガとして動作しないようにする、というのは、OS は Llama を起こすのですが、起こされた理由によっては Llama がそれを無視する、ということになります。

「条件すべてが」


Llama に複数の条件を列記すると、そのすべての条件が満たされるまで、実行は行われません。

プログラムの世界では、AND 条件、と呼ばれます。


すでに書いたように、AND 条件では、複数の条件は「フィルタ」と「トリガ」として認識されます。

最初に、条件が整うのは「変化した瞬間」だと書きましたが、これは「トリガ」としての話。フィルタとしては、「瞬間」だけでなく、現在の状態によって条件を認識します。

そして、ひとつでも整っていないフィルタがある場合は、イベントは実行されません。


また、Llama の条件の中には、わざわざ「AND」の指定があります。これは、次に書く OR 条件の中で使うためのものです。



次ページ: 「条件どれかが」


1 2 次ページ

(ページ作成 2012-06-05)
(最終更新 2015-02-09)
第4版 …他の版 初版 2版 3版

前記事:WiFi について     戻る     次記事:パケ代節約
トップページへ

-- share --

0000

-- follow --




- Reverse Link -