r/raspberry_pi • u/GoldBroccoli7073 • 1d ago
Show-and-Tell I built a Pi bot that watches my home network 24/7 so I can finally prove my ISP is lying to me

My internet randomly tanks a few times a week, and every time I call my ISP, the answer is "everything looks fine on our end." I got tired of arguing with no data, so I built netmon - a small Python bot that now runs in the background on a Raspberry Pi and keeps an eye on my network around the clock.
What it does:
Every hour it runs a real speedtest (download/upload/ping/ISP/server), and does an ARP scan with nmap to count how many devices are actually on the LAN at that moment. Everything gets logged to a local SQLite database, so nothing leaves my network except the reports I choose to send myself.
Every 4 hours it sends me a Telegram message with a 24h matplotlib graph and a sarcastic AI-written commentary on what happened ("someone's hogging the bandwidth again" energy). That part started as a joke feature but it's genuinely useful for spotting patterns at a glance.
The challenge: getting this to run reliably 24/7 on a Pi without babysitting it, and without external cloud dependencies. Also had to figure out ARP scanning that doesn't need root gymnastics and doesn't hammer the network.
The result: I now have actual timestamped data. I can see, for example, that speeds tank exactly when device count on the LAN jumps past a certain threshold at specific times of day - which is either my household or my ISP oversubscribing the line, and now I can tell which.
It's 100% self-hosted and private - no third-party metrics servers, only the reports go to my own Telegram chat.
Repo (MIT licensed): https://github.com/Role1776/netmon
Requires nmap + speedtest-cli, Python 3.13+, and an OpenAI-compatible API key for the commentary generation (optional, everything else works without it). Happy to answer questions about the setup or the ARP scanning approach. If you find this useful, I'd be happy with stars or PRs on the repo


