# 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é.