IFPR-Labtelecom: CMS (Temperatura)

No Labtelecom alguns equipamentos de rede possuem sensores de temperatura embarcados. Nessa seção, são apresentados scripts de aquisição implementados no Servidor de Rede que permitem um monitoramento periódico conforme resposta apresentada logo abaixo.

Considerações:

1) Apesar de ter ar condicionado no ambiente o uso não é contínuo visando a economia de energia. Logo, muitas variações de temperatura são provenientes da temperatura ambiente.

2) No dia 04/09/2019 foi adicionado mais scripts de processamento no dispositivo FailsafePi aumentando a temperatura de operação normal em aproximadamente 4 graus Celsius.

1) AQUISIÇÃO DOS DADOS - FailSafePi(FsP)/Raspberry Pi (ARD B):

No Labtelecom um Raspberry Pi, integrado ao projeto FailsafePi (FsP), fornece a temperatura do processador pelo comando vcgencmd measure_temp no terminal. O servidor principal gerencia o envio para a nuvem, nesse caso precisamos fazer a captura pelo rede local para o servidor com o seguinte comando:

FsP_temp=$(sshpass -p "SENHA" ssh pi@192.168.1.244 vcgencmd measure_temp;)

Nesse caso, é retornado o valor da temperatura para o servidor local na varíavel FsP_temp no formato temp=54.2C. Também é importante inserir o tempo em que foi realizada a medição nesse caso foi utilizado o comando

echo $(date +%Y)/$(date +%m)/$(date +%d)-$(date +%H):$(date +%M)" "$FsP_temp > FsP_acc.txt;

que apresenta o resultado no formato ANO/MES/DIA-HORA:MINUTO espaço tabulado e temperatura no arquivo FsP_acc.txt, conforme no exemplo

2019/04/15-21:47 temp=54.8'C

Na sequência é realizada filtragem do arquivo para retirar parte do texto para facilitar o processamento dos dados com o comando o sed:sed -e 's/temp=//g' -e 's/\x27C//g' FsP_acc.txt >> FsP_temperature.txt;

sed -e 's/temp=//g' -e 's/\x27C//g' FsP_acc.txt >> FsP_temperature.txt;

Esse comando substitui a string temp= por nenhum caractere (-e 's/temp=//g'). O mesmo é feito para 'C. Nesse caso, foi utilizado o código X27, pois o caractere ' pode gerar conflito no terminal (-e 's/\x27C//g'). O resultado final é adicionado ao arquivo FsP_temperature.txt.

Resumindo, as três etapas podem ser executadas sequencialmente pelo script:

cd /home/cluster/;FsP_temp=$(sshpass -p "SENHA" ssh pi@192.168.1.244 vcgencmd measure_temp;);echo $(date +%Y)/$(date +%m)/$(date +%d)-$(date +%H):$(date +%M)" "$FsP_temp > FsP_acc.txt; sed -e 's/temp=//g' -e 's/\x27C//g' FsP_acc.txt >> FsP_temperature.txt;

No exemplo abaixo é mostrado o arquivo FsP_temperature para medições realizadas a cada 5 minutos:

2) AQUISIÇÃO DOS DADOS - MULTILAYER CISCO 3560 (ARD C):

No Labtelecom um Switch Multilayer 3560 localizado no ARDC realiza parte do roteamento da rede. Esse equipamento possibilita a leitura da temperatura pelo comando:

Switch#sh env temperature status

A resposta desse comando fornece o seguinte resultado:

Temperature Value: 31 Degree Celsius

Temperature State: GREEN

Yellow Threshold : 56 Degree Celsius

Red Threshold : 66 Degree Celsius

onde Temperature Value é a temperatura mensurada pelo equipamento. Logo, é possível realizar a leitura remota da temperatura do dispositivo pelo comando:

((sshpass -p "SENHA" ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 gustavo@192.168.1.252 sh env temperature status) | grep Value)) > ARDC_3560_acc.txt

onde o sshpass com a chave definida acima permite o acesso remoto para o usuário gustavo@192.168.1.252 via protocolo SSH. O parâmetro | grep Value filtra a resposta apresentando como resultado apenas a linha com a palavra Value, resultando em :

Temperature Value: 31 Degree Celsius

Esse resultado é armazendo no arquivo ARDC_3560_acc.txt. Nesse arquivo o que interessa é apenas o valor 31 obtido como resposta da procedimento de leitura do sistema. Logo, podemos filtrar a resposta para facilitar o processamento dos dados. Uma solução seria utilizar o comando sed demostrando anteriomente para o dispositivo FsP. Contudo, nessa situação o comando awk é mais simples de utilizar pois valor da temperatura está na terceira coluna do arquivo ARDC_3560_acc.txt.

ARDC_3560_Temp=$(awk '{print $3} ' ARDC_3560_acc.txt)

Nesse caso, o valor da temperatura é armazenado na variável ARDC_3560_Temp. Para armazenar os dados é utilizado o comando para colocar na primeira coluna do arquivo o instante de tempo da medição realizada, na sequência a temperatura do dispositivo FsP e na terceira coluna a temperatura do multilayer 3560.

