Discussion - 

0

Discussion - 

0

NUT + Raspberry Pi : gérer plusieurs onduleurs intelligemment

Pourquoi centraliser la gestion des onduleurs ?

Dans beaucoup d’infrastructures, les onduleurs sont configurés individuellement. Résultat :

  • arrêt brutal des machines
  • aucune priorisation
  • perte de données possible
  • autonomie batterie mal exploitée

Avec Network UPS Tools (NUT) installé sur un Raspberry Pi, on peut centraliser la logique et piloter intelligemment toute l’infrastructure.


Architecture typique

  • 1 Raspberry Pi (maître NUT)
  • 2+ onduleurs connectés en USB
  • Plusieurs serveurs (prod, backup, stockage, etc.)
  • Shutdown distant via SSH

Le Raspberry devient le cerveau décisionnel.


Le problème classique

Lors d’une coupure :

  • tout reste allumé → batterie vidée rapidement
  • ou tout s’éteint en même temps → gaspillage d’autonomie

Dans les deux cas, c’est inefficace.


La solution : arrêt progressif

Le principe est simple :
adapter l’arrêt des machines au niveau de batterie.

Exemple de stratégie

Batterie restanteAction
90%arrêt des serveurs non critiques
50%arrêt du stockage
20%arrêt de la production
<10%extinction complète

Pourquoi c’est efficace

1. Maximiser l’autonomie

On libère progressivement de la consommation. moins de charge → batterie dure plus longtemps

2. Prioriser les services

  • backup d’abord
  • stockage ensuite
  • production en dernier

3. Arrêt propre

  • pas de corruption disque
  • services stoppés correctement
  • bases de données propres

Multi-onduleurs : un vrai plus

Dans un setup avec plusieurs UPS :

  • on prend la batterie la plus faible comme référence
  • on évite qu’un seul onduleur mette tout en danger

Ou bien mieux, si vos serveurs sont tous redondés sur plusieurs onduleurs, on shutdown uniquement quand les deux onduleurs sont sur batterie / se vident

Pourquoi un Raspberry Pi ?

  • consommation quasi nulle
  • toujours allumé
  • indépendant des serveurs
  • coût très faible
  • idéal comme point de contrôle

Script typique utilisé par Dyb :

#!/bin/bash

LOGFILE="/var/log/nut/upssched.log"
mkdir -p /var/log/nut

log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOGFILE"
}

shutdown_host() {
    local host=$1
    local name=$2
    local user=${3:-root}
    log "Shutdown $name ($host) via user $user"
    ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no \
        -i /etc/nut/id_nut ${user}@${host} \
        "sudo shutdown -h +1 'NUT: power outage'" 2>> "$LOGFILE"
}

already_shutdown() {
    local flag="/run/nut/shutdown_${1}.done"
    [ -f "$flag" ] && return 0
    touch "$flag"
    return 1
}

check_battery_and_shutdown() {
    CHARGE_UPS1=$(upsc ups1@localhost battery.charge 2>/dev/null)
    CHARGE_UPS2=$(upsc ups2@localhost battery.charge 2>/dev/null)

    if [ "$CHARGE_UPS1" -lt "$CHARGE_UPS2" ]; then
        CHARGE=$CHARGE_UPS1
    else
        CHARGE=$CHARGE_UPS2
    fi

    log "On battery - charge: ${CHARGE}% (UPS1: ${CHARGE_UPS1}%, UPS2: ${CHARGE_UPS2}%)"

    # 90% → backup server
    if [ "$CHARGE" -le 90 ]; then
        already_shutdown "backup" || shutdown_host "10.0.0.10" "backup-server" "root"
    fi

    # 50% → storage
    if [ "$CHARGE" -le 50 ]; then
        already_shutdown "storage" || shutdown_host "10.0.0.20" "storage-server" "admin"
    fi

    # 20% → production servers
    if [ "$CHARGE" -le 20 ]; then
        already_shutdown "prod1" || shutdown_host "10.0.0.30" "prod-server-1" "root"
        already_shutdown "prod2" || shutdown_host "10.0.0.40" "prod-server-2" "root"
    fi
}

case "$1" in
    onbatt_handler)
        log "=== Switching to battery - start monitoring ==="
        rm -f /run/nut/shutdown_*.done
        while true; do
            check_battery_and_shutdown
            sleep 30
        done &
        echo $! > /run/nut/battery_monitor.pid
        ;;
    online_handler)
        log "=== Power restored ==="
        if [ -f /run/nut/battery_monitor.pid ]; then
            kill $(cat /run/nut/battery_monitor.pid) 2>/dev/null
            rm -f /run/nut/battery_monitor.pid
        fi
        rm -f /run/nut/shutdown_*.done
        ;;
esac

Bénéfices concrets

  • meilleure résilience infra
  • zéro arrêt brutal
  • autonomie optimisée
  • comportement prévisible
  • facile à adapter (seuils, machines)

Conclusion

Un Raspberry Pi avec NUT permet de transformer une simple protection électrique en système de gestion intelligent de crise.

On ne subit plus la coupure :
→ on l’anticipe, on l’organise, on la contrôle.

C’est une amélioration simple, peu coûteuse, mais avec un impact immédiat sur la stabilité de l’infrastructure.

Et puis, votre facture EDF ainsi que l'écologie mondiale vous remercieront 😉

Arthur Perrot

0 commentaire

Vous allez surement aimer :