Update README.md

This commit is contained in:
Ssyleric
2025-11-03 17:07:21 +01:00
committed by GitHub
parent 12e9de2e56
commit de5a876b0d

129
README.md
View File

@@ -1 +1,128 @@
# check-ups # 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 lensemble 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 multiligne** et lenvoie à **Discord** via `jq` + `curl`.
---
## ✅ Prérequis
- **NUT** (Network UPS Tools) installé et configuré.
- Un **UPS** accessible sous lidentifiant **`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 dUPS : 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 : <device.model>
🔋 Charge batterie : <battery.charge> %
⏳ Autonomie estimée : <battery.runtime> sec
⚡ Charge appliquée : <ups.load> %
🔌 Entrée : <input.voltage> V
⚡ Sortie : <output.voltage> V
🔋 Puissance : <ups.power> VA
💡 Statut UPS : <ups.status>
```
- Compatible avec la **limite 2000 caractères** ; le message reste concis.
---
## 🧰 Dépannage
- **Pas de sortie `upsc`** :
- Vérifier la **configuration NUT** (`upsd`, nom dUPS, 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 laffichage si nécessaire.
---
## 🔒 Sécurité & impacts
- Le script est **lecture seule** (pas darrêt/commande vers lUPS).
- 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 denvoyer trop souvent le même statut si aucune variation.
- Ajouter un **seuil dalerte** (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 denvoi avec `jq -Rs` si vous souhaitez forcer lescape 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é.