{"id":33726,"date":"2025-07-02T07:53:45","date_gmt":"2025-07-02T07:53:45","guid":{"rendered":"https:\/\/www.vocso.com\/blog\/?p=33726"},"modified":"2025-07-02T09:02:26","modified_gmt":"2025-07-02T09:02:26","slug":"engineering-a-lightweight-ip-uptime-monitor-for-an-isp-using-fastapi-raspberry-pi","status":"publish","type":"post","link":"https:\/\/www.vocso.com\/blog\/engineering-a-lightweight-ip-uptime-monitor-for-an-isp-using-fastapi-raspberry-pi\/","title":{"rendered":"Engineering a Lightweight IP Uptime Monitor for an ISP Using FastAPI &#038; Raspberry Pi"},"content":{"rendered":"<div style=\"margin-top: 0px; margin-bottom: 0px;\" class=\"sharethis-inline-share-buttons\" ><\/div>\n<p>When a growing leased line ISP approached us with a specific operational challenge, we knew they didn\u2019t need bloated dashboards or enterprise tools. They needed something lean, reliable, and deployable on-site \u2014 without cloud dependencies or ongoing costs.<\/p>\n\n\n\n<p><br>So, we built exactly that. A modular, API-first IP uptime monitor, built using Python + FastAPI, with a clean frontend and a heartbeat running from a Raspberry Pi \u2014 all tailored for ISPs.<\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-1 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/www.vocso.com\/blog\/wp-content\/uploads\/2025\/07\/ip-uptime-monitor-host-monitor-ui-image.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"494\" src=\"https:\/\/www.vocso.com\/blog\/wp-content\/uploads\/2025\/07\/ip-uptime-monitor-host-monitor-ui-image-1024x494.png\" alt=\"\" data-id=\"33746\" data-full-url=\"https:\/\/www.vocso.com\/blog\/wp-content\/uploads\/2025\/07\/ip-uptime-monitor-host-monitor-ui-image.png\" data-link=\"https:\/\/www.vocso.com\/blog\/engineering-a-lightweight-ip-uptime-monitor-for-an-isp-using-fastapi-raspberry-pi\/ip-uptime-monitor-host-monitor-ui-image\/\" class=\"wp-image-33746\" srcset=\"https:\/\/www.vocso.com\/blog\/wp-content\/uploads\/2025\/07\/ip-uptime-monitor-host-monitor-ui-image-1024x494.png 1024w, https:\/\/www.vocso.com\/blog\/wp-content\/uploads\/2025\/07\/ip-uptime-monitor-host-monitor-ui-image-300x145.png 300w, https:\/\/www.vocso.com\/blog\/wp-content\/uploads\/2025\/07\/ip-uptime-monitor-host-monitor-ui-image-768x370.png 768w, https:\/\/www.vocso.com\/blog\/wp-content\/uploads\/2025\/07\/ip-uptime-monitor-host-monitor-ui-image-1536x741.png 1536w, https:\/\/www.vocso.com\/blog\/wp-content\/uploads\/2025\/07\/ip-uptime-monitor-host-monitor-ui-image-624x301.png 624w, https:\/\/www.vocso.com\/blog\/wp-content\/uploads\/2025\/07\/ip-uptime-monitor-host-monitor-ui-image.png 1999w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><\/li><\/ul><\/figure>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_81 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title ez-toc-toggle\" style=\"cursor:pointer\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.vocso.com\/blog\/engineering-a-lightweight-ip-uptime-monitor-for-an-isp-using-fastapi-raspberry-pi\/#the-problem\" >The Problem<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.vocso.com\/blog\/engineering-a-lightweight-ip-uptime-monitor-for-an-isp-using-fastapi-raspberry-pi\/#our-solution\" >Our Solution<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.vocso.com\/blog\/engineering-a-lightweight-ip-uptime-monitor-for-an-isp-using-fastapi-raspberry-pi\/#the-monitoring-logic-monitorpy\" >The Monitoring Logic: monitor.py<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.vocso.com\/blog\/engineering-a-lightweight-ip-uptime-monitor-for-an-isp-using-fastapi-raspberry-pi\/#email-throttling-example\" >Email Throttling Example<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.vocso.com\/blog\/engineering-a-lightweight-ip-uptime-monitor-for-an-isp-using-fastapi-raspberry-pi\/#frontend-real-time-dashboard\" >Frontend: Real-Time Dashboard<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.vocso.com\/blog\/engineering-a-lightweight-ip-uptime-monitor-for-an-isp-using-fastapi-raspberry-pi\/#systemd-deployment-on-raspberry-pi\" >SystemD Deployment on Raspberry Pi<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.vocso.com\/blog\/engineering-a-lightweight-ip-uptime-monitor-for-an-isp-using-fastapi-raspberry-pi\/#secure-lightweight\" >Secure &amp; Lightweight<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.vocso.com\/blog\/engineering-a-lightweight-ip-uptime-monitor-for-an-isp-using-fastapi-raspberry-pi\/#results\" >Results<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.vocso.com\/blog\/engineering-a-lightweight-ip-uptime-monitor-for-an-isp-using-fastapi-raspberry-pi\/#why-this-worked\" >Why This Worked<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.vocso.com\/blog\/engineering-a-lightweight-ip-uptime-monitor-for-an-isp-using-fastapi-raspberry-pi\/#looking-ahead\" >Looking Ahead<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.vocso.com\/blog\/engineering-a-lightweight-ip-uptime-monitor-for-an-isp-using-fastapi-raspberry-pi\/#beyond-isp-monitoring-other-real-world-use-cases-for-this-system\" >Beyond ISP Monitoring, Other Real-World Use Cases for This System<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/www.vocso.com\/blog\/engineering-a-lightweight-ip-uptime-monitor-for-an-isp-using-fastapi-raspberry-pi\/#1-website-uptime-monitoring\" >1. Website Uptime Monitoring<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/www.vocso.com\/blog\/engineering-a-lightweight-ip-uptime-monitor-for-an-isp-using-fastapi-raspberry-pi\/#2-ssl-certificate-expiry-monitoring\" >2. SSL Certificate Expiry Monitoring<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/www.vocso.com\/blog\/engineering-a-lightweight-ip-uptime-monitor-for-an-isp-using-fastapi-raspberry-pi\/#3-internal-services-monitoring-intranetdevops\" >3. Internal Services Monitoring (Intranet\/DevOps)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/www.vocso.com\/blog\/engineering-a-lightweight-ip-uptime-monitor-for-an-isp-using-fastapi-raspberry-pi\/#4-branch-network-device-monitoring\" >4. Branch Network Device Monitoring<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/www.vocso.com\/blog\/engineering-a-lightweight-ip-uptime-monitor-for-an-isp-using-fastapi-raspberry-pi\/#5-educational-institutions\" >5. Educational Institutions<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/www.vocso.com\/blog\/engineering-a-lightweight-ip-uptime-monitor-for-an-isp-using-fastapi-raspberry-pi\/#6-iot-device-uptime-ping-monitoring\" >6. IoT Device Uptime &amp; Ping Monitoring<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/www.vocso.com\/blog\/engineering-a-lightweight-ip-uptime-monitor-for-an-isp-using-fastapi-raspberry-pi\/#highly-modular-infinitely-adaptable\" >Highly Modular, Infinitely Adaptable<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"the-problem\"><\/span>The Problem<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>The client ISP had dozens of client IPs to monitor. Their pain points were clear:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>No centralized dashboard to check real-time status.<\/li><li>No historical uptime visibility.<\/li><li>Manual checks &amp; delayed incident response.<\/li><li>Alerting was ad hoc at best.<\/li><li>Wanted complete control and local deployability.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"our-solution\"><\/span>Our Solution<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>We engineered a plug-and-play uptime monitor using:<\/p>\n\n\n\n<p>1. FastAPI as the backend service.<\/p>\n\n\n\n<p>2. HTML\/CSS\/JS <a href=\"https:\/\/www.vocso.com\/frontend-development-services\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"https:\/\/www.vocso.com\/frontend-development-services\">frontend<\/a> for easy status visualization.<\/p>\n\n\n\n<p>3. A custom monitor.py script with:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Smart pinging logic<\/li><li>Retry mechanism<\/li><li>Uptime calculation<\/li><li>Email throttling<\/li><li>JSON-based storage (no DB required)<\/li><\/ul>\n\n\n\n<p>4. Deployed and running 24\u00d77 via systemd on Raspberry Pi 3.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.vocso.com\/blog\/wp-content\/uploads\/2025\/07\/ip-throttling-ping-alert-over-gmail-image.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"364\" src=\"https:\/\/www.vocso.com\/blog\/wp-content\/uploads\/2025\/07\/ip-throttling-ping-alert-over-gmail-image-1024x364.jpg\" alt=\"ip throttling ping alert over gmail image\" class=\"wp-image-33750\" srcset=\"https:\/\/www.vocso.com\/blog\/wp-content\/uploads\/2025\/07\/ip-throttling-ping-alert-over-gmail-image-1024x364.jpg 1024w, https:\/\/www.vocso.com\/blog\/wp-content\/uploads\/2025\/07\/ip-throttling-ping-alert-over-gmail-image-300x107.jpg 300w, https:\/\/www.vocso.com\/blog\/wp-content\/uploads\/2025\/07\/ip-throttling-ping-alert-over-gmail-image-768x273.jpg 768w, https:\/\/www.vocso.com\/blog\/wp-content\/uploads\/2025\/07\/ip-throttling-ping-alert-over-gmail-image-624x222.jpg 624w, https:\/\/www.vocso.com\/blog\/wp-content\/uploads\/2025\/07\/ip-throttling-ping-alert-over-gmail-image.jpg 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"the-monitoring-logic-monitorpy\"><\/span>The Monitoring Logic: monitor.py<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">def monitor():\n    while True:\n        for host in hosts:\n            if not ping(host[\"ip\"]):\n                host[\"fail_count\"] += 1\n            else:\n                host[\"fail_count\"] = 0\n                host[\"statusCurrent\"] = True\n\n            # 10 consecutive failures \u2192 alert\n            if host[\"fail_count\"] &gt;= 10 and should_send_email(host):\n                send_email_alert(host)\n                host[\"last_alert_time\"] = time.time()\n\n            update_status_history(host)\n\n        save_to_json(\"hosts.json\", hosts)\n        time.sleep(config[\"interval\"])<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"email-throttling-example\"><\/span>Email Throttling Example<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">def should_send_email(host):\n    return (time.time() - host.get(\"last_alert_time\", 0)) &gt; config[\"email_cooldown\"]<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"frontend-real-time-dashboard\"><\/span>Frontend: Real-Time Dashboard<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>The FastAPI backend serves a web UI to view:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Uptime % of each host<\/li><li>current status<\/li><li>Hostname + IP (IP dimmed)<\/li><li>Status dot trail<\/li><li>Add\/Edit\/Delete UI<\/li><li>Dark\/Light theme toggle<\/li><li>Auto-refresh every 10 sec<\/li><li>Stats summary at top<\/li><\/ul>\n\n\n\n<p>Here\u2019s a sample HTML placeholder for each card:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">&lt;div class=\"host-card\"&gt;\n  &lt;div class=\"host-header\"&gt;\n    &lt;div class=\"host-info\"&gt;\n      &lt;div class=\"host-name\"&gt;Server A&lt;\/div&gt;\n      &lt;div class=\"ip-address\"&gt;192.168.0.1&lt;\/div&gt;\n    &lt;\/div&gt;\n    &lt;div class=\"host-meta\"&gt;\n      &lt;div class=\"status up-status\"&gt;\ud83d\udfe2&lt;\/div&gt;\n      &lt;div class=\"uptime\"&gt;98% uptime&lt;\/div&gt;\n    &lt;\/div&gt;\n  &lt;\/div&gt;\n  &lt;div class=\"status-line\"&gt;\n    &lt;div class=\"dot up\"&gt;&lt;\/div&gt;&lt;div class=\"dot down\"&gt;&lt;\/div&gt;...\n  &lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"systemd-deployment-on-raspberry-pi\"><\/span>SystemD Deployment on Raspberry Pi<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>We packaged monitor.py as a service:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">[Unit]\nDescription=IP Monitor Service\nAfter=network.target\n\n[Service]\nExecStart=\/usr\/bin\/python3 \/home\/pi\/monitor.py\nWorkingDirectory=\/home\/pi\nRestart=always\n\n[Install]\nWantedBy=multi-user.target<\/code><\/pre>\n\n\n\n<p>Enable and start:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">sudo systemctl enable monitor\nsudo systemctl start monitor<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"secure-lightweight\"><\/span>Secure &amp; Lightweight<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>API runs on port 8000 \u2014 open it via UFW or iptables.<\/li><li>SMTP settings (for Gmail or custom SMTP) are stored in config.json.<\/li><li>Only .json files used for storage \u2014 no database dependencies.<\/li><li>Works perfectly on Raspberry Pi 3 but also easily deployable on any Linux cloud VM (like AWS Lightsail).<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"results\"><\/span>Results<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>The monitor is now live and quietly humming in the corner of the ISP&#8217;s NOC room:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>10-second real-time status refresh<\/li><li>100% self-hosted<\/li><li>No cloud costs<\/li><li>Faster incident detection<\/li><li>Peace of mind for network admins<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"why-this-worked\"><\/span>Why This Worked<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>This wasn\u2019t just code. This was engineered:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>To be lean &amp; fast (perfect for RPi)<\/li><li>For real-world ISP use (retry + email cooldown)<\/li><li>Without vendor lock-in<\/li><li>With visual clarity and zero devops bloat<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"looking-ahead\"><\/span>Looking Ahead<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Future extensions may include:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Telegram\/Slack alerts<\/li><li>Advanced reporting<\/li><li>Dockerization<\/li><li>Role-based login (if needed)<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"beyond-isp-monitoring-other-real-world-use-cases-for-this-system\"><\/span>Beyond ISP Monitoring, Other Real-World Use Cases for This System<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>While the original deployment was engineered to monitor leased line IPs for a regional ISP covering <a href=\"https:\/\/www.vocso.com\/full-stack-development-services\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"https:\/\/www.vocso.com\/full-stack-development-services\">full stack<\/a> aspects of the project having plain designing+coding and api&#8217;s integration, its flexible architecture allows adaptation to several practical monitoring scenarios:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"1-website-uptime-monitoring\"><\/span>1. Website Uptime Monitoring<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><strong>Use Case:<\/strong> Monitor client portals, marketing websites, or critical APIs.<\/p>\n\n\n\n<p><strong>Modification: <\/strong>Swap ping() with an HTTP GET check.<\/p>\n\n\n\n<p><strong>Bonus:<\/strong> Extend to log response times and alert for slow responses.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">def is_website_up(url):\n    try:\n        res = requests.get(url, timeout=5)\n        return res.status_code == 200\n    except:\n        return False<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"2-ssl-certificate-expiry-monitoring\"><\/span>2. SSL Certificate Expiry Monitoring<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><strong>Use Case:<\/strong> Track SSL certs of websites or subdomains and alert before expiry.<\/p>\n\n\n\n<p><strong>Why It Matters:<\/strong> Expired certs break HTTPS and damage trust.<\/p>\n\n\n\n<p><strong>Enhancement: <\/strong>Add a scheduled job to check SSL expiry dates.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">import ssl, socket\nfrom datetime import datetime\n\ndef get_ssl_expiry(hostname):\n    context = ssl.create_default_context()\n    with socket.create_connection((hostname, 443)) as sock:\n        with context.wrap_socket(sock, server_hostname=hostname) as ssock:\n            return ssock.getpeercert()['notAfter']\n\n# Example usage\nexpiry = get_ssl_expiry('example.com')\nexpiry_date = datetime.strptime(expiry, '%b %d %H:%M:%S %Y %Z')\ndays_remaining = (expiry_date - datetime.utcnow()).days<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"3-internal-services-monitoring-intranetdevops\"><\/span>3. Internal Services Monitoring (Intranet\/DevOps)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><strong>Use Case:<\/strong> Monitor Jenkins, self-hosted Git, or database servers on internal IPs.<\/p>\n\n\n\n<p><strong>Why It Works:<\/strong> No reliance on external tools. Fully in-network.<\/p>\n\n\n\n<p><strong>Deploy:<\/strong> On internal Linux VMs or office Raspberry Pis.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"4-branch-network-device-monitoring\"><\/span>4. Branch Network Device Monitoring<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><strong>Use Case:<\/strong> IT teams at HQ monitor routers, leased lines, and gateways in branch offices.<\/p>\n\n\n\n<p><strong>Architecture:<\/strong> Use a Raspberry Pi or Linux server in each branch.<\/p>\n\n\n\n<p><strong>Scalable:<\/strong> Works for a few or hundreds of remote sites.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"5-educational-institutions\"><\/span>5. Educational Institutions<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><strong>Use Case:<\/strong> Monitor IP-connected ERP servers, attendance devices, or firewalls.<\/p>\n\n\n\n<p><strong>Highlight:<\/strong> Ideal for low-budget, low-maintenance campus IT setups.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"6-iot-device-uptime-ping-monitoring\"><\/span>6. IoT Device Uptime &amp; Ping Monitoring<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><strong>Use Case:<\/strong> Ensure remote edge devices or smart gateways are online.<\/p>\n\n\n\n<p><strong>Why It Fits:<\/strong> Ping-based check is ideal for constrained environments.<\/p>\n\n\n\n<p><strong>Next Level:<\/strong> Combine with telemetry or MQTT-based checks.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"highly-modular-infinitely-adaptable\"><\/span>Highly Modular, Infinitely Adaptable<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>This system isn\u2019t a rigid SaaS product \u2014 it\u2019s a flexible, self-hostable uptime monitor engine with:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>IP or domain checks<\/li><li>Email alerts via SMTP<\/li><li>Custom logic with retry\/backoff<\/li><li>Responsive Web UI built in HTML\/CSS\/JS<\/li><li>Persisted JSON backend, no DB needed<\/li><li>Auto-refresh + visual stats dashboard<\/li><li>Simple enough to run on Raspberry Pi, powerful enough for cloud<\/li><\/ul>\n\n\n\n<p>What started as a simple uptime monitor turned into a robust, production-grade tool \u2014 deployed on constrained hardware, running custom logic, automating alerts, and serving a clean, interactive UI. <a href=\"https:\/\/www.vocso.com\/backend-development-services\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"https:\/\/www.vocso.com\/backend-development-services\">Backend development<\/a> and <a href=\"https:\/\/www.vocso.com\/custom-api-development-services\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"https:\/\/www.vocso.com\/custom-api-development-services\">Custom API development<\/a> skills are crucial prerequisites for making this uptime monitor leveraging knowledge of programming along with latest technologies like Raspberry Pi .<\/p>\n\n\n\n<p>This is the kind of work we love: taking on real-world constraints, building lean systems with just the right stack, and shipping something that just works \u2014 simply, reliably, and intelligently.<\/p>\n\n\n\n<p>Whether it\u2019s a custom monitoring system, an <a href=\"https:\/\/www.vocso.com\/generative-ai-development-services\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"https:\/\/www.vocso.com\/generative-ai-development-services\">AI<\/a>-powered assistant, or automating workflows at scale \u2014 if you\u2019ve got a complex challenge, we\u2019re ready to engineer a solution that feels effortless on the outside and powerful underneath.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>When a growing leased line ISP approached us with a specific operational challenge, we knew they didn\u2019t need bloated dashboards or enterprise tools. They needed something lean, reliable, and deployable on-site \u2014 without cloud dependencies or ongoing costs. So, we built exactly that. A modular, API-first IP uptime monitor, built using Python + FastAPI, with <\/p>\n","protected":false},"author":23,"featured_media":33745,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1456],"tags":[1460,1427,1461],"class_list":["post-33726","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python","tag-fastapi","tag-python","tag-raspberry-pi"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.vocso.com\/blog\/wp-json\/wp\/v2\/posts\/33726","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.vocso.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.vocso.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.vocso.com\/blog\/wp-json\/wp\/v2\/users\/23"}],"replies":[{"embeddable":true,"href":"https:\/\/www.vocso.com\/blog\/wp-json\/wp\/v2\/comments?post=33726"}],"version-history":[{"count":1,"href":"https:\/\/www.vocso.com\/blog\/wp-json\/wp\/v2\/posts\/33726\/revisions"}],"predecessor-version":[{"id":33996,"href":"https:\/\/www.vocso.com\/blog\/wp-json\/wp\/v2\/posts\/33726\/revisions\/33996"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.vocso.com\/blog\/wp-json\/wp\/v2\/media\/33745"}],"wp:attachment":[{"href":"https:\/\/www.vocso.com\/blog\/wp-json\/wp\/v2\/media?parent=33726"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vocso.com\/blog\/wp-json\/wp\/v2\/categories?post=33726"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vocso.com\/blog\/wp-json\/wp\/v2\/tags?post=33726"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}