LIRCを用いたセットトップボックスの制御
RokuやXbox 360のようなセットトップボックスは、通常、自動化やテストを困難にする専有のオペレーティングシステムを搭載して出荷されます。これらのデバイスの多くは、Linux Infrared Remote Control (LIRC)、Windowsでも利用可能なオープンソースのツールであるWinLIRCを使用して制御することができます。本記事では、LIRCを使用してセットトップボックスをテストするための手順を段階的に説明します。
LIRCを使用する理由は?
LIRCは、IRトランシーバへ送信される、またはそのから発信される赤外線リモート(IR)信号をデコードし、LIRCを実行しているマシンから他のデバイスを制御したり、リモートコントロールからLIRCを実行しているマシンを制御したりすることができます。この最初のプロセスは、デバイスやアプリケーションのテストのためにセットトップボックスを自動化するために使用することができます。
セットトップボックスはしばしば、デバイスのOSやインストールされたアプリの自動化を可能にする専有的な、または複雑なAPIとともに出荷されますが、実際のIR信号を送信することは、自動化のための有利な方法です。LIRCは、あなたの自動化プロジェクトとコードを簡略化し、デバイスを人間のユーザーと同じように制御します。これにより、デバイスのユーザーエクスペリエンスをより現実的にテストすることができます。
LIRCは、IRトランシーバを通じてIR信号を送信するために解釈するソケット接続とメッセージを受け入れるシンプルなサーバです。SenseTalkには、ソケットを開き、書き込むための必要なコマンドが含まれています。これは、Eggplant Functionalのスクリプトを使用して、IR信号を介してテストデバイスを制御することができることを意味します。また、Eggplant Functionalの画像検索を使用してデバイスのUIを同時に検証することができます。
合わせて、Eggplant Functionalの画像ベースの自動化アプローチとLIRCは、セットトップボックスのテストの自動化に非常に柔軟でユニバーサルな、非侵襲的な方法を提供します。
Eggplant FunctionalとLIRCを統合するためのシステム要件
ソフトウェア
私たちは特にWinLIRCに対して内部テストを行いました。しかし、LIRCはよくサポートされているため、LIRCのホストとしてLinuxシステムを使用したい場合には適切な選択肢です。
ハードウェア
WinLIRCには多くの異なるIRトランシーバのためのプラグインが含まれていますが、私たちは内部テストに基づきIguanaWorksを推奨します。
私たちはIguanaWorks IR TransceiverのDual LEDモデルに対して内部テストを行いましたが、IRエミッター(ブラスター)を活用するために他のモデルを検討することをお勧めします。私たちはIguanaWorksをWindows上でテストしましたが、Linuxドライバも利用可能です。
- LIRCホストマシン上の利用可能なUSBポート1つ
IguanaWorks IR TransceiverとWinLIRCの設定
-
IguanaWorks IR TransceiverをWinLIRCホストマシンの利用可能なUSBポートに接続します。
-
IguanaWorksドライバ (IguanaIR-x.x.x.exe)をインストールします。下記のようにデバイスマネージャにIRトランシーバが表示されることを確認します。
-
WinLIRCのウェブページから 最新のWinLIRC.zipをダウンロードします。
-
.zipファイルをWindowsマシンの希望の場所に解凍します。解凍したフォルダの内容は以下のように表示されます。
-
抽出したフォルダの中で、winlirc.exeを右クリックし、Propertiesを選択します。
-
Compatibilityタブで、Change Settings for all Usersをクリックします。
-
Compatibility for all usersタブで、Run this program as an administratorのチェックボックスを選択します。
-
Applyをクリックし、次にOK、そしてOKをクリックしてプロパティパネルを閉じます。
-
WinLIRCの抽出したフォルダで、winlirc.exeをダブルクリックし、未確認のアプリケーションを実行を選択します。エラーダイアログ「WinLIRCの初期化に失敗しました」が表示されるはずです。OKをクリックして設定を変更します。
-
セットアップパネルからIguanaPlugin.dllを選択し、リモート設定ファイルを指定します。設定ファイルは、LIRCリモートデータベースで数十のリモートに利用可能です。デバイスやリモートに適した設定ファイルを見つけて、LIRCホストマシンにダウンロードします。デバイスに合ったものを見つけるまで、さまざまな設定ファイルを試す必要があるかもしれません。セットアップと設定ファイルについての詳しい情報は、WinLIRC Usage Guideをご覧ください。
ノートサーバーはデフォルトで8765ポートで動作します。これはセットアップパネルに表示されます。このポート番号をメモしておき、Eggplant Functionalから必要なソケットを開く際に使します。
-
イグ アナプラグインと希望の設定ファイルを選択した後、セットアップパネルでOKをクリックします。WinLIRCはシステムトレイで続行されます。
ノートあなたが後でwinlirc.exeを実行すると、コマンドプロンプトが画面にフラッシュしますが、GUIは起動しません。プラグインとリモート設定ファイルで設定した後、WinLIRCはデフォルトでシステムトレイに開きます。
-
トレイアイコンを右クリックし、Toggle WindowをクリックしてWinLIRC GUIを起動します。このGUIでは、WinLIRC、IguanaWorks IR Transceiver、およびテストデバイス間の機能性をテストできます。Eggplant Functionalから制御しようとする前に、WinLIRCがテストデバイスと正常に動作していることを確認してください。
-
IguanaWorks IR TransceiverとIRエミッター(該当する場合)をテストデバイスの前面に物理的に整列させ、ドロップダウンメニューからリモート(リモート設定ファイルに記載されている名前)を選択し、コードドロップダウ ンメニューからアクションを選択します。Send Codeをクリックし、テストデバイスで目的のアクションが行われることを確認します。
必要な機能を確認するために、他のコードもテストします。Send Codeがテストデバイスに変化をもたらさない場合は、設定を再確認してください。WinLIRC GUIで再設定をク ックし、WinLIRCホストマシンから別のリモート設定ファイルを選択してみてください。
-
WinLIRC GUIが正常に機能し、デバイスにコードを送信できることを確認したら、Hide WindowをクリックしてWinLIRCをトレイに送ります。WinLIRCはサーバーとしてバックグラウンドで動作を続けます。
Eggplant FunctionalからWinLIRCサーバーへのメッセージ送信
IR信号を送信する場合、LIRC内のirsendプログラムを使用します。LIRCサーバーはirsendへのメッセージを次の形式で期待します:
コマンド リモート名 ボタン名 繰り返し回数
Irsendには、利用可能なコマンドのリストがありますが、ここではEggplant Functionalからテストデバイスを制御するためにSEND_ONCEを使用します。
RemoteNameとButtonNameの値はリモート設定ファイルから取得します。以下の例は、RemoteNameがRoku_Netflix_Player
で、ButtonNamesがHOME
、RIGHT
などを含むリモート設定ファイルの内容を示しています。
TimesToRepeatはIR信号を送信する回数を16進数で示したものです。ほとんどの状況では、00の値が適切ですが、自動化に必要に応じてこの値を調整できます。
Eggplant FunctionalからIR対応のテストデバイスを制御する
WinLIRCがテストデバイスで正常に動作し、リモートの設定ファイルで使用されるRemoteNameとButtonNamesを取得した後、Eggplant Functionalでテストデバイスを制御する準備が整います。以下のようなコードを持つ新しいEggplant Functionalスクリプトを作成します:
Params RemoteName, ButtonName
put "localhost:8765" into mySocket -- LIRCサーバーのIPとポートを変数に保存します。この場合、LIRCホストとEggplant Functionalホストは同一マシンなので、localhostが適切です
write "SEND_ONCE" && RemoteName && ButtonName && "00" &return to socket mySocket
Log ButtonName && "sent to" && RemoteName -- スクリプトからのフィードバックを増やすためのカスタムログ
スクリプト(名前は“IRControl”)を、希望するRemoteNameとButtonNameを使用して呼び出します。この例のスクリプトは、Rokuのニュースセクションからトップストーリーを選択するための自動化です:
put "localhost:8765" into mySocket
open socket mySocket
repeat until imagefound(image:"HomeMenu_Selected",waitFor:0)
IRControl "Roku_Netflix_Player", "HOME"
wait 2
end repeat
repeat until imagefound (image:"NewsMenu_Selected",waitFor:0)
IRControl "Roku_Netflix_Player", "DOWN"
wait 2
end repeat
IRControl "Roku_Netflix_Player","OK"
WaitFor 5, "TopStories_Selected"
IRControl "Roku_Netflix_Player","OK"
WaitFor 10, "SelectedStory"
close socket mySocket -- 完了したらソケットを閉じます
IRControlコマンドとWaitForコマンドが交互になることに注意してください。