Показуємо, як за допомогою клавіш Bluetooth пульта дистанційного керування (з USB ключем) управляти функцією очікування, збільшувати і зменшувати гучність, управляти камерою приміщення або настільного пристрою. Ми створюємо макрос, який прослуховує відповідні події, і здійснює пов'язані з ними дії за допомогою API приміщення або пристрою столу.

Функція usb-вводу сторонніх пристроїв USB описана в цій статті .

У наступному прикладі необхідно ввести текст, який написаний звичайним шрифтом. Текст курсивом - це відповідь, яка надходить з кімнати або пристрою столу.

1.

Увійдіть у кімнату або пристрій робочого столу на SSH. Вам потрібен локальний користувач адміністратора .

2.

Налаштуйте пристрій, щоб дозволити використання стороннього USB-пульта.


       xConfiguration Peripherals InputDevice Mode: On 
      ** end OK  
               

 

Ви можете перевірити, чи ввімкнуто або вимкнуто конфігурацію, за допомогою цієї команди:


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

Зареєструйтеся для зворотного зв'язку, щоб ми отримували сповіщення при натисканні та відпустці кнопок пульта дистанційного керування.


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

 

Ви можете перевірити, на які відгуки пристрій зареєстровано за допомогою цієї команди:


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

Натисніть і відпустіть кнопку на пульті дистанційного керування, щоб перевірити, чи працює реєстрація зворотного зв'язку.

Ця дія породжує дві події: Натиснули і відпустили. Якщо натиснути та утримувати кнопку, ви побачите натиснуту подію, доки не відпустіть кнопку. Потім генерується подія Released .

Ці події видаються при натисканні і відпусканні клавіші 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.

Напишіть макрос, який прослуховує відповідні події InputDevice , і виконуйте пов'язані з ними дії за допомогою API пристрою.

  • Доведіть до життя кнопки очікування, збільшення гучності та зменшення гучності. Коли макрос бачить подію, що містить КЛЮЧОВИЙ_ОБ'ЄМ, КЛЮЧОВИЙ_ОБ'ЄМ АБО КЛЮЧОВИЙ_СОН, він виконує пов'язані команди.

  • Створіть функцію керування камерою для клавіш зі стрілками. Ми хочемо продовжувати рухати камеру до тих пір, поки натиснута кнопка. Коли кнопка відпускається, рух камери припиняється. Коли макрос бачить подію, що містить КЛЮЧ_ЛІВОРУЧ, КЛЮЧ ВПРАВО_, КЛАВІШУ_ВГОРУ або КЛАВІШУ_ВНИЗ, він виконує пов'язані команди.


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