検索
Start typing to search...

HTTP経由でのAximmetryの外部制御

Author:

導入

このドキュメントでは、HTTP プロトコルを使用して Aximmetry を外部から制御する方法について説明します。

ネットワーク設定

Aximmetry は、POST メソッドで送信される HTTP コマンドを使用して制御できます。

この機能を有効にするには、編集 / 設定 へ移動し、HTTP 制御を有効にする をチェックします。

AximmetryがHTTPメッセージを受信するポートを指定することもできます。ほとんどのケースでは、デフォルト設定のままにしておいてください。

コマンドは、以下のURLに送信する必要があります:http://ip_of_the_Aximmetry_machine:Port

例:http://127.0.0.1:21463

実際のコマンドは、HTTPメッセージのコンテンツセクションに配置する必要があります。

コマンド形式

コマンドはXML形式で記述されます。

モジュールパスを使用する

最も重要なコマンドはComposerSetPinValueActionで、複合体内の任意のモジュールの任意のピンの値を設定できます。構文は次のとおりです:

<action type="ComposerSetPinValueAction" 
Module="module_path" Pin="pin_name"
Value="pin_value" />

属性解説:

  • type: コマンドの名前です。この例では ComposerSetPinValueAction です。すべての利用可能なコマンドのリストは、利用可能なコマンド セクションを参照してください。
  • Module: モジュールのパスを指定します。パス形式は Root\Subcompound『s name (if any)\Module』s name の構造です。
  • Pin: モジュールの特定の入力ピンを指定します。
  • Value: ピンに設定する新しい値を指定します。

画面に表示される複数のテキストを切り替えたい場合。

以下の設定では、Switch TextモジュールのSelectedピンを変更することで実現できます:

番号7に設定するには、以下のコマンドを送信します:

<action type="ComposerSetPinValueAction" 
Module="Root\Switch Text" Pin="Selected" Value="7" />

コピーフルパスオプションの使用

ピンのパスを簡単に取得するには、任意のピンを右クリックし、コピーフルパスを選択します:

NOTE: このオプションは、フローエディターのピン値パネルとコントロールボードの両方で利用可能です。また、フローエディターでピンを直接右クリックしてもアクセスできます。

上記のシナリオでは、返されるパスは次のようにになります: 「Root\Switch Text:Selected」

ここで「Root\Switch Text」はモジュールパス、「Selected」はピンです。

ルートへの露出

実践では、制御したいすべてのピンをRootレベルに露出させる方が簡単です。これにより、モジュールパスを扱う必要がなくなります。例:

注:ルートに露出されたピンはダッシュボードパネルにも表示され、Aximmetry Composer内でのアクセスが容易になります。

この場合、以下のコマンドを使用できます:

<action type="ComposerSetPinValueAction" 
Module="Root" Pin="TextNo" Value="7" />

もちろん、テキスト自体を直接設定することもできます:

<action type="ComposerSetPinValueAction" 
Module="Root" Pin="Display Text" Value="表示したいテキスト" />

パネルパスを使用する

コントロールボードのボタンを直接指定することもできます。

その場合、ComposerCtrBoardPressButtonAction コマンドを使用します:

<action type="ComposerCtrBoardPressButtonAction" 
Module="panel_path" Button="button_name" />

これはパネル上のボタンを押す動作をシミュレートします。

例えば、標準のVirtualCamコントロールボード内でカメラを切り替えたい場合。

panel_pathmodule_pathと非常に似ていますが、複合名だけでなくコントロールボード名も参照できます。

この場合、VirtualCam_3-Camという複合名があり、その中にCAMERASコントロールボード、さらにその中にSELECT CAMERAパネルがあります。

例えば、CAM 2 ボタンを押したい場合、次のように記述します:

<action type="ComposerCtrBoardPressButtonAction" 
Module="Root\VirtualCam_3-Cam\CAMERAS\SELECT CAMERA" Button="CAM 2" />

論理的な ON/OFF ボタンがある場合、押すと常に ON と OFF の間で切り替わります。しかし、明示的にどの状態にするかを指定したい場合もあります。そのために、ComposerCtrBoardSetButtonActionという別のコマンドが用意されています。

<action type="ComposerCtrBoardPressButtonAction" 
Module="panel_path" Button="button_name"
State="True/False" />

例えば、同じコントロールボードでストリーミングをオンにする場合:

<action type="ComposerCtrBoardSetButtonAction" 
Module="Root\VirtualCam_3-Cam\CAMERAS\STREAMING"
Button="On" State="True" />

