Por razones que no vienen al caso, me toco trabajar un par de semanas desde un lugar geográficamente remoto y donde la calidad de la conexión a internet deja mucho que desear, sobre todo en los días de viento, la conexión se corta, sin exagerar cada 20 o 30 segundos, el roaming internacional funcionaba tan mal como el wifi y al ser extranjero no podía activar un plan movil prepago así que hasta solucionar eso, me toco encontrar una solución a la intermitencia de la conectividad.

Normalmente, vuelve rápido, sin embargo, algunas veces demora y si bien no a pasado aún, bien puede ser permanente y hasta que no necesite algo de internet, no enterarme del corte perdiendo las notificaciones importantes que debo atender, sobre todo en la noche estando de guardia, así que me toco crear un script para detectar las caídas y avisar, a continuación el código:

#!/bin/python3

import requests
import gi
gi.require_version('Notify', '0.7')

import time
from gi.repository import Notify
from playsound import playsound

import os

def notification(text,sound=False):
    #Notifiction
    Notify.init ("ALERTA")
    dialog=Notify.Notification.new ("ALERTA",text,"dialog-information")
    #dialog.set_timeout(0)
    dialog.show()

    #Sound
    if sound==True:
        playsound('./alarma.wav')

attempt=30
interval=5

count = 0

try:
    while(True):

        try:
            now = time.strftime("%Y-%m-%d %H:%M:%S")
            x = requests.get('https://check.server.com.uy/',timeout=5)

            if (x.text!="OK"):  
                count += 1
                print("{} Fallo intentando conectar con https://check.server.com.uy/ ({})".format(now,count))
            else:
                if (count>0):

                    x = requests.get("https://check.server.com.uy/myip.php",timeout=5)
                    count = 0
                    notification("La conexion fue restaurada")
                    print("{} La conexion fue restaurada (Public IP {})".format(now,x.text))
        except:
            count += 1
            print("{} Fallo intentando conectar con https://check.server.com.uy/ ({})".format(now,count))


        if count > attempt:
            notification("{} Despertate paparulo que estas sin internet".format(now),sound=True)

        time.sleep(interval)


except Exception as e:
    notification("Despertate, que este script no funciona")

Se puede modificar la ruta de playsound para asignar un sonido distintivo a la notificación, además el script necesitará instalar las liberias requests, playsound y gi, nada del otro mundo, al ejecutarlo:

./internetstatus

La salida será algo similar a esto:

2022-12-31 14:49:02 Fallo intentando conectar con https://check.server.com.uy/ (1)
2022-12-31 14:49:07 Fallo intentando conectar con https://check.server.com.uy/ (2)
2022-12-31 14:49:12 Fallo intentando conectar con https://check.server.com.uy/ (3)
2022-12-31 14:49:17 Fallo intentando conectar con https://check.server.com.uy/ (4)
2022-12-31 14:49:22 Fallo intentando conectar con https://check.server.com.uy/ (5)
2022-12-31 14:49:27 La conexion fue restaurada (Public IP XXX.XXX.XXX.XXX)
2022-12-31 14:50:34 Fallo intentando conectar con https://check.server.com.uy/ (1)
2022-12-31 14:50:44 Fallo intentando conectar con https://check.server.com.uy/ (2)
2022-12-31 14:50:50 Fallo intentando conectar con https://check.server.com.uy/ (3)
2022-12-31 14:50:55 Fallo intentando conectar con https://check.server.com.uy/ (4)
2022-12-31 14:51:00 Fallo intentando conectar con https://check.server.com.uy/ (5)
2022-12-31 14:51:05 Fallo intentando conectar con https://check.server.com.uy/ (6)
2022-12-31 14:51:10 Fallo intentando conectar con https://check.server.com.uy/ (7)
2022-12-31 14:51:15 La conexion fue restaurada (Public IP XXX.XXX.XXX.XXX)
2022-12-31 14:51:45 Fallo intentando conectar con https://check.server.com.uy/ (1)
2022-12-31 14:51:55 Fallo intentando conectar con https://check.server.com.uy/ (2)
2022-12-31 14:52:05 Fallo intentando conectar con https://check.server.com.uy/ (3)
2022-12-31 14:52:15 Fallo intentando conectar con https://check.server.com.uy/ (4)
2022-12-31 14:52:25 La conexión fue restaurada (Public IP XXX.XXX.XXX.XXX)
2022-12-31 14:52:51 Fallo intentando conectar con https://check.server.com.uy/ (1)
2022-12-31 14:53:01 La conexión fue restaurada (Public IP XXX.XXX.XXX.XXX)

No es una solución perfecta, aunque me resulto de gran ayuda para saber cuando me quedo sin internet, especialmente durante la noche de guardia, espero que los saque de un apuro como a mi.

Leave a Reply

Your email address will not be published. Required fields are marked *

Discover more from Alvaro De León

Subscribe now to keep reading and get access to the full archive.

Continue reading