{"id":9419,"date":"2026-08-10T13:37:12","date_gmt":"2026-08-10T11:37:12","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/narzedzia\/raspberry-pi-power-draw-ups-runtime-calculator\/"},"modified":"2026-08-10T13:37:12","modified_gmt":"2026-08-10T11:37:12","slug":"raspberry-pi-power-draw-ups-runtime-calculator","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/raspberry-pi-power-draw-ups-runtime-calculator\/","title":{"rendered":"Kalkulator poboru mocy Raspberry Pi i czasu podtrzymania UPS"},"content":{"rendered":"<div class=\"gtm-analyser-container\" style=\"background: var(--bg-panel, #1e1e24); padding: 25px; border-radius: 8px; border: 1px solid var(--border, #2a2a35);\">\n<p style=\"color: var(--text-secondary, #a0a0b0); margin-bottom: 20px;\">Po wybraniu p\u0142ytki i dodaniu pod\u0142\u0105czonych do niej urz\u0105dze\u0144 strona wylicza sta\u0142y pob\u00f3r mocy, zapas mocy zasilacza oraz czas, przez jaki akumulator utrzyma system. Warto\u015bci w watach dla poszczeg\u00f3lnych modeli s\u0105 orientacyjne i dotycz\u0105 fabrycznej p\u0142ytki; w\u0142asny firmware, ch\u0142odzenie i peryferia je zmieniaj\u0105.<\/p>\n<div style=\"display: flex; gap: 10px; align-items: flex-end; flex-wrap: wrap; margin-bottom: 20px;\">\n<div style=\"flex: 2; min-width: 260px;\">\n            <label for=\"pl-modell\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Model Raspberry Pi (spoczynek \/ pe\u0142ne obci\u0105\u017cenie)<\/label><br \/>\n            <select id=\"pl-modell\" class=\"form-control\" style=\"width: 100%; padding: 12px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ef); border-radius: 6px;\"><option value=\"pizero2w\">Pi Zero 2 W &mdash; 0.4 \/ 1.6 W<\/option><option value=\"pi3bp\">Pi 3B+ &mdash; 1.9 \/ 5.1 W<\/option><option value=\"pi4b\">Pi 4B &mdash; 2.7 \/ 6.4 W<\/option><option value=\"pi5-4\" selected>Pi 5 (4 GB) &mdash; 2.7 \/ 8.6 W<\/option><option value=\"pi5-8\">Pi 5 (8 GB) &mdash; 3.0 \/ 9.0 W<\/option><\/select>\n        <\/div>\n<div style=\"flex: 1; min-width: 160px;\">\n            <label for=\"pl-last\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Udzia\u0142 obci\u0105\u017cenia CPU (%)<\/label><br \/>\n            <input type=\"number\" id=\"pl-last\" value=\"35\" min=\"0\" max=\"100\" step=\"1\" class=\"form-control\" style=\"width: 100%; padding: 12px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ef); border-radius: 6px; font-family: monospace;\"><br \/>\n            <input type=\"range\" id=\"pl-last-regler\" value=\"35\" min=\"0\" max=\"100\" step=\"1\" style=\"width: 100%; margin-top: 8px; accent-color: var(--accent, #3ddc97);\">\n        <\/div>\n<div style=\"flex: 1; min-width: 160px;\">\n            <label for=\"pl-netzteil\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Moc znamionowa zasilacza (W)<\/label><br \/>\n            <input type=\"number\" id=\"pl-netzteil\" value=\"15\" min=\"0\" step=\"0.1\" class=\"form-control\" style=\"width: 100%; padding: 12px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ef); border-radius: 6px; font-family: monospace;\">\n        <\/div>\n<\/p><\/div>\n<div style=\"border-top: 1px solid var(--border, #2a2a35); padding-top: 18px; margin-bottom: 20px;\">\n<div style=\"color: var(--text-primary, #e8e8ef); font-weight: 700; margin-bottom: 10px;\">Dodatkowe odbiorniki<\/div>\n<div id=\"pl-liste\" style=\"margin-bottom: 12px;\"><\/div>\n<div style=\"display: flex; gap: 10px; align-items: flex-end; flex-wrap: wrap;\">\n<div style=\"flex: 1; min-width: 240px;\">\n                <label for=\"pl-vorlage\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Gotowy odbiornik do dodania<\/label><br \/>\n                <select id=\"pl-vorlage\" class=\"form-control\" style=\"width: 100%; padding: 12px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ef); border-radius: 6px;\"><\/select>\n            <\/div>\n<p>            <button id=\"pl-add-btn\" class=\"button\" style=\"background: transparent; color: var(--accent, #3ddc97); border: 1px solid var(--accent, #3ddc97); padding: 12px 24px; border-radius: 6px; font-weight: 700; cursor: pointer;\">Nowy wiersz<\/button>\n        <\/div>\n<\/p><\/div>\n<div style=\"border-top: 1px solid var(--border, #2a2a35); padding-top: 18px; margin-bottom: 20px; display: flex; gap: 10px; align-items: flex-end; flex-wrap: wrap;\">\n<div style=\"flex: 2; min-width: 240px;\">\n            <label for=\"pl-akku-modus\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Pojemno\u015b\u0107 akumulatora podana jako<\/label><br \/>\n            <select id=\"pl-akku-modus\" class=\"form-control\" style=\"width: 100%; padding: 12px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ef); border-radius: 6px;\"><option value=\"mah\" selected>Pojemno\u015b\u0107 w mAh i napi\u0119cie ogniwa<\/option><option value=\"wh\">Energia w Wh<\/option><\/select>\n        <\/div>\n<div id=\"pl-mah-block\" style=\"flex: 1; min-width: 160px;\">\n            <label for=\"pl-mah\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Pojemno\u015b\u0107 akumulatora (mAh)<\/label><br \/>\n            <input type=\"number\" id=\"pl-mah\" value=\"10000\" min=\"0\" step=\"100\" class=\"form-control\" style=\"width: 100%; padding: 12px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ef); border-radius: 6px; font-family: monospace;\">\n        <\/div>\n<div id=\"pl-volt-block\" style=\"flex: 1; min-width: 140px;\">\n            <label for=\"pl-volt\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Napi\u0119cie ogniwa (V)<\/label><br \/>\n            <input type=\"number\" id=\"pl-volt\" value=\"3.7\" min=\"0\" step=\"0.1\" class=\"form-control\" style=\"width: 100%; padding: 12px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ef); border-radius: 6px; font-family: monospace;\">\n        <\/div>\n<div id=\"pl-wh-block\" style=\"flex: 1; min-width: 160px; display: none;\">\n            <label for=\"pl-wh\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Energia akumulatora (Wh)<\/label><br \/>\n            <input type=\"number\" id=\"pl-wh\" value=\"37\" min=\"0\" step=\"0.1\" class=\"form-control\" style=\"width: 100%; padding: 12px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ef); border-radius: 6px; font-family: monospace;\">\n        <\/div>\n<\/p><\/div>\n<div style=\"display: flex; gap: 10px; align-items: flex-end; flex-wrap: wrap; margin-bottom: 20px;\">\n<div style=\"flex: 1; min-width: 180px;\">\n            <label for=\"pl-eta\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Sprawno\u015b\u0107 przetwornicy (%)<\/label><br \/>\n            <input type=\"number\" id=\"pl-eta\" value=\"85\" min=\"1\" max=\"100\" step=\"1\" class=\"form-control\" style=\"width: 100%; padding: 12px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ef); border-radius: 6px; font-family: monospace;\">\n        <\/div>\n<div style=\"flex: 1; min-width: 180px;\">\n            <label for=\"pl-reserve\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Czas rezerwy na poprawne zamkni\u0119cie systemu (s)<\/label><br \/>\n            <input type=\"number\" id=\"pl-reserve\" value=\"60\" min=\"0\" step=\"5\" class=\"form-control\" style=\"width: 100%; padding: 12px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ef); border-radius: 6px; font-family: monospace;\">\n        <\/div>\n<p>        <button id=\"pl-btn\" class=\"button\" style=\"background: var(--accent, #3ddc97); color: #0b1114; border: none; padding: 12px 24px; border-radius: 6px; font-weight: 700; cursor: pointer;\">Obliczanie<\/button>\n    <\/div>\n<div id=\"pl-ergebnis\"><\/div>\n<\/div>\n<p><script>\n(function () {\n    \/\/ --- reine Rechenlogik, ohne jeden DOM-Zugriff ---\n    const MODELLE = {\n        'pizero2w': { leerlaufW: 0.4, vollW: 1.6 },\n        'pi3bp': { leerlaufW: 1.9, vollW: 5.1 },\n        'pi4b': { leerlaufW: 2.7, vollW: 6.4 },\n        'pi5-4': { leerlaufW: 2.7, vollW: 8.6 },\n        'pi5-8': { leerlaufW: 3.0, vollW: 9.0 }\n    };<\/p>\n<p>    const VORLAGEN = [\n        { name: 'Dysk SSD SATA przez USB', watt: 2.5 },\n        { name: 'Dysk SSD NVMe na HAT', watt: 3.5 },\n        { name: 'Wentylator ch\u0142odz\u0105cy', watt: 0.6 },\n        { name: 'Modu\u0142 kamery', watt: 1.2 },\n        { name: 'Dowolny HAT', watt: 1.0 },\n        { name: 'W\u0142asna pozycja', watt: 0 }\n    ];<\/p>\n<p>    function zahlAus(wert) {\n        const text = String(wert === null || wert === undefined ? '' : wert).replace(',', '.').trim();\n        if (text === '') { return NaN; }\n        const zahl = Number(text);\n        return isFinite(zahl) ? zahl : NaN;\n    }<\/p>\n<p>    function formatiere(zahl, stellen) {\n        if (typeof zahl !== 'number' || !isFinite(zahl)) { return '-'; }\n        return zahl.toFixed(stellen);\n    }<\/p>\n<p>    function wattstundenAusMah(mah, volt) {\n        const m = zahlAus(mah);\n        const v = zahlAus(volt);\n        if (!isFinite(m) || !isFinite(v)) { return NaN; }\n        return m \/ 1000 * v;\n    }<\/p>\n<p>    function modellDaten(schluessel) {\n        const daten = MODELLE[schluessel];\n        if (!daten) { return null; }\n        return { leerlaufW: daten.leerlaufW, vollW: daten.vollW };\n    }<\/p>\n<p>    function boardLeistung(leerlaufW, vollW, lastAnteil) {\n        return leerlaufW + (vollW - leerlaufW) * (lastAnteil \/ 100);\n    }<\/p>\n<p>    function berechne(eingabe) {\n        const e = eingabe || {};<\/p>\n<p>        const leerlaufW = zahlAus(e.leerlaufW);\n        const vollW = zahlAus(e.vollW);\n        if (!isFinite(leerlaufW) || !isFinite(vollW) || leerlaufW < 0 || vollW < 0) {\n            return { ok: false, fehler: 'Dane p\u0142ytki s\u0105 niepe\u0142ne, wi\u0119c nie mo\u017cna wyliczy\u0107 ca\u0142kowitego poboru.' };\n        }\n\n        const lastAnteil = zahlAus(e.lastAnteil);\n        if (!isFinite(lastAnteil) || lastAnteil < 0 || lastAnteil > 100) {\n            return { ok: false, fehler: 'Nale\u017cy poda\u0107 udzia\u0142 obci\u0105\u017cenia od 0 do 100 procent.' };\n        }<\/p>\n<p>        const netzteilW = zahlAus(e.netzteilW);\n        if (!isFinite(netzteilW) || netzteilW <= 0) {\n            return { ok: false, fehler: 'Nale\u017cy poda\u0107 moc zasilacza wi\u0119ksz\u0105 ni\u017c 0 W.' };\n        }\n\n        const akkuWh = zahlAus(e.akkuWh);\n        if (!isFinite(akkuWh) || akkuWh <= 0) {\n            return { ok: false, fehler: 'Nale\u017cy poda\u0107 energi\u0119 akumulatora wi\u0119ksz\u0105 ni\u017c 0 Wh.' };\n        }\n\n        const wirkungsgrad = zahlAus(e.wirkungsgrad);\n        if (!isFinite(wirkungsgrad) || wirkungsgrad < 1 || wirkungsgrad > 100) {\n            return { ok: false, fehler: 'Nale\u017cy poda\u0107 sprawno\u015b\u0107 przetwornicy od 1 do 100 procent.' };\n        }<\/p>\n<p>        const reserveSek = zahlAus(e.reserveSek);\n        if (!isFinite(reserveSek) || reserveSek < 0) {\n            return { ok: false, fehler: 'Nale\u017cy poda\u0107 czas rezerwy wynosz\u0105cy 0 sekund lub wi\u0119cej.' };\n        }\n\n        const zusatz = Array.isArray(e.zusatz) ? e.zusatz : [];\n        let extrasW = 0;\n        for (let i = 0; i < zusatz.length; i++) {\n            const posten = zusatz[i] || {};\n            const watt = zahlAus(posten.watt);\n            if (!isFinite(watt) || watt < 0) {\n                return { ok: false, fehler: 'Ka\u017cdy dodatkowy odbiornik wymaga warto\u015bci w watach r\u00f3wnej 0 lub wi\u0119kszej.' };\n            }\n            extrasW = extrasW + watt;\n        }\n\n        const boardW = boardLeistung(leerlaufW, vollW, lastAnteil);\n        const gesamtW = boardW + extrasW;\n        if (!isFinite(gesamtW) || gesamtW <= 0) {\n            return { ok: false, fehler: 'Dane p\u0142ytki s\u0105 niepe\u0142ne, wi\u0119c nie mo\u017cna wyliczy\u0107 ca\u0142kowitego poboru.' };\n        }\n\n        const ampere = gesamtW \/ 5;\n        const reserveProzent = (netzteilW - gesamtW) \/ netzteilW * 100;\n        const laufzeitStunden = akkuWh * (wirkungsgrad \/ 100) \/ gesamtW;\n        const laufzeitMinuten = laufzeitStunden * 60;\n        const benoetigtWh = gesamtW * (reserveSek \/ 3600) \/ (wirkungsgrad \/ 100);\n\n        let schwelleProzent = benoetigtWh \/ akkuWh * 100;\n        const reserveZuGross = schwelleProzent > 100;\n        if (reserveZuGross) { schwelleProzent = 100; }<\/p>\n<p>        let netzteilStatus = 'ok';\n        if (gesamtW > netzteilW) {\n            netzteilStatus = 'ueberlast';\n        } else if (reserveProzent < 20) {\n            netzteilStatus = 'knapp';\n        }\n\n        return {\n            ok: true,\n            boardW: boardW,\n            extrasW: extrasW,\n            gesamtW: gesamtW,\n            ampere: ampere,\n            netzteilW: netzteilW,\n            reserveProzent: reserveProzent,\n            netzteilStatus: netzteilStatus,\n            akkuWh: akkuWh,\n            laufzeitStunden: laufzeitStunden,\n            laufzeitMinuten: laufzeitMinuten,\n            benoetigtWh: benoetigtWh,\n            schwelleProzent: schwelleProzent,\n            reserveZuGross: reserveZuGross\n        };\n    }\n\n    \/\/ fuer die Pruefung von aussen erreichbar\n    if (typeof window !== 'undefined') {\n        window.LW_TEST = window.LW_TEST || {};\n        window.LW_TEST.PL = {\n            berechne: berechne,\n            formatiere: formatiere,\n            zahlAus: zahlAus,\n            wattstundenAusMah: wattstundenAusMah,\n            boardLeistung: boardLeistung,\n            modellDaten: modellDaten,\n            MODELLE: MODELLE,\n            VORLAGEN: VORLAGEN\n        };\n    }\n\n    \/\/ --- DOM-Anbindung, sauber abgesichert ---\n    const btn = document.getElementById('pl-btn');\n    const out = document.getElementById('pl-ergebnis');\n    if (!btn || !out) { return; }\n\n    const feldModell = document.getElementById('pl-modell');\n    const feldLast = document.getElementById('pl-last');\n    const reglerLast = document.getElementById('pl-last-regler');\n    const feldNetzteil = document.getElementById('pl-netzteil');\n    const liste = document.getElementById('pl-liste');\n    const feldVorlage = document.getElementById('pl-vorlage');\n    const addBtn = document.getElementById('pl-add-btn');\n    const feldModus = document.getElementById('pl-akku-modus');\n    const blockMah = document.getElementById('pl-mah-block');\n    const blockVolt = document.getElementById('pl-volt-block');\n    const blockWh = document.getElementById('pl-wh-block');\n    const feldMah = document.getElementById('pl-mah');\n    const feldVolt = document.getElementById('pl-volt');\n    const feldWh = document.getElementById('pl-wh');\n    const feldEta = document.getElementById('pl-eta');\n    const feldReserve = document.getElementById('pl-reserve');\n\n    const STIL_INPUT = 'padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ef); border-radius: 6px; font-family: monospace;';\n\n    function wertVon(feld, ersatz) {\n        if (!feld) { return ersatz; }\n        return feld.value;\n    }\n\n    if (feldVorlage) {\n        for (let i = 0; i < VORLAGEN.length; i++) {\n            const option = document.createElement('option');\n            option.value = String(i);\n            option.textContent = VORLAGEN[i].name + ' (' + formatiere(VORLAGEN[i].watt, 1) + ' W)';\n            feldVorlage.appendChild(option);\n        }\n    }\n\n    function zeileAnlegen(name, watt) {\n        if (!liste) { return; }\n        const reihe = document.createElement('div');\n        reihe.setAttribute('data-pl-reihe', '1');\n        reihe.setAttribute('style', 'display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-bottom: 8px;');\n\n        const nameFeld = document.createElement('input');\n        nameFeld.type = 'text';\n        nameFeld.value = name;\n        nameFeld.setAttribute('data-pl-name', '1');\n        nameFeld.setAttribute('placeholder', 'Nazwa odbiornika');\n        nameFeld.setAttribute('style', 'flex: 2; min-width: 180px; ' + STIL_INPUT);\n\n        const wattFeld = document.createElement('input');\n        wattFeld.type = 'number';\n        wattFeld.step = '0.1';\n        wattFeld.min = '0';\n        wattFeld.value = String(watt);\n        wattFeld.setAttribute('data-pl-watt', '1');\n        wattFeld.setAttribute('style', 'flex: 1; min-width: 110px; ' + STIL_INPUT);\n\n        const einheit = document.createElement('span');\n        einheit.textContent = 'W';\n        einheit.setAttribute('style', 'color: var(--text-secondary, #a0a0b0); font-family: monospace;');\n\n        const wegBtn = document.createElement('button');\n        wegBtn.type = 'button';\n        wegBtn.className = 'button';\n        wegBtn.textContent = 'Usuwanie';\n        wegBtn.setAttribute('style', 'background: transparent; color: var(--text-secondary, #a0a0b0); border: 1px solid var(--border, #2a2a35); padding: 9px 14px; border-radius: 6px; cursor: pointer;');\n        wegBtn.addEventListener('click', function () {\n            if (reihe.parentNode) { reihe.parentNode.removeChild(reihe); }\n        });\n\n        reihe.appendChild(nameFeld);\n        reihe.appendChild(wattFeld);\n        reihe.appendChild(einheit);\n        reihe.appendChild(wegBtn);\n        liste.appendChild(reihe);\n    }\n\n    function zusatzLesen() {\n        const posten = [];\n        if (!liste) { return posten; }\n        const reihen = liste.querySelectorAll('[data-pl-reihe]');\n        for (let i = 0; i < reihen.length; i++) {\n            const nameFeld = reihen[i].querySelector('[data-pl-name]');\n            const wattFeld = reihen[i].querySelector('[data-pl-watt]');\n            posten.push({\n                name: nameFeld ? nameFeld.value : '',\n                watt: wattFeld ? wattFeld.value : ''\n            });\n        }\n        return posten;\n    }\n\n    if (addBtn) {\n        addBtn.addEventListener('click', function () {\n            let index = 0;\n            if (feldVorlage) { index = parseInt(feldVorlage.value, 10); }\n            if (!(index >= 0) || index >= VORLAGEN.length) { index = 0; }\n            zeileAnlegen(VORLAGEN[index].name, VORLAGEN[index].watt);\n        });\n    }<\/p>\n<p>    if (feldLast && reglerLast) {\n        reglerLast.addEventListener('input', function () {\n            feldLast.value = reglerLast.value;\n        });\n        feldLast.addEventListener('input', function () {\n            const zahl = zahlAus(feldLast.value);\n            if (isFinite(zahl) && zahl >= 0 && zahl <= 100) { reglerLast.value = String(zahl); }\n        });\n    }\n\n    function modusUmschalten() {\n        const modus = wertVon(feldModus, 'mah');\n        const mahAktiv = modus !== 'wh';\n        if (blockMah) { blockMah.style.display = mahAktiv ? '' : 'none'; }\n        if (blockVolt) { blockVolt.style.display = mahAktiv ? '' : 'none'; }\n        if (blockWh) { blockWh.style.display = mahAktiv ? 'none' : ''; }\n    }\n\n    if (feldModus) {\n        feldModus.addEventListener('change', modusUmschalten);\n        modusUmschalten();\n    }\n\n    function schuetze(text) {\n        return String(text).replace(\/&#038;\/g, '&amp;').replace(\/<\/g, '&lt;').replace(\/>\/g, '&gt;');\n    }<\/p>\n<p>    function meldung(text, farbe) {\n        return '<\/p>\n<div style=\"background: var(--bg-body, #14141a); border: 1px solid ' + farbe + '; border-left-width: 4px; color: var(--text-primary, #e8e8ef); padding: 12px 14px; border-radius: 6px; margin-top: 12px;\">' + schuetze(text) + '<\/div>\n<p>';\n    }<\/p>\n<p>    function kachel(titel, wert, zusatz) {\n        return '<\/p>\n<div style=\"flex: 1; min-width: 190px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); border-radius: 6px; padding: 14px;\">' +\n            '<\/p>\n<div style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.8rem; margin-bottom: 6px;\">' + schuetze(titel) + '<\/div>\n<p>' +\n            '<\/p>\n<div style=\"color: var(--text-primary, #e8e8ef); font-family: monospace; font-size: 1.35rem; font-weight: 700;\">' + schuetze(wert) + '<\/div>\n<p>' +\n            '<\/p>\n<div style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.8rem; margin-top: 6px;\">' + schuetze(zusatz) + '<\/div>\n<p>' +\n            '<\/p><\/div>\n<p>';\n    }<\/p>\n<p>    function ausgeben(r) {\n        let html = '<\/p>\n<div style=\"display: flex; gap: 12px; flex-wrap: wrap;\">';\n        html += kachel('Ca\u0142kowity pob\u00f3r', formatiere(r.gesamtW, 2) + ' W', 'p\u0142ytka ' + formatiere(r.boardW, 2) + ' W + dodatki ' + formatiere(r.extrasW, 2) + ' W');\n        html += kachel('Pr\u0105d przy 5 V', formatiere(r.ampere, 2) + ' A', formatiere(r.gesamtW, 2) + ' W \/ 5 V');\n        html += kachel('Zapas mocy zasilacza', formatiere(r.reserveProzent, 1) + ' %', formatiere(r.netzteilW - r.gesamtW, 2) + ' W \/ ' + formatiere(r.netzteilW, 1) + ' W');\n        html += '<\/div>\n<p>';<\/p>\n<p>        html += '<\/p>\n<div style=\"display: flex; gap: 12px; flex-wrap: wrap; margin-top: 12px;\">';\n        html += kachel('Czas podtrzymania UPS', formatiere(r.laufzeitMinuten, 1) + ' min', 'akumulator ' + formatiere(r.akkuWh, 2) + ' Wh');\n        html += kachel('Pr\u00f3g zamkni\u0119cia systemu', formatiere(r.schwelleProzent, 2) + ' %', formatiere(r.benoetigtWh, 3) + ' Wh');\n        html += '<\/div>\n<p>';<\/p>\n<p>        if (r.netzteilStatus === 'ueberlast') {\n            html += meldung('Zasilacz jest przeci\u0105\u017cony: system pobiera wi\u0119cej, ni\u017c wynosi jego moc znamionowa. Potrzebny jest mocniejszy zasilacz albo usuni\u0119cie jednego z odbiornik\u00f3w.', '#e5484d');\n        } else if (r.netzteilStatus === 'knapp') {\n            html += meldung('Pozosta\u0142o mniej ni\u017c 20 procent zapasu. Szczyty przy starcie lub nag\u0142ym obci\u0105\u017ceniu mog\u0105 mimo to przekroczy\u0107 moc znamionow\u0105 zasilacza.', '#f0b429');\n        } else {\n            html += meldung('Zasilacz zachowuje wygodny zapas ponad wyliczony pob\u00f3r.', 'var(--accent, #3ddc97)');\n        }<\/p>\n<p>        if (r.reserveZuGross) {\n            html += meldung('Sam czas rezerwy wyczerpa\u0142by ca\u0142y akumulator. Potrzebny jest wi\u0119kszy pakiet albo kr\u00f3tszy czas rezerwy.', '#e5484d');\n        }<\/p>\n<p>        html += '<\/p>\n<p style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.85rem; margin-top: 14px;\">Zamkni\u0119cie systemu powinno nast\u0119powa\u0107 po spadku akumulatora do powy\u017cszego progu, aby przy bie\u017c\u0105cym poborze wystarczy\u0142o jeszcze czasu rezerwy. Wyliczony czas zak\u0142ada pe\u0142n\u0105 u\u017cyteczno\u015b\u0107 pakietu i sta\u0142y pob\u00f3r, jest wi\u0119c warto\u015bci\u0105 g\u00f3rn\u0105.<\/p>\n<p>';\n        out.innerHTML = html;\n    }<\/p>\n<p>    btn.addEventListener('click', function () {\n        const daten = modellDaten(wertVon(feldModell, 'pi5-4'));\n        if (!daten) {\n            out.innerHTML = meldung('Dane p\u0142ytki s\u0105 niepe\u0142ne, wi\u0119c nie mo\u017cna wyliczy\u0107 ca\u0142kowitego poboru.', '#e5484d');\n            return;\n        }<\/p>\n<p>        let akkuWh;\n        if (wertVon(feldModus, 'mah') === 'wh') {\n            akkuWh = zahlAus(wertVon(feldWh, ''));\n            if (!isFinite(akkuWh) || akkuWh <= 0) {\n                out.innerHTML = meldung('Nale\u017cy poda\u0107 energi\u0119 akumulatora wi\u0119ksz\u0105 ni\u017c 0 Wh.', '#e5484d');\n                return;\n            }\n        } else {\n            const mah = zahlAus(wertVon(feldMah, ''));\n            if (!isFinite(mah) || mah <= 0) {\n                out.innerHTML = meldung('Nale\u017cy poda\u0107 pojemno\u015b\u0107 akumulatora wi\u0119ksz\u0105 ni\u017c 0 mAh.', '#e5484d');\n                return;\n            }\n            const volt = zahlAus(wertVon(feldVolt, ''));\n            if (!isFinite(volt) || volt <= 0) {\n                out.innerHTML = meldung('Nale\u017cy poda\u0107 napi\u0119cie ogniwa wi\u0119ksze ni\u017c 0 V.', '#e5484d');\n                return;\n            }\n            akkuWh = wattstundenAusMah(mah, volt);\n        }\n\n        const ergebnis = berechne({\n            leerlaufW: daten.leerlaufW,\n            vollW: daten.vollW,\n            lastAnteil: wertVon(feldLast, ''),\n            netzteilW: wertVon(feldNetzteil, ''),\n            akkuWh: akkuWh,\n            wirkungsgrad: wertVon(feldEta, ''),\n            reserveSek: wertVon(feldReserve, ''),\n            zusatz: zusatzLesen()\n        });\n\n        if (!ergebnis.ok) {\n            out.innerHTML = meldung(ergebnis.fehler, '#e5484d');\n            return;\n        }\n        ausgeben(ergebnis);\n    });\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Po wybraniu p\u0142ytki i dodaniu pod\u0142\u0105czonych do niej urz\u0105dze\u0144 strona wylicza sta\u0142y pob\u00f3r mocy, zapas mocy zasilacza oraz czas, przez jaki akumulator utrzyma system. Warto\u015bci w watach dla poszczeg\u00f3lnych modeli s\u0105 orientacyjne i dotycz\u0105 fabrycznej p\u0142ytki; w\u0142asny firmware, ch\u0142odzenie i peryferia je zmieniaj\u0105. Model Raspberry Pi (spoczynek \/ pe\u0142ne obci\u0105\u017cenie) Pi Zero 2 W &mdash; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":9284,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"class_list":["post-9419","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Kalkulator poboru mocy Raspberry Pi i czasu podtrzymania UPS - Lukas Wojcik - Blog<\/title>\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\/pl\/narzedzia\/raspberry-pi-power-draw-ups-runtime-calculator\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kalkulator poboru mocy Raspberry Pi i czasu podtrzymania UPS - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Po wybraniu p\u0142ytki i dodaniu pod\u0142\u0105czonych do niej urz\u0105dze\u0144 strona wylicza sta\u0142y pob\u00f3r mocy, zapas mocy zasilacza oraz czas, przez jaki akumulator utrzyma system. Warto\u015bci w watach dla poszczeg\u00f3lnych modeli s\u0105 orientacyjne i dotycz\u0105 fabrycznej p\u0142ytki; w\u0142asny firmware, ch\u0142odzenie i peryferia je zmieniaj\u0105. Model Raspberry Pi (spoczynek \/ pe\u0142ne obci\u0105\u017cenie) Pi Zero 2 W &mdash; [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/raspberry-pi-power-draw-ups-runtime-calculator\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg\" \/>\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\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/raspberry-pi-power-draw-ups-runtime-calculator\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/raspberry-pi-power-draw-ups-runtime-calculator\\\/\",\"name\":\"Kalkulator poboru mocy Raspberry Pi i czasu podtrzymania UPS - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-08-10T11:37:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/raspberry-pi-power-draw-ups-runtime-calculator\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/raspberry-pi-power-draw-ups-runtime-calculator\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/raspberry-pi-power-draw-ups-runtime-calculator\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Toolbox\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/toolbox-3\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Kalkulator poboru mocy Raspberry Pi i czasu podtrzymania UPS\"}]},{\"@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\":\"luky\",\"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\":\"luky\"},\"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":"Kalkulator poboru mocy Raspberry Pi i czasu podtrzymania UPS - Lukas Wojcik - Blog","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\/pl\/narzedzia\/raspberry-pi-power-draw-ups-runtime-calculator\/","og_locale":"en_US","og_type":"article","og_title":"Kalkulator poboru mocy Raspberry Pi i czasu podtrzymania UPS - Lukas Wojcik - Blog","og_description":"Po wybraniu p\u0142ytki i dodaniu pod\u0142\u0105czonych do niej urz\u0105dze\u0144 strona wylicza sta\u0142y pob\u00f3r mocy, zapas mocy zasilacza oraz czas, przez jaki akumulator utrzyma system. Warto\u015bci w watach dla poszczeg\u00f3lnych modeli s\u0105 orientacyjne i dotycz\u0105 fabrycznej p\u0142ytki; w\u0142asny firmware, ch\u0142odzenie i peryferia je zmieniaj\u0105. Model Raspberry Pi (spoczynek \/ pe\u0142ne obci\u0105\u017cenie) Pi Zero 2 W &mdash; [&hellip;]","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/raspberry-pi-power-draw-ups-runtime-calculator\/","og_site_name":"Lukas Wojcik - Blog","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/raspberry-pi-power-draw-ups-runtime-calculator\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/raspberry-pi-power-draw-ups-runtime-calculator\/","name":"Kalkulator poboru mocy Raspberry Pi i czasu podtrzymania UPS - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-08-10T11:37:12+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/raspberry-pi-power-draw-ups-runtime-calculator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/raspberry-pi-power-draw-ups-runtime-calculator\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/raspberry-pi-power-draw-ups-runtime-calculator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Toolbox","item":"https:\/\/www.lukaswojcik.com\/blog\/toolbox-3\/"},{"@type":"ListItem","position":3,"name":"Kalkulator poboru mocy Raspberry Pi i czasu podtrzymania UPS"}]},{"@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":"luky","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":"luky"},"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\/pages\/9419","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"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=9419"}],"version-history":[{"count":0,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9419\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9284"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=9419"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}