Wir zeigen, wie Sie die Tasten eines Bluetooth Remotesteuerung (mit einem USB-Dongle) verwenden, um die Standby-Funktion zu steuern, die Lautstärke zu erhöhen und zu reduzieren sowie die Kamera eines Raum- oder Tischgeräts zu steuern. Wir erstellen ein Makro, das nach relevanten Ereignissen abhört, und führt die damit verbundenen Aktionen mithilfe der API des Raum- oder Tischgeräts durch.

Die Funktion des USB-Eingangsgeräts von Drittanbietern wird in diesem Artikel beschrieben .

Im folgenden Beispiel müssen Sie den Text eingeben, der in einer normalen Schriftart geschrieben ist. Der Text in Italics ist die Antwort, die vom Raum- oder Tischgerät empfangen wird.

1

Melden Sie sich beim Raum- oder Tischgerät auf SSH an. Sie benötigen einen lokalen Administratorbenutzer .

2

Konfigurieren Sie das Gerät so, dass es auch USB-Geräte von Drittanbietern Remotesteuerung.


       xConfiguration Peripherals InputDevice Mode: On 
      ** end OK  
               

 

Mit diesem Befehl können Sie überprüfen, ob die Konfiguration ein- oder ausgeschaltet ist:


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

Registrieren Sie sich für Feedback, sodass wir benachrichtigt werden, Remotesteuerung die Schaltflächen gedrückt und freigegeben werden.


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

 

Sie können anhand dieses Befehls überprüfen, für welches Feedback das Gerät registriert ist:


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

Drücken Sie auf die Schaltfläche und lassen Sie eine Taste auf Remotesteuerung, um zu überprüfen, ob die Feedback-Registrierung funktioniert.

Diese Aktion generiert zwei Ereignisse: Gedrückt und freigegeben. Wenn Sie eine Schaltfläche gedrückt halten, wird das gedrückte Event angezeigt, bis Sie die Schaltfläche losschalten. Anschließend wird das Event " Freigegeben" erstellt.

Diese Ereignisse werden ausgegeben, wenn die Eingabetaste drückt und veröffentlicht wird:

 
                   *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

Schreiben Sie ein Makro, das die relevanten InputDevice-Ereignisse abhört und die zugeordneten Aktionen mithilfe der API des Geräts durch führt.

  • Aktivieren Sie die Schaltflächen Standby, Lautstärke und Lautstärke nach unten. Wenn das Makro ein Ereignis mit KEY VOLUMEUP, KEY__VOLUMEDOWN oder KEY_SLEEP sieht, werden die entsprechenden Befehle ausgeführt.

  • Erstellen Sie eine Kamerasteuerungsfunktion für die Pfeiltasten. Wir möchten die Kamera so lange bewegen, wie die Taste gedrückt ist. Wenn die Schaltfläche freigelassen wird, stoppt die Kamerabewegung. Wenn das Makro ein Ereignis mit KEY_LEFT, KEY_RIGHT, KEY_UP oder KEY_DOWN sieht, werden die entsprechenden Befehle ausgeführt.


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