Vi viser hvordan du bruker tastene på en Bluetooth-fjernkontroll (med en USB-dongle) til å kontrollere standby-funksjonen, øke og redusere volumet og kontrollere kameraet på et rom eller en bordenhet. Vi lager en makro som lytter etter relevante hendelser, og utfører de tilknyttede handlingene ved hjelp av API-et til rommet eller bordenheten.

Funksjonen USB-inndataenhet fra tredjepart er beskrevet i denne artikkelen .

I eksemplet nedenfor må du skrive inn teksten som er skrevet med vanlig skrift. Teksten i kursiv er svaret som mottas fra rommet eller bordenheten.

1

Logg på rommet eller bordenheten på SSH. Du trenger en lokal administratorbruker .

2

Konfigurer enheten slik at den tillater bruk av en USB-fjernkontroll fra en tredjepart.


       xConfiguration Peripherals InputDevice Mode: On 
      ** end OK  
               

 

Du kan kontrollere om konfigurasjonen er På eller Av ved hjelp av denne kommandoen:


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

Registrer deg for tilbakemelding, slik at vi blir varslet når fjernkontrollknappene trykkes og slippes.


       xFeedback Register /event/userinterface/inputdevice 
       ** end OK  
               

 

Du kan kontrollere hvilke tilbakemeldinger enheten er registrert for, ved hjelp av denne kommandoen:


        xFeedback list 
       /event/userinterface/inputdevice ** end OK  
                  
4

Trykk og slipp en knapp på fjernkontrollen for å kontrollere at tilbakemeldingsregistrering fungerer.

Denne handlingen genererer to hendelser: Trykket og frigitt. Hvis du trykker og holder nede en knapp, ser du hendelsen Trykket til du slipper knappen. Deretter genereres Frigitt-hendelsen .

Disse hendelsene utstedes når du trykker og slipper Enter-tasten:

 
                   *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

Skriv en makro som lytter etter de relevante InputDevice-hendelsene , og utfører de tilknyttede handlingene ved hjelp av APIen til enheten.

  • Gi liv til knappene for ventemodus, volum opp og volum ned. Når makroen ser en hendelse som inneholder KEY_VOLUMEUP, KEY_VOLUMEDOWN eller KEY_SLEEP, kjøres de relaterte kommandoene.

  • Opprett en kamerakontrollfunksjon for piltastene. Vi ønsker å fortsette å bevege kameraet så lenge du trykker på knappen. Når knappen slippes, stopper kamerabevegelsen. Når makroen ser en hendelse som inneholder KEY_LEFT, KEY_RIGHT, KEY_UP eller KEY_DOWN, kjøres de relaterte kommandoene.


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