NOTE: この場合、ボタンにはアイコンが表示されていますが、これは特殊な名前 On を使用しているためです。この名前をコマンドで指定する必要があります。

返り値

返される文字列は、次の形式のXMLです:

<response Code="code" Message="message" />

Code=「0」 は、すべて正常に実行されたことを意味します。それ以外の場合は、エラーコードとエラーメッセージが伴います。

クエリアクションの場合、応答にはReturnValueセクションも含まれます。以下を参照してください。

<response Code="0" Message="OK">
    <ReturnValue ...... >
</response>

利用可能なコマンド

ComposerCloseAllDocumentsAction

Composerで開いているすべてのドキュメントを保存を確認せずに閉じます。

<action type="ComposerCloseAllDocumentsAction"/>

ComposerOpenAndRunDocumentAction

  • CloseAll
  • Path
<action type="ComposerOpenAndRunDocument" CloseAll="True/False" Path="path_of_xcomp_file"/>

ComposerRestartApplicationAction

  • ReopenCurrentlyRunningDocument (true/false)
  • OpenDocument
<action type="ComposerRestartApplicationAction" ReopenCurrentlyRunningDocument="True" />

または

<action type="ComposerRestartApplicationAction" OpenDocument="xcomp_ファイルのパス" />

ComposerSetPinValueAction

  • モジュール
  • ピン


<action type="ComposerSetPinValueAction" Module="モジュールパス" Pin="ピン名" Value="ピン値" />

ComposerGetPinValueAction

  • Module
  • Pin
<action type="ComposerGetPinValueAction" Module="module_path" Pin="pin_name" />

応答形式:

<response Code="0" Message="OK">
    <ReturnValue type="value_Type" value="pin_value" />
</response>

ComposerCtrBoardPressButtonAction

  • Module
  • Button
<action type="ComposerCtrBoardPressButtonAction" Module="panel_path" Button="button_name" />

ComposerCtrBoardSetButtonAction

  • Module
  • Button
  • State (true/false)
<action type="ComposerCtrBoardPressButtonAction" Module="panel_path" Button="button_name"  State="True/False" />

ComposerFindModulesAction

  • Module
  • 名前パターン
  • 再帰的 (true/false)

指定されたルート複合体の下にある名前がパターンに一致するすべてのモジュールのリストを返します。

<action type="ComposerFindModulesAction" Module="root_module_path" NamePattern="wildcard_pattern"  Recursive="True/False" />

応答形式:

<response Code="0" Message="OK">


<ReturnValue>
        <item value="module_1_path" />
        <item value="module_2_path" />
...................
    </ReturnValue>
</response>

ComposerEnumPinsAction

  • Module

指定されたモジュールの利用可能な入力ピンとそのタイプの一覧を返します。

<action type="ComposerEnumPinsAction" Module="module_path" />

応答形式:

<response Code="0" Message="OK">
    <ReturnValue>
        <item name="pin_1_name" type="pin_1_type" />
        <item name="pin_2_name" type="pin_2_type" />
        ..............
    </ReturnValue>
</response>

ComposerEnumCtrBoardsAction

  • Module
  • 再帰的 (true/false)

指定されたルートコンパウンド下のすべてのコントロールボードのリストを返します。

<action type="ComposerEnumCtrBoardsAction" Module="root_module_path" Recursive="True/False" />

応答形式:

<response Code="0" Message="OK">
    <ReturnValue>
        <item name="control_board_1_name" path="control_board_1_path" />
        <item name="control_board_2_name" path="control_board_2_path" />
...................


</ReturnValue>
</response>

ComposerEnumCtrBoardPanelsAction

  • Module

指定されたコントロールボード下のすべてのパネルのリストを返します。

<action type="ComposerEnumCtrBoardPanelsAction" Module="control_board_path" />

応答形式:

<response Code="0" Message="OK">
    <ReturnValue>
        <item name="panel_1_name" path="panel_1_path" />
        <item name="panel_2_name" path="panel_2_path" />
...................


</ReturnValue>
</response>

ComposerEnumCtrBoardButtonsAction

  • Module

指定されたコントロールボードパネルのボタン一覧とそのタイプを返します。

<action type="ComposerEnumCtrBoardButtonsAction" Module="panel_path" />

応答形式:

<response Code="0" Message="OK">
    <ReturnValue>
        <item name="button_1_name" type="button_1_type" group="button_1_group" index="button_1_index"  gap="button_1_gap" />


