Last active
December 19, 2024 11:49
-
-
Save barakplasma/d874b7f04d5018782ab1efb740d8f819 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# backup at Z5nYiUJM https://rentry.co/7d98g63q | |
from playwright.sync_api import sync_playwright | |
import requests | |
import schedule | |
from time import sleep | |
from datetime import datetime, UTC | |
from loguru import logger | |
logger.add( | |
"reset-pluga-wifi.log", rotation="50 MB" | |
) # Automatically rotate too big file | |
@logger.catch | |
def is_internet_available(): | |
try: | |
logger.debug("pinging healthcheck.io") | |
res = requests.get("https://hc-ping.com/40d11324-f128-4684-8514-3a9399f3cc5c") | |
res.raise_for_status() | |
return True | |
except requests.RequestException: | |
logger.warning("the internet is down") | |
return False | |
@logger.catch | |
def reboot_wifi(): | |
with sync_playwright() as p: | |
try: | |
browser = p.chromium.launch(headless=True, slow_mo=50) | |
page = browser.new_page() | |
logger.debug("started playwright") | |
page.goto("http://192.168.1.1") | |
logger.debug("logging into router page") | |
except Exception as e: | |
if "net::ERR_INTERNET_DISCONNECTED" in str(e): | |
logger.info("ignore net::ERR_INTERNET_DISCONNECTED") | |
else: | |
logger.exception(e) | |
username = page.locator("#A1") | |
username.fill("home") | |
password = page.locator("#A2") | |
password.fill("12345678") | |
page.get_by_role("button", name="Enter").click() | |
logger.debug("logged in successfully") | |
page.get_by_role("link", name="System").click() | |
page.get_by_role("link", name="Configuration").click() | |
page.locator(".cover").get_by_text("Save", exact=True).click() | |
page.on("dialog", lambda dia: dia.accept()) | |
page.locator(".cover").get_by_text("Reboot", exact=True).click() | |
browser.close() | |
logger.info("sent reboot command to router") | |
sleep(30) | |
try: | |
logger.debug("logging reboot event to healthcheck.io") | |
timestamp = datetime.now(UTC) | |
data = f"Router rebooted at {timestamp}" | |
res = requests.post( | |
"https://hc-ping.com/40d11324-f128-4684-8514-3a9399f3cc5c/log", | |
data=data, | |
timeout=300, | |
) | |
res.raise_for_status() | |
except requests.RequestException: | |
logger.warning("failed to log reboot event to healthcheck.io") | |
def reboot_all(): | |
try: | |
for i in range(3): | |
reboot_wifi() | |
except Exception as e: | |
logger.error('failed to reboot wifi') | |
logger.exception(e) | |
sleep(60) | |
def run(): | |
if is_internet_available() is False: | |
reboot_all() | |
else: | |
logger.info("internet connected") | |
schedule.every(5).minutes.do(run) | |
schedule.every(2).hours.do(reboot_all) | |
schedule.run_all() | |
while True: | |
schedule.run_pending() | |
sleep(1) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment