Pokazujemo kako koristiti tipke Bluetooth daljinskog upravljača (s USB dongleom) za upravljanje funkcijom pripravnog stanja, povećanje i smanjenje glasnoće te upravljanje fotoaparatom prostorije ili stolnog uređaja. Kreiramo makro koji sluša relevantne događaje i provodi povezane radnje pomoću API-ja sobe ili stolnog uređaja.

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

U sljedećem primjeru morate unijeti tekst koji je napisan normalnim fontom. Tekst u kurzivu je odgovor koji se prima iz sobe ili stol uređaja.

1

Prijavite se u sobu ili stol uređaj na SSH. Trebate lokalnog administratora korisnika.

2

Konfigurirajte uređaj kako biste omogućili uporabu USB daljinskog upravljača treće strane.

xConfiguration Peripherals InputDevice Mode: On
** end

OK

               

 

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

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

OK

                  
3

Registrirajte se za povratne informacije, tako da budemo obaviješteni kada se pritisnu i puste tipke daljinskog upravljača.

xFeedback Register /event/userinterface/inputdevice
** end

OK

               

 

Možete provjeriti za koje povratne informacije je uređaj registriran pomoću ove naredbe:

xFeedback list
/event/userinterface/inputdevice
** end

OK

                  
4

Pritisnite i otpustite tipku na daljinskom upravljaču kako biste provjerili funkcionira li registracija povratnih informacija.

Ova radnja generira dva događaja: Pritisnuto i oslobođeno. Ako pritisnete i zadržite tipku, prikazat će se pritisnuti događaj dok ne otpustite tipku. Zatim se generira oslobođeni događaj.

Ovi događaji se izdaju kada pritisnete i otpustite tipku 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 InputDevicea i provodi povezane radnje pomoću API-ja uređaja.

  • Oživite tipke pripravnog stanja, pojačajte glasnoću i smanjite glasnoću. Kada makro vidi događaj koji sadrži_KLJUČ VOLUMEUP,_KLJUČ VOLUMEDOWN ili KLJUČ_SLEEP, izvršava odgovarajuće naredbe.

  • Kreirajte funkciju upravljanja fotoaparatom za tipke sa strelicama. Želimo nastaviti pomicati fotoaparat sve dok je tipka pritisnuta. Kad se tipka otpusti, fotoaparat se zaustavlja. Kada makro vidi događaj koji sadrži TIPKU_LIJEVO, TIPKU_DESNO, TIPKU_gore ili TIPKU_DOLJE, izvršava odgovarajuće naredbe.

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