我们显示了如何使用蓝牙适配器(使用 USB 远程控制)控制待机功能、提高和降低音量以及控制会议室或桌面设备的摄像头。 我们创建一个宏,用于侦听相关事件,使用房间或桌面设备的 API 执行相关操作。

此文章描述了第三方 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

按下并放开按钮,远程控制反馈注册是否有效。

此操作将生成两个事件: 按下并 发布。 如果您按住按钮,将看到 已按下 的活动,直到您放开该按钮。 然后, 将生成发布 事件。

按下并发布 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 执行相关操作的宏。

  • 使待机模式、音量调节和音量降低按钮恢复运行。 当宏看到包含 KEY VOLUMEUP、KEY__VOLUMEDOWN 或 KEY_SLEEP 的事件时,它会执行相关命令。

  • 为箭头键创建摄像机控制功能。 只要按下按钮,我们希望继续移动摄像头。 按钮释放后,摄像机移动会停止。 当宏看到包含 LEFT、_KEY_RIGHT、KEY UP 或 KEY__DOWN 的事件时,它会执行相关的命令。


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