Nous montreons comment utiliser les touches d’un contrôle à distance Bluetooth (avec un dongle USB) pour contrôler la fonction de veille, augmenter et diminuer le volume et contrôler la caméra d’un périphérique de salle ou de bureau. Nous créons une macro qui écoute les événements appropriés et qui place les actions associées en utilisant l’API du périphérique de salle ou de bureau.

La fonctionnalité périphérique d’entrée USB tiers est décrite dans cet article .

Dans l’exemple suivant, vous devez entrer le texte qui est écrit dans une police normale. Le texte en italiques est la réponse qui est reçue du périphérique de salle ou de bureau.

1.

Connectez-vous au périphérique de salle ou de bureau sur SSH. Vous avez besoin d’un utilisateur administrateur local.

2

Configurez le périphérique pour permettre l’utilisation d’un port USB tiers contrôle à distance.


       xConfiguration Peripherals InputDevice Mode: On 
      ** end OK  
               

 

Vous pouvez vérifier si la configuration est Sur ou Off (On/ Off) en utilisant cette commande :


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

Enregistrez-vous pour les commentaires, afin d’être avertis lorsque les boutons contrôle à distance sont lancés.


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

 

Vous pouvez vérifier les commentaires pour lesquels le périphérique est enregistré en utilisant cette commande :


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

Appuyez sur et relâchez un bouton sur le contrôle à distance pour vérifier que l’inscription des commentaires fonctionne.

Cette action génère deux événements : Appuyez sur et relâchez. Si vous appuyez et maintenez enfoncé un bouton, vous voyez l’événement Appuyez jusqu’à ce que vous relâchez le bouton. L’événement publié est alors généré.

Ces événements sont publiés lors de la publication de la touche Entrée :

 
                   *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

Écrivez une macro qui écoute les événements du périphérique de saisie appropriés et qui exécute les actions associées en utilisant l’API du périphérique.

  • Tenez le veille, le volume et le volume à niveau. Lorsque la macro voit un événement contenant_LE VOLUME DES CLÉS,_LE VOLUME DES TOUCHES OU LE VEILLE_DE LA CLÉ, elle exécute les commandes connexes.

  • Créer une fonction de contrôle de la caméra pour les touches fléchées. Nous souhaitons continuer le déplacement de la caméra tant que le bouton est enfoncé. Lorsque le bouton est relâche, le mouvement de la caméra s’arrête. Lorsque la macro voit un événement contenant_KEY LEFT, KEY_RIGHT, KEY_UP, ou KEY_DOWN (BAS), il exécute les commandes connexes.


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