Vi viser hvordan du bruker tastene til en Bluetooth-fjernkontroll (med en USB-dongle) for å kontrollere standby-funksjonen, øke og redusere volumet og kontrollere kameraet til et rom eller en skrivebordsenhet. Vi lager en makro som lytter etter relevante hendelser, og utfører de tilknyttede handlingene ved å bruke API-en til rommet eller skrivebordsenheten.

Tredjeparts USB-inngangsenhetsfunksjon er beskrevet i denne artikkelen.

I følgende eksempel må du skrive inn teksten som er skrevet med normal skrift. Teksten i kursiv er responsen som mottas fra rommet eller skrivebordsenheten.

1

Logg på rommet eller skrivebordsenheten på SSH. Du trenger en lokal admin bruker.

2

Konfigurer enheten til å tillate bruk av en tredjeparts USB-fjernkontroll.

xConfiguration Peripherals InputDevice Mode: On
** end

OK

               

 

Du kan sjekke om konfigurasjonen er På eller Av ved å bruke denne kommandoen:

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

OK

                  
3

Registrer deg for tilbakemelding, slik at vi får beskjed når fjernkontrollknappene trykkes og slippes.

xFeedback Register /event/userinterface/inputdevice
** end

OK

               

 

Du kan sjekke hvilke tilbakemeldinger enheten er registrert for ved å bruke denne kommandoen:

xFeedback list
/event/userinterface/inputdevice
** end

OK

                  
4

Trykk og slipp en knapp på fjernkontrollen for å sjekke at tilbakemeldingsregistreringen fungerer.

Denne handlingen genererer to hendelser: Trykket og Løslatt. Hvis du trykker og holder en knapp, ser du Trykket hendelsen til du slipper knappen. Og så Løslatt hendelsen genereres.

Disse hendelsene utstedes når du trykker og slipper Enter-tasten:

 
                  
*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

Skriv en makro som lytter etter det aktuelle Inndataenhet hendelser, og utfører de tilknyttede handlingene ved å bruke API-en til enheten.

  • Gjør standby-, volum opp og volum ned-knappene til live. Når makroen ser en hendelse som inneholder KEY_VOLUMEUP, NØKKEL_VOLUMED, eller NØKKEL_SLEEP, den utfører de relaterte kommandoene.

  • Lag en kamerakontrollfunksjon for piltastene. Vi ønsker å fortsette å bevege kameraet så lenge knappen holdes nede. Når knappen slippes, stopper kamerabevegelsen. Når makroen ser en hendelse som inneholder KEY_VENSTRE, NØKKEL_HØYRE, NØKKEL_OPP, eller TAST_NED, utfører den de relaterte kommandoene.

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