Initial vault setup
This commit is contained in:
@@ -0,0 +1,177 @@
|
||||
---
|
||||
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](https://github.com/Brandawg93/PeaNUT) |
|
||||
| **GitHub** | [Brandawg93/PeaNUT](https://github.com/Brandawg93/PeaNUT) |
|
||||
| **License** | MIT |
|
||||
| **Langage** | Python (FastAPI) + TypeScript (frontend) |
|
||||
| **Étoiles** | 410 ⭐ |
|
||||
| **Dernière MAJ** | 2026-05-30 |
|
||||
| **Catégorie** | [[cat-networking\|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é)
|
||||
|
||||
```yaml
|
||||
# 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)
|
||||
|
||||
```bash
|
||||
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 :
|
||||
|
||||
```conf
|
||||
# /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) :
|
||||
|
||||
```bash
|
||||
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 via `actions` dans `upsd.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 `upsd` meurt, 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
|
||||
|
||||
- [GitHub](https://github.com/Brandawg93/PeaNUT)
|
||||
- [Documentation NUT](https://networkupstools.org)
|
||||
- [Liste des drivers NUT supportés](https://networkupstools.org/stable-hcl.html)
|
||||
- [Discord communautaire](https://discord.gg/peanut)
|
||||
- [Wiki PeaNUT](https://github.com/Brandawg93/PeaNUT/wiki)
|
||||
|
||||
## Pages Liées
|
||||
|
||||
- [[cat-networking|Networking]] — Catégorie parente
|
||||
- [[cat-monitoring|Monitoring]] — Catégorie cousine
|
||||
- [[app-nut|NUT (Network UPS Tools)]] — Serveur source
|
||||
- [[app-home-assistant|Home Assistant]] — Intégration et automatisation shutdown
|
||||
- [[app-prometheus|Prometheus]] — Métriques long-terme
|
||||
- [[app-grafana|Grafana]] — Visualisation historique
|
||||
- [[recettes-docker-compose|Recettes Docker Compose]]
|
||||
- [[protection-onduleurs-homelab|Protection onduleurs homelab]] — Stratégie globale
|
||||
Reference in New Issue
Block a user