Internet Monitor Project

Problem

My router would occasionally disconnect any of the wireless clients that were connected to it. Since I have wired and wireless devices connected, some of the time I would not know that the wifi had stopped working until my phone or laptop wouldn't connect or I noticed that a automation did not trigger when it should have.

Solution

After updating to the latest DD-WRT firmware, the problem persisted. Given that I work building automations to improve business processes, I decided that I would build and automation that would connect to the router’s web interface and see if there are any wireless clients connected to it. If there are no connected wireless clients, then there is a great chance that the wifi process that authenticates clients has crashed. As a result, the process would need to be restarted and the easiest way to restart the process would be to reboot the router.

Project was started in 2020.

Technology

  • C#

This solution uses Selenium Webdriver to connect to the DD-WRT router web interface. I built this using .NET Core, but it could be done on Python, Java, or one of the other platforms that Webdriver works on. I have it set up on server that is always running and it runs as a system service.

Documentation

Create System Service

sudo cp internetmonitor.service /lib/systemd/system
sudo systemctl daemon-reload
sudo systemctl enable internetmonitor
sudo systemctl start internetmonitor
sudo systemctl status internetmonitor

Once all of the commands above have been ran, you should see an output similar to the following:

iamadmin@media:/usr/lib$ sudo systemctl status internetmonitor
 internetmonitor.service - Internet Connectivity Monitor by almostengr
     Loaded: loaded (/lib/systemd/system/internetmonitor.service; disabled; vendor preset: enabled)
     Active: active (running) since Fri 2021-01-29 09:03:45 CST; 13s ago
       Docs: https://github.com/almostengr/internetmonitor
   Main PID: 7251 (Almostengr.Inte)
      Tasks: 14 (limit: 38351)
     Memory: 19.0M
     CGroup: /system.slice/internetmonitor.service
             └─7251 /usr/lib/internetmonitor/Almostengr.InternetMonitor

Jan 29 09:03:45 media Almostengr.InternetMonitor[7279]: ChromeDriver was started successfully.
Jan 29 09:03:46 media Almostengr.InternetMonitor[7251]: Almostengr.InternetMonitor.Worker[0] Performing checks at 01/29/2021 09:03:46 -06:00
Jan 29 09:03:46 media Almostengr.InternetMonitor[7251]: Almostengr.InternetMonitor.Worker[0] Converting router URL
Jan 29 09:03:51 media Almostengr.InternetMonitor[7251]: Almostengr.InternetMonitor.Worker[0] Wireless clients are connected. 11 devices found
Jan 29 09:03:51 media Almostengr.InternetMonitor[7251]: Almostengr.InternetMonitor.Worker[0] Checking the modem status page
Jan 29 09:03:53 media Almostengr.InternetMonitor[7251]: Almostengr.InternetMonitor.Worker[0] Checking the CM State page
Jan 29 09:03:53 media Almostengr.InternetMonitor[7251]: Almostengr.InternetMonitor.Worker[0] Browser has been closed
Jan 29 09:03:53 media Almostengr.InternetMonitor[7251]: Almostengr.InternetMonitor.Worker[0] Done performing checks at 01/29/2021 09:03:53 -06:00
Jan 29 09:03:53 media Almostengr.InternetMonitor[7251]: Almostengr.InternetMonitor.Worker[0] Sleeping for 600 seconds
Jan 29 09:03:53 media Almostengr.InternetMonitor[7251]: Microsoft.Hosting.Lifetime[0] Application started. Hosting environment: Production; Content root path>

Remove System Service

sudo systemctl disable internetmonitor
sudo systemctl stop internetmonitor
sudo systemctl status internetmonitor
sudo rm /lib/systemd/system/internetmonitor.service

Once all of the commands above have been ran, you should see an output similar to the following:

iamadmin@media:/usr/lib$ sudo systemctl status internetmonitor
 internetmonitor.service - Internet Connectivity Monitor by almostengr
     Loaded: loaded (/lib/systemd/system/internetmonitor.service; disabled; vendor preset: enabled)
     Active: inactive (dead)
       Docs: https://github.com/almostengr/internetmonitor

Jan 29 11:47:48 media systemd[1]: Stopping Internet Connectivity Monitor by almostengr...
Jan 29 11:47:48 media Almostengr.InternetMonitor[7251]: Microsoft.Hosting.Lifetime[0] Application is shutting down...
Jan 29 11:47:48 media Almostengr.InternetMonitor[7251]: Almostengr.InternetMonitor.Worker[0] Shutting down monitor
Jan 29 11:47:48 media Almostengr.InternetMonitor[7251]: Almostengr.InternetMonitor.Worker[0] Browser has been closed
Jan 29 11:47:48 media systemd[1]: internetmonitor.service: Succeeded.
Jan 29 11:47:48 media systemd[1]: Stopped Internet Connectivity Monitor by almostengr.

Source Code

To download the source code, visit the code repository.

Troubleshooting

Checking Job Log

To see the logs for the application when it is ran as system service, run the command

journalctl -u internetmonitor -b

or

journalctl -u internetmonitor -b -f