Disparando eventos com o Asterisk Fernando Mercês
Fernando Mercês Apresentação fernando@mentebinaria.com.br Bacharelando em Ciência da Computação e com formação técnica em eletrônica, Fernando Mercês é consultor técnico da 4Linux, onde atua com sistemas livres. É especialista em Comunicação Unificada e SL, tendo trabalhado com soft-pbx proprietários e livres durante sua carreira. Possui certificações Aastra/Ericsson, CompTIA e Microsoft, inclusive em UC. Também é fundador e mantenedor dos sites sobre tecnologia Mente Binária e GNU/Linux Reversing.
Objetivos Demonstrar como executar ações externas ao Asterisk. Compreender a importância deste recurso. Definir os requisitos para disparo de eventos em hardwares externos.
Agenda Quando e por que disparar um evento? Comandos que executam comandos. Exemplo de votação por URA. Interfaceando hardware. Exemplo de um controle de LEDs. O que é preciso saber para usar estes recursos.
Quando e por que disparar um evento Implementação de recursos não disponíveis nativamente. Administração remota. Alternativa ao usuário de serviços de rede. Controle de dispositivos.
Comandos que executam comandos System(caminho_do_comando argumentos) Executa um comando no sistema. Se o comando não executar de maneira correta, a variável SYSTEMSTATUS conterá o valor APPERROR. É preferível tratar a lógica dentro do programa/script que será chamado, mas alguma lógica pode (e deve) ser aplicada no contexto do Asterisk.
Comandos que executam comandos TrySystem(caminho_do_comando argumentos) Executa um comando no sistema. Independente do resultado do comando, retorna 0 na SYSTEMSTATUS.
Votação por URA [vota] exten => s,1,wait(1) exten => s,n,read(voto,votamenu,1) exten => s,n,gotoif($[ "${voto}" = "1"]?votook) exten => s,n,gotoif($[ "${voto}" = "2"]?votook) exten => s,n,gotoif($[ "${voto}" = "3"]?votook) exten => s,n,playback(invalido) exten => s,n,goto(s,1) exten => s,n(votook),system(./vota.sh ${voto}) exten => s,n,playback(computado) exten => s,n,hangup
Interfaceando hardware Porta serial, paralela ou USB. É possível fazer com scripting em alguns casos. Para mais controle, é necessário um programa compilado. Hardware extra é necessário.
Interfaceando hardware Fonte: www.profelectro.info
Interfaceando hardware Porta paralela 8 bits de dados. Acionamento dos bits em paralelo. TTL (5V / 0V)
Interfaceando hardware Porta Paralela com o Parashell parashell 0x378 1 #00000001 parashell 0x378 255 #11111111 parashell 0x378 128 #01000000 parashell 0x378 0 #00000000
Interfaceando hardware Porta USB Interface USB. Microcontrolador incluso.
Interfaceando hardware int ledpin = 10; // LED conectado ao pino 10 da placa. void setup() { pinmode(ledpin, OUTPUT); // Saída é o pino. } void loop() { digitalwrite(ledpin, HIGH); // Envia energia para o pino. delay(1000); // Aguarda 1 segundo digitalwrite(ledpin, LOW); // Desliga a energia do pino. delay(1000); }
O que é preciso saber Programar, mesmo que o básico, é sempre bom. A programação em BASH, no Linux, costuma atender bem o administrador do Asterisk. A segurança dos scripts precisa ser pensada, afinal, quem executa os comandos externos é o usuário que executa o Asterisk (geralmente, o root) e uma invasão pelo telefone se torna perigosa e ameaçadora.
O que é preciso saber Eletrônica exige algum estudo. Não se pode sair ligando tudo que é pino ou cabo. Existem grandezas que precisam ser calculadas antes como intensidade de corrente, tensão elétrica e resistência. Com um circuito mal feito, os resultados podem não ser concretos e/ou conter muita fumaça. =X São inúmeras operações que podem ser feitas com o disparo de eventos. Só depende de criatividade!
Referências www.voip-info.org www.arduino.cc www.faqs.org/docs/linux-mini/io-port-programming.html#s5 http://parashell.sourceforge.net http://www.mentebinaria.com.br/hardware/20-controle-de-dispositivos-com-a-porta-paralela
Perguntas?
Obrigado!
Rua Teixeira da Silva, 660 Paraíso São Paulo SP (11) 2125-4747