Pokazujemo kako da koristite tastere Bluetooth daljinskog upravljača (sa USB dongle-om) za kontrolu funkcije pripravnosti, povećanje i smanjenje jačine zvuka i kontrolu kamere sobe ili stonog uređaja. Kreiramo makro koji sluša relevantne događaje i sprovodi povezane radnje pomoću API-ja prostorije ili radnog stola.

Funkcija USB ulaznog uređaja treće strane opisana je u ovom članku.

U sledećem primeru morate uneti tekst koji je napisan normalnim fontom. Tekst u kurzivu je odgovor koji se prima iz prostorije ili pisaćeg stola.

1

Prijavite se u sobu ili radni sto na SSH. Potreban vam je lokalni administrator.

2

Konfigurišite uređaj da biste omogućili korišćenje USB daljinskog upravljača treće strane.

xConfiguration Peripherals InputDevice Mode: On
** end

OK

               

 

Možete proveriti da li je konfiguracija uključena ili isključena pomoću ove naredbe:

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

OK

                  
3

Registrujte se za povratne informacije, tako da budemo obavešteni kada se dugmad daljinskog upravljača pritisnu i oslobode.

xFeedback Register /event/userinterface/inputdevice
** end

OK

               

 

Možete da proverite za koje povratne informacije je uređaj registrovan pomoću ove komande:

xFeedback list
/event/userinterface/inputdevice
** end

OK

                  
4

Pritisnite i otpustite dugme na daljinskom upravljaču da biste proverili da li registracija povratnih informacija funkcioniše.

Ova radnja generiše dva događaja: Pritisnut i pušten. Ako pritisnete i zadržite dugme, videćete događaj Pritisnut dok ne otpustite dugme. Zatim se generiše otpušteni događaj.

Ovi događaji se izdaju kada pritisnete i otpustite taster 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

Napišite makro koji sluša relevantne događaje u InputDevice-u i sprovodi povezane radnje pomoću API-ja uređaja.

  • Oživite dugmad za pripravnost, pojačavanje i smanjivanje jačine zvuka. Kada makro vidi događaj koji sadrži_KLJUČ VOLUMEUP,_KLJUČ VOLUMEDOWN ili KLJUČ_SLEEP, izvršava odgovarajuće komande.

  • Napravite funkciju kontrole kamere za tastere sa strelicama. Želimo da nastavimo da pomeramo kameru sve dok je dugme pritisnuto. Kada se dugme otpusti, kamera se zaustavlja. Kada makro vidi događaj koji sadrži TASTER_LEVO, TASTER_DESNO, TASTER_gore ili TASTER_DOLE, izvršava odgovarajuće komande.

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