Mostramos cómo utilizar las teclas de un control remoto con Bluetooth (con un adaptador de USB) para controlar la función de espera, aumentar y disminuir el volumen, y controlar la cámara de un dispositivo para salas o escritorios. Creamos una macro que escucha los eventos pertinentes y lleva a cabo las acciones relacionadas mediante la API del dispositivo para salas o escritorios.

La función de los dispositivos de entrada USB de terceros se describe en este artículo.

En el siguiente ejemplo, debe introducir el texto escrito en una fuente normal. El texto en cursiva es la respuesta recibida del dispositivo para salas o escritorios.

1

Inicie sesión en el dispositivo para salas o escritorios en SSH. Necesitará un usuario local de administrador.

2

Configure el dispositivo para permitir el uso de un control remoto USB de terceros.

xConfiguration Peripherals InputDevice Mode: On
** end

OK

               

 

Puede comprobar si la configuración se encuentra activada o desactivada mediante este comando:

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

OK

                  
3

Regístrese para recibir comentarios, de forma que reciba notificaciones cuando se presionen o suelten los botones del control remoto.

xFeedback Register /event/userinterface/inputdevice
** end

OK

               

 

Puede verificar a qué comentarios se registró el dispositivo mediante este comando:

xFeedback list
/event/userinterface/inputdevice
** end

OK

                  
4

Presione y suelte un botón en el control remoto para comprobar que el registro de comentarios funciona.

Esta acción genera dos eventos: Pressed (Presionado) y Released (Liberación). Si mantiene presionado un botón, verá el evento Pressed (Presionado) hasta que suelte el botón. Luego, se generará el evento Released (Liberación).

Estos eventos se emiten cuando se presiona y libera la tecla Intro:

 
                  
*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

Escriba una macro que escuche los eventos pertinentes del InputDevice (Dispositivo de entrada) y lleve a cabo las acciones relacionadas mediante la API del dispositivo.

  • Active los botones de espera, de subir el volumen y de bajar el volumen. Cuando la macro detecta un evento que contiene KEY_VOLUMEUP, KEY_VOLUMEDOWN o KEY_SLEEP, ejecuta los comandos relacionados.

  • Cree una función de control de la cámara para las teclas de dirección. Queremos seguir moviendo la cámara mientras el botón esté presionado. Cuando se suelta el botón, se detiene el movimiento de la cámara. Cuando la macro detecta un evento que contiene KEY_LEFT, KEY_RIGHT, KEY_UP o KEY_DOWN, ejecuta los comandos relacionados.

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