sexta-feira, 27 de fevereiro de 2015

Evolução do projeto de acionamento de ar condicionado

Olá pessoal,

Vimos nos posts anteriores como o projeto de acionamento de ar condicionado via infravermelho evoluiu desde a primeira concepção do projeto com a utilização de shield GSM e shield Ethernet para notificação e alarme de temperatura alta até a utilização da biblioteca Agentuino e o Zabbix. Este projeto foi concebido para resolver um problema relacionado ao fato do ar condicionado não ter o recurso de restart automático.
A boa notícia é que para o ambiente em que tínhamos esse projeto rodando foram adquiridos dois aparelhos de ar condicionado com restart automático! Agora, além da redundância de aparelhos, não será mais necessário o acionamento via infravermelho.
Hoje o projeto está somente monitorando a temperatura e emitindo alertas via SMS ou e-mail caso a temperatura fique mais alta do que a programada no Zabbix.
Uma coisa é certa: vale a experiência e aprendizado ao se tentar soluções para os problemas do dia a dia. Analisando todo o histórico do projeto e sua evolução quanta coisa aprendi.
E aí tem mais alguma sugestão para aprimorar o projeto? No próximo post vamos a outro projeto que desenvolvemos: monitor de tensão.

Até mais!


segunda-feira, 16 de fevereiro de 2015

Agentuino + Zabbix - Parte 4 - Google Agenda e SMS


Olá pessoal,

Continuando a série Agentuino + Zabbix hoje veremos como usar o Google Agenda para o envio de SMS quando uma trigger do Zabbix for acionada. Veremos como instalar e utilizar o gcalcli (Google Calendar Command Line Interface) no Zabbix e configurá-lo para enviar SMS usando este software.

Como funciona?

O sistema funciona assim: o Zabbix, através de um script, utiliza o gcalcli para criar um evento no Google Agenda e uma vez criado o evento o Google Agenda é configurado para notificar o usuário a criação do evento através de SMS. O esquema básico é o seguinte:

1) O Zabbix gera o alerta e executa o script que utiliza o gcalcli para criar o evento.
2) O evento é criado na agenda.
3) Uma notificação via SMS é enviado ao usuário notificando que um novo evento foi criado.

Instalação do gcalcli:

É necessário fazer a instalação de alguns pacotes necessários (dependências) antes de instalar o gcalcli. Deve-se instalar:

- python-dateutil-2.4.0
- setuptools
- python-gflags-2.0
- google-api-python-client-1.3.1
- httplib2

Eu acabei utilizando os sources de cada um destes pacotes, descompactando e instalando com o comando python setup.py install

Instalar o gcalcli:

# wget --no-check-certificate https://github.com/insanum/gcalcli/archive/master.zip
# unzip -e master.zip
# cd gcalcli-master
# python setup.py install

Execute o seguinte comando para testar:

# gcalcli agenda

ERROR: Missing module - No module named dateutil.tz

Se ao executar o gcalcli ele apresentar como Missing Module (módulo faltante) basta baixar e instalar o módulo faltante. Por exemplo se ele indicar que o módulo dateutil.tz está faltando basta instalar a dependência python-dateutil-2.4.0.

Instalando dateutil:

#  wget --no-check-certificate https://pypi.python.org/packages/source/p/python-dateutil/python-dateutil-2.4.0.tar.gz
# tar zxvf python-dateutil-2.4.0.tar.gz
# cd python-dateutil-2.4.0
# python setup.py install

Instalando setuptools:

# wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py
# python ez_setup.py --insecure

Instalando gflags:

# wget --no-check-certificate https://python-gflags.googlecode.com/files/python-gflags-2.0.tar.gz
# tar zxvf python-gflags-2.0.tar.gz
# cd python-gflags-2.0
# python setup.py install

Instalando httplib2:

# wget --no-check-certificate https://github.com/jcgregorio/httplib2/archive/master.zip
# unzip -e master.zip.1
# cd httplib2-master/
# python setup.py install

