블루투스 리모컨(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

피드백 등록이 작동하는지 확인하려면 리모컨의 버튼을 눌렀다가 놓습니다.

이 동작은 PressedReleased의 두 이벤트를 생성합니다. 버튼을 길게 누르면 버튼을 놓을 때까지 Pressed 이벤트가 표시됩니다. 그런 다음 Released 이벤트가 생성됩니다.

이러한 이벤트는 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();