Cómo recibir una alerta de Discord o Slack si tu Raspberry Pi está demasiado caliente

Puntos clave
- Utilice el comando "vcgencmd Measure_temp" para obtener la temperatura de su Raspberry Pi. Configure un webhook en Discord o Slack, luego use un script Bash para monitorear la temperatura y envíe una alerta a través del webhook si es demasiado alta. Ejecútelo regularmente con un temporizador systemd.
El diseño minimalista de la Raspberry Pi significa que no tiene refrigeración incorporada. Pero, ¿qué tan genial sería si te enviara un mensaje de Discord o Slack si hiciera demasiado calor?
¿Por qué se sobrecalienta tu Raspberry Pi?
La Raspberry Pi es una asombrosa historia de éxito. Se trata de una gama de ordenadores de placa única asequibles que se pueden utilizar para todo tipo de usos en el hogar o el lugar de trabajo. Ha sido utilizado por fabricantes y aficionados para crear una gran variedad de proyectos interesantes e ingeniosos.
Muchos de estos proyectos requieren que Raspberry Pi se ejecute en una configuración sin cabeza. Es decir, no tiene monitor, teclado ni ratón conectados. Los encontrará escondidos en armarios o debajo de escritorios, desempeñando silenciosamente sus funciones y tareas como cualquier otro dispositivo de red "configurar y olvidar".
Pero no querrás olvidarlo por completo. Como todos los dispositivos informáticos, la Raspberry Pi genera calor. Pero a bordo no hay refrigeración. Dado que todos los componentes están agrupados en una sola placa, el calor se concentra en un área pequeña.
Si utiliza una carcasa estándar de Raspberry Pi, el único efecto de enfriamiento es la convección. Puedes mejorar ligeramente las cosas añadiendo un disipador de calor o, si el ruido no es un problema, montando un ventilador. Algunas cajas de Raspberry Pi incorporan un ventilador incorporado.
Con un sistema headless, es más cómodo que el dispositivo se ponga en contacto contigo cuando pasa algo, en lugar de tener que acordarte de comprobarlo periódicamente. Todos llevamos un teléfono inteligente con nosotros, entonces, ¿por qué no hacemos lo inteligente y hacemos que nuestra Raspberry Pi controle su temperatura y envíe un mensaje a nuestro teléfono inteligente si su temperatura se acerca a la zona de peligro?
Veamos cómo podemos hacer esto para dos plataformas de mensajería populares, Discord y Slack.
Obtener la temperatura de la CPU en una Raspberry Pi
El primer paso del proceso es obtener la temperatura de la CPU de Raspberry Pi. De hecho, podría utilizar las técnicas de mensajería que se describen aquí para alertarle si alguna característica importante de su Raspberry Pi se está alejando de las tolerancias aceptables.
El comando para obtener la temperatura de la CPU en una Raspberry Pi es:
vcgencmd measure_temp
Si el problema persiste, intente utilizar la ruta completa del directorio para el comando. En mi Raspberry Pi con la versión del 10 de octubre de 2023 del sistema operativo Raspberry Pi, el comando se encuentra en el directorio "/usr/bin/". Esto hace que la versión larga del comando:
/usr/bin/vcgencmd measure_temp
Hay tres cosas a tener en cuenta sobre la salida del comando.
Primero incluye "temp=" y "'C", que son más de los que queremos. Queremos tener la temperatura como un número que podamos comparar con un umbral. Si la temperatura supera el umbral, se enviará un mensaje. El segundo punto es que la temperatura está en grados centígrados. Finalmente, es un número de coma flotante. Convertiremos esto a un valor entero en nuestro script.
Para extraer el valor de la temperatura por sí solo, podemos usar awk. Estamos usando la opción -F (delimitadores de campo) para indicarle a awk que trate los signos iguales “=" y apóstrofes "'" como indicadores que marcan el inicio y el final de un campo. Luego le pedimos que imprima el segundo campo que, en nuestra cadena, es la lectura de la temperatura de la CPU.
vcgencmd measure_temp | awk -F "(=')" '{print($2)}'
Esto aísla el valor numérico y nos permite asignarlo a una variable.
pi_temp=$(vcgencmd measure_temp | awk -F "(=')" '{print($2)}')echo $pi_temp
Si le gusta trabajar en Fahrenheit, podemos agregar algunos cálculos para convertir el valor por nosotros.
pi_temp=$(vcgencmd measure_temp | awk -F "(=')" '{print($2 * 1.8)+32}')echo $pi_temp
Para establecer un umbral, necesitamos saber cuál es el alcance de la Raspberry Pi. Revisé la hoja de datos de Raspberry Pi para Raspberry Pi 4, con la que estaba probando el modelo BI.
En la sección titulada "Rango de temperatura y características térmicas" se indica que "el rango de temperatura ambiente de funcionamiento recomendado es de 0 a 50 grados Celsius". Esto equivale a un rango de temperatura de 32 a 122 grados Fahrenheit. Esta es la temperatura con la que toda la placa está contenta y la temperatura de la CPU fácilmente podría ser mayor. Sin embargo, el valor de la hoja de datos es un valor muy seguro de usar porque nos estamos equivocando en el lado más frío, no en el lado más cálido.
Relacionado: Cómo usar el comando awk en Linux
Configurar Discord para aceptar mensajes
Habilitar la mensajería en Discord requiere algo llamado webhook, que es fácil de configurar. Crearemos un nuevo servidor para recibir nuestras notificaciones, luego activaremos un webhook al que podemos llamar desde un script en nuestra Raspberry Pi.
En Discord, haga clic en el botón verde “+” para crear un nuevo servidor.
En el cuadro de diálogo "Crear un servidor", haga clic en "Crear el mío".
En el cuadro de diálogo "Cuéntanos más sobre tu servidor", haz clic en "Para mí y mis amigos".
Proporcione un nombre para su nuevo servidor en el cuadro de diálogo "Personalice su servidor". La nuestra se llama “PiNotificaciones”.
También hicimos clic en el ícono de la cámara y cargamos un ícono de "campana de alerta". (Una vez que se carga un ícono, oscurece el ícono de la cámara).
Haga clic en el botón azul "Crear" cuando esté listo para continuar. Nuestro nuevo servidor ahora aparece en nuestra lista de servidores.
Seleccione su nuevo servidor, luego haga clic en la flecha junto a su nombre.
Haga clic en la opción "Configuración del servidor".
En la página "Configuración", haga clic en la opción "Integraciones" en la barra lateral. Haga clic en el botón "Crear webhook". Se crea un nuevo webhook y se le asigna un nombre.
Haga clic en el botón de flecha “>” para editar su webhook.
Cambiamos el nombre de nuestro webhook a "Pi Alerts" y dejamos que apunte al canal "#general" de nuestro servidor. Necesitaremos la URL del webhook, así que haga clic en el botón "Copiar URL del webhook", pegue la URL en un editor y guarde el archivo. Necesitará acceder fácilmente a la URL más adelante.
Cuando esté listo para continuar, haga clic en el botón verde "Guardar cambios" en la parte inferior de la página.
Al presionar la tecla "Esc", volverá a la vista normal del escritorio de Discord.
Crea nuestro propio script para enviar una alerta a Discord
Nuestro script comienza obteniendo la temperatura de la CPU. Si desea la temperatura en Fahrenheit, elimine o comente la línea Celsius y descomente la línea Fahrenheit.
Luego usamos awk para extraer el elemento entero del valor de temperatura (la parte antes del punto flotante “.”) porque Bash solo admite aritmética de enteros.
Luego obtenemos el nombre del host y lo asignamos a una variable llamada "this_pi". Enviaremos el nombre de host como parte de nuestro mensaje de alerta, para que pueda comprender qué Raspberry Pi está enviando la alerta.
Debes configurar la variable "discord_pi_webhook" en la URL que copiaste y guardaste anteriormente. Cuando lo pegue en el script, asegúrese de conservar las comillas.
Probamos la temperatura de la CPU con respecto al valor umbral en una declaración "if". Si la temperatura de la CPU está por encima de nuestro umbral de activación, usamos curl para enviar el mensaje a la URL del webhook. El aviso aparecerá entonces en nuestro servidor de Discord.
Para probar nuestro script, establecemos el valor umbral en 15. Esto significa que el bucle "if" definitivamente se ejecutará. Una vez que esté satisfecho con el funcionamiento del script, puede aumentar este valor a un valor real. En grados Celsius, eso sería alrededor de 44 grados para mi Raspberry Pi 4.
#!/bin/bash
pi_temp=$(vcgencmd measure_temp | awk -F "(=')" '{print($2)}')
pi_temp=$(echo $pi_temp | awk -F "(.)" '{print($1)}')
this_pi=$(hostname)
discord_pi_webhook="Paste your webhook URL here"
if (( "$pi_temp" -ge 15 )); then
curl -H "Content-Type: application/json" -X POST -d '{"content":"'"Pi ${this_pi} CPU temp is: ${pi_temp}"'"}' $discord_pi_webhook
fi
Copie el script en un editor, pegue la URL de su webhook, guárdelo como "cpu_temp.sh" y cierre el editor. Necesitaremos hacer que nuestro script sea ejecutable.
chmod +x cpu_temp.sh
Para probar nuestro script, lo llamaremos desde la línea de comando.
./cpu_temp.sh
Un momento después, nuestro mensaje aparece en Discord.
Nuestra Raspberry Pi se llama “htg-pi-server” y la temperatura de su CPU es de 33 grados centígrados. Después de probar el script, recuerde cambiar el valor umbral en la declaración "if" a un valor real.
Configurar un webhook en Slack
Tenemos una guía detallada sobre cómo configurar un webhook en Slack. El proceso es muy similar a los pasos que debes seguir con Discord. Deberá copiar la URL del webhook y una clave secreta.
#!/bin/bash
pi_temp=$(vcgencmd measure_temp | awk -F "(=')" '{print($2)}')
pi_temp=$(echo $pi_temp | awk -F "(.)" '{print($1)}')
this_pi=$(hostname)
slack_pi_webhook="https://hooks.slack.com/services/paste-your-key-here"
if (( "$pi_temp" -ge 15 )); then
curl -X POST --data-urlencode "payload={'channel': '#support', 'text': 'Pi ${this_pi} CPU temp is: ${pi_temp}'}" $slack_pi_webhook
fi
Pega tu clave secreta en el script donde dice "pega tu clave aquí". Asegúrese de que haya comillas en toda la URL.
Más allá de eso, se necesitan muy pocos cambios para que el script funcione con Slack en lugar de Discord.
Cambiamos el nombre de la variable "discord_pi_webhook" a "slack_pi_webhook" y cambiamos el comando "curl" a uno que funcione con Slack. Está configurado para publicar en un canal llamado "#support", pero puedes cambiarlo por el nombre del canal que estás usando en tu servidor Slack.
Los mensajes de tu Raspberry Pi aparecen en el canal de Slack designado.
Relacionado: Cómo enviar un mensaje a Slack desde un script Bash
Automatización de controles de temperatura.
Para ejecutar periódicamente el script "cpu_temp.sh", puede convertirlo en un temporizador systemd.
Ejecutar el script cada 15 minutos aproximadamente es un buen punto de partida. Siempre podrás cambiarlo más tarde si descubres que necesitas controles más o menos frecuentes.
Buen seguimiento
Recuerde cambiar el valor de activación de la declaración "si" a algo más realista que el valor de prueba. De lo contrario, tu Raspberry Pi te inundará de falsos positivos.