Instalando google-api-python-client-1.3.1

# wget --no-check-certificate https://github.com/google/google-api-python-client/archive/master.zip
# unzip -e master.zip.2
# cd google-api-python-client-master/
#  python setup.py install



Se tudo ocorrer bem o gcalcli estará instalado. Precisamos fazer com o que o servidor zabbix seja autorizado a criar eventos através do gcalcli e também é necessário que se tenha uma conta válida do Google e que esta conta tenha acesso ao Google Agenda. Uma vez logado com a conta do Google através do navegador faça o seguinte:

No Zabbix execute:

#  gcalcli agenda --noauth_local_webserver


Com o navegador aberto logado com uma conta do Google (Gmail por exemplo) cole o link que se apresenta na barra de endereços. Aceite e copie o código de verificação. Cole o código de verificação no Zabbix e dê um Enter.
Se der tudo certo tem que apresentar a resposta Authentication Successfull.

Acesse o Google Agenda. Crie um novo calendário chamado Monitoramento Zabbix. Clique no ícone de roda dentada para acessar Configurações.


Na aba Agendas, clique em Criar nova agenda.


Dê um nome, descrição e local para a agenda e depois clique em Criar Agenda:


A agenda foi criada.


Clique no ícone de roda dentada novamente para acessar Configurações e vá novamente na aba Agendas e clique em Editar notificações da agenda que você acabou de criar:


Marcar as opções para notificar por SMS 10 minutos antes de cada evento:


Vá na aba Configuração de celular, forneça no campo Telefone o número do seu celular e clique em Enviar código de confirmação. Você deverá receber o código de confirmação através de SMS e digite no campo Código de confirmação o código recebido. Clique em Salvar.


Se tudo correr bem o Status aparecerá como Número de telefone validado com sucesso.


Agora falta criar o script no Zabbix que utilizará o gcalcli para criar o evento.

# cd /etc/zabbix/scripts
# vi sms.sh

Crie o script sms.sh com o seguinte conteúdo:

 #!/bin/bash

let oneminf=`date +%s`+60
dateonemin=`date -d @$oneminf +%R`

gcalcli --calendar 'Monitoramento Zabbix' --title "$1" --when $dateonemin --reminder '1m sms' --where '' --descr '' --duration 1 add


No caso estou usando o gcalcli para criar um evento no calendário "Monitoramento Zabbix" com o título que eu passar no script sms.sh (o $1 será substituído pelo conteúdo que eu passar no script) 1 minuto depois da data atual com lembrete em 1minuto via SMS. O evento terá duração de 1 minuto.


Vimos no post anterior que a trigger tem como ação executar um comando remoto no servidor Zabbix.



Se a temperatura for maior que 28 graus o Zabbix dispara a trigger que por sua vez dispara a ação e executa o script sms.sh dessa forma:

# /etc/zabbix/scripts/sms.sh "[Arduino Sensor] Temperatura:PROBLEM"

Se quiser testar é só chamar o script dessa forma:

# /etc/zabbix/scripts/sms.sh "[Arduino Sensor] Temperatura: NORMAL"

Veja o SMS recebido:




Bom pessoal acredito que encerramos a série com Zabbix. Quaisquer dúvidas entrem em contato. No próximo post avaliaremos a evolução do projeto de acionamento de ar condicionado via infravermelho.





sexta-feira, 30 de janeiro de 2015

Agentuino + Zabbix - Parte 3 - Criação de alarmes via SMS e E-mail no Zabbix

Olá pessoal!!

Continuando a série com Zabbix + Agentuino, vamos ver hoje como criar triggers e ações para criar alarmes com aviso por SMS e E-mail através do Zabbix. Quando a temperatura lida com o Arduino ultrapassar um certo limite o Zabbix lerá essa temperatura e disparará a trigger e as ações programadas.

