r/raspberry_pi • u/GoldBroccoli7073 • 1h 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.


