Vă arătăm cum să utilizați tastele unei telecomenzi Bluetooth (cu un dongle USB) pentru a controla funcția standby, pentru a crește și a reduce volumul și pentru a controla camera unui dispozitiv de sală sau de birou. Creăm o macrocomandă care urmărește apariția evenimentelor relevante și efectuează acțiunile asociate prin intermediul API-ului dispozitivului de sală sau birou.

Caracteristica dispozitiv de intrare USB de la terți este descrisă în acest articol.

În exemplul următor, trebuie să introduceți textul care este scris cu font normal. Textul cu caractere cursive este răspunsul primit de la dispozitivul de sală sau de birou.

1

Conectați-vă la dispozitivul de sală sau de birou prin SSH. Aveți nevoie de un utilizator admin local.

2

Configurați dispozitivul pentru a permite utilizarea unei telecomenzi USB terțe.

xConfiguration Peripherals InputDevice Mode: On
** end

OK

               

 

Puteți verifica dacă configurația este activată sau dezactivată utilizând această comandă:

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

OK

                  
3

Înregistrați-vă pentru feedback, astfel încât să fim informați când sunt apăsate și eliberate butoanele telecomenzii.

xFeedback Register /event/userinterface/inputdevice
** end

OK

               

 

Puteți verifica pentru ce feedback-uri este înregistrat dispozitivul pentru utilizarea acestei comenzi:

xFeedback list
/event/userinterface/inputdevice
** end

OK

                  
4

Apăsați și eliberați un buton de pe telecomandă pentru a verifica dacă funcționează înregistrarea de feedback.

Această acțiune generează două evenimente: Apăsat și Eliberat. Dacă apăsați și mențineți apăsat un buton, vedeți evenimentul Apăsat până când eliberați butonul. Apoi este generat evenimentul Eliberat.

Aceste evenimente sunt generate atunci când apăsați și eliberați tasta 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

Scrieți o macrocomandă care urmărește evenimentele InputDevice relevante și efectuează acțiunile asociate utilizând API-ul dispozitivului.

  • Aduceți la viață butoanele de pauză, de creștere și de reducere a volumului. Când macrocomanda observă un eveniment care conține KEY_VOLUMEUP, KEY_VOLUMEDOWN sau KEY_SLEEP, execută comenzile corespunzătoare.

  • Creați o funcție de control al camerei pentru tastele săgeată. Dorim să menținem camera în mișcare atâta timp cât este apăsat butonul. Când butonul este eliberat, mișcarea camerei se oprește. Când macrocomanda observă un eveniment care conține KEY_LEFT, KEY_RIGHT, KEY_UP sau KEY_DOWN, execută comenzile corespunzătoare.

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