de5a876b0df1c82f11cf961dfbca30bccafb1626
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é)
- Récupère l’ensemble des métriques via :
upsc eaton@localhost - Extrait les champs clefs (via
grep/awk/cut) :battery.charge,battery.runtime,ups.load,ups.status,input.voltage,output.voltage,ups.power,device.model.
- 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 :upsc eaton@localhost | head -n 20 - Accès HTTP sortant vers Discord.
jqinstallé (nécessaire pour sérialiser le JSON) :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@localhostdans le script par votre identifiant NUT (ex.ups@127.0.0.1).
📦 Installation
- Copier le script dans votre dépôt de scripts (ex.
/home/scripts) :install -m 0755 check-ups.sh /home/scripts/check-ups.sh - Éditer et renseigner la variable
WEBHOOK. - Vérifier
upsc: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/scriptsest le dossier de référence.
▶️ Utilisation manuelle
/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 :
*/30 * * * * /home/scripts/check-ups.sh
- Pour historiser côté hôte :
*/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 d’UPS, droits).
- Vérifier la configuration NUT (
- Rien dans Discord :
- Vérifier
WEBHOOK, réseau/DNS sortant, erreurscurl.
- Vérifier
- Champs vides :
- Certains onduleurs ne fournissent pas
ups.powerououtput.voltage. Adaptez l’affichage si nécessaire.
- Certains onduleurs ne fournissent pas
🔒 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, ou0600si 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 -Rssi vous souhaitez forcer l’escape multiligne comme vos autres scripts.
🗑️ Désinstallation
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é.
Description
Languages
Shell
100%