Показваме как да използвате клавишите на 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

Натиснете и освободете бутон на дистанционното управление, за да проверите дали регистрацията за обратна връзка работи.

Това действие генерира две събития: Натиснат и Освободен. Ако натиснете и задържите бутон, ще видите Натиснат събитие, докато не освободите бутона. Тогава Освободен се генерира събитие.

Тези събития се издават при натискане и освобождаване на клавиша 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

Напишете макрос, който слуша за съответния Входно устройство събития и извършва свързаните с тях действия с помощта на API на устройството.

  • Оживете бутоните за режим на готовност, увеличаване и намаляване на силата на звука. Когато макросът види събитие, съдържащо KEY_ОБЕМ, КЛЮЧ_VOLUMEDOWN или КЛЮЧ_SLEEP, той изпълнява съответните команди.

  • Създайте функция за управление на камерата за клавишите със стрелки. Искаме да продължим да движим камерата, докато бутонът е натиснат. Когато бутонът се освободи, движението на камерата спира. Когато макросът види събитие, съдържащо KEY_НАЛЯВО, КЛЮЧ_НАДЯСНО, КЛЮЧ_НАГОРЕ или КЛЮЧ_НАДОЛУ, той изпълнява съответните команди.

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();