From de5a876b0df1c82f11cf961dfbca30bccafb1626 Mon Sep 17 00:00:00 2001 From: Ssyleric <47066760+Ssyleric@users.noreply.github.com> Date: Mon, 3 Nov 2025 17:07:21 +0100 Subject: [PATCH] Update README.md --- README.md | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 128 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ed88ada..5b667e9 100644 --- a/README.md +++ b/README.md @@ -1 +1,128 @@ -# check-ups \ No newline at end of file +# Statut *UPS* (NUT) avec notification Discord + +⚡ **Objectif** +Interroger un **UPS** via **NUT** (`upsc`) et envoyer un **état synthétique** vers **Discord** (webhook) : modèle, charge batterie, autonomie, charge appliquée, tensions entrée/sortie, puissance, statut. + +--- + +## 🧩 Fonctionnement (résumé) +1. Récupère l’ensemble des métriques via : + ```bash + upsc eaton@localhost + ``` +2. Extrait les champs clefs (via `grep`/`awk`/`cut`) : + - `battery.charge`, `battery.runtime`, `ups.load`, `ups.status`, `input.voltage`, `output.voltage`, `ups.power`, `device.model`. +3. Compose un **message multi‑ligne** et l’envoie à **Discord** via `jq` + `curl`. + +--- + +## ✅ Prérequis +- **NUT** (Network UPS Tools) installé et configuré. +- Un **UPS** accessible sous l’identifiant **`eaton@localhost`** (adapter si besoin). + Test rapide : + ```bash + upsc eaton@localhost | head -n 20 + ``` +- Accès **HTTP sortant** vers Discord. +- **`jq`** installé (nécessaire pour sérialiser le JSON) : + ```bash + apt update && apt install -y jq + ``` + +--- + +## 🔧 Variables (dans le script) +| Variable | Par défaut | Description | +|-----------|----------------------------------------|-------------| +| `WEBHOOK` | `https://discord.com/api/webhooks/...` | URL du **Discord Webhook** de destination. | + +> ℹ️ Pour un autre nom d’UPS : remplacez `eaton@localhost` dans le script par votre identifiant NUT (ex. `ups@127.0.0.1`). + +--- + +## 📦 Installation +1. Copier le script dans votre dépôt de scripts (ex. `/home/scripts`) : + ```bash + install -m 0755 check-ups.sh /home/scripts/check-ups.sh + ``` +2. Éditer et **renseigner** la variable `WEBHOOK`. +3. Vérifier `upsc` : + ```bash + upsc eaton@localhost | egrep 'battery.charge|battery.runtime|ups.load|ups.status|input.voltage|output.voltage|ups.power|device.model' + ``` + +> 💡 Conformément à votre organisation, `/home/scripts` est le dossier de référence. + +--- + +## ▶️ Utilisation manuelle +```bash +/home/scripts/check-ups.sh +``` +- Envoie **immédiatement** un message d’état dans le canal Discord ciblé. + +--- + +## ⏱️ Planification (cron) — état périodique +Exemple : **toutes les 30 minutes** : +```cron +*/30 * * * * /home/scripts/check-ups.sh +``` +- Pour historiser côté hôte : + ```cron + */30 * * * * /home/scripts/check-ups.sh >> /var/log/check-ups.cron.log 2>&1 + ``` + +--- + +## 🔔 Format du message Discord +Exemple de payload : +``` +** ⚡️ Status UPS ⚡️ ** +🖥️ Modèle : +🔋 Charge batterie : % +⏳ Autonomie estimée : sec +⚡ Charge appliquée : % +🔌 Entrée : V + ⚡ Sortie : V +🔋 Puissance : VA +💡 Statut UPS : +``` +- Compatible avec la **limite 2000 caractères** ; le message reste concis. + +--- + +## 🧰 Dépannage +- **Pas de sortie `upsc`** : + - Vérifier la **configuration NUT** (`upsd`, nom d’UPS, droits). +- **Rien dans Discord** : + - Vérifier `WEBHOOK`, réseau/DNS sortant, erreurs `curl`. +- **Champs vides** : + - Certains onduleurs ne fournissent pas `ups.power` ou `output.voltage`. Adaptez l’affichage si nécessaire. + +--- + +## 🔒 Sécurité & impacts +- Le script est **lecture seule** (pas d’arrêt/commande vers l’UPS). +- Le webhook Discord est un **secret d’émission** : protégez le fichier, limitez les droits (`chmod 0755`, ou `0600` si vous stockez des secrets). + +--- + +## ✨ Améliorations suggérées (optionnelles) +- Ajouter un **fichier d’état** pour éviter d’envoyer trop souvent le même statut si aucune variation. +- Ajouter un **seuil d’alerte** (ex. batterie < 40%, runtime < 600 s) avec un **cooldown**. +- Joindre un **fichier log** en pièce jointe (`curl -F`) pour archivage côté Discord. +- Uniformiser le style d’envoi avec `jq -Rs` si vous souhaitez forcer l’escape multiligne comme vos autres scripts. + +--- + +## 🗑️ Désinstallation +```bash +crontab -e # retirer l'entrée si ajoutée +rm -f /home/scripts/check-ups.sh /var/log/check-ups.cron.log +``` + +--- + +## 📄 Licence +Utilisation interne. Adapter selon votre politique de sécurité.