Wir zeigen, wie die Tasten einer Bluetooth-Fernbedienung (mit einem USB-Dongle) verwendet werden, um die Standby-Funktion zu steuern, die Lautstärke zu erhöhen und zu verringern und die Kamera eines Raum- oder Schreibtischgeräts zu steuern. Wir erstellen ein Makro, das bestimmte Ereignisse überwacht und die zugeordneten Aktionen mit der API des Raum- oder Schreibtischgeräts ausführt.

Die Funktion des USB-Eingabegeräts eines Drittanbieters wird in diesem Artikel beschrieben.

Im folgenden Beispiel müssen Sie den Text eingeben, der in normaler Schrift geschrieben ist. Der kursive Text ist die Antwort, die vom Raum- oder Schreibtischgerät empfangen wird.

1

Melden Sie sich am Raum- oder Schreibtischgerät auf SSH an. Sie benötigen einen lokalen Administrator-Benutzer.

2

Konfigurieren Sie das Gerät so, dass die Verwendung einer USB-Fernbedienung eines Drittanbieters ermöglicht wird.

xConfiguration Peripherals InputDevice Mode: On
** end

OK

               

 

Sie können überprüfen, ob die Konfiguration Ein oder Aus ist, indem Sie den folgenden Befehl verwenden:

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

OK

                  
3

Registrieren Sie Ihr Feedback, damit wir benachrichtigt werden, wenn die Tasten der Fernbedienung gedrückt und losgelassen werden.

xFeedback Register /event/userinterface/inputdevice
** end

OK

               

 

Sie können überprüfen, für welche Feedbacks das Gerät zur Verwendung dieses Befehls registriert ist:

xFeedback list
/event/userinterface/inputdevice
** end

OK

                  
4

Drücken Sie eine Taste auf der Fernbedienung und lassen Sie sie los, um zu überprüfen, welche Feedback-Registrierung funktioniert.

Diese Aktion generiert zwei Ereignisse: Gedrückt und Freigegeben. Wenn Sie eine Taste drücken und halten, wird Ihnen das Ereignis Gedrückt angezeigt, bis Sie die Taste loslassen. Das Ereignis Freigegeben wird generiert.

Diese Ereignisse werden ausgegeben, wenn die Eingabetaste gedrückt und losgelassen wird:

 
                  
*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

Schreiben Sie ein Makro, das relevante InputDevice-Ereignisse überwacht und die zugeordneten Aktionen mit der API des Geräts ausführt.

  • Aktivieren Sie die Standby- und Lautstärketasten. Wenn das Makro ein Ereignis mit KEY_VOLUMEUP, KEY_VOLUMEDOWN oder KEY_SLEEP erkennt, führt es die zugehörigen Befehle aus.

  • Erstellen Sie die Funktion zur Kamerasteuerung für die Pfeiltasten. Wir möchten, dass sich die Kamera bewegt, solange die Taste gedrückt wird. Wenn die Taste losgelassen wird, bewegt sich die Kamera nicht mehr. Wenn das Makro ein Ereignis mit KEY_LEFT, KEY_RIGHT, KEY_UP oder KEY_DOWN erkennt, führt es die zugehörigen Befehle aus.

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