{"id":12964,"date":"2026-09-11T12:45:00","date_gmt":"2026-09-11T10:45:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=12964"},"modified":"2026-10-26T13:26:23","modified_gmt":"2026-10-26T12:26:23","slug":"tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\/","title":{"rendered":"Tutorial: Eine USV f\u00fcr den Raspberry Pi auslegen und die Notabschaltung einrichten"},"content":{"rendered":"<p>Eine unterbrechungsfreie Stromversorgung (USV) muss den Raspberry Pi unter Last versorgen, einen Netzausfall melden und gen\u00fcgend Energie f\u00fcr ein geordnetes Herunterfahren behalten. Die Kapazit\u00e4tsangabe allein beantwortet keine dieser drei Fragen. Entscheidend sind die nutzbare Energie am Ausgang, die zul\u00e4ssige Spitzenlast und das Zusammenspiel zwischen USV und Betriebssystem.<\/p>\n<p>Die folgende Rechnung ist ein Planungsbeispiel. Die Abschaltlogik setzt eine dokumentierte, zum Pi passende USV mit einem gegen Masse schaltenden Netzausfallsignal voraus. Zellpaket, Ladeger\u00e4t und Schutzschaltung m\u00fcssen zueinander passen; ma\u00dfgeblich sind die Freigaben des Herstellers.<\/p>\n<figure class=\"lw-diagram\"><img src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/dia-12964-review-20261024.png\" width=\"1120\" height=\"580\" decoding=\"async\" loading=\"lazy\" alt=\"Drei Felder zeigen angenommene Energiebilanz, berechnete Laufzeiten und Grenzen der Abschalt\u00fcberwachung.\"><figcaption>Beispielannahmen, keine gemessenen Produkteigenschaften. Akkuzustand, Ausgangsstrom, \u00dcberwachungsfehler und Wiederanlauf m\u00fcssen gesondert gepr\u00fcft werden.<\/figcaption><\/figure>\n<h2>1. Die vollst\u00e4ndige Last messen<\/h2>\n<p>Die Nennleistung des Netzteils bezeichnet dessen Lieferf\u00e4higkeit, nicht den Verbrauch des Pi. Eine Messung am 5-V-Eingang erfasst den Pi samt dar\u00fcber versorgten USB-Ger\u00e4ten. Das Messger\u00e4t muss zur verwendeten USB-C-Stromversorgung und zum ben\u00f6tigten Strom passen. Separat versorgte Ger\u00e4te brauchen eine eigene Energiebilanz.<\/p>\n<p>Auf dem Pi 5 liefert <code>vcgencmd pmic_read_adc<\/code> interne Messwerte. USB-Verbrauch und direkt an 5 V angeschlossene Lasten fehlen jedoch in der Summe der PMIC-Schienen. Diese Summe ist deshalb keine vollst\u00e4ndige Eingangsmessung und keine allgemeine Messmethode f\u00fcr Pi 4 und Pi 5.<\/p>\n<p>F\u00fcr die Auslegung z\u00e4hlen Leerlauf, typische Arbeit und die h\u00f6chste tats\u00e4chlich vorgesehene Last einschlie\u00dflich Speicherzugriffen und Anlaufspitzen. Zus\u00e4tzlich zur Energie muss der USV-Ausgang diesen Strom ohne unzul\u00e4ssigen Spannungseinbruch liefern. Ein gro\u00dfes Akkupaket gleicht einen zu schwachen Wandler nicht aus.<\/p>\n<h2>2. Energie und Reserve nachvollziehbar rechnen<\/h2>\n<p>Wattstunden ergeben sich n\u00e4herungsweise aus Amperestunden mal Nennspannung. Zwei beispielhafte Zellen mit jeweils 3,4 Ah und 3,7 V ergeben zusammen 25,16 Wh. Ma\u00dfgeblich ist die tats\u00e4chliche Nennspannung des freigegebenen Pakets, nicht die Ladeschlussspannung. Eine mAh-Angabe auf Zellebene l\u00e4sst sich ohne Spannung und Wandlerdaten nicht als USB-Laufzeit lesen.<\/p>\n<p>F\u00fcr dieses Beispiel werden 80 Prozent nutzbare Zellenergie und 88 Prozent Wandlerwirkungsgrad angenommen. Die 80 Prozent stehen f\u00fcr den gew\u00e4hlten Auslegungsfall einschlie\u00dflich Alter, Temperatur und nutzbarem Entladebereich; beide Faktoren sind ausdr\u00fccklich keine allgemeing\u00fcltigen Messwerte. Weitere 1 Wh bleiben am Ausgang f\u00fcr das Herunterfahren reserviert.<\/p>\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"plain\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Text<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-plain\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\">E_cells = 2 \u00d7 3.4 Ah \u00d7 3.7 V = 25.16 Wh\n<\/span><span class=\"cbb-line\">E_output = 25.16 Wh \u00d7 0.80 \u00d7 0.88 = 17.71264 Wh\n<\/span><span class=\"cbb-line\">E_runtime = 17.71264 Wh \u2212 1 Wh = 16.71264 Wh\n<\/span><span class=\"cbb-line\">t_runtime = E_runtime \/ P_load<\/span><\/code><\/pre><\/figure>\n<table><thead><tr><th>Angenommene Last<\/th><th>Rechnerische Zeit bis zur Reserve<\/th><\/tr><\/thead><tbody><tr><td>6 W<\/td><td>etwa 2 h 47 min<\/td><\/tr><tr><td>9 W<\/td><td>etwa 1 h 51 min<\/td><\/tr><tr><td>12 W<\/td><td>etwa 1 h 24 min<\/td><\/tr><\/tbody><\/table>\n<p>Die Leistungsstufen sind Rechenf\u00e4lle, keine typischen Pi-Konfigurationen. Bei konstant 12 W entsprechen 1 Wh f\u00fcnf Minuten. Ein angenommenes Herunterfahren von 60 Sekunden ben\u00f6tigt dabei 0,2 Wh. Die tats\u00e4chliche Dauer muss mit laufenden Diensten, Datentr\u00e4gern und m\u00f6glichen Zeit\u00fcberschreitungen gemessen werden.<\/p>\n<p>Eine bereits am 5-V-Ausgang gemessene nutzbare Energiemenge enth\u00e4lt die Wandlerverluste schon. Ein erneuter Wirkungsgradabzug w\u00e4re doppelt. Auch ein im Kapazit\u00e4tstest bereits enthaltener Entladeschluss darf nicht noch einmal pauschal als Verlust abgezogen werden.<\/p>\n<h2>3. Netzausfall und kritischen Akkustand unterscheiden<\/h2>\n<p>Ein Netzausfallsignal erlaubt eine Wartezeit f\u00fcr kurze Unterbrechungen. Ein kritischer Akkuzustand kann dagegen sofortiges Herunterfahren erfordern. Ein fester 60-Sekunden-Timer ist nur vertretbar, wenn die vorhandene Restenergie selbst beim Start des Monitors und nach wiederholten Ausf\u00e4llen noch Wartezeit plus Abschaltung abdeckt. Eine geeignete USV ben\u00f6tigt eine unabh\u00e4ngige Schutzschaltung; die zum Ger\u00e4t geh\u00f6rende \u00dcberwachung kann zus\u00e4tzlich einen fr\u00fcheren Notfallpfad bereitstellen.<\/p>\n<p>Ein MAX17048 sch\u00e4tzt den Ladezustand eines Einzelzellen-Systems; der verwandte MAX17049 ist f\u00fcr zwei Zellen in Reihe vorgesehen. Der INA219 misst dagegen Strom, Spannung und Leistung und ist allein keine Prozentanzeige f\u00fcr Restkapazit\u00e4t. Auch ein gesch\u00e4tzter Ladezustand ersetzt die Pr\u00fcfung bei hoher Last nicht. Ein pauschaler Grenzwert von 20 Prozent garantiert keine bestimmte Restlaufzeit.<\/p>\n<h2>4. Ein einfaches Overlay oder ein verz\u00f6gerter Monitor<\/h2>\n<p>Das Overlay <code>gpio-shutdown<\/code> erzeugt ein Tastaturereignis <code>KEY_POWER<\/code>. Das Herunterfahren \u00fcbernimmt beispielsweise <code>systemd-logind<\/code>. Ohne funktionierenden Empf\u00e4nger im Betriebssystem besteht keine Abschaltgarantie, insbesondere nicht w\u00e4hrend jeder Bootphase. GPIO-Nummer, Polarit\u00e4t und Beschaltung m\u00fcssen zur Platine passen. Das Overlay und der folgende Monitor d\u00fcrfen dieselbe Leitung nicht gleichzeitig belegen.<\/p>\n<p>Der Monitor verwendet die Python-Schnittstelle von libgpiod 2. Eine \u00e4ltere 1.x-Installation ist nicht kompatibel. Chipger\u00e4t und Leitungs-Offset werden anhand der lokal verf\u00fcgbaren GPIO-Werkzeuge und der Boarddokumentation ermittelt; eine physische Steckleistennummer ist kein Leitungs-Offset. <code>gpiochip0<\/code> und Offset 17 sind keine universellen Vorgaben.<\/p>\n<p>Vorausgesetzt wird ein dokumentierter, 3,3-V-kompatibler Open-Drain-Ausgang: Low bedeutet Netzausfall, High vorhandenes Netz, gemeinsame Masse und geeigneter Pull-up. Open Drain bedeutet, dass der Ausgang das Signal gegen Masse zieht oder freigibt. Ein Pull-up-Widerstand h\u00e4lt das freigegebene Signal auf dem zul\u00e4ssigen hohen Pegel. Ein Kabelbruch kann durch den Pull-up wie vorhandenes Netz aussehen; das Beispiel erkennt diesen Fehler nicht. Ein 5-V-Signal darf nicht direkt an den GPIO. Eine andere Signalausgabe ben\u00f6tigt eine passende elektrische Anpassung und entsprechend gepr\u00fcfte Logik.<\/p>\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"python\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Python<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-python\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-comment\">#!\/usr\/bin\/env python3<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">import<\/span> argparse\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">import<\/span> math\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">import<\/span> subprocess\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">import<\/span> time\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">class<\/span> <span class=\"cbb-type\">OutageTimer<\/span>:\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">def<\/span> <span class=\"cbb-function\">__init__<\/span>(<span class=\"cbb-variable\">self<\/span>, delay):\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-keyword\">not<\/span> math.<span class=\"cbb-function\">isfinite<\/span>(delay) <span class=\"cbb-keyword\">or<\/span> delay &lt;= <span class=\"cbb-number\">0<\/span>:\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">ValueError<\/span>(<span class=\"cbb-string\">\"delay must be positive and finite\"<\/span>)\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-variable\">self<\/span>.delay = delay\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-variable\">self<\/span>.since = <span class=\"cbb-constant\">None<\/span>\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-variable\">self<\/span>.previous = <span class=\"cbb-constant\">None<\/span>\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">def<\/span> <span class=\"cbb-function\">sample<\/span>(<span class=\"cbb-variable\">self<\/span>, failed, now):\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-function\">type<\/span>(failed) <span class=\"cbb-keyword\">is<\/span> <span class=\"cbb-keyword\">not<\/span> bool <span class=\"cbb-keyword\">or<\/span> <span class=\"cbb-keyword\">not<\/span> math.<span class=\"cbb-function\">isfinite<\/span>(now):\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">ValueError<\/span>(<span class=\"cbb-string\">\"invalid sample\"<\/span>)\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-variable\">self<\/span>.previous <span class=\"cbb-keyword\">is<\/span> <span class=\"cbb-keyword\">not<\/span> <span class=\"cbb-constant\">None<\/span> <span class=\"cbb-keyword\">and<\/span> <span class=\"cbb-keyword\">not<\/span> <span class=\"cbb-number\">0<\/span> &lt;= now - <span class=\"cbb-variable\">self<\/span>.previous &lt;= <span class=\"cbb-number\">5<\/span>:\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">RuntimeError<\/span>(<span class=\"cbb-string\">\"monitoring gap exceeds 5 seconds\"<\/span>)\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-variable\">self<\/span>.previous = now\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-keyword\">not<\/span> failed:\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-variable\">self<\/span>.since = <span class=\"cbb-constant\">None<\/span>\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">return<\/span> <span class=\"cbb-constant\">False<\/span>\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-variable\">self<\/span>.since <span class=\"cbb-keyword\">is<\/span> <span class=\"cbb-constant\">None<\/span>:\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-variable\">self<\/span>.since = now\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">return<\/span> now - <span class=\"cbb-variable\">self<\/span>.since &gt;= <span class=\"cbb-variable\">self<\/span>.delay\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">def<\/span> <span class=\"cbb-function\">monitor<\/span>(read_failed, delay, action, clock=time.monotonic, sleep=time.sleep):\n<\/span><span class=\"cbb-line\">    timer = <span class=\"cbb-function\">OutageTimer<\/span>(delay)\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">while<\/span> <span class=\"cbb-constant\">True<\/span>:\n<\/span><span class=\"cbb-line\">        failed = <span class=\"cbb-function\">read_failed<\/span>()  <span class=\"cbb-comment\"># Read immediately, including at startup.<\/span>\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">if<\/span> timer.<span class=\"cbb-function\">sample<\/span>(failed, <span class=\"cbb-function\">clock<\/span>()):\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-function\">action<\/span>()\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">return<\/span>\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-function\">sleep<\/span>(<span class=\"cbb-number\">1<\/span>)\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">def<\/span> <span class=\"cbb-function\">main<\/span>():\n<\/span><span class=\"cbb-line\">    parser = argparse.<span class=\"cbb-function\">ArgumentParser<\/span>()\n<\/span><span class=\"cbb-line\">    parser.<span class=\"cbb-function\">add_argument<\/span>(<span class=\"cbb-string\">\"--chip\"<\/span>, required=<span class=\"cbb-constant\">True<\/span>)\n<\/span><span class=\"cbb-line\">    parser.<span class=\"cbb-function\">add_argument<\/span>(<span class=\"cbb-string\">\"--line\"<\/span>, required=<span class=\"cbb-constant\">True<\/span>, type=int)\n<\/span><span class=\"cbb-line\">    parser.<span class=\"cbb-function\">add_argument<\/span>(<span class=\"cbb-string\">\"--delay\"<\/span>, type=float, default=<span class=\"cbb-number\">60<\/span>)\n<\/span><span class=\"cbb-line\">    parser.<span class=\"cbb-function\">add_argument<\/span>(<span class=\"cbb-string\">\"--poweroff\"<\/span>, action=<span class=\"cbb-string\">\"store_true\"<\/span>)\n<\/span><span class=\"cbb-line\">    args = parser.<span class=\"cbb-function\">parse_args<\/span>()\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-function\">OutageTimer<\/span>(args.delay)\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> args.line &lt; <span class=\"cbb-number\">0<\/span>:\n<\/span><span class=\"cbb-line\">        parser.<span class=\"cbb-function\">error<\/span>(<span class=\"cbb-string\">\"line offset must be non-negative\"<\/span>)\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">import<\/span> gpiod\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">from<\/span> gpiod.line <span class=\"cbb-keyword\">import<\/span> Bias, Direction, Value\n<\/span><span class=\"cbb-line\">    settings = gpiod.<span class=\"cbb-function\">LineSettings<\/span>(direction=Direction.INPUT,\n<\/span><span class=\"cbb-line\">                                  active_low=<span class=\"cbb-constant\">False<\/span>, bias=Bias.PULL_UP)\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">with<\/span> gpiod.<span class=\"cbb-function\">request_lines<\/span>(args.chip, consumer=<span class=\"cbb-string\">\"ups-watch\"<\/span>,\n<\/span><span class=\"cbb-line\">                            config={args.line: settings}) <span class=\"cbb-keyword\">as<\/span> request:\n<\/span><span class=\"cbb-line\">        last = &#91;<span class=\"cbb-constant\">None<\/span>&#93;\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">def<\/span> <span class=\"cbb-function\">read_failed<\/span>():\n<\/span><span class=\"cbb-line\">            value = request.<span class=\"cbb-function\">get_value<\/span>(args.line)\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">if<\/span> value <span class=\"cbb-keyword\">not<\/span> <span class=\"cbb-keyword\">in<\/span> (Value.ACTIVE, Value.INACTIVE):\n<\/span><span class=\"cbb-line\">                <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">RuntimeError<\/span>(<span class=\"cbb-string\">\"unknown GPIO state\"<\/span>)\n<\/span><span class=\"cbb-line\">            failed = value == Value.INACTIVE  <span class=\"cbb-comment\"># Physical low = mains failure.<\/span>\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">if<\/span> failed != last&#91;<span class=\"cbb-number\">0<\/span>&#93;:\n<\/span><span class=\"cbb-line\">                <span class=\"cbb-function\">print<\/span>(<span class=\"cbb-string\">\"UPS mains_failed=\"<\/span> + <span class=\"cbb-function\">str<\/span>(failed), flush=<span class=\"cbb-constant\">True<\/span>)\n<\/span><span class=\"cbb-line\">                last&#91;<span class=\"cbb-number\">0<\/span>&#93; = failed\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">return<\/span> failed\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">def<\/span> <span class=\"cbb-function\">action<\/span>():\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-function\">print<\/span>(<span class=\"cbb-string\">\"UPS delay reached; poweroff=\"<\/span> + <span class=\"cbb-function\">str<\/span>(args.poweroff), flush=<span class=\"cbb-constant\">True<\/span>)\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">if<\/span> args.poweroff:\n<\/span><span class=\"cbb-line\">                subprocess.<span class=\"cbb-function\">run<\/span>(&#91;<span class=\"cbb-string\">\"\/usr\/bin\/systemctl\"<\/span>, <span class=\"cbb-string\">\"--no-block\"<\/span>, <span class=\"cbb-string\">\"poweroff\"<\/span>&#93;,\n<\/span><span class=\"cbb-line\">                               check=<span class=\"cbb-constant\">True<\/span>, timeout=<span class=\"cbb-number\">10<\/span>)\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-function\">monitor<\/span>(read_failed, args.delay, action)\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">if<\/span> __name__ == <span class=\"cbb-string\">\"__main__\"<\/span>:\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-function\">main<\/span>()<\/span><\/code><\/pre><\/figure>\n<p>Der erste Pegel wird sofort gelesen. Ein bereits aktiver Netzausfall startet damit ebenfalls den Timer. Ein beobachteter High-Pegel setzt die Wartezeit zur\u00fcck. Die Zeitmessung verwendet eine monotone Uhr. Dieser Zeitgeber misst verstrichene Zeit und springt bei einer Korrektur von Datum oder Systemuhrzeit nicht mit. Zwischen den Abfragen liegt ungef\u00e4hr eine Sekunde; kurze Pegelwechsel dazwischen k\u00f6nnen unbemerkt bleiben. Das Beispiel beweist deshalb keine l\u00fcckenlos anhaltende Unterbrechung und ist keine Echtzeit-Schutzfunktion.<\/p>\n<p>Lesefehler und beobachtete Abfragel\u00fccken \u00fcber f\u00fcnf Sekunden beenden den Prozess mit Fehler. Ein Neustart setzt den Timer zur\u00fcck; wiederholte Fehler d\u00fcrfen deshalb nicht unbemerkt bleiben. Ohne <code>--poweroff<\/code> protokolliert das Programm nur den erreichten Grenzwert und beendet sich. Dieser Modus eignet sich f\u00fcr die erste kontrollierte Signalpr\u00fcfung, l\u00f6st aber keinen Shutdown aus.<\/p>\n<h2>5. Den Dienst erst nach der Signalpr\u00fcfung aktivieren<\/h2>\n<p>Das gepr\u00fcfte Skript geh\u00f6rt nach <code>\/usr\/local\/lib\/ups_watch.py<\/code>, die folgende Unit nach <code>\/etc\/systemd\/system\/ups-watch.service<\/code>. Die Datei <code>\/etc\/ups-watch.conf<\/code> muss <code>UPS_CHIP<\/code> mit dem \u00fcberpr\u00fcften Ger\u00e4tepfad und <code>UPS_LINE<\/code> mit dem \u00fcberpr\u00fcften Offset enthalten. Skript und Konfiguration d\u00fcrfen nur administrativ ver\u00e4ndert werden. Die Unit enth\u00e4lt ausdr\u00fccklich <code>--poweroff<\/code> und kann den Rechner abschalten.<\/p>\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"ini\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Config<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-ini\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-type\">&#91;Unit&#93;<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-attr\">Description<\/span>=UPS mains-failure monitor\n<\/span><span class=\"cbb-line\"><span class=\"cbb-attr\">StartLimitIntervalSec<\/span>=<span class=\"cbb-number\">60<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-attr\">StartLimitBurst<\/span>=<span class=\"cbb-number\">3<\/span>\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-type\">&#91;Service&#93;<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-attr\">Type<\/span>=simple\n<\/span><span class=\"cbb-line\"><span class=\"cbb-attr\">EnvironmentFile<\/span>=\/etc\/ups-watch.conf\n<\/span><span class=\"cbb-line\"><span class=\"cbb-attr\">ExecStart<\/span>=\/usr\/bin\/python3 \/usr\/local\/lib\/ups_watch.py --chip <span class=\"cbb-variable\">${UPS_CHIP}<\/span> --line <span class=\"cbb-variable\">${UPS_LINE}<\/span> --delay 60 --poweroff\n<\/span><span class=\"cbb-line\"><span class=\"cbb-attr\">Restart<\/span>=on-failure\n<\/span><span class=\"cbb-line\"><span class=\"cbb-attr\">RestartSec<\/span>=<span class=\"cbb-number\">5<\/span>\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-type\">&#91;Install&#93;<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-attr\">WantedBy<\/span>=multi-user.target<\/span><\/code><\/pre><\/figure>\n<p>Nach einer Signalpr\u00fcfung ohne Abschaltoption folgen das Neuladen der systemd-Konfiguration und die bewusste Aktivierung des Dienstes. Ein zus\u00e4tzliches <code>After=multi-user.target<\/code> geh\u00f6rt hier nicht hinein: Zusammen mit der Einbindung in dieses Target kann eine zyklische Startreihenfolge entstehen. Die begrenzten Neustarts behandeln vor\u00fcbergehende Fehler; ein dauerhaft fehlgeschlagener Dienst braucht eine eigene Alarmierung.<\/p>\n<h2>6. Abschalten und Wiederanlauf gemeinsam pr\u00fcfen<\/h2>\n<p><code>systemctl --no-block poweroff<\/code> st\u00f6\u00dft das Herunterfahren an. Der Aufruf best\u00e4tigt weder dessen Abschluss noch das physische Abschalten der 5-V-Schiene. Eine USV mit Abschalthandshake muss dem Betriebssystem ausreichend Zeit lassen. Bootloaderoptionen f\u00fcr geringen Verbrauch im Haltzustand ersetzen diesen Ablauf nicht.<\/p>\n<p>Auch <code>PSU_MAX_CURRENT=5000<\/code> ist keine allgemeine USV-Einstellung: Eine solche Stromvorgabe ersetzt keine tats\u00e4chlich f\u00fcr 5 A geeignete Versorgung. \u00c4nderungen an Stromgrenzen geh\u00f6ren ausschlie\u00dflich zu einem passend dokumentierten Aufbau.<\/p>\n<p>Die Abnahme erfolgt mit gesicherter Wiederherstellungsm\u00f6glichkeit und kontrollierter Testlast. Zum Testplan geh\u00f6ren ein kurzer Ausfall, ein langer Ausfall, Start bei bereits fehlendem Netz, niedriger Akkustand, erneuter Ausfall vor vollst\u00e4ndigem Nachladen sowie Netzwiederkehr w\u00e4hrend und nach dem Herunterfahren. Ein Produktivdateisystem absichtlich bis zum Spannungskollaps laufen zu lassen ist daf\u00fcr nicht erforderlich. Die verbleibende Ausgangsenergie l\u00e4sst sich separat mit einer geeigneten Pr\u00fcflast messen.<\/p>\n<p>Vorherige Bootprotokolle sind nur bei verf\u00fcgbarer dauerhafter Speicherung aussagekr\u00e4ftig. Fehlende Eintr\u00e4ge in <code>journalctl -b -1<\/code> beweisen keinen abrupten Stromverlust; nur im Arbeitsspeicher gehaltene Protokolle verschwinden ebenfalls. Protokoll, beobachteter Shutdown und gemessene Ausgangsspannung erg\u00e4nzen sich.<\/p>\n<p>Alterung h\u00e4ngt unter anderem von Zellchemie, Temperatur, Ladezustand und Nutzung ab. Eine feste Lebensdauerverdopplung durch eine beliebig abgesenkte Ladespannung ist daraus nicht ableitbar. Lade- und Entladegrenzen bleiben beim freigegebenen Herstellerprofil. Wiederholte Kapazit\u00e4ts- und Abschalttests nach angemessenem Wartungsplan liefern die Grundlage f\u00fcr einen rechtzeitigen Austausch.<\/p>\n<div class=\"lw-faq\"><h2>Fragen und Antworten<\/h2>\n<h3>Startet ein heruntergefahrener Pi bei Netzwiederkehr automatisch?<\/h3><p>Nicht zwingend. Bleibt die 5-V-Schiene der USV durchgehend aktiv, entsteht kein neuer Einschaltimpuls. Ein verl\u00e4sslicher Wiederanlauf ben\u00f6tigt einen daf\u00fcr vorgesehenen Ausgangszyklus oder eine passende Aufwecksteuerung. Beide R\u00fcckkehrf\u00e4lle \u2013 vor und nach Abschalten des USV-Ausgangs \u2013 geh\u00f6ren in den Test.<\/p>\n<h3>Reicht die 60-Sekunden-Frist als Schutz?<\/h3><p>Nur bei nachgewiesener Restenergie f\u00fcr Wartezeit und vollst\u00e4ndiges Herunterfahren. Ein bereits fast leerer Akku kann fr\u00fcher ausfallen. Schutzschaltung, Akkumeldung und Fehleralarm bleiben erforderlich.<\/p>\n<\/div>\n<div class=\"lw-quellen\"><h2>Quellen<\/h2><ul>\n<li><a href=\"https:\/\/www.raspberrypi.com\/documentation\/computers\/raspberry-pi.html\">Raspberry Pi: Hardware, GPIO und Stromversorgungsbaustein PMIC<\/a><\/li>\n<li><a href=\"https:\/\/www.raspberrypi.com\/documentation\/computers\/configuration.html\">Raspberry Pi: Konfiguration<\/a><\/li>\n<li><a href=\"https:\/\/raw.githubusercontent.com\/raspberrypi\/linux\/rpi-6.12.y\/arch\/arm\/boot\/dts\/overlays\/README\">Raspberry Pi: gpio-shutdown<\/a><\/li>\n<li><a href=\"https:\/\/libgpiod.readthedocs.io\/en\/v2.3.1\/python_line_settings.html\">libgpiod 2: LineSettings<\/a><\/li>\n<li><a href=\"https:\/\/libgpiod.readthedocs.io\/en\/v2.3.1\/python_misc.html\">libgpiod 2: request_lines<\/a><\/li>\n<li><a href=\"https:\/\/www.freedesktop.org\/software\/systemd\/man\/latest\/systemd.target.html\">systemd: Startreihenfolge von Targets<\/a><\/li>\n<li><a href=\"https:\/\/www.freedesktop.org\/software\/systemd\/man\/latest\/journald.conf.html\">systemd: Speicherung von Protokollen<\/a><\/li>\n<li><a href=\"https:\/\/www.analog.com\/en\/products\/max17048.html\">Analog Devices: MAX17048 \/ MAX17049<\/a><\/li>\n<li><a href=\"https:\/\/www.ti.com\/product\/INA219\">Texas Instruments: INA219<\/a><\/li>\n<li><a href=\"https:\/\/www.sandia.gov\/ess-ssl\/wp-content\/uploads\/2021\/03\/ESHB-Ch3_Lithium-Batteries_Preger.pdf\">Sandia: Lithium-Ionen-Akkus<\/a><\/li>\n<\/ul><\/div>","protected":false},"excerpt":{"rendered":"<p>Eine USV f\u00fcr den Raspberry Pi braucht gemessene Lastwerte, nutzbare Ausgangsenergie und eine Abschaltreserve. Ein GPIO-Monitor zeigt die verz\u00f6gerte Abschaltung samt Grenzen bei Akkustand, Fehlern und Wiederanlauf.<\/p>\n","protected":false},"author":1,"featured_media":23903,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[92632],"tags":[92205,92208,92235],"class_list":["post-12964","post","type-post","status-publish","format-standard","hentry","category-tutorials-de-raspberry-pi-de","tag-homelab-de","tag-raspberry-pi-de","tag-tutorial-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tutorial: Eine USV f\u00fcr den Raspberry Pi auslegen und die Notabschaltung einrichten | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Die tats\u00e4chliche Leistungsaufnahme messen, Zellkapazit\u00e4t in Laufzeit umrechnen und sauber abschalten, bevor das Paket die Abschaltspannung erreicht.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tutorial: Eine USV f\u00fcr den Raspberry Pi auslegen und die Notabschaltung einrichten | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Die tats\u00e4chliche Leistungsaufnahme messen, Zellkapazit\u00e4t in Laufzeit umrechnen und sauber abschalten, bevor das Paket die Abschaltspannung erreicht.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-11T10:45:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-26T12:26:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-12964-review-20261024-dark.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Tutorial: Eine USV f\u00fcr den Raspberry Pi auslegen und die Notabschaltung einrichten\",\"datePublished\":\"2026-09-11T10:45:00+00:00\",\"dateModified\":\"2026-10-26T12:26:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\\\/\"},\"wordCount\":1336,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-12964-review-20261024-dark.png\",\"keywords\":[\"Homelab\",\"Raspberry Pi\",\"Tutorial\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\\\/\",\"name\":\"Tutorial: Eine USV f\u00fcr den Raspberry Pi auslegen und die Notabschaltung einrichten | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-12964-review-20261024-dark.png\",\"datePublished\":\"2026-09-11T10:45:00+00:00\",\"dateModified\":\"2026-10-26T12:26:23+00:00\",\"description\":\"Die tats\u00e4chliche Leistungsaufnahme messen, Zellkapazit\u00e4t in Laufzeit umrechnen und sauber abschalten, bevor das Paket die Abschaltspannung erreicht.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-12964-review-20261024-dark.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-12964-review-20261024-dark.png\",\"width\":1200,\"height\":630,\"caption\":\"Tutorial: Eine USV f\u00fcr den Raspberry Pi auslegen und die Notabschaltung einrichten\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorial: Eine USV f\u00fcr den Raspberry Pi auslegen und die Notabschaltung einrichten\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tutorial: Eine USV f\u00fcr den Raspberry Pi auslegen und die Notabschaltung einrichten | Lukas Wojcik","description":"Die tats\u00e4chliche Leistungsaufnahme messen, Zellkapazit\u00e4t in Laufzeit umrechnen und sauber abschalten, bevor das Paket die Abschaltspannung erreicht.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\/","og_locale":"en_US","og_type":"article","og_title":"Tutorial: Eine USV f\u00fcr den Raspberry Pi auslegen und die Notabschaltung einrichten | Lukas Wojcik","og_description":"Die tats\u00e4chliche Leistungsaufnahme messen, Zellkapazit\u00e4t in Laufzeit umrechnen und sauber abschalten, bevor das Paket die Abschaltspannung erreicht.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-11T10:45:00+00:00","article_modified_time":"2026-10-26T12:26:23+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-12964-review-20261024-dark.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Tutorial: Eine USV f\u00fcr den Raspberry Pi auslegen und die Notabschaltung einrichten","datePublished":"2026-09-11T10:45:00+00:00","dateModified":"2026-10-26T12:26:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\/"},"wordCount":1336,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-12964-review-20261024-dark.png","keywords":["Homelab","Raspberry Pi","Tutorial"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\/","name":"Tutorial: Eine USV f\u00fcr den Raspberry Pi auslegen und die Notabschaltung einrichten | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-12964-review-20261024-dark.png","datePublished":"2026-09-11T10:45:00+00:00","dateModified":"2026-10-26T12:26:23+00:00","description":"Die tats\u00e4chliche Leistungsaufnahme messen, Zellkapazit\u00e4t in Laufzeit umrechnen und sauber abschalten, bevor das Paket die Abschaltspannung erreicht.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-12964-review-20261024-dark.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-12964-review-20261024-dark.png","width":1200,"height":630,"caption":"Tutorial: Eine USV f\u00fcr den Raspberry Pi auslegen und die Notabschaltung einrichten"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-usv-fur-den-raspberry-pi-auslegen-und-die-notabschaltung-einrichten\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Tutorial: Eine USV f\u00fcr den Raspberry Pi auslegen und die Notabschaltung einrichten"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/12964","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=12964"}],"version-history":[{"count":5,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/12964\/revisions"}],"predecessor-version":[{"id":27377,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/12964\/revisions\/27377"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/23903"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=12964"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=12964"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=12964"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}