PYLONMON

Monitor your home internet with the router you already own

If your home internet drops while you’re out, everything you self-host goes with it — Home Assistant, cameras, backups, the VPN back in — and nothing tells you. The fix is one cron line on your router and an off-site service that treats silence as the alarm. Total cost: free. Time: about five minutes.

Why you can’t monitor your internet from inside your house

The obvious approaches all share one flaw. A ping script on your NAS, a speed-test widget, an uptime container on the LAN — every one of them needs the internet to be up to tell you the internet is down. When the WAN link dies, the messenger dies with it. You get no alert, for exactly the outages you most wanted the alert about.

So the connection has to be turned around. Instead of something inside checking the internet, something inside proves it’s alive to a watcher outside — a tiny HTTP request on a schedule, called a heartbeat. The off-site watcher’s only job is to notice when the check-ins stop. That’s a dead-man’s switch: it requires nothing from your network at the moment of failure, which is precisely why it survives the failure.

“But if my internet is down, how does the alert reach me?” Your phone isn’t on your home internet when it matters — it’s on cellular, or on the coffee shop’s Wi-Fi, or at work with you. The alert is sent from the off-site watcher, not from your house, so it arrives by email or push regardless of what your ISP is doing. And when you’re sitting at home during the outage, you already know — what you get instead is the timeline: exactly when it dropped, how long it lasted, and how often it’s been happening.

The right machine to send the heartbeat is the router

You could send the heartbeat from a Raspberry Pi or your NAS, and that works — but then a dead Pi and a dead internet connection look identical. The router is the one device whose “alive and reaching the internet” is the fact you’re trying to monitor. If the router’s heartbeat arrives, your WAN link works, DNS resolves, and traffic is flowing end to end. If it goes quiet, the internet is down at your house — or the router itself died, which you also want to know.

Most home routers people actually chose on purpose can do this out of the box. GL.iNet devices (Flint, Flint 2, Beryl, Slate) run OpenWrt under the hood; so do many others, natively or reflashed. Anything with SSH and cron qualifies.

Step 1 — create the heartbeat monitor

In PylonMon: Add monitor → Heartbeat. Name it after the link (“Home Internet”, “Flint 2 Internet”), set the period to 2 minutes, and save. The monitor waits amber until its first check-in, and its card gives you a private check-in URL:

pylonmon.com/portal — Monitors
Home Internet
INITIALIZING
waiting on first check-in · SLA: check-in every 2m
curl -fsS https://pylonmon.com/hb/f3ab2c17d0e94b21

The monitor arms itself on the first check-in — nothing else to configure.

Step 2 — one cron line on the router

GL.iNet (Flint 2 or any model): the friendly way is the web UI — LuCI at System → Scheduled Tasks (on GL.iNet firmware, reach LuCI via “Advanced Settings”). Paste one line and save:

LuCI → System → Scheduled Tasks (crontab)
# prove the WAN link is alive, every 2 minutes
*/2 * * * * wget -q -O /dev/null https://pylonmon.com/hb/YOUR-ID

That’s busybox wget, which ships on every OpenWrt build — nothing to install. If you prefer SSH, the same line goes in with crontab -e as root, followed by /etc/init.d/cron restart. On routers where you’ve installed curl (opkg install curl), the equivalent is:

ssh root@192.168.8.1
*/2 * * * * curl -fsS https://pylonmon.com/hb/YOUR-ID

Within two minutes the card flips green. Each check-in is stamped with the address it arrived from — your WAN IP, which is its own quiet bonus: a running log of every time your ISP rotates it.

pylonmon.com/portal — armed
Home Internet
HEARTBEAT
SLA: check-in every 2m
40s ago

Step 3 — decide how twitchy it should be

A 2-minute beat with a 1-miss threshold pages you about three to four minutes into an outage — and will occasionally page you about a 90-second ISP hiccup that fixed itself. Both settings are yours to tune, and the honest guidance is:

You wantPeriodAlert afterPages you in
To know about every blip (ISP evidence)2 min1 missed~4 min
Real outages only, few false alarms2 min2 missed~6 min
A calm “the house is offline” signal5 min2 missed~12 min

Brief blips that recover before the threshold still land in the monitor’s timeline — they just don’t page you. That’s the right split: your phone only buzzes for outages, the record keeps everything.

What an outage actually looks like

When the check-ins stop, the card goes red and the page goes out — by a route that never touches your house:

pylonmon.com/portal — during the outage
Home Internet
HEARTBEAT
SLA: check-in every 2m · no check-in for 4m
4m ago

Every outage becomes a row in the monitor’s history with a start, an end, and a duration. After a bad month you’re no longer telling your ISP “it feels like it drops a lot” — you’re reading them a list: eleven outages, timestamps, durations, longest 38 minutes. Support calls go differently when one side has receipts.

Level up: separate “internet down” from “router down”

The single heartbeat deliberately bundles failure modes: silence means the house is unreachable, whichever layer died. If you want the alert to tell you which one, add a second signal from a different box:

Two monitors, and suddenly the 3am question “is it the ISP or did the Pi lock up again?” answers itself from your phone. Three machines are free, so this costs nothing.

The five-minute version

StepWhereWhat
1PylonMonAdd monitor → Heartbeat → period 2 min → copy the /hb/ URL
2RouterLuCI → System → Scheduled Tasks → paste the wget line
3PylonMonWatch it flip to up, set the miss threshold, pick your alert channel

Alerts on vital signs are free on every plan — that includes this heartbeat. If you want the pages to land somewhere nicer than email, route them into a Discord channel; if the thing you host has no public address at all, the same trick generalises: monitoring a server with no public IP.

Start free →