Pokazujemy, jak używać pilota Bluetooth (z kluczem USB) do sterowania funkcją czuwania, zwiększania i zmniejszania głośności oraz sterowania kamerą pokoju lub urządzenia biurkowego. Tworzymy makro, które nasłuchuje istotnych zdarzeń i wykonuje związane z nimi działania za pomocą API urządzenia pokojowego lub biurkowego.

Funkcja urządzenia wejściowego USB innej firmy została opisana w tym artykule .

W poniższym przykładzie należy wprowadzić tekst napisany zwykłą czcionką. Tekst pisany kursywą to odpowiedź otrzymana z pokoju lub urządzenia biurkowego.

1

Zaloguj się do pokoju lub urządzenia biurkowego na SSH. Potrzebujesz lokalnego użytkownika administratora .

2

Skonfiguruj urządzenie tak, aby zezwalało na korzystanie z pilota USB innej firmy.


       xConfiguration Peripherals InputDevice Mode: On 
      ** end OK  
               

 

Możesz sprawdzić, czy konfiguracja jest włączona lub wyłączona, używając tego polecenia:


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

Zarejestruj się, aby uzyskać informacje zwrotne, abyśmy otrzymywali powiadomienia o naciśnięciu i zwolnieniu przycisków pilota zdalnego sterowania.


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

 

Możesz sprawdzić, które opinie urządzenie jest zarejestrowane do korzystania z tego polecenia:


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

Naciśnij i zwolnij przycisk na pilocie zdalnego sterowania, aby sprawdzić, czy rejestracja opinii działa.

Ta akcja generuje dwa zdarzenia: Wciśnięty i zwolniony. Jeśli naciśniesz i przytrzymasz przycisk, zobaczysz zdarzenie Wciśnięte , dopóki nie zwolnisz przycisku. Następnie generowane jest zdarzenie Released .

Te zdarzenia są wyświetlane po naciśnięciu i zwolnieniu 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

Napisz makro, które nasłuchuje odpowiednich zdarzeń InputDevice i wykonuje skojarzone z nimi akcje za pomocą interfejsu API urządzenia.

  • Ożyw przyciski czuwania, zwiększania głośności i zmniejszania głośności. Gdy makro widzi zdarzenie zawierające KEY_VOLUMEUP, KEY_VOLUMEDOWN lub KEY_SLEEP, wykonuje powiązane polecenia.

  • Utwórz funkcję sterowania kamerą dla strzałek. Chcemy poruszać kamerą tak długo, jak długo przycisk jest naciśnięty. Po zwolnieniu przycisku ruch kamery zatrzymuje się. Gdy makro widzi zdarzenie zawierające KEY_LEFT, KEY_RIGHT, KEY_UP lub KEY_DOWN, wykonuje powiązane polecenia.


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