Tutorial: Dobór zasilacza UPS do Raspberry Pi i konfiguracja automatycznego wyłączenia

Spis treści
Zasilacz UPS do Raspberry Pi kupuje się według jednej liczby, a ocenia według innej. Na opakowaniu widnieje pojemność ogniw. Liczy się natomiast to, jak długo maszyna pracuje dalej – a między jednym a drugim stoją trzy potrącenia, dające razem mniej więcej jedną trzecią.
Poniżej rachunek w kolejności, w jakiej należy go przeprowadzić, oraz ta część, która rachunkiem wcale nie jest: wyłączenie musi nastąpić, dopóki energia jeszcze jest, bo pakiet rozładowany do końca zabiera ze sobą system plików.

Ile układ naprawdę pobiera
Karty katalogowe opisują zasilacz, a nie zużycie. Oficjalny zasilacz 27 W do Raspberry Pi 5 nie mówi nic o samej maszynie, lecz o tym, ile wolno jej pobrać w szczycie przy pełnym obciążeniu USB.
Rzeczywistą wartość da się zmierzyć na samej płytce. Pi 4 i Pi 5 mają układ zarządzania zasilaniem, którego szyny są odczytywalne, a suma po wszystkich szynach daje pobór całkowity.
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 }'
Zmierzone w ten sposób Pi 5 pobiera na biegu jałowym około 2,7 wata, a przy czterech obciążonych rdzeniach dochodzi do mniej więcej 9 watów. Dysk NVMe pod obciążeniem dokłada półtora do dwóch i pół wata, aktywne chłodzenie pół wata, a dysk USB dwa do trzech. Realistyczna wartość do planowania małego serwera domowego mieści się więc między sześcioma a dwunastoma watami, a oba końce tego zakresu warto przeliczyć.
Jeden pomiar nie wystarczy, bo ciekawa chwila to nie średnia. Przerwa w zasilaniu podczas kopii zapasowej zastaje maszynę w szczycie, a liczy się czas pracy pod obciążeniem.
Od miliamperogodzin do watogodzin
Ogniwa opisuje się w miliamperogodzinach, a to ładunek, nie energia. Dopiero pomnożenie przez napięcie znamionowe daje wielkość porównywalną.
Wh = mAh × V / 1000
3400 mAh × 3,7 V / 1000 = 12,58 Wh na ogniwo
dwa ogniwa równolegle = 25,2 Wh
Owe 3,7 wolta to średnia z krzywej rozładowania, a nie napięcie pełnego naładowania wynoszące 4,2. Wstawienie 4,2 do wzoru podnosi wynik o dobre dziesięć procent i jest najczęstszą przyczyną zbyt optymistycznego rachunku.
Porównanie warte zapamiętania: powerbank z oznaczeniem 20 000 mAh mierzony jest na poziomie ogniw, a nie na gnieździe USB. Przy 3,7 wolta daje to 74 watogodziny, z czego po przetworzeniu na 5 woltów zostaje około 55 – i właśnie tę liczbę ukrywa oznaczenie reklamowe.
Część pakietu, która nigdy nie staje się czasem pracy
Między ogniwami a maszyną stoją trzy potrącenia, każde o innej przyczynie.
Pierwsze to przetwornica. Ogniwa dają od 4,2 do 3,0 wolta, a Pi potrzebuje stabilnych 5,1. Przetwornica podwyższająca pracuje przy zwykłym obciążeniu ze sprawnością około 88 procent, co kosztuje trzy z 25,2 watogodziny. Tanie moduły spadają przy małym obciążeniu poniżej 80 procent – a małe obciążenie to dokładnie to, co wytwarza czekające Pi.
Drugie to próg napięcia. Ogniwa litowe odcina się przy około trzech woltach na ogniwo, a energia poniżej tej linii zostaje w pakiecie. Nie jest to marnotrawstwo, lecz ochrona: głębsze rozładowanie starzy ogniwo nieproporcjonalnie, a poniżej 2,5 wolta uszkadza je trwale. Poniżej tej linii leży około pięciu procent pakietu.
Trzecie jako jedyne podlega wyborowi, a nie jest narzucone. Wyłączanie trwa od dziesięciu do trzydziestu sekund i musi się zacząć, dopóki przetwornica podaje jeszcze stabilne pięć woltów. Rezerwa piętnastu procent energii netto robi na to miejsce – a przy okazji także na pakiet postarzały i na drugą przerwę kilka minut po pierwszej.
Z 25,2 watogodziny zostaje 17,8. Czasy pracy wynikają z tego wprost.
| Obciążenie | Typowa sytuacja | Czas pracy z 17,8 Wh |
|---|---|---|
| 6 W | Pi 5, bieg jałowy, karta SD | 2 h 58 min |
| 9 W | Pi 5 z NVMe, średnie obciążenie | 1 h 59 min |
| 12 W | Wszystkie rdzenie zajęte, dysk i chłodzenie | 1 h 29 min |
Wyłączenie przed osiągnięciem progu
Każdy UPS zasługujący na tę nazwę jakoś zgłasza zanik napięcia sieciowego. Dwa mechanizmy obejmują niemal wszystkie płytki na rynku, a prostszy obywa się całkowicie bez oprogramowania.
Płytka HAT ściągająca pin GPIO do masy potrafi wyzwolić wyłączenie przez nakładkę drzewa urządzeń. Jedna linia w konfiguracji startowej to całe wdrożenie.
# /boot/firmware/config.txt
dtoverlay=gpio-shutdown,gpio_pin=17,active_low=1,gpio_pull=up
Zaleta: działa bez uruchomionej usługi, a nawet w trakcie startu. Wada: wyłącza natychmiast, co przy czterosekundowej przerwie jest błędem. Krótkie opóźnienie stanowi różnicę między przemyślaną reakcją a nocnym restartem.
#!/bin/bash
# /usr/local/bin/usv-wacht.sh - czeka na trwały zanik zasilania
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 "brak sieci od 60 s - wyłączanie"
/sbin/shutdown -h now
fi
done
# /etc/systemd/system/usv-wacht.service
[Unit]
Description=Straż UPS
After=multi-user.target
[Service]
ExecStart=/usr/local/bin/usv-wacht.sh
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Drugi mechanizm to wskaźnik naładowania po I2C – MAX17048 albo INA219 siedzi na większości lepszych płytek i podaje stan naładowania w procentach. Dzięki temu wyzwolenie zależy od pakietu, a nie od zegara, co jest kryterium uczciwszym: wyłączenie poniżej dwudziestu procent, niezależnie od tego, jak długo brakuje prądu.
Którakolwiek droga zostanie wybrana, należy do niej jedno ustawienie. Maszyna wyłączająca się przy przerwie musi po powrocie napięcia wrócić sama – w Pi 5 to sprawa bootloadera, a nie systemu operacyjnego.
sudo rpi-eeprom-config --edit
# POWER_OFF_ON_HALT=1
# WAKE_ON_GPIO=0
# PSU_MAX_CURRENT=5000
Próba, która musi się odbyć celowo
Nigdy niesprawdzony UPS jest założeniem. Próba jest niewidowiskowa i kosztuje jedno popołudnie: obciążyć maszynę tak, jak będzie obciążona naprawdę, wyciągnąć wtyczkę i zanotować dwa czasy – kiedy zaczęło się wyłączanie i kiedy pakiet się poddał.
Potem dowód stoi w dzienniku poprzedniego uruchomienia. Czyste wyłączenie kończy się komunikatem zatrzymania systemu plików; nagły koniec nie pokazuje niczego, i to samo w sobie jest wynikiem.
journalctl -b -1 -n 30 --no-pager
Dwa wyniki zdarzają się często i oba są użyteczne. Jeżeli wyłączanie ruszyło, ale pakiet padł przed jego końcem, rezerwa jest za mała. Jeżeli pakiet miał jeszcze ładunek kilka minut po wyłączeniu maszyny, rezerwa jest hojna – to dobre położenie, które lepiej znać, niż zakładać.
Powtórzenie tej próby raz w roku kosztuje godzinę i wyłapuje awarię niemającą innego objawu: pakiet, który w stanie pełnego naładowania po cichu stracił połowę pojemności.
Co zmieniają dwa lata
Ogniwa litowe tracą pojemność na dwa sposoby, a tylko jeden z nich powstaje przez użytkowanie. Od trzystu do pięciuset pełnych cykli doprowadza ogniwo do około osiemdziesięciu procent pierwotnej pojemności – dla UPS-a rozładowującego się kilka razy w roku bez znaczenia.
Drugim sposobem jest czas i to on dotyczy tego przypadku. Ogniwo trzymane stale w pełnym naładowaniu i w temperaturze wnętrza zamkniętej obudowy starzeje się wyraźnie szybciej niż to samo ogniwo przy ładunku magazynowym. Po dwóch latach w ciepłej szafce dwadzieścia do trzydziestu procent utraty pojemności to norma, a nie usterka.
Wynikają z tego dwie rzeczy. Płytki ładujące do 4,1 zamiast 4,2 wolta oddają około dziesięciu procent pojemności znamionowej, a w zamian z grubsza podwajają trwałość kalendarzową – dobra zamiana dla urządzenia spędzającego życie na czekaniu. A dobór na początku lepiej przeprowadzić z pakietem, jaki będzie za dwa lata, niż z tym prosto z opakowania: rezerwę należy dobrać tak, by wyłączenie uniosło także osiemdziesiąt procent pakietu.