Vamos lá!

O primeiro passo é criar a trigger associada ao host. Localize o host Arduino e assegure-se de que ele está se comunicando via SNMP com seu servidor Zabbix e fornecendo a temperatura.





















Clique no botão Criar Trigger:





















Na primeira aba Trigger escolha o nome da trigger e clique no botão Adicionar para criar a expressão que será avaliada para o disparo da trigger.





















Abrirá uma janela pop-up e em seguida selecione o item do host (Temperatura) que faz a leitura da temperatura.













































No campo Função escolha a opção: Último (mais recente) valor de T é > N.
No campo N digite 28.

Com isso a expressão criada será lida dessa forma: se o último valor de T (item Temperatura) for maior que N (28) dispara a trigger. Escolha o valor da temperatura que for mais conveniente.

















Voltando a tela de criação da Trigger escolha uma Descrição da trigger de forma bem clara e concisa. Escolha o Tipo de Risco como Atenção. Clique em Salvar.





















Está criada a trigger.



Com a trigger criada devemos criar as ações que serão realizadas quando esta trigger for ativada. Para isso vá em Configurações e clique em Acões. Depois clique em Criar Ação:



Crie um Nome para a ação. No campo Duração padrão de cada passo da operação digite 240 (segundos). e clique na caixa Mensagem de Recuperação. Nos demais campos deixar como está.




Vamos criar as condições em que a trigger será disparada. Colocaremos assim: se a severidade da Trigger (risco) for classificado como Atenção e o host for o Arduino a ação (ou ações) será(ão) executada(s).
Primeiramente remova as condições que vem por padrão:

Em Nova Condição selecione Severidade da Trigger e escolha Atenção na próxima caixa e depois clique em Salvar:

Escolha uma nova Condição, selecione Host e selecione o host (Arduino Sensor no meu caso) e depois clique em Adicionar.


Agora criaremos de fato as ações a serem executadas. Clique na aba Ações e clique em Nova:



Antes de prosseguir com as ações vamos criar o grupo de usuários para que as permissões sejam criadas. Clique em Administração, Usuários e escolha Grupo de Usuários e em seguida clique em Criar Grupo de usuários: 



Dê um nome para o grupo (no caso coloquei como Arduinos) e clique em Salvar:


Agora vamos configurar um usuário Zabbix chamado Arduino sensor para que este receba os e-mails de alerta.
Clique em Administração, Usuários e escolha Usuários e em seguida Criar Usuário.


Dê um Apelido, Nome, Sobrenome e crie uma senha para o usuário. Clique em Adicionar:

Escolha o grupo Arduinos e clique em Selecionar:



Será criado o usuário Arduino sensor.

Agora vamos ativar as permissões do grupo de usuário Arduinos e assim o usuário Arduino sensor herdará as permissões.

Vá no grupo de usuários Arduinos e clique na aba Permissões. Vamos definir que o grupo Arduinos tenha permissão Somente leitura e que por consequencia o usuário Arduino sensor terá o mesmo privilégio. Em seguida clique em Salvar.




Com o usuário e grupo criados retomemos à criação das ações. A primeira ação que será criada funcionará assim: será enviado um e-mail para o e-mail cadastrado do usuário Arduino Sensor quando a trigger for disparada. Preencha os campos exatamente como aparecem na imagem abaixo e depois clique em Salvar:



Agora vamos criar a segunda ação que enviará SMS quando a trigger for disparada.

Clique em Nova e aparecerá a tela para configurar os detalhes da operação. Notem que o Tipo de operação está selecionado como Comando remoto e na Lista Alvo está selecionado Host Atual para indicar que a operação será no host em que a Trigger será disparada (no caso o host Arduino Sensor). Selecione o tipo como Script personalizado, e escolha a opção Executar em como Servidor Zabbix.
No campo Comandos está o caminho de execução do script sms.sh que enviará o SMS via Agenda do Google. Clique em Salvar.

