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.