enviar notificaciones automáticas usando =ntfy.sh=

· osiux's blog

#+LINK_HOME:   index.html
#+INCLUDE:     header.org

# raspberrypi

Tengo una raspberrypi 1 que uso para hostear una versión en gemini de mi blog en gemini://gmi.osiux.com 2 y también la utilizo para realizar backups.

El problema es que a veces, se corta la luz y como el disco externo esta cifrado 3, debo acceder remotamente e ingresar la passphrase para montarlo nuevamente, pero para realizar esto, antes necesito 2 cosas:

  1. Enterarme inmediatamente
  2. Saber la nueva IP pública

Para resolver estos 2 problemas, estoy usando ntfy.sh 4, un servicio de notificaciones basado en HTTP pub-sub 5.

# ntfy.sh

ntfy.sh es muy simple de usar, basta con realizar un request usando curl especificando un mensaje y un tópico, por ejemplo b4kup y es posible consultar las novedades accediendo a ntfy.sh/b4kup sin necesidad de autenticarse, es decir que el tópico elegido es público si utilizamos el servicio de ntfy.sh aunque podemos tener nuestra propia instancia Self Hosted 6

# enviar notificación

Es lo mas simple, solo hay que definir el tópico y se puede usar curl de la siguiente manera:

1curl -d Backup ntfy.sh/b4ckup

Y obtendremos un JSON con el id y un timestamp

1{
2  "id": "DPqB7xNFT0jj",
3  "time": 1672629273,
4  "event": "message",
5  "topic": "b4ckup",
6  "message": "Backup"
7}

Es posible indicar un título (Title), definir la prioridad (Priority) y especificar una o mas etiquetas (Tags), además de obviamente lo importante, el mensaje:

1
2curl                       \
3  -H "Title: Backup"       \
4  -H "Priority: urgent"    \
5  -H "Tags: backup"        \
6  -d "FAILED"              \
7  https://ntfy.sh/b4ckup
8

También es posible usar el CLI 7, pero no es imprescindible para el envío y eso es lo que mas me interesó de esta herramienta porque curl esta disponible en todo tipo de dispositivos!

1
2ntfy pub b4ckup test
3

# recibir notificaciones

Para recibir notificaciones se puede usar el CLI y recibirlas al vuelo

1
2ntfy subscribe b4ckup
3

O usar el servicio y suscribirse a varios tópicos definiendo la configuración en el archivo /etc/ntfy/client.yml

Para el teléfono espía, lo mejor es utilizar la app ntfy de f-droid 8 ya que podremos suscribirnos a varios tópicos y recibirlas al instante, pudiendo definir ajustes diferentes para cada suscripción como el mínimo de prioridad a mostrar, cuánto tiempo mantener las notificaciones, etc.

# ntfy-bash-utils

Como siempre, cada vez que encuentro una herramienta, decido armar mis scripts de utilidades en BASH y publicarlos, en este caso en el repo ntfy-bash-utils 9

# ntfy-msg.sh

Permite enviar una notificación, usando por defecto como título el FQDN del equipo y como tópico lo mismo pero seudo leet 10, por ejemplo server.example.com se transformará en 53rv3r3x4mp13c0m

Se pueden redefinir las variables por defecto usando las variables de entorno PRIORITY, TAGS, TITLE y TOPIC.

1tfy-msg.sh test

# ntfy-ipinfo.sh

Notifica la IP pública, sólo si esta cambió desde la última vez que se ejecutó ntfy-ipinfo, la misma la obtiene desde ipinfo.io 11

# ntfy-mountpoint.sh

Notifica si cambia el estado de un punto de montaje, es decir, por ejemplo, mi disco externo no esta montado en /mnt/usb avisa y ni bien se monte este disco al cambiar el estado también notificará.

# ntfy-uptime.sh

Notifica la salida de uptime si se produce un reinicio.

# crontab

Y para asegurarme que todo se ejecute solito y solo uso crontab :)

*/10 * * * * /root/bin/ntfy-ipinfo.sh >/dev/null
*/5  * * * * MOUNTPOINT=/mnt/barracuda /root/bin/ntfy-mountpoint.sh >/dev/null
@reboot sleep 30 && /root/bin/ntfy-uptime.sh >/dev/null

# ChangeLog