Bluetooth リモートコントロール(USB ドングル付き)のキーを使用してスタンバイ機能を制御し、音量を増減し、ルームまたはデスクデバイスのカメラを制御する方法を示します。関連するイベントをリッスンするマクロを作成し、部屋またはデスクデバイスの API を使用して関連するアクションを実行します。

他社製 USB 入力デバイス機能には、この記事に記載されています。

次の例では、通常のフォントで書かれているテキストを入力する必要があります。イタリック体のテキストは、ルームまたはデスクデバイスから受信した応答です。

1

SSH で会議室またはデスクデバイスにログインします。ローカル管理者ユーザが必要です。

2

サードパーティ製の USB リモートコントロールを使用できるようにデバイスを設定します。

xConfiguration Peripherals InputDevice Mode: On
** end

OK

               

 

このコマンドを使用して、設定がオンかオフかを確認できます。

xConfiguration Peripherals InputDevice Mode
*c xConfiguration Peripherals InputDevice Mode: On
** end

OK

                  
3

フィードバックを登録して、リモコンのボタンが押されて放されたときに通知されるようにします。

xFeedback Register /event/userinterface/inputdevice
** end

OK

               

 

このコマンドを使用して、デバイスがどのフィードバックを登録しているかを確認できます。

xFeedback list
/event/userinterface/inputdevice
** end

OK

                  
4

フィードバック登録が機能していることを確認するには、リモコンのボタンを押して放します。

このアクションは 2 つのイベントを生成します。押されたそしてリリースした。ボタンを長押しすると、ボタンをリリースするまでイベントは押されたままです。次にリリースされたイベントが生成されます。

Enter キーを押して放すと、これらのイベントが発行されます。

 
                  
*e UserInterface InputDevice Key Action Key: KEY_ENTER
*e UserInterface InputDevice Key Action Code: 28
*e UserInterface InputDevice Key Action Type: Pressed
** end
*e UserInterface InputDevice Key Action Key: KEY_ENTER
*e UserInterface InputDevice Key Action Code: 28
*e UserInterface InputDevice Key Action Type: Released
** end

               
5

関連する InputDevice イベントをリッスンするマクロを書き、デバイスの API を使用して関連するアクションを実行します。

  • スタンバイボタン、音量を上げるボタン、音量を下げるボタンを有効にします。マクロが KEY_VOLUMEUP、KEY_VOLUMEDOWN、または KEY_SLEEP を含むイベントを検出すると、関連するコマンドを実行します。

  • 矢印キー用のカメラ制御機能を作成します。ボタンが押されている限り、カメラを動かし続けます。ボタンを離すと、カメラの動きが止まります。マクロが KEY_LEFT、KEY_RIGHT、KEY_UP、または KEY_DOWN を含むイベントを検出すると、関連コマンドを実行します。

const xapi = require('xapi');

function com(command, args='') {
  xapi.command(command, args);
  log(command + ' ' + JSON.stringify(args));
}

function log(event) {
  console.log(event);
}

function notify(message) {
  xapi.command('UserInterface Message TextLine Display', {
    Text: message,
    duration: 3
  });
}

function cameraControl(motor, direction, cameraId='1') {
  com('Camera Ramp', { 'CameraId': cameraId,
                       [motor]: direction
  });
}

function init() {
  let standbyState;
  xapi.status.get('Standby').then((state) => {standbyState = state.State === 'Off' ? false : true; });
  xapi.status.on('Standby', state => {
      standbyState = state.State === 'Off' ? false : true; 
  });
  
  xapi.event.on('UserInterface InputDevice Key Action', press => {
    if (press.Type == "Pressed") {
      switch (press.Key) {
        case "KEY_LEFT":
          cameraControl('Pan', 'Left');
          break;
        case "KEY_RIGHT":
          cameraControl('Pan', 'Right');
          break;
        case "KEY_UP":
          cameraControl('Tilt', 'Up');
          break;
        case "KEY_DOWN":
          cameraControl('Tilt', 'Down');
          break;
        default:
          break;
        }
    } else if (press.Type == "Released") {
        switch (press.Key) {
          case "KEY_LEFT":
            cameraControl('Pan', 'Stop');
          break;
          case "KEY_RIGHT":
            cameraControl('Pan', 'Stop');
          break;
          case "KEY_UP":
            cameraControl('Tilt', 'Stop');
          break;
          case "KEY_DOWN":
            cameraControl('Tilt', 'Stop');
          break;
          case 'KEY_VOLUMEUP':
            com('Audio Volume Increase');
            break;
          case 'KEY_VOLUMEDOWN':
            com('Audio Volume Decrease');
            break;
          case 'KEY_SLEEP':
            com(standbyState ? 'Standby Deactivate' : 'Standby Activate');
            break;
          default:
            break;
          }
      } 
  });
}

init();