<item name="button_2_name" type="button_2_type" group="button_2_group" index="button_2_index"  gap="button_2_gap" />
        ..............
</ReturnValue>
</response>
  • タイプが 「Trigger」 の場合、ボタンはトリガーピンに属し、クリックごとにトリガー信号を発信します。
  • タイプが 「Switch」 の場合、ボタンは論理ピンに属し、クリックでオン/オフを切り替えることができます。
  • タイプが 「Enum」 の場合、ボタンは整数ピンに属する複数のボタンのグループの一部です。グループは group 属性で識別されます。同じグループ番号を持つボタンは同じ整数ピンに属します。グループ内では、クリックで一度に1つのボタンしか選択できません。index属性は、ボタンが選択された際にピンに割り当てられる整数値を表します。
  • タイプが「Flags」の場合、動作は「Enum」と類似していますが、ボタンは整数値内の個々のビットのオン/オフ状態を表します。各ボタンはクリックで個別にオン/オフできます。index属性は、0から始まるビットのインデックスを表します。

gap は、UI上のボタン前に挿入される空白の数を表します。

ComposerEnumCtrBoardPropertiesAction

  • Module

指定されたコントロールボードパネルの可用なプロパティ一覧とそのタイプを返します。

<action type="ComposerEnumCtrBoardPropertiesAction" Module="panel_path" />

応答形式:

<response Code="0" Message="OK">
    <ReturnValue>
        <item name="property_1_name" type="property_1_type" />
        <item name="property_2_name" type="property_2_type" />
        ..............
    </ReturnValue>
</response>

グループ化コマンド

複数のプロパティ/ボタンを一度に変更したい場合、またはすべてのコマンドを単一のHTTPリクエストで送信したい場合は、ComposerGroupAction コマンドを使用できます。

<action type="ComposerGroupAction">
    <action type=........ />
    <action type=........ />
    <action type=........ />
    .....
</action>

リスト内の各アクションは、上記で説明したコマンドのいずれかです。各アクションはComposerGroupActionとしても指定可能であり、階層的なグループ化を実現できます。

コマンドの送信

HTTP POSTコマンドを送信する方法は複数存在するため、可能な操作は無限です。

このガイドの例では、コマンドの送信にreqbinを使用します。

まず、アドレスを指定します:

これはガイドの冒頭で使用したのと同じものです。

次に、ヘッダー タブに移動し、次のように入力します:

Content-Type: application/xml

その後、コンテンツ タブに移動し、XML コマンドを記述します:

最後に、送信をクリックすると、コマンドが Aximmetry に適用されます:

JavaScript 使用時の注意点

一般的なシナリオは、Aximmetry用のカスタムインターフェースを実装したウェブサイトからJavaScriptでHTTPインターフェースを呼び出す場合です。

NOTE 1: JavaScript XMLHttpRequestを含む一部の送信APIは、Content-Typeが「text/plain」でない場合、実際のPOSTメッセージ送信前にOPTIONSリクエストを送信します。AximmetryはOPTIONSリクエストを処理しません。この場合、Content-Typeを設定しないか、「text/plain」に設定してください。

NOTE 2: JavaScriptでファイルやモジュールパスを文字列として指定する際は、バックスラッシュ (\) 文字がエスケープシーケンスを表す点に注意してください。したがって、実際のバックスラッシュを追加するには、ダブルバックスラッシュを記述する必要があります。例:

「Root\\VirtualCam_3-Cam\\CAMERAS\\SELECT CAMERA」

NOTE 3: JavaScript で XML コマンドを文字列として構築する際、文字列自体または XML 内の属性にシングルクォートを使用できます。例:

cmd = 『<action type="ComposerCtrBoardSetButtonAction" Module="Root\\VirtualCam_3-Cam\\CAMERAS\\STREAMING" Button="On" State="』 + state + 『" />』;

または

cmd = 「<action type=『ComposerCtrBoardSetButtonAction』 Module=『Root\\VirtualCam_3-Cam\\CAMERAS\\STREAMING』 Button=『On』 State=『」 + state + 「』 />」;

もちろん、テンプレートリテラルを使用することもできます:

cmd = `<action type="ComposerCtrBoardSetButtonAction" Module="Root\\VirtualCam_3-Cam\\CAMERAS\\STREAMING" Button="On" State="${state}" />`;

記事内容

Loading
Close
Loading spinner icon
1/10