Vi visar hur du använder tangenterna på en Bluetooth-fjärrkontroll (med en USB-dongel) för att kontrollera standby-funktionen, öka och minska volymen och styra kameran på en rumsenhet eller skrivbordsenhet. Vi skapar ett makro som lyssnar efter relevanta händelser och utför de tillhörande åtgärderna med hjälp av API för rumsenheten eller skrivbordsenheten.

Funktionen för USB-inmatningsenhet från tredje part beskrivs i denna artikel.

I följande exempel ska du skriva in den text som skrivs i normal stil. Texten i kursiv stil är det svar som tas emot från rumsenheten eller skrivbordsenheten.

1

Logga in på rumsenheten eller skrivbordsenheten på SSH. Du behöver en lokal admin-användare.

2

Konfigurera enheten för att tillåta användning av en USB-fjärrkontroll från tredje part.

xConfiguration Peripherals InputDevice Mode: On
** end

OK

               

 

Du kan kontrollera om konfigurationen är aktiv eller inaktiv genom att använda det här kommandot:

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

OK

                  
3

Registrera dig för feedback, så att du aviseras när knapparna på fjärrkontrollen trycks ned och släpps.

xFeedback Register /event/userinterface/inputdevice
** end

OK

               

 

Du kan kontrollera vilka typer av feedback enheten är registrerad för med det här kommandot:

xFeedback list
/event/userinterface/inputdevice
** end

OK

                  
4

Tryck på och släpp en knapp på fjärrkontrollen för att kontrollera att feedbackregistrering fungerar.

Den här åtgärden genererar två händelser: Nedtryckt och Släppt. Om du trycker på och håller ned en knapp, visas händelsen Nedtryckt tills du släpper knappen. Då genereras händelsen Släppt.

Dessa händelser genereras när du trycker ned och släpper Enter-tangenten:

 
                  
*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 ett makro som avlyssnar relevanta inmatningsenhet-händelser och utför de tillhörande åtgärderna med hjälp av API för enheten.

  • Ge liv åt knapparna för standby, höj volym och sänk volym. Relaterade kommandon utförs när makrot ser en händelse som innehåller KEY_VOLUMEUP, KEY_VOLUMEDOWN eller KEY_SLEEP.

  • Skapa en kamerakontrollfunktion för piltangenterna. Vi vill att kameran ska fortsätta att röra sig så länge knappen hålls nedtryckt. När knappen släpps ska kamerarörelsen upphöra. Relaterade kommandon utförs när makrot ser en händelse som innehåller KEY_LEFT, KEY_RIGHT, KEY_UP eller 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();