echo $(date +%Y)/$(date +%m)/$(date +%d)-$(date +%H):$(date +%M)" "$FsP_temp" "$ARDC_3560_Temp > FsP_acc.txt; sed -e 's/temp=//g' -e 's/\x27C//g' FsP_acc.txt >> FsP_temperature.txt;

3) AQUISIÇÃO DOS DADOS - ROTEADOR 1921 (ARD A):

No Labtelecom um roteador 1921 é utilizado como gateway secundário da rede. Esse equipamento também fornece dados de temperatura com o comando

Router#sh environment

O resultado desse comando é apresentado logo abaixo:

SYSTEM POWER SUPPLY STATUS

==========================

Power Supply Type: AC

External Power Supply POE -48V Voltage Status: Not Present

SYSTEM FAN STATUS

=================

Fan 1 OK, Medium speed setting

SYSTEM TEMPERATURE STATUS

=========================

Intake Right temperature: 25 Celsius, Normal

Intake User temperature: 28 Celsius, Normal

Exhaust Fan temperature: 32 Celsius, Normal

Intake Right(Bezel) temperature: 29 Celsius, Normal

REAL TIME CLOCK BATTERY STATUS

==============================

Battery OK (checked at power up)

SYSTEM POWER

===============

Motherboard Components Power consumption = 24.8 W

Total System Power consumption is: 24.8 W

Environmental information last updated 00:00:15 ago

onde são fornecidas três leituras de temperatura das entradas de ar (intake) e uma leitura da saída do cooler (exhaust) [2]. Nesse caso, vai ser monitorada a temperatura de entrada (user) e a saída (exhaust). Com o comando abaixo sshpass o servidor faz a leitura remota do equipamento

(sshpass -p "SENHA" ssh gustavo@192.168.1.254 sh environment) | (grep -E 'User|Exhaust') > ARDA_1921_acc.txt

e com o comando grep é filtrada as respostas de interesse, gerando o resultado abaixo no arquivo ARDA_1921_acc.txt:

Intake User temperature: 28 Celsius, Normal

Exhaust Fan temperature: 32 Celsius, Normal

Com o comando awk é obtido apenas os valores de temperatura que estão na quarta coluna da resposta acima e os valores são armazenados na variável ARDA_1921_Temp

ARDA_1921_Temp=$(awk '{print $4} ' ARDA_1921_acc.txt)

O resultado é impresso no arquivo FsP_temperature com instante de tempo da medição e com os valores de temperatura de outros equipamentos, com base no comando abaixo:

echo $(date +%Y)/$(date +%m)/$(date +%d)-$(date +%H):$(date +%M)" "$FsP_temp" "$ARDC_3560_Temp" "$ARDA_1921_Temp> FsP_acc.txt; sed -e 's/temp=//g' -e 's/\x27C//g' FsP_acc.txt >> FsP_temperature.txt;

4) PLOTAGEM:

São realizadas medições de temperatura a cada 20 minutos e os dados das últimas 300 amostras são apresentados no formato gráfico conforme mostrado no ínício dessa página. Primeiramente é necessário filtrar as amostras, sendo facilmente realizado pelo comando tail que captura as 300 amostras em envia para o arquivo FsP_temperature_plot.txt

tail -n 300 FsP_temperature.txt > FsP_temperature_plot.txt;

Na sequência, foi utilizado o gnuplot para gerar o gráfico FsP_temperature_plot.png no formato PNG com 750 x 440 pixels. Importante salientar alguns parâmetros apresentados abaixo, onde no eixo x é utilizado o tempo conforme o formato ano/mês/dia-hora:minuto. Ademais, outros parâmetros foram adicionados para deixar melhor formatado os dados.

gnuplot -e "set title ''; set xlabel 'Tempo - Mês/Dia - Hora:Minuto' offset 0,-1; set ylabel 'Temperatura [{}^{o}C]'; set terminal png size 750,440; set xdata time; set timefmt '%Y/%m/%d-%H:%M'; set yrange [20:90]; set style data lines; set autoscale xfix; set linetype 1 lw 2 lc rgb 'blue'; set linetype 2 lw 2 lc rgb 'red';set linetype 3 lw 2 lc rgb 'orange';set linetype 4 lw 2 lc rgb 'orange'; set timestamp; set grid; set terminal png size 750,440; plot 'FsP_temperature_24h.txt' i 0 using 1:2 title'FailsafePi (FsP) - processador','FsP_temperature_24h.txt' i 0 using 1:3 title'Multilayer 3560 ARDC ','FsP_temperature_24h.txt' i 0 using 1:4 title'Roteador 1921 ARD A - entrada','FsP_temperature_24h.txt' i 0 using 1:5 title'Roteador 1921 ARD A - saída' " > FsP_temperature_24h.png;

Finalmente, é realizado o upload para a nuvem utilizando o GDrive:

./gdrive-linux-x64 update 1R5j6qxDLF13MRD3953MPaqoeX0Y91g8 FsP_temperature_plot.png