6.8 KiB
title: PeaNUT created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, networking, ups, monitoring, nut, apc, eaton, python, dashboard] confidence: high contested: false sources: [https://selfh.st/apps/?tag=networking, https://github.com/Brandawg93/PeaNUT]
🔋 PeaNUT
Dashboard web et client NUT léger pour surveiller vos onduleurs (UPS) compatibles : charge batterie, autonomie restante, consommation, alertes. Le compagnon visuel idéal d'un serveur app-nut ou d'un NAS qui expose le protocole network UPS tools.
| Métadonnée | Valeur |
|---|---|
| Site web | github.com/Brandawg93/PeaNUT |
| GitHub | Brandawg93/PeaNUT |
| License | MIT |
| Langage | Python (FastAPI) + TypeScript (frontend) |
| Étoiles | 410 ⭐ |
| Dernière MAJ | 2026-05-30 |
| Catégorie | cat-networking |
Description
PeaNUT est une web UI moderne pour NUT (Network UPS Tools), le démon de référence sous Linux pour piloter un onduleur (UPS) via USB ou réseau. Plutôt que de subir la console upsc en CLI ou l'interface vieillissante d'app-nut, PeaNUT expose un dashboard temps réel (charge, tension, fréquence, température, autonomie estimée) avec historique, alertes (push, email, webhook), et commandes (test batterie, arrêt graceful des machines).
Le projet supporte nativement les onduleurs des marques les plus courantes : APC, CyberPower, Eaton, Tripp Lite, MGE, Best Power. Il suffit d'un onduleur USB branché à un serveur (ou d'un onduleur réseau avec carte SNMP/ethernet) et d'un démon NUT (nut-server) qui l'expose via le port 3493. PeaNUT se connecte, scrape les variables MIB, et les affiche.
Cas d'usage typique : un onduleur APC Back-UPS 1500VA protège un NAS Synology et un petit serveur. Sur le NAS tourne nut-server, sur le serveur tourne PeaNUT (Docker). Le dashboard PeaNUT montre l'autonomie (12 min), la charge (32%), la consommation (180W). Quand une coupure dépasse 5 minutes, PeaNUT déclenche un webhook Home Assistant qui initie l'arrêt propre des VMs avant que la batterie ne meure.
Installation
Docker Compose (recommandé)
# docker-compose.yml
services:
peanut:
image: brandawg93/peanut:latest
container_name: peanut
restart: unless-stopped
ports:
- "8480:8080"
environment:
- NUT_HOST=192.168.1.50 # IP du serveur NUT
- NUT_PORT=3493
- NUT_USER=monuser
- NUT_PASS=*** - TZ=Europe/Paris
- INFLUX_HOST=influxdb.local # optionnel : export métriques
- INFLUX_TOKEN=*** volumes:
- peanut-config:/config
depends_on:
- nut-server
# Exemple : NUT server intégré (si onduleur USB sur la même machine)
nut-server:
image: instantlinux/nut-upsd:latest
container_name: nut-server
restart: unless-stopped
devices:
- /dev/bus/usb:/dev/bus/usb # onduleur USB passé au container
ports:
- "3493:3493"
environment:
- SHUTDOWNCMD=shutdown -h now
volumes:
- nut-config:/etc/nut
privileged: true
volumes:
peanut-config:
nut-config:
⚠️ Le serveur NUT (
nut-server) doit tourner ailleurs (Synology, OpenWRT, machine avec onduleur USB) ; PeaNUT n'est qu'un client / dashboard.
Installation manuelle (Docker simple)
docker run -d \
--name peanut \
-p 8480:8080 \
-e NUT_HOST=192.168.1.50 \
-e NUT_PORT=3493 \
-e NUT_USER=monuser \
-e NUT_PASS=***\
-v peanut-config:/config \
--restart unless-stopped \
brandawg93/peanut:latest
Configuration
Sur le serveur NUT, configurer l'utilisateur et l'onduleur :
# /etc/nut/ups.conf
[apc-ups]
driver = usbhid-ups
port = auto
desc = "APC Back-UPS 1500"
# /etc/nut/upsd.conf
LISTEN 0.0.0.0 3493
# /etc/nut/upsd.users
[monuser]
password = *** actions = SET
instcmds = ALL
# /etc/nut/upsmon.conf
MONITOR apc-ups@localhost 1 monuser *** master
SHUTDOWNCMD "/sbin/shutdown -h now"
Côté PeaNUT (UI web sur http://localhost:8480), ajouter le serveur NUT et les seuils d'alerte.
API JSON exposée (utile pour scripts) :
curl http://peanut.local:8480/api/v1/devices | jq
# Charge, status, charge en %, runtime restant, etc.
Alternatives
Open Source
- app-nut — NUT lui-même, en CLI / upsc
- apcupsd — APC-spécifique, plus ancien
- Network UPS Tools Web UI (inactive) — projets communautaires de GUI
- Grafana + InfluxDB + NUT exporter — DIY dashboard
- Synology / QNAP built-in — limité à leur écosystème
- Home Assistant NUT integration — basique, sans historique
- OpenWRT NUT package — sur le routeur, ultra-léger
Propriétaire (ce que PeaNUT remplace)
- PowerChute Business Edition (APC/Schneider) — 50-300€ selon l'onduleur
- Eaton Intelligent Power Manager — payant
- CyberPower PowerPanel — Windows/macOS, pas Linux
- ManageEngine OpManager UPS module — enterprise
- PRTG UPS sensor — payant, Paessler
- Tripp Lite PowerAlert — UI basique, vieillissante
Sécurité
- LAN-only par défaut : PeaNUT expose l'état de l'onduleur. Mettre derrière un reverse-proxy avec auth (Authentik, Authelia) ou VPN (app-wireguard).
- Mots de passe NUT : l'utilisateur NUT a des droits
SET; un attaquant peut déclencher un shutdown. Restreindre viaactionsdansupsd.users. - HTTPS : activer TLS via Traefik/Caddy ; les credentials transitent en clair sinon.
- 2FA sur l'UI : PeaNUT supporte l'auth intégrée, l'activer.
- Alertes webhook : chiffrer si le canal n'est pas déjà sécurisé (Ntfy, Discord OK).
- Surveillance du daemon NUT : si
upsdmeurt, PeaNUT ne reçoit plus rien. Superviser via app-watchtower ou app-prometheus. - Updates : suivre les releases, vulnérabilités potentielles dans FastAPI.
- Pas d'auto-shutdown sauvage : configurer des seuils d'autonomie (ex : shutdown si < 5 min) pour éviter d'éteindre un serveur qui pourrait tenir.
Ressources
Pages Liées
- cat-networking — Catégorie parente
- cat-monitoring — Catégorie cousine
- app-nut — Serveur source
- app-home-assistant — Intégration et automatisation shutdown
- app-prometheus — Métriques long-terme
- app-grafana — Visualisation historique
- recettes-docker-compose
- protection-onduleurs-homelab — Stratégie globale