Com isso as duas ações estão criadas.


No próximo post veremos como configurar o Google Agenda para enviar SMS quando o script sms.sh for acionado.

Até a próxima!












terça-feira, 25 de novembro de 2014

Agentuino + Zabbix - parte 2 - implementação do Zabbix

Olá pessoal,

No último post vimos o uso do Agentuino que implementa uma biblioteca para tornar o Arduino um agente SNMP e como ele disponibiliza informações coletadas pelo Arduino através de SNMP, fazendo que agentes de monitoramento SNMP (Zabbix, Nagios, etc) possam ser utilizados para verificar estas informações e disponibilizá-los para visualização e monitoramento. No caso do nosso projeto de monitoramento de temperatura vamos usar o Zabbix para visualizar e monitorar a temperatura.
Hoje veremos como utilizar o Zabbix para monitoramento SNMP:

Zabbix:

Deve-se instalar um Zabbix em uma máquina física ou através de máquina virtual. Lembrando que o Zabbix é open-source e é praticamente uma distro Linux especializada em monitoramento. A instalação é bem simples.

Download:

http://www.zabbix.com/download.php

Uma vez instalado o Zabbix devemos acessá-lo para configurar o monitoramento do Arduino:


Entre com o usuário Admin e senha configurada para o acesso admin. Uma vez logado vá em Configurações, Templates e clique no botão Criar Template:



    Dê um nome para o template. No caso eu coloquei como SNMP Arduino. Clique em Salvar.


Em Configurações, Templates, selecione SNMP Arduino:



Clique em Itens:


Clique em Criar Item:
 

Preencha os campos:
 
- Nome: Nome do Item. Neste caso coloquei como Temperatura
- Tipo: Agente SNMPv1 (o Agentuino está implementado em SNMP v1).
- Chave: temp (é o campo disponibilizado pelo SNMP que contém a temperatura coletada).
- SNMP OID: é a OID que está armazenando a temperatura.
- Comunidade SNMP: public

Os demais campos pode deixar como estão. Dê um Salvar.


Agora vamos criar um gráfico para visualizarmos a temperatura. Clique em Gráficos:


Clique em Criar Gráfico:


Dê um nome para o Gráfico e clique em Adicionar (como mostra a figura):


Escolha o item Temperatura que foi criado anteriormente:


Clique em Salvar:


Clique na aba Visualizar:


Vamos criar o host agora. Vá em Configuração, Hosts e clique em Criar host:


Preencha os campos:

- Nome do host
- Nome de exibição
- Interfaces SNMP: coloque o endereço IP do Arduino.

Clique em Salvar.



Selecione a aba Templates e clique em Adicionar:


Selecione o template SNMP Arduino:


Clique em Salvar:


Clique em Macros  e preencha os campos:

- Macro: {$SNMP_COMMUNITY}
- Valor: public

Clique em Salvar


Observe que o host Arduino Sensor no ícone de Disponibilidade SNMP está em verde.


Vamos agora criar uma Tela de visualização. Vá em Configuração, Telas e clique em Criar tela:


Escolha um Nome para a tela e especifique o número de linhas e colunas. No caso é 1 x 1 pois é somente o gráfico que iremos exibir na tela.


Clique em Alterar:


Escolha como Recurso o Gráfico simples e clique no botão Selecionar do campo Parâmetro:


Nas caixas escolha o Grupo onde o host Arduino Sensor está e selecione o Host Arduino Sensor.
Selecione o item Temperatura:


Deixe os campos no padrão e clique em Salvar:


Para visualizar a tela vá em Monitoramento, Telas e escolha a tela que você criou (Arduino Temperatura):


Com isso configuramos o Zabbix para mostrar a temperatura de forma gráfica. No próximo post vamos configurar Triggers (gatilhos) para avisar via e-mail ou SMS se a temperatura está acima do esperado.

Até a próxima!