Evigo turns your devices back on after a power cut. It watches your UPS through Network UPS Tools (NUT), remembers which devices were on when the power went out, and wakes them with Wake-on-LAN once power is back and safe.
It only ever turns devices on. Keep your existing shutdown setup as it is.
- When the UPS goes on battery, Evigo notes which devices are online.
- When mains returns, it waits until power has been stable for a while and the battery has recharged to your chosen minimum.
- It wakes the devices that are off, retrying until each answers or it gives up.
If Evigo restarts part-way through, it carries on where it left off.
- A UPS monitored by NUT, reachable from where Evigo runs.
- Devices with Wake-on-LAN enabled. If your UPS cuts its outlets at the end of an outage, also enable waking after a full power loss in the BIOS.
- An always-on Linux host on the same network as the devices (or see devices on another network).
Docker must run on a Linux host, because Evigo needs host networking to reach your devices.
-
Download
compose.yamlandconfig.example.yaml, and rename the example toconfig.yaml. -
Fill in your UPS and devices (see Configuration).
-
Check it, then start Evigo:
docker compose run --rm evigo validate --config /etc/evigo/config.yaml docker compose up -d docker compose logs -f evigo
curl -fsSL https://github.com/Jack-Overflow/Evigo/releases/latest/download/install.sh -o install.sh
sudo sh ./install.sh
sudoedit /etc/evigo/config.yaml
sudo -u evigo evigo validate --config /etc/evigo/config.yaml
sudo systemctl enable --now evigoThe installer verifies the release, creates an evigo user and installs the
service without starting it. It needs systemd and the iputils ping.
Everything is in one YAML file. Fill in your UPS and devices:
nut:
host: 192.0.2.5 # your NUT server
ups: myups # the UPS name in NUT
devices:
- id: nas
name: NAS
host: 192.0.2.20
mac: "02:00:00:00:00:01"See all settings for every option and its default.
Wake-on-LAN doesn't normally cross networks or VLANs. Set the device's subnet broadcast address instead (your router must allow directed broadcasts):
devices:
- id: nas
name: NAS
host: 198.51.100.20
mac: "02:00:00:00:00:01"
wol:
broadcast: 198.51.100.255Set web.listen to turn on the read-only dashboard and its API:
web:
listen: 127.0.0.1:8080It shows power, battery, each device and recent history, and says so when
Evigo stops answering. There is no login: keep it on 127.0.0.1 or behind
a reverse proxy that adds one. If you reach it by hostname, add the name to
web.allowed_hosts (without a port).
The API serves GET /api/status, GET /api/history and GET /health, which
returns 200 while Evigo is checking normally, for uptime monitors.
Evigo can send alerts by email, to Discord, to ntfy, or to any webhook. Set up as many as you like:
alerts:
email:
host: smtp.example.lan
username: "${SMTP_USERNAME}"
password: "${SMTP_PASSWORD}"
from: evigo@example.lan
to: [admin@example.lan]
discord:
webhook_url: "${DISCORD_WEBHOOK_URL}"
ntfy:
url: https://ntfy.example.lan # optional, defaults to https://ntfy.sh
topic: "${NTFY_TOPIC}"
webhook:
url: "${WEBHOOK_URL}"- Discord: create a webhook in the channel's settings under Integrations and copy its URL. Anyone with it can post to the channel.
- ntfy: subscribe to the topic in the ntfy app. On the public
ntfy.shserver anyone who knows the topic can read it, so pick one that's hard to guess, or seturlto your own server. - Webhook: Evigo posts JSON with
title,body,severity(problemorresolved) andat, for Home Assistant, n8n or your own scripts.
You'll hear when the UPS goes on battery, when mains power returns, when a woken device comes back, and when Evigo gives up on a device. Alerts are for your information and never hold up a wake.
Send a test alert to each provider to check your setup:
docker compose run --rm evigo test-alerts --config /etc/evigo/config.yaml # Docker
sudo -u evigo evigo test-alerts --config /etc/evigo/config.yaml # LinuxAn alert that can't be sent is logged and not retried. Keep your router and modem on the UPS so alerts can still leave during a power cut, or use a self-hosted ntfy server or webhook on your network.
A device wasn't woken. It must have been on when the power went out and off
once power was stable, and Wake-on-LAN must work for it, including after a full
power loss. The battery must also have reached min_battery_percent.
Every device shows as unknown. Evigo needs to run ping without root.
Check that its group (10001 in Docker, or the evigo group) is inside
sysctl net.ipv4.ping_group_range, and widen the range in /etc/sysctl.d/ if
not.
A slow device was missed. Increase stable_power_delay so it's longer than
the device takes to shut down.
- Docker:
docker compose pull && docker compose up -d - Linux: run the installer again, then restart the service. Your configuration is kept.
See CONTRIBUTING.md, AGENTS.md and SECURITY.md.
Apache-2.0. See LICENSE. Third-party notices ship as
THIRD_PARTY_LICENSES in release archives and the container image.
