A Python app that continuously polls your home WiFi and network uptime, logs any downtime, and serves a live status dashboard in your browser. The dashboard can be accessed by any device on the same network.
Project description
Heimdall Network Watcher
A Python app that continuously polls your home WiFi and network uptime, logs any downtime, and serves a live status dashboard in your browser. The dashboard can be accessed by any device on the same network.
Features
- Continuous monitoring - Pings a configurable target (default:
8.8.8.8) at a set interval - Downtime logging - Records each outage with start and end time in SQLite
- Live dashboard - Web UI showing current status, 24h uptime %, and recent downtime events
- Cross-platform - Uses the system
pingcommand (Windows and Unix)
Quick start
-
Create a virtual environment and install dependencies
python -m venv .venv .venv\Scripts\activate # Windows # source .venv/bin/activate # macOS/Linux pip install -r requirements.txt
-
Run the app
python app.py -
Open the dashboard
In your browser go to: http://localhost:9000 On the same WiFi, other devices can use http://:9000 (for example,
http://192.168.1.42:9000).
The monitor runs in the background and the dashboard auto-refreshes every few seconds.
Configuration
Environment variables (optional):
| Variable | Description | Default |
|---|---|---|
HEIMDALL_PING_TARGET |
Host to ping (IP or hostname) | 8.8.8.8 |
HEIMDALL_POLL_INTERVAL |
Seconds between checks | 10 |
HEIMDALL_PING_TIMEOUT |
Ping timeout in seconds | 5 |
HEIMDALL_DB |
SQLite database path | heimdall.db |
HEIMDALL_HOST |
Flask bind address | 0.0.0.0 |
HEIMDALL_PORT |
Flask port | 9000 |
Example: Monitor your router and check every 5 seconds:
set HEIMDALL_PING_TARGET=8.8.8.8
set HEIMDALL_POLL_INTERVAL=5
python app.py
On Linux/macOS use export HEIMDALL_PING_TARGET=192.168.1.1 etc.
API
GET /- Dashboard (HTML)GET /api/status- Current status (up/down, last check, current downtime)GET /api/stats- 24h uptime % and sample countGET /api/downtimes- Recent downtime intervals
Requirements
- Python 3.8+
- Flask (see
requirements.txt)
No special permissions needed; uses standard ping and a local SQLite file.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file heimdall_network_monitor-0.2.1.tar.gz.
File metadata
- Download URL: heimdall_network_monitor-0.2.1.tar.gz
- Upload date:
- Size: 10.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2a09ee8b97991db31c6ff7ee0d9cc102d9676c115cd692fe9438c1c8510c78b4
|
|
| MD5 |
6ece8e71be8542a0d5198956cb2c4d77
|
|
| BLAKE2b-256 |
53001a8d8efa5c1c44ad95fca142d19ec001c263f90361a819240e2143c631f4
|
File details
Details for the file heimdall_network_monitor-0.2.1-py3-none-any.whl.
File metadata
- Download URL: heimdall_network_monitor-0.2.1-py3-none-any.whl
- Upload date:
- Size: 11.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1ad928e28bc01126cf719b9a9f853088b1b1f2bcf2e90ee68dbc194146468336
|
|
| MD5 |
af2be60d8d07ec1857186f23df9d701d
|
|
| BLAKE2b-256 |
82e4c95706c09b542e7788830621c9e0c5e7f8439445aed8e4e7b07c6c61a062
|