Tutorial: Eine USV für den Raspberry Pi auslegen und die Notabschaltung einrichten

Inhalt
Eine USV für den Raspberry Pi wird nach einer Zahl gekauft und nach einer anderen beurteilt. Auf der Packung steht die Zellkapazität. Zählen tut, wie lange die Maschine weiterläuft – und zwischen beiden liegen drei Abzüge, die zusammen etwa ein Drittel ausmachen.
Es folgt die Rechnung in der Reihenfolge, in der sie zu führen ist, und der Teil, der gar keine Rechnung ist: Das Abschalten muss geschehen, solange noch Energie da ist, denn ein Paket, das sich leerläuft, nimmt das Dateisystem mit.

Was der Aufbau wirklich zieht
Datenblätter beschreiben das Netzteil, nicht den Verbrauch. Das offizielle 27-Watt-Netzteil des Raspberry Pi 5 sagt nichts über die Maschine aus, sondern darüber, was die Maschine in der Spitze mit voller USB-Last ziehen darf.
Der echte Wert lässt sich auf der Platine selbst messen. Pi 4 und Pi 5 tragen einen Stromversorgungsbaustein, dessen Schienen auslesbar sind, und die Summe über alle Schienen ergibt die Gesamtaufnahme.
vcgencmd pmic_read_adc | awk '
/_A current/ { split($1, n, "_"); a[n[1]] = $2 + 0 }
/_V volt/ { split($1, n, "_"); v[n[1]] = $2 + 0 }
END { for (r in a) s += a[r] * v[r]; printf "%.2f W\n", s }'
So gemessen liegt ein Pi 5 im Leerlauf bei rund 2,7 Watt und erreicht mit vier ausgelasteten Kernen etwa 9 Watt. Eine NVMe-SSD unter Last kommt mit anderthalb bis zweieinhalb Watt hinzu, der aktive Kühler mit einem halben, eine USB-Festplatte mit zwei bis drei. Der realistische Planungswert für einen kleinen Heimserver liegt damit zwischen sechs und zwölf Watt, und beide Enden dieser Spanne lohnen die Rechnung.
Eine einzelne Messung genügt nicht, denn der interessante Moment ist nicht der Durchschnitt. Ein Stromausfall während einer Sicherung trifft die Maschine in der Spitze, und die Laufzeit, die zählt, ist die unter Last.
Von Milliamperestunden zu Wattstunden
Zellen sind in Milliamperestunden beschriftet, und das ist eine Ladung, keine Energie. Erst die Multiplikation mit der Nennspannung macht daraus etwas Vergleichbares.
Wh = mAh × V / 1000
3400 mAh × 3,7 V / 1000 = 12,58 Wh je Zelle
zwei Zellen parallel = 25,2 Wh
Die 3,7 Volt sind der Mittelwert über die Entladekurve, nicht die Ladeschlussspannung von 4,2. Wer 4,2 in die Formel setzt, hebt das Ergebnis um gut zehn Prozent an – der häufigste Grund für eine zu optimistische Rechnung.
Ein Vergleich, der im Gedächtnis bleiben sollte: Eine Powerbank mit der Angabe 20 000 mAh ist auf Zellebene gemessen, nicht am USB-Anschluss. Bei 3,7 Volt sind das 74 Wattstunden, nach der Wandlung auf 5 Volt bleiben davon etwa 55 – und genau diese Zahl verbirgt die Werbeangabe.
Der Anteil des Pakets, der nie zu Laufzeit wird
Drei Abzüge stehen zwischen den Zellen und der Maschine, jeder mit einer anderen Ursache.
Der erste ist der Wandler. Zellen liefern zwischen 4,2 und 3,0 Volt, der Pi braucht stabile 5,1. Der Aufwärtswandler dazwischen arbeitet bei üblicher Last mit etwa 88 Prozent, was drei der 25,2 Wattstunden kostet. Günstige Module fallen bei kleiner Last unter 80 Prozent – und kleine Last ist genau das, was ein wartender Pi erzeugt.
Der zweite ist die Spannungsgrenze. Lithiumzellen werden bei rund drei Volt je Zelle abgeschaltet, und die Energie unterhalb dieser Linie bleibt im Paket. Das ist keine Verschwendung, sondern Schutz: Tieferes Entladen altert die Zelle überproportional und beschädigt sie unter 2,5 Volt dauerhaft. Etwa fünf Prozent des Pakets liegen unter dieser Linie.
Der dritte ist der einzige, der gewählt und nicht vorgegeben ist. Ein Herunterfahren dauert zehn bis dreissig Sekunden und muss beginnen, solange der Wandler noch stabile fünf Volt liefert. Eine Reserve von fünfzehn Prozent der Nettoenergie schafft dafür Platz – und zugleich für ein gealtertes Paket und für einen zweiten Ausfall wenige Minuten nach dem ersten.
Von 25,2 Wattstunden bleiben 17,8. Die Laufzeiten ergeben sich unmittelbar daraus.
| Last | Typische Lage | Laufzeit aus 17,8 Wh |
|---|---|---|
| 6 W | Pi 5, Leerlauf, SD-Karte | 2 h 58 min |
| 9 W | Pi 5 mit NVMe, mittlere Last | 1 h 59 min |
| 12 W | Alle Kerne belegt, Platte und Kühler | 1 h 29 min |
Abschalten, bevor die Grenze erreicht ist
Jede USV, die den Namen verdient, meldet den Wegfall der Netzspannung auf irgendeine Weise. Zwei Mechanismen decken fast alle Platinen am Markt ab, und der einfachere kommt ganz ohne Software aus.
Ein HAT, der einen GPIO-Pin auf Masse zieht, kann das Herunterfahren über ein Device-Tree-Overlay auslösen. Eine Zeile in der Startkonfiguration ist die ganze Umsetzung.
# /boot/firmware/config.txt
dtoverlay=gpio-shutdown,gpio_pin=17,active_low=1,gpio_pull=up
Der Vorteil: Das funktioniert ohne laufenden Dienst und sogar während des Startvorgangs. Der Nachteil: Es fährt sofort herunter, was bei einem vier Sekunden langen Ausfall falsch ist. Eine kurze Verzögerung macht den Unterschied zwischen überlegter Reaktion und nächtlichem Neustart.
#!/bin/bash
# /usr/local/bin/usv-wacht.sh - wartet auf einen anhaltenden Netzausfall
while gpiomon --num-events=1 --falling-edge gpiochip0 17 >/dev/null; do
sleep 60
if gpioget gpiochip0 17 | grep -q '^0$'; then
logger -t usv "Netz seit 60 s weg - fahre herunter"
/sbin/shutdown -h now
fi
done
# /etc/systemd/system/usv-wacht.service
[Unit]
Description=USV-Wache
After=multi-user.target
[Service]
ExecStart=/usr/local/bin/usv-wacht.sh
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Der zweite Mechanismus ist eine Ladestandsanzeige über I2C – ein MAX17048 oder ein INA219 sitzt auf den meisten besseren Platinen. Der MAX17048 meldet den Ladestand direkt in Prozent, der INA219 misst nur Spannung und Strom, und den Prozentwert errechnet daraus erst Software. Damit hängt die Auslösung am Paket statt an der Uhr, und das ist das ehrlichere Kriterium: abschalten unter zwanzig Prozent, unabhängig davon, wie lange der Strom schon fehlt.
Welcher Weg auch gewählt wird, eine Einstellung gehört dazu. Eine Maschine, die bei einem Ausfall herunterfährt, muss bei Rückkehr der Spannung von selbst wiederkommen – beim Pi 5 ist das eine Sache des Bootloaders, nicht des Betriebssystems.
sudo rpi-eeprom-config --edit
# POWER_OFF_ON_HALT=1
# WAKE_ON_GPIO=0
# PSU_MAX_CURRENT=5000
Die Probe, die absichtlich stattfinden muss
Eine nie geprüfte USV ist eine Annahme. Die Probe ist unspektakulär und kostet einen Nachmittag: die Maschine unter die Last setzen, die sie später wirklich sieht, den Netzstecker ziehen und zwei Zeiten notieren – wann das Herunterfahren begann und wann das Paket aufgab.
Danach steht der Beleg im Protokoll des vorherigen Starts. Ein sauberes Herunterfahren endet mit einer Stopp-Meldung für das Dateisystem; ein abruptes Ende zeigt gar nichts, und das ist selbst der Befund.
journalctl -b -1 -n 30 --no-pager
Zwei Ergebnisse kommen häufig vor, und beide sind brauchbar. Begann das Herunterfahren, war das Paket aber vor dem Ende leer, ist die Reserve zu klein. Hatte das Paket Minuten nach dem Ausschalten noch Ladung, ist die Reserve grosszügig – eine gute Lage, die zu kennen besser ist, als sie anzunehmen.
Diese Probe einmal im Jahr zu wiederholen kostet eine Stunde und fängt den Ausfall ab, der sonst kein Anzeichen hat: ein Paket, das im Vollladezustand still die Hälfte seiner Kapazität verloren hat.
Was zwei Jahre verändern
Lithiumzellen verlieren auf zwei Wegen an Kapazität, und nur einer davon entsteht durch Nutzung. Drei- bis fünfhundert volle Zyklen bringen eine Zelle auf etwa achtzig Prozent ihrer ursprünglichen Kapazität – für eine USV, die sich ein paar Mal im Jahr entlädt, ohne Bedeutung.
Der andere Weg ist die Zeit, und dieser trifft hier zu. Eine dauerhaft voll geladene Zelle bei der Temperatur in einem geschlossenen Gehäuse altert messbar schneller als dieselbe Zelle bei Lagerladung. Nach zwei Jahren in einem warmen Schrank sind zwanzig bis dreissig Prozent Kapazitätsverlust normal und kein Defekt.
Daraus folgen zwei Dinge. Platinen, die auf 4,1 statt 4,2 Volt laden, geben rund zehn Prozent Nennkapazität auf und verdoppeln dafür grob die kalendarische Lebensdauer – ein guter Tausch für ein Gerät, das sein Leben mit Warten verbringt. Und die Auslegung am Anfang erfolgt besser mit dem Paket, das in zwei Jahren dasteht, nicht mit dem aus der Verpackung: Die Reserve gehört so gewählt, dass auch achtzig Prozent des Pakets das Herunterfahren noch tragen.
Fragen und Antworten
Lassen sich das Overlay gpio-shutdown und das Skript mit Verzögerung gleichzeitig verwenden?
Nein, es gilt das eine oder das andere. Das Overlay löst schon bei der ersten fallenden Flanke das Herunterfahren aus, lange bevor die 60 Sekunden des Skripts ablaufen, und es belegt den Pin über einen Kerneltreiber, sodass gpiomon ihn gar nicht erst anfordern kann. Wer die Verzögerung will, lässt die Zeile in der config.txt weg.
Das Skript fährt nach 60 Sekunden herunter. Wozu dann die Laufzeitrechnung?
Die Tabelle nennt die Obergrenze, das Skript wählt, wie viel davon genutzt wird. Mit 60 Sekunden bleibt das Paket nahezu voll: Die USV überbrückt kurze Aussetzer, bei allem Längeren fährt der Pi sauber herunter, und das Paket hat danach noch fast die ganze Ladung für einen zweiten Ausfall kurz nach der Rückkehr des Netzes.
Soll die Maschine einen längeren Ausfall durchlaufen, lässt sich die Wartezeit erhöhen, aber nur mit Blick auf die ungünstigste Zeile und auf das gealterte Paket. Bei 80 Prozent Kapazität bleiben von 17,8 Wh noch rund 14,2 Wh, unter 12 W also etwa 1 h 11 min statt 1 h 29 min; bei 30 Prozent Verlust sind es 12,5 Wh und rund 1 h 2 min. Eine feste Wartezeit gehört unter diesen Wert, nicht unter den aus der Tabelle.
Bequemer ist dann die Auslösung über den Ladestand, die der Artikel beschreibt: Der Zeitpunkt hängt am Paket statt an der Uhr, und die Rechnung mit der ungünstigsten Last entfällt.
Startet der Pi von selbst wieder, wenn das Netz zurückkehrt, bevor das Paket leer ist?
Nicht zwingend. Der Pi sieht nur die fünf Volt der USV, nicht das Netz dahinter. Kehrt das Netz zurück, solange das Paket noch Ladung hat, fallen diese fünf Volt nie weg, und ein heruntergefahrener Pi bleibt aus. POWER_OFF_ON_HALT=1 sorgt dafür, dass er im angehaltenen Zustand kaum noch Strom zieht, einen Start löst aber erst eine wiederkehrende Versorgung oder ein Eingriff von Hand aus. Kommt das Netz dagegen erst zurück, nachdem das Paket abgeschaltet hat, bekommt der Pi eine neue Versorgung und startet, sofern die Platine ihren Ausgang dann wieder einschaltet.
Einen verlässlichen Neustart von selbst gibt es deshalb nur mit einer USV-Platine, die nach dem Herunterfahren ihren Ausgang abschaltet und ihn bei Rückkehr des Netzes wieder einschaltet; ob eine Platine das kann, steht in ihrer Beschreibung. Die Probe aus dem Artikel lässt sich entsprechend erweitern: Wird der Netzstecker nach dem Herunterfahren wieder eingesteckt, solange das Paket noch Ladung hat, zeigt sich, ob die Maschine von selbst startet.