Files
check-ups/README.md
2025-11-03 17:07:21 +01:00

129 lines
4.1 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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é.