Download

A small Python app that runs on your own computer. It pings your targets, detects outages and silent multi-WAN failovers (e.g. Starlink ↔ cellular), runs periodic speed tests and writes log/CSV files. No third-party packages required.

One file containing the GUI and the monitor. Nothing to unpack or install besides Python.

Requirements

  • macOS or Linux
  • Python 3.10 or newer, with Tkinter (for the GUI)
  • ping and route (macOS) or ip (Linux) - normally preinstalled

Windows isn't supported yet (different ping options).

What the GUI shows

  • Overall status: online / degraded / outage
  • Provider, profile, public IPv4/IPv6, NAT/CGNAT, DNS chain
  • Per-target status, outages and downtime
  • Speed test results and estimated data volume
  • The full output you'd otherwise see in the terminal
  • Settings tab - no JSON editing needed

Installation & start

macOS

Don't use Apple's built-in /usr/bin/python3 - its old Tk 8.5 shows only an empty black window. Install Python from python.org (includes Tk 8.6) or use Homebrew:

brew install python python-tk

Check which Python/Tk you get: python3 -c "import sys, tkinter; print(sys.executable, tkinter.TkVersion)" - it must show 8.6 or higher. If Apple's Python comes first in your PATH, the app restarts itself with the Homebrew/python.org Python, or start it explicitly: /opt/homebrew/bin/python3 isp-connection-check.pyz

Linux (Debian / Ubuntu)

sudo apt install python3 python3-tk

Fedora: sudo dnf install python3-tkinter · Arch: sudo pacman -S tk

Start

Move the downloaded file to a folder of your choice (config and logs are stored next to it), then in a terminal:

cd ~/Downloads        # or wherever you put the file
python3 isp-connection-check.pyz

Click Start on the Monitor tab. On first start a default pingmon.json is created next to the app. The first output appears after ~20 s (ISP lookup and a baseline speed test run first).

Without GUI (e.g. on a server or Raspberry Pi)

python3 isp-connection-check.pyz --cli [path/to/pingmon.json]

Stop with Ctrl+C - a summary of outages and downtime per target is printed on exit.

Settings (Settings tab)

Saved to pingmon.json; restart monitoring to apply changes

SettingMeaning
Ping targetsNamed hosts/IPs to ping. gateway with an empty host auto-detects your router; dns is compared with your system resolver.
Connection profilesMatched against the detected ISP name (e.g. starlink, cellular) to pick interval, ping timeout and failure threshold automatically.
Ping overridesFixed interval / timeout / threshold for all providers, instead of the profile values.
ISP check intervalHow often the provider is re-checked to catch silent failovers.
Speed testSchedule in minutes (0 = off) and whether to run one after a connection change.
Verbose downtimeLog every failed ping, including ones still within the failure threshold.
LogsLog directory, file prefix and how many log/CSV pairs to keep.

Privacy

Everything runs on your computer and logs are written locally only. The app contacts ip-api.com / ipify.org (public IP and ISP) and speed.cloudflare.com (speed test), plus the ping targets you configure.