quinta-feira, 19 de março de 2015

Novo projeto - monitoramento de tensão

Olá pessoal,

Hoje vamos iniciar com as experiências que tive em uma outra necessidade que tive no dia-a-dia do meu trabalho. Primeiramente vamos entender a problemática e a solução que obtive utilizando Arduino.
Temos diversos equipamentos de rede (switch) que são conectados a pequenos nobreaks para que em momentos de quedas rápidas de energia o switch não seja desligado. Se há queda de energia isso faz com que o switch seja reinicializado e isso demora um tempo e a rede fica indisponível enquanto ele não volta ao seu estado funcional.
Com a utilização destes pequenos nobreaks o grande problema ocorre quando há uma queda mais prolongada de energia, consumindo boa parte da carga da bateria e também muitas vezes esgotando totalmente. Como esses nobreaks muitas vezes só desligam com a carga totalmente esgotada ocorreram várias vezes das baterias dos nobreaks ficarem danificadas por esse esgotamento. Uma parte da rede elétrica em que estes nobreaks e switches ficam conectados são conectados em um estabilizador de 100KVA em cabine e algumas vezes o estabilizador desarma e não reaciona (ele tem uma chave que desarma e o rearme é manual). A outra parte da rede elétrica não está no estabilizador (rede não estabilizada) e depende diretamente da energia vinda diretamente da rua.
De tudo isso o complicado é saber quando e onde ocorreu o problema. É uma falha da concessionária de energia? É problema no estabilizador como mencionado acima? O quão frequente são estas falhas?
Com esses problema surgiu a idéia de implementar uma espécie de monitoramento da energia em determinados pontos da rede elétrica para determinar quando e onde caiu a energia. A idéia é que se colocarmos um monitor de energia em algum ponto da rede elétrica que está conectada com o estabilizador saberemos que provavelmente em uma queda de energia deste ponto provavelmente o problema ocorreu no estabilizador como mencionado acima ou o circuito que este ponto de rede elétrica caiu (por desarme de disjuntor, problema na tomada, etc).Se conectarmos um monitor de energia em um ponto da rede elétrica que não está conectada ao estabilizador e houver uma queda de energia detectada provavelmente a energia vinda diretamente da concessionária falhou ou o circuito que este ponto de rede elétrica caiu (por desarme de disjuntor, problema na tomada, etc). Então temos:
1 monitor de energia conectado à rede elétrica estabilizada.
1 monitor de energia conectado à rede elétrica não estabilizada.

Temos as seguintes situações com essa configuração de monitores:
1) Queda de energia detectada pelo monitor conectado à rede estabilizada: provavelmente ocorreu queda do estabilizador ou do circuito.
2) Queda de energia detectada pelo monitor conectado à rede não estabilizada: provavelmente ocorreu um problema geral elétrico.
3)Queda de energia detectada pelo monitor conectado à rede estabilizada e também queda de energia detectada pelo monitor conectado à rede não estabilizada: provavelmente há falha de energia vinda diretamente da concessionária de energia.

Como implementar esse monitor? O escolhido foi: com Arduino! Basta implementar um circuito detector de tensão e monitorar. Monitorar como? Podemos utilizar igualmente o monitoramento implementado para temperatura que ao invés de monitorar temperatura monitora tensão e notifica via e-mail e SMS.
No próximo post vamos entrar nos detalhes de implementação do monitor de tensão utilizando Arduino.
Até a próxima.


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!