Mostramos como usar os botões de um controle remoto Bluetooth (conectado por meio de um dongle USB) para gerenciar funções como espera, ajuste de volume e controle de um dispositivo de câmera Cisco. Você pode desenvolver uma macro que ouça eventos relevantes e execute ações correspondentes por meio do API do dispositivo Cisco.

O recurso de dispositivo de entrada USB de terceiros é descrito neste artigo .

No exemplo a seguir, você tem que inserir o texto que é gravado em fonte normal. O texto em itálico é a resposta recebida do dispositivo Cisco.

1

Faça login no dispositivo Cisco no SSH. Você precisa de um usuário local admin.

2

Configure o dispositivo para permitir o uso de um controle remoto USB de terceiros.

 xConfiguration Periféricos Modo InputDevice: Ligado ** final OK  

 

Você pode verificar se a configuração está ativada ou desativada usando esse comando:

 Modo InputDevice de periféricos xConfiguration  *c Modo InputDevice de periféricos xConfiguration: Ligado ** final OK  
3

Registre-se para obter comentários, para nós sermos notificados quando os botões de controle remoto forem pressionados e soltos.

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

 

Você pode verificar em quais comentários o dispositivo está registrado, usando desse comando:

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

Pressione e solte um botão no controle remoto para verificar se o registro de comentários funciona.

Essa ação gera dois eventos: Pressionado e Solto. Se você manter pressionar um botão, você verá o evento Pressionado até soltar o botão. Em seguida, o evento Solto é gerado.

Esses eventos são emitidos quando pressionar e soltar a tecla Enter:

  *e Chave de ação da tecla UserInterface InputDevice: KEY_ENTER *e Código de ação da tecla UserInterface InputDevice: 28 *e Tipo de ação da tecla UserInterface InputDevice: pressionado ** final *e Chave de ação da tecla UserInterface InputDevice: KEY_ENTER *e Código de ação da tecla UserInterface InputDevice: 28 *e Tipo de ação da chave UserInterface InputDevice: Liberado ** fim  
5

Grave uma macro que escuta eventos InputDevice relevantes e executa as ações associadas usando a API do dispositivo.

  • Acione os botões de espera, volume para cima e volume para baixo. Quando a macro vê um evento contendo KEY_VOLUMEUP, KEY_VOLUMEDOWN ou KEY_SLEEP, executa os comandos relacionados.

  • Crie uma função de controle de câmera para as teclas de seta. É recomendado manter a câmera movendo, enquanto o botão estiver sendo pressionado. Quando o botão for solto, o movimento da câmera é interrompido. Quando a macro vê um evento contendo KEY_LEFT, KEY_RIGHT, KEY_UP ou KEY_DOWN, executa os comandos relacionados.

 const xapi = require('xapi'); função com(comando, args='') { xapi.command(comando, args); log(comando + ' ' + JSON.stringify(args)); } função log(evento) { console.log(evento); } function notify(message) { xapi.command('UserInterface Message TextLine Display', {Texto: mensagem, duração: 3 }); } function cameraControl(motor, direção, cameraId='1') { com('Camera Ramp', { 'CameraId': cameraId, [motor]: direção }); } function init() { let standbyState; xapi.status.get('Em espera').then((estado) => {standbyState = estado.Estado === 'Desligado' ? falso: verdadeiro; }); xapi.status.on('Em espera', state => { standbyState = state.State === 'Desligado' ? 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' ', 'Para baixo'); break; padrão: break; } } else if (press.Type == "Liberado") { 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', 'Parar'); break; case 'KEY_VOLUMEUP': com('Aumento de volume de áudio'); break; case 'KEY_VOLUMEDOWN': com('Diminuição de volume de áudio'); break; case 'KEY_SLEEP': com(standbyState? 'Desativar Standby': 'Ativar Standby'); quebrar; padrão: pausa; } } }); } iniciar();