“Automate”の動作について補足

Ring_max_flow.jpg 昨日の「夏向きのスマホ・アプリ」で、機能実現に使用したAutomateについて、説明を補足。

Automateというアプリは、いわゆるタスカーというジャンルのアプリで、スマホのOS(Android)の機能や、インストールされているアプリの起動・停止を一連の手続きとして一括処理できるようにするものである。
英語だけれど、ちゃんとしたドキュメントがネット上で提供されている
用語だけを列記すると、一連の手続きの実行プロセスを“Fiber”と呼び、手続きの記述を“Flow”と呼んでいる。手続きの作成イコールFlowの作成である。

Flowは、“Block”の組合せで記述する。
Blockには、OSの機能を実行する、他のアプリを呼び出す、Flowの流れを制御する、といった働きがあって、各Blockには、IN(制御の入口)と、OUT(制御の出口、Blockの状態でYesとNoの2つあるものもある)を持つ。
Flowの作成は、このBlockをつなぎあわせることが作成する。
これはBlockのOUTから次のBlockのINへと指でドラッグすることででき、とてもわかりやすくできている。

今日は、昨日のカバンへの出し入れで苦労したセンサーの使い方だけを説明する。

スマホ内蔵のセンサーについては、それぞれに対応したBlockが用意されている。
最初にテストしたのは近接センサー、結局採用したのは照度センサーなのだが、照度センサーを使って、センサーの説明をする。

その前に、こうしたセンサーの状態を検知して動作するようなプログラムを書く場合、避けるべきことは、目標の状態になったかどうかの検知を、プログラム自身のループで実行することである。そういうことをすると、無駄にCPUを使って、他のアプリの動作に影響するだろうし、何よりバッテリーの消耗が激しくなる。
そうしたループを書かざるを得ない場合は、途中に必ず待ち(Automateの場合は“Delay”というブロック)を入れて、CPUを占有しないようにしなければならない。


Screenshot_20170707-094815.jpg さて、照度センサーの説明は、Automateのdocumentでは次のように説明されている。

Ambient light

A decision block that checks the ambient light using the built-in sensor.

If the proceed option is set to Immediately, then check the current light level without pausing the fiber. If set to When changed, then the fiber will pause until the light level comes within the lux range, or goes out of range.

If both minimum level and maximum level is set and doesn’t evaluate to null then the light level must be within the range. If only minimum is set, then the level must be greater than or equal to it. If only maximum is set, then the level must be less than or equal to it. If neither minimum nor maximum is set, then the current level is just assigned to the current level variable without a check.


照度センサーブロックには、照度が一定範囲に入るまでウェイトする機能があるように読める。それはproceed optionで、When changedを指定し、かつ、input variablesで、範囲指定をすれば良いようになっている。

Ring_max_flow-crop.jpg 混乱したのは、このブロックにYesとNoの出口があって、条件を満たした場合は解るけれど、満たさない場合の出口ってどういうことなんだろう、ひょっとしたら満たさなくてもブロックを抜けるんじゃないかと思ったから。
試しにNo側でダイヤログを出すようにしてみたら、そこへ抜けることもあったが、どういう状況かわからない。

なお、proceed optionで、immediatelyを指定すれば、直ちに照度の値をセットしてブロックを抜けるように読めるけれど、やってみるとここで停止してしまうようだ。


というわけで、ドキュメントに頼れないところがあるのだけれど、幸い、Automateにはログ機能が付いている。
Flowを実行すると、どのブロックを実行しているのかがログとして出てくる(ログを出さない指定も可)。
これで、Ambient lightのブロックで、実行が停止していることがはっきりわかる(ログを信じればだけど)。
スクリーンショットではわかりにくいので、どんなログが出されているかをこちらへ示す。
Screenshot_20170707-102419.jpg
2017-07-07 10:22:01.426 INFO 108@1: Flow beginning
2017-07-07 10:22:01.427 INFO 108@27: Ambient light?
2017-07-07 10:22:08.311 INFO 108@2: Audio volume set
2017-07-07 10:22:08.326 INFO 108@3: Audio volume set
2017-07-07 10:22:08.331 INFO 108@28: Ambient light?
2017-07-07 10:22:09.540 INFO 108@9: Audio volume set
2017-07-07 10:22:09.552 INFO 108@10: Audio volume set
2017-07-07 10:22:09.557 INFO 108@27: Ambient light?

起動してから、センサー部分に指をおいて照度を変えたりしているので、複数あるAmbient light?ブロックを1回ずつ通過し、最初に通過したAmbient light?ブロックで待機していることがわかる。

なお、“INFO 108@n”の@以下の数字は、Flowのブロック番号で、Flow図中にあるもの。付番の仕方はアプリ任せである(ブロックを作成するごとに1番ずつインクリメントしているようだ)。
また、このログを取得してからフローをいじった(動作確認のバイブとメッセージの追加)ので、フローとは少し違う。


目的の機能を実現したので、他のいろいろなブロックは試していないが、最終的なフローになるまでに試したものとしては、条件判断(GENERALのExpression true)、変数への代入(GENERALのVariable set)など。
昨日の目的で最重要の音量設定ブロックはもちろん使っているが、残念なことに、設定する音量(パーセンテージ)には変数が使えず、即値のみである。

いろんなことができそうなアプリではある。
しかし、常時起動しておくような手続きは、バッテリー消費が激しいだろうから、手動起動のもの以外は抑制的に使うべきだろう。
また、実用からは離れて、Androidの機能について勉強するのにも良いアプリだと思う。

というか、Androidの機能や構成を理解していなければどうしようもない。
私も手探り状態である。


関連記事
スポンサーサイト

コメントの投稿

非公開コメント

Gallery
検索フォーム

⇒記事一覧

プロフィール

六二郎。六二郎。


定年退職
苦しい家計の足しに再就職
=いつクビになってもええねん
 言うたもん勝ちや!のブログ
リンク
最新記事
最新コメント
最新トラックバック
アーカイブ
カテゴリ
タグ

書評 ITガジェット マイナンバー Audio/Visual 

リンク
現在の閲覧者数
聞いたもん