Monitorando a temperatura do CPD com Digitemp
Em CPD's com muitos servidores existe a necessidade de constante refrigeração da sala de equipamentos, visto que eles produzem grande quantidade de calor.
Como qualquer outro equipamento, o sistema de refrigeração também podem apresentar problemas, deixando de refrigerar a sala de servidores, o que pode ocasionar o superaquecimento dos mesmos levando-os a falhar e deixar de prestar os serviços de um CPD.
Para estes casos é necessário estar prevenido com, no mínimo, um sistema de controle de temperatura da sala, para que sejam tomadas as providências antes do superaquecimento. Com um sistema de controle também é possível fazer o levantamento estatístico e histórico das falhas de refrigeração, para verificar se é necessário melhorias ou exigir da empresa terceirizada melhor qualidade no serviço de refrigeração.
Em tempos de recessão, programas de redução de custos, e demora na compra de equipamentos novos, fica inviável solicitar à empresa a compra de um sistema monitor de temperatura de ambientes. Nestas horas é necessário se utilizar da criatividade e procurar soluções alternativas.
Nestas condições a Internet é a nossa principal fonte de informação e pesquisa, e o Software Livre a solução para a maioria dos problemas envolvendo custos.
Muitos sites dão informações completas de como construir um sistema de monitoramento de temperatura baseado no sensor Dallas DS18S20 e um software chamado DIGITEMP, e tentarei aqui reproduzir algumas destas informações e instruções de como montar este sistema.
O DIGITEMP é um software desenvolvido para Linux que se comunica com o sensor de temperatura Dallas DS18S20 através da porta serial do computador. Para fazer esta comunicação, é necessário uma interface, que pode ser construída com poucos componentes.
Construindo o sensor
Existem vários modos de construir a interface, variando de acordo com a distância do cabo e a forma de energizar o circuito. A forma mais simples é o modo parasita, em que a energização do componente se dá através da linha de dados da porta serial.
Para construir a interface serial são necessários os seguintes componentes:
A | 1 Conector DB9 fêmea com capa |
B | 1 Placa fenolite de tamanho suficiente para acoplar na capa do conector DB9 |
C | 1 Conector RCA macho |
D | 1 Conector RCA fêmea |
E | 1 Resistor 1K5 – 1/4W |
F | 1 Sensor Dallas DS18S20 |
G | 1 Diodo Zener 3V9 – 1/4W |
H | 1 Diodo Zener 6V2 – 1/4W |
I | 2 Diodos 1N5819 – 1/4W de alta velocidade |
Para o cabo foi utilizado um cabo telefônico comun de duas vias.
Os componentes devem ser montados conforme o esquema abaixo:
No modo parasita, é necessário unir os pinos GND e Vdd. Os números no lado da porta serial representam os pinos do conector DB9.
É possível utilizar vários sensores em paralelo, pois cada componente utiliza um identificador único de 64bits, formando um barramento chamada 1-Wire Bus. O esquema abaixo representa vários sensores ligados em paralelo:
Antes de soldar os componentes na placa, é interessante montá-los em uma protoboard:
Para montar os componentes na placa, peguei a dica no site Pontas da Madrugada. O desenho na placa de fenolite ficou assim:
Após soldar os componentes na placa e encaixá-lo no conector DB9, o resultado ficou assim:
A solda não ficou esteticamente perfeita, mas o mais importante é não ter nenhum curto-circuito e nenhuma solda fria. O conector RCA fêmea teve que ser reduzido para caber na capa do DB9. A parte externa do conector RCA ficou como GND, e a parte interna, os dados.
O sensor foi soldado em uma extremidade do cabo, e na outra, o conector RCA macho:
O resultado final ficou assim:
Software para comunicação com o sensor
O Digitemp pode ser baixado do site http://www.digitemp.com ou do repositório oficial da distribuição. No debian pode ser baixado com o comando:
#apt-get install digitemp
O próximo passo é criar o arquivo de configuração com o identificador do sensor:
#digitemp_ds9097 -s /dev/ttyUSB0 -i DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane GNU Public License v2.0 - http://www.digitemp.com Turning off all DS2409 Couplers . Searching the 1-Wire LAN 10F2EFF0010800FE : DS1820/DS18S20/DS1920 Temperature Sensor ROM #0 : 10F2EFF0010800FE Wrote .digitemprc
Para obter a temperatura do sensor usa-se o comando:
#digitemp_ds9097 -t0 -c .digitemprc DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane GNU Public License v2.0 - http://www.digitemp.com Apr 27 22:33:02 Sensor 0 C: 24.25 F: 75.65
Traçando gráficos de acompanhamento
O pacote do Digitemp fornece alguns scripts para gerar gráficos armazenados em um banco de dados RRD. Utilizando vários sensores pode-se conseguir um resultado como este:
Note que no gráfico os valores estão em Fahrenheit (F), mas pode-se configurar o Digitemp para exibir em Celcius (C).
O Nagios possui alguns plugins para o monitoramento de temperatura, como o check_temperature e o check_digitemp.
Dificuldades e problemas
Para desenvolver este projeto encontrei algumas dificuldades. A primeira delas foi encontrar o sensor Dallas DS18S20 em lojas de eletrônica. As principais lojas em Porto Alegre (Severo Roth, RF, etc) nem sequer tinham este componente no cadastro, ou seja, nunca foi vendido por eles.
Segui a dica de um colega de trabalho (obrigado Ronaldo!) e entrei no site do fabricante Maxim (http://www.maxim-ic.com/) e solicite algumas amostras. Recebi-as em 30 dias. Obrigado Maxim!
Importante: Todos os sites indicavam o sensor DS1820, mas segundo a Maxim ele foi substituido pelo DS18S20, e o que eu recebi foi o DS18S20+, que funcionou perfeitamente.
A segunda e maior dificuldade foi: O sistema não funcionou no primeiro teste. Nenhuma mensagem de erro era apresentado. Simplesmente o sensor não era lido. Tira componente, testa componente, baixa código fonte, compila código fonte… Muitos sites na internet informam que os notebooks não fornecem a carga necessária de energia na serial para alimentar o sensor, e quase nenhum informa sobre o funcionamento com um adaptador USB-Serial que, no meu caso, tive que utilizar, pois o notebook não tem porta serial. Testei inclusive com uma placa ExpressCard RS232. Nada funcionava. Verifiquei que existem outras formas de construir a interface serial, com componentes extras para gerar alimentação para o circuito, mas não os construí, pois não tinha nenhum desses outros componentes.
Por sorte, testando os componentes na protoboard tive uma surpresa. Notei que quando o pino RXD era plugado na protoboard uns 2 segundo após rodar o programa digitemp, ele conseguia ler os dados. Ótimo sinal!
Após verificar o código-fonte, e incluir uma porção de mensagens de debug, notei que o problema acontecia na inicialização da porta serial, talvez por eu estar utilizando um adaptador USB-Serial.
Procurando novamente por uma solução, encontrei no site http://www.felskowski.pl/ uma correção para um problema de inicialização da porta serial. Testei-o e funcionou. O patch de correção é o seguinte:
--- digitemp-3.6.0.old/userial/ds9097/linuxses.c 2007-06-07 23:25:58.000000000 +0200 +++ digitemp-3.6.0/userial/ds9097/linuxses.c 2009-12-24 04:27:25.000000000 +0100 @@ -55,7 +55,7 @@ SMALLINT owAcquire(int portnum, char *port_zstr) { /* Open the serial port */ - if ((fd[portnum] = open(port_zstr, O_RDWR)) == -1) + if ((fd[portnum] = open(port_zstr, O_RDWR|O_NONBLOCK)) == -1) { OWERROR(OWERROR_GET_SYSTEM_RESOURCE_FAILED); perror("owAcquire: failed to open device");
A diretiva 0_NONBLOCK instrui o programa para não ler absolutamente nada da porta serial após abrí-la, como teste de abertura.
Informações extras
Como informado antes, utilizei um adaptador USB-Serial PL2303 e um cartão ExpressCard RS232 também por coincidência PL2303. Ambos forneciam a porta /dev/ttyUSB0.
Referências
Muitas sites foram consultados para este projeto. Relaciono-os abaixo:
- Digitemp. http://www.digitemp.com
- FELSKOWSKI.PL. http://www.felskowski.pl/
- Maxim IC. http://www.maxim-ic.com/
- Pontas da madrugada. http://pontasdamadrugada.blogspot.com/2009/06/monitorando-temperatura-externa.html
- Informationen zu den Themen der Elektrischen Messtechnik und des Qualitätsmanagements. DS18S20 Temperature Sensor. http://public.rz.fh-wolfenbuettel.de/~hamannm/general/digitemp.html
- Temperaturmessung mit Linux. http://lena.franken.de/hardware/temperaturmessung.html
- MartyBugs.net – Serial Port Temperature Sensors. http://martybugs.net/electronics/tempsensor/
- Monitor temperatures with Linux, Nagios, and DS1820. http://www.hoppie.nl/tempsens/
Transformando uma webcam em uma câmera infra-vermelho Como instalar o driver ATI Catalyst 10.4 no Debian com Kernel 2.6.33
Ola Gerson, excelente artigo mesmo… Porem como gerencio minha infra nao tenho conhecimento algum em eletrônica somente software, voce conseguiria montar um para mim? quanto custaria a brincadeira? Neste aplicativo Digitemp eu consigo realizar a execução de comandos apos x temperatua? exemplo se a temperatura chegar a x ele executa um .sh para realizar um stop no Oracle ou algo assim? Obrigado.
Olá Antonio.
Lamento não poder montar o sensor para você, mas o que posso fazer é dizer que eu também não tenho conhecimento em eletrônica, apenas segui as instruções dos sites que coloquei nas referências.
Esta foi a primeira vez que soldei alguns componentes em uma placa. Levei horas para conseguir o resultado, entre soldagens e resoldagens.
Além do mais, o componente principal, o Dallas DS18S20 não tem em nenhuma loja da cidade onde moro. Pedi de brinde do fabricante Maxim, que demorou um mês para chegar.
Existe uma “caixinha” vendida no site do Nagios, que além da temperatura mede também a umidade e tem controle de portas. O endereço é http://www.nagios.org/products/environmental/esensors. Estou pensando em comprar uma caixinha destas.
Mas mesmo que você não tenha conhecimento em eletrônica, você pode montar um dispositivo destes. É só seguir as instruções e referências.
Quanto à outra pergunta, é possível sim executar comandos conforme a temperatura. O programa que lê o sensor para o Nagios é um script bash (check_temperature). Basta uns “IF’s” que você consegue fazer qualquer coisa.
Um abraço
eu queira saber se existe olcal de temperatura e onde fica
Olá Sr. Márcio.
Poderia descrever um pouco mais seu comentário? Eu não compreendi a sua questão.
Abraço.
Hola:
Muy interesante el trabajo que realizó ud,le cuento que yo estoy realizando algo mas complejo que eso,pero estoy utilizando el sensor ds18b20 ud cree que pueda servir?,le pregunto como ud usó el ds1820,bueno es solo para salir de la duda,ojalá me funcione porque es lo ultimo que me falta para terminar mi proyecto.
Gracias!
Olá Claudia!
No site http://www.digitemp.com/ é descrito que o sensor DS18B20 também funciona:
“DigiTemp now supports the following 1-wire temperature sensors: DS18S20 (and DS1820), DS18B20,…”
Abraços e bom projeto!
Hello, Gerson
Parabéns pelo artigo muito bom mesmo, agora ti pergunto você já pensou ou é possível o computador que monitora a temperatura do CPD envia uma mensagem de alerta por email ou SMS? Tipo informando que a temperatura estar próximo acima do limite ou abaixo. Você algum procedimento de como fazer isso?
Perfeitamente Sr. Carlos.
Eu utilizo o Nagios para monitorar a temperatura e enviar alertas por e-mail.
Uma forma mais prática é rodar um script no CRON que verifica a temperatura periodicamente, e dependendo do valor retornado pelo digitemp, enviar um alerta por e-mail.
Através deste sistema produzo gráficos da temperatura externa da minha cidade. Montei uma mini-base metereológica. Já me certifiquei da precisão das coletas e os dados são salvos minuto a minuto em base de dados, e também postadas automaticamente no twitter. @navitemp ( http://www.twitter.com/navitemp )
Grande abraço e boa sorte a todos.
Muito boa aplicação Anderson!
Abraço!
Olá,
Eu gostaria de saber se não existe algum lugar onde compro um cara desse pronto, alguém que já monte esse medidor para que seja espetado na USB e assim eu faço apenas a configuração dele no SO.
Abraço!
Att,
Bruno Almeida.
Olá Bruno.
Desculpe pela demora. Provavelmente já deves ter resolvido, mas responderei mesmo assim, para o caso de alguém ter a mesma pergunta.
Existem vários equipamentos prontos para medir a temperatura do ambiente que podem ser lidos pelo computador. Procure no Google ” Termômetro CPD “. Vais encontrar vários produtos prontos para esta finalidade.
Abraço.
Olá Gerson.
O senhor teria o codigo fonte do digitemp, pois achei apenas trechos, e como estou começando a estudar o software é extremamente relevante para min, pois precisso saber por exemplo que protocolo ele usa…
Desde ja agradeço.
obs: Bonito o seu nome.
Abraço!
Olá Sr. Gerson
O código fonte pode ser baixado no endereço http://www.digitemp.com/software.shtml ou direto pela url do arquivo http://www.digitemp.com/software/linux/digitemp-3.6.0.tar.gz
Bons estudos.
PS: Respeitável nome o seu.
Always rfserehing to hear a rational answer.
Veruca,
Thanks for visiting.
Amigo, gostaria de saber onde posso adquirir um equipamento desse sem que seja de forma artesanal. Você poderia me informar tambem sobre outra possível fórmula para saber qual a temperatura do meu CPD remotamente? Estou com problemas no meu trabalho porque o ar condicionado não está ligando automaticamente com a chegada da energia. Desde já agradeço!
Olá Sr. Flávio.
Ar condicionado que falha é um problema, não é mesmo?
Existem vários dispositivos e equipamentos que fazem a medição da temperatura de ambientes, emitem alarmes, enviam e-mails, e podem ser acessados remotamente.
Em um comentário anterior eu sugeri o ESENSORS http://www.nagios.org/products/environmental/esensors, que possui plugin para o nagios, mas também funciona independentemente.
A seguir indico alguns links de termomêtros para CPD automatizados, que enviam alertas e podem ser acessados remotamente.
http://www.termometroparacpd.com/
http://www.solostocks.com.br/venda-produtos/instrumentos-medicao-analise/medidores/termometro-ip-para-data-center-186085
http://leandruco.mercadoshops.com.br/termometro-cpd-usb-envia-email_2xJM
E este é o mais completo: http://www.sensorescomet.com.br/produtos.asp?sensores-comet=185
Abraço!
Bom dia!
referente a linha “O próximo passo é criar o arquivo de configuração com o identificador do sensor:”
qual deve ser o nome desse arquivo de configuração e onde ele deve ser salvo?
e referente a linha “Para obter a temperatura do sensor usa-se o comando:”
onde o comando deve ser adicionado?
desde já agradeço e sucesso!
Olá Rodrigo, vamos lá
1. “O próximo passo é criar o arquivo de configuração com o identificador do sensor:”
Ao executar o comando o “digitemp_ds9097 -s /dev/ttyUSB0 -i”, o arquivo de configuração “.digitemprc” é automaticamente criado. Veja no final da execução do comando a linha “Wrote .digitemprc”. Este arquivo pode ser copiado para o diretório $HOME do usuário, ou então para qualquer lugar, e ser indicado com a flag “-c” ao executar o comando “digitemp”
2. “Para obter a temperatura do sensor usa-se o comando:”
o comando “digitemp_ds9097 -t0 -c .digitemprc” pode ser executado manualmente via linha de comando, scripts, módulos do Nagios, etc.
Para ver mais informações do digitemp, digite na linha de comando “digitemp –help”
Abraço.
A camisa de força a gente compra onde? Fantástico cara, brilhante mesmo.
Obrigado pelo comentário e pela visita!
Bom dia…!
Sr. Gerson,
Li seu artigo, gostei do modo como está descrito, muito bom mesmo, estou desnvolvendo um trabalho para a faculdade e neste eu preciso de um sistema de monitoramento do ambiente em relação a temperatura. Este software digitemp pode ser usado com qualquer monitor para cpd ?
ou vc poderia me informar um modelo adequado.
desde já agradeço a atenção.
tenha um bom dia.
Olá Sr. Washington
O software Digitemp é exclusivo para leitura do dispositivo da família Dallas DS1820 e similares.
A maioria dos sensores de CPD’s (temperatura, umidade, etc) a venda no mercado disponibilizam a leitura dos dados por HTTP ou SNMP (mais utilizado). Estes sensores comerciais são produtos mais completos e mais práticos. Basicamente é conectar o cabo de rede e ler os dados por HTTP ou SNMP. Contudo, são caros.
Dê uma olhada nestes sensores, exclusivos para monitoramento ambiental de CPS’s:
http://www.eliteacs.com.br/wp/?page_id=21
http://www.eesensors.com/websensors.html
http://www.centraldeseguranca.com.br/
Ok…! muito obrigado pela dica
Boa noite Gerson, primeiramente parabéns pelo projeto, estou iniciando tbm em programação e este projeto parece ser exatamente o que procurava, pelo que disse, podem ser acrescentados varios sensores de temperatura no total de quantos ? precisaria de ums 50 mais ou menos……seria possivel ???..obrigado.
Olá Brenno.
Cada sensor possui um identificador único de 64 bits, logo é possivel conectar até 2^64 sensores.
Contudo existem algumas recomendações quando se utiliza um grande numero de sensores, por exemplo:
– utilizar alimentação de energia normal ao invés do modo parasita;
– evitar cabos muito longos. Neste caso conecta-se vários cabos na mesma fonte;
-utilizar outro modelo de sensor;
Veja recomendações nos links abaixo:
– http://www.shucksmith.co.uk/blog/ds2480bds18b20drivers-1
– http://openenergymonitor.org/emon/buildingblocks/DS18B20-temperature-sensing (final da página)
Abraço e bons experimentos
Nestas horas é necessário se utilizar da criatividade e procurar soluções alternativas.