Monitorando a temperatura do Raspberry Pi 3

Quem utiliza o  Raspberry Pi 3 deve ter notado que ele aquece “<ironia>só um pouquinho</ironia>” quando o uso de cpu chega próximo dos 100%.

A questão, para quem tem um Pi 3 é saber se com a forma como se usa, a pessoa se enquadraria no caso de estar próxima dos 100% de cpu. Bom já adianto que quem usa pra emulação de consoles ou de alguma forma converte vídeos (uma decodificação via software se enquadra nisso também) está ameaçando “torrar” o seu Pi 3.

O seguinte script lê a temperatura em graus Célsius do Raspberry Pi 3 (acredito que funcione nos outros também).

pi@retropie:~/sbin $ cat show_temp.sh
#!/bin/bash
# This script shows the CPU temperature in Celsius.
# To show in Fahrenheit append the following line bellow:
# CPU_TEMP=$CPU_TEMP*9/5+32
#
# Author: Marcelo Borges Ribeiro
#  
CPU_TEMP=$(($(cat /sys/class/thermal/thermal_zone0/temp)/1000)) 
echo $CPU_TEMP

Executando esse script, em um sistema sem processamento intensivo a temperatura deve ficar em torno de 40 graus Celsius.

Para provar que a coisa realmente fica séria, basta executar um emulador, por exemplo de Play Station 1, e ficar monitorando a temperatura através desse script. Em menos de 10 minutos a temperatura passa dos 80 graus Celsius!

Não seria interessante que de alguma forma o usuário pudesse ser avisado quando a temperatura ultrapassou algum limite pré-estabelecido ?

Para que isso seja possível vamos transformar o script que verifica a temperatura em um daemon (serviço) que ira verificar a cada “x” segundos a temperatura e caso ela ultrapasse algum valor crítico, uma mensagem será enviada ao nosso celular (requer conexão com a internet tanto do celular quando do Raspberry Pi 3).

Vamos utilizar o serviço de push do Pushbullet. Para tanto o celular que irá receber a mensagem deve ter um hash cadastrado, que é obtido seguindo os passos desse artigo.

Vamos aproveitar o script do artigo anterior, que envia uma mensagem qualquer para um determinado celular.

Segue o script (vamos salvar todos os scripts em /home/pi/sbin). Basta substituir o conteúdo de “API” pala hash do telefone que receberá as notificações e salvá-lo com o nome de push_to_phone.sh

#This script receives a message as a parameter and sends to a push bullet enabled device. 
#!/bin/bash
# Author: Marcelo Borges Ribeiro
#
 
#Device unique id, available on your pushbullet account. 
API="bxrj46KOnhAmgen2ZMG2jnr47onwPUbH" 
 
MSG="$1" 
 
curl -u $API: https://api.pushbullet.com/v2/pushes -d type=note -d title="Alert" -d body="$MSG"

Vamos aproveitar e salvar também o primeiro script, que mostra a temperatura, também em “sbin”  com o nome de show_temp.sh.

Agora resta fazer um script que execute show_temp, compare a saída com uma temperatura qualquer e chame  push_to_phone.sh caso seja necessário.

#!/bin/bash 
# 
#Maximum temperature in celsius. Beyond this, sends a message. 
#Author: Marcelo Borges Ribeiro
#
THRESHOLD=69 
SHOW_TEMP="/home/pi/sbin/show_temp.sh" 
 
PUSH_TO_PHONE="/home/pi/sbin/push_to_phone.sh" 
TEMPERATURE=$($SHOW_TEMP) 
   
if [ $TEMPERATURE -ge $THRESHOLD ]; then 
    MESSAGE="Processor is overheating! Temperatrure now is $TEMPERATURE celsius" 
    $PUSH_TO_PHONE "$MESSAGE"   
fi

Nesse script basta ediar a variável “THRESHOLD” para conter a temperatura que se deseja como a máxima (no script é 69). Vamos salvar como monitor_temperature.sh dentro de sbin.

Com todos os scripts dentro de sbin, basta habilitar o bit de execução com o seguinte comando:

chmod a+x /home/pi/sbin/*.sh

Vale notar que até agora não foi preciso permissão de administrador. Infelizmente para agendarmos no sistema que esse comando rode com a periodicidade que queremos, iremos fazer isso como administrador. Para tanto basta, como root editar o arquivo “/etc/crontab” e adicionar o seguinte conteúdo:

* * * * * /home/pi/sbin/monitor_temperature.sh >/dev/null 2>&1

Nesse caso a monitoração irá acontecer a cada minuto.

Para testar, basta editar o arquivo “monitor_temperature.sh” e substituir a temperatura limiar de 69 graus por uma que certamente irá disparar o limiar, por exemplo 29 graus.

Se tudo funcionar, a seguinte mensagem deve aparecer no celular:

Caso tenha funcionado, basta trocar de volta o “threshold” para 69 e salvar.