# 🔌 Power Reset Monitoring with Uptime Kuma

Power instability is a reality — whether you're dealing with remote edge routers, Raspberry Pis, or industrial IoT sensors. Wouldn't it be great to **know** when a device has unexpectedly rebooted due to power loss? 💥🔋

Using [Uptime Kuma](https://github.com/louislam/uptime-kuma) and a little scripting magic, you can turn your monitoring host into a **central watchdog** that knows when your devices go down — and when they come back.

To monitor actual devices being down requires separate monitors. This just identifies outages due to power resets.

---

## 🎯 What You’ll Achieve

You'll implement:

1. A **device-side script** (`custom-reboot.sh`) that notifies Kuma of a reboot.
    
2. A **monitoring-host script** (`custom10.sh`) that clears the alert every 10 minutes else the monitor will always be red/down.
    
3. A **push-based Uptime Kuma monitor** to receive and visualise these events.
    

---

## 🧩 How It Works

* When a device reboots, it sends a `DOWN` status to Kuma using a unique push URL.
    
* Every 10 minutes, the **Kuma host** pings back with a `UP` status, effectively clearing any stale reboot alerts.
    
* The notification identifies power outages that have occurred for purposed of causation.
    

---

## 📍 Device-Side Setup: `custom-reboot.sh`

Install this script on **each remote device** (router, server, IoT box):

```plaintext
#!/bin/bash

# Get the device hostname
HOSTNAME=$(hostname)

# URL encode the hostname
ENCODED_HOSTNAME=$(printf '%s' "$HOSTNAME" | jq -s -R -r @uri)

# Notify Kuma of reboot
URL="https://claymore.amastelek.com/api/push/ktqNBtJK13?status=down&msg=${ENCODED_HOSTNAME}&ping=1"
curl -s "$URL"
```

### 🔁 Trigger on Boot

Add this to the device’s crontab:

```plaintext
@reboot sleep 180 && /usr/local/sbin/custom-reboot.sh
```

> ⏱️ 3-minute delay ensures network is up before script runs.

---

## 🖥️ Kuma Host Setup: `custom10.sh`

This script is installed and scheduled **only on the Uptime Kuma host**. It acts as a **clearing heartbeat** by sending an `UP` status to the Kuma push monitor.

```plaintext
#!/bin/bash

# Get the Kuma host's hostname
HOSTNAME=$(hostname)

# URL encode the hostname
ENCODED_HOSTNAME=$(printf '%s' "$HOSTNAME" | jq -s -R -r @uri)

# Send heartbeat UP to clear any stale reboots
URL="https://claymore.amastelek.com/api/push/ktqNBtJK13?status=up&msg=${ENCODED_HOSTNAME}&ping=0"
curl -s "$URL"
```

### ⏲️ Schedule Every 10 Minutes

Add to crontab on the **Uptime Kuma server**:

```plaintext
*/10 * * * * /usr/local/sbin/custom10.sh
```

---

## 📡 Creating Push Monitors in Uptime Kuma

For each device you want to monitor:

1. Go to Uptime Kuma → Add New Monitor
    
2. Select **Push Monitor**
    
3. Copy the **Push URL**
    
4. Insert that URL into both `custom-reboot.sh` (device) and `custom10.sh` (Uptime Kuma host)
    

---

## 🔍 What You’ll See in Uptime Kuma

* A **reboot** = a `DOWN` spike, tagged with the hostname
    
* A `UP` alert comes within 10 minutes, marking systems as up.
    

📊 You get **visual logs** of reboot frequency.

---

## ✅ Summary

You now have a **lightweight, reliable mechanism** to detect power-related reboots across devices using:

🔌 Uptime Kuma's Push Monitor  
📟 Device-side cron-based scripts  
🧠 Centralised clearing via the Kuma host

No agents. No overhead. Just results. 🎯
