Exemple
list-menuUn commentaire ?

Dans cet exemple, nous voulons vous montrer comment utiliser les touches d'un périphérique d'entrée USB tiers (en l'occurrence, une télécommande) pour contrôler certaines fonctions d'un appareil Cisco.

Nous vous montrons comment utiliser les boutons d'une télécommande Bluetooth (connectée via un dongle USB) pour gérer des fonctions telles que la mise en veille, le réglage du volume et le contrôle d'un appareil photo Cisco. Vous pouvez développer une macro qui écoute les événements pertinents et exécute les actions correspondantes via l'API de l'appareil Cisco.

Dans l'exemple suivant, vous devez saisir le texte écrit en police normale. Le texte en italique est la réponse reçue de l'appareil Cisco.

1

Connectez-vous à l'appareil Cisco en SSH. vous avez besoin d'un administrateur local.

2

Configurez l'appareil pour permettre l'utilisation d'une télécommande USB tierce.


       xConfiguration Peripherals InputDevice Mode: On 
      ** end OK  
               

 

Vous pouvez vérifier si la configuration est activée ou désactivée en utilisant cette commande :


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

Inscrivez-vous pour recevoir des commentaires, afin que nous soyons averties lorsque les boutons de la télécommande sont enfoncés et relâchés.


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

 

Vous pouvez vérifier pour quels commentaires l'appareil est enregistré à l'aide de cette commande :


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

Appuyez sur un bouton de la télécommande et relâchez-le pour vérifier que l'enregistrement des commentaires fonctionne.

Cette action génère deux événements : Pressed et Released. Si vous appuyez sur un bouton et que vous le maintenez enfoncé, l'événement Pressed s'affiche jusqu'à ce que vous relâchiez le bouton. Ensuite, l'événement Released est généré.

Ces événements sont émis lorsque vous appuyez sur la touche Entrée et que vous la relâchez :

 
                   *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 InputDevice pertinents et exécute les actions associées à l'aide de l'API de l'appareil.

  • Donnez vie aux boutons de veille, d'augmentation du volume et de diminution du volume. Lorsque la macro détecte un événement contenant KEY_VOLUMEUP, KEY_VOLUMEDOWN ou KEY_SLEEP, elle exécute les commandes correspondantes.

  • Créez une fonction de contrôle de la caméra pour les touches fléchées. Nous voulons continuer à déplacer la caméra tant que le bouton est enfoncé. Lorsque le bouton est relâché, le mouvement de la caméra s'arrête. Lorsque la macro détecte un événement contenant KEY_LEFT, KEY_RIGHT, KEY_UP ou KEY_DOWN, elle exécute les commandes correspondantes.


       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(); 
     
Cet article était-il utile ?
Cet article était-il utile ?