Ukážeme si, jak pomocí tlačítek dálkového ovladače Bluetooth (s klíčem USB) ovládat pohotovostní režim, zvyšovat a snižovat hlasitost a ovládat kameru zařízení Room nebo Desk. Vytvoříme makro, které naslouchá příslušným událostem a provádí související akce pomocí rozhraní API zařízení Room nebo Desk.

Funkce vstupního zařízení USB třetí strany je popsána v tomto článku.

V následujícím příkladu je třeba zadat text, který je napsán normálním písmem. Text psaný kurzívou je odpověď, která přichází ze zařízení Room nebo Desk.

1

Přihlaste se k zařízení Room nebo Desk pomocí SSH. Potřebujete místního uživatele správce.

2

Nakonfigurujte zařízení tak, aby umožňovalo použití dálkového ovladače USB třetí strany.

xConfiguration Peripherals InputDevice Mode: On
** end

OK

               

 

Pomocí tohoto příkazu můžete zkontrolovat, zda je konfigurace zapnutá nebo vypnutá:

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

OK

                  
3

Zaregistrujte zařízení pro zpětnou vazbu, abychom byli informováni o stisknutí a uvolnění tlačítek dálkového ovladače.

xFeedback Register /event/userinterface/inputdevice
** end

OK

               

 

Pomocí tohoto příkazu můžete zkontrolovat, pro které zpětné vazby je zařízení registrováno:

xFeedback list
/event/userinterface/inputdevice
** end

OK

                  
4

Stisknutím a uvolněním tlačítka na dálkovém ovladači zkontrolujte, zda registrace zpětné vazby funguje.

Tato akce vytvoří dvě události: Stisknutoa Uvolněno. Pokud stisknete a podržíte tlačítko, zobrazí se událost Stisknuto, dokud tlačítko neuvolníte. Poté se vygeneruje událost Uvolněno.

Tyto události jsou zaznamenány při stisknutí a uvolnění klávesy 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

Napište makro, které bude naslouchat příslušným událostem InputDevice a provede související akce pomocí rozhraní API zařízení.

  • Probuďte k životu tlačítka pohotovostního režimu, zvýšení a snížení hlasitosti. Když makro uvidí událost obsahující KEY_VOLUMEUP, KEY_VOLUMEDOWN nebo KEY_SLEEP, provede příslušné příkazy.

  • Vytvoření funkce ovládání kamery pro klávesy se šipkami. Chceme, aby se kamera pohybovala tak dlouho, dokud je stisknuto tlačítko. Po uvolnění tlačítka se pohyb kamery zastaví. Když makro vidí událost obsahující KEY_LEFT, KEY_RIGHT, KEY_UP nebo KEY_DOWN, provede příslušné příkazy.

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