ISP Speed Test
Measures your internet connection's download, upload, and latency, then records a breach whenever the connection is down or a speed falls below a threshold you set.
- No account, no API key, no external package — measurements run against
Cloudflare's public speed endpoints (
https://speed.cloudflare.com) using the Python standard library only. - A breach appends one timestamped row to a CSV log file so you can track outages and slowdowns over time.
What counts as a breach
A breach is recorded when either:
- the connection fails (any network error → status: down), or
- download is below minDownloadMbps, or
- upload is below minUploadMbps.
Set a threshold to 0 to disable that check. Set logAll: true to log every run
(not just breaches).
Inputs
minDownloadMbps— breach if download is below this (default50)minUploadMbps— breach if upload is below this (default10)logFile— CSV breach log path (default<INTOUCH_HOME>/logs/isp_speed_test.csv, created if missing)downloadBytes— bytes to download for the measurement (default25000000= 25 MB)uploadBytes— bytes to upload for the measurement (default10000000= 10 MB)timeoutSeconds— network timeout per request (default30)logAll—truelogs every run,falselogs only breaches (defaultfalse)
Outputs (publish)
status—upordownpassed—trueif the connection is up and both speeds meet their thresholdsdownloadMbps,uploadMbps,pingMs— the measured valuesreason—ok, or a description of what breachedlogged— path of the log file written to (empty when nothing was logged)result— full JSON summary of the run
Log format
<INTOUCH_HOME>/logs/isp_speed_test.csv:
timestamp,status,downloadMbps,uploadMbps,pingMs,reason
2026-07-01 09:14:02,up,41.2,8.7,23.5,"download 41.20 < 50.00 Mbps; upload 8.70 < 10.00 Mbps"
2026-07-01 09:29:02,down,,,,"connection failed: URLError: <urlopen error timed out>"
Example
minDownloadMbps: 100
minUploadMbps: 20
logFile: /var/log/intouch/isp_breaches.csv
Tip: automate it
Add this tool as a task in a job and put the job on a schedule (e.g. every 15 minutes) to build a continuous record of ISP outages and slowdowns. To also get notified, link an alert to the job on failure — the tool exits non-zero when the connection is down.
Publishes
The keys a later task may reference as {{taskName.key}}. Referencing anything not listed here resolves to nothing at run time.
downloadMbpsloggedpassedpingMsreasonresultstatusuploadMbps
Input Properties
Every property this tool accepts, from its own tool.iml.
| Property | Type | Required | Default | Description |
|---|---|---|---|---|
minDownloadMbps |
string | no | 50 |
Fail (record a breach) if measured download is below this many Mbps. Set to 0 to disable the download check. |
minUploadMbps |
string | no | 10 |
Fail (record a breach) if measured upload is below this many Mbps. Set to 0 to disable the upload check. |
logFile |
string | no | — | Path to the CSV breach log. Empty = |
downloadBytes |
string | no | 25000000 |
Bytes to download for the measurement (default 25 MB). |
uploadBytes |
string | no | 10000000 |
Bytes to upload for the measurement (default 10 MB). |
timeoutSeconds |
string | no | 30 |
Network timeout per request in seconds. |
logAll |
string | no | false |
true = log every run; false = log only breaches (connection down or below threshold). |