| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- <?php
- // index.php
- $default_power_w = 90;
- $default_price = 0.32;
- $default_solar_hours = 10;
- $default_run_hours = 24;
- $power_w = isset($_GET['power_w']) ? floatval($_GET['power_w']) : $default_power_w;
- $price = isset($_GET['price']) ? floatval($_GET['price']) : $default_price;
- $solar_hours = isset($_GET['solar_hours']) ? floatval($_GET['solar_hours']) : $default_solar_hours;
- $run_hours = isset($_GET['run_hours']) ? floatval($_GET['run_hours']) : $default_run_hours;
- $year_hours = 8760;
- $day_hours = 24;
- // ensure sane bounds
- if ($solar_hours < 0) $solar_hours = 0;
- if ($solar_hours > 24) $solar_hours = 24;
- if ($run_hours < 0) $run_hours = 0;
- if ($run_hours > 24) $run_hours = 24;
- $active_hours_per_year = $run_hours * 365.0;
- $annual_kwh = $power_w * $active_hours_per_year / 1000.0;
- // Netzbezug: nur die Stunden, in denen das System läuft UND keine Solarversorgung besteht.
- // Pro Tag: Netzstunden = max(0, run_hours - solar_hours)
- $net_hours_per_day = max(0.0, $run_hours - $solar_hours);
- $net_hours_per_year = $net_hours_per_day * 365.0;
- $net_kwh = $power_w * $net_hours_per_year / 1000.0;
- $daily_cost = ($power_w * $net_hours_per_day / 1000.0) * $price;
- $annual_cost = $net_kwh * $price;
- ?>
- <!doctype html>
- <html lang="de">
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width,initial-scale=1">
- <title>Stromkosten-Rechner (Solar Direktverbrauch)</title>
- <style>
- body { font-family: Arial, sans-serif; margin: 24px; color: #111; }
- .card { max-width: 760px; margin: auto; padding: 18px; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 2px 6px rgba(0,0,0,0.03); }
- h1 { font-size: 20px; margin-bottom: 8px; }
- .control { margin:14px 0; }
- label { display:block; font-size:13px; margin-bottom:6px; color:#333; }
- input[type="range"] { width:100%; }
- .muted { color:#666; font-size:13px; }
- .value { font-weight:700; margin-left:6px; }
- .results { margin-top:18px; display:grid; grid-template-columns: 1fr 1fr; gap:12px; }
- .result { padding:12px; border-radius:6px; background:#f9f9f9; border:1px solid #eee; }
- .footer { margin-top:14px; font-size:13px; color:#444; }
- @media (max-width:600px){ .results{grid-template-columns:1fr;} }
- </style>
- </head>
- <body>
- <div class="card">
- <h1>Stromkosten-Rechner mit Solar Direktverbrauch</h1>
- <div class="control">
- <label for="power">Leistung (W)
- <span class="muted"> Aktuell: <span id="power_val" class="value"><?php echo htmlspecialchars($power_w); ?></span> W</span>
- </label>
- <input id="power" type="range" min="1" max="500" step="1" value="<?php echo htmlspecialchars($power_w); ?>">
- </div>
- <div class="control">
- <label for="price">Strompreis (€/kWh)
- <span class="muted"> Aktuell: <span id="price_val" class="value"><?php echo number_format($price,2); ?></span> €/kWh</span>
- </label>
- <input id="price" type="range" min="0.01" max="1.00" step="0.01" value="<?php echo htmlspecialchars($price); ?>">
- </div>
- <div class="control">
- <label for="solar">Sonnenstunden/Tag (Solarversorgung)
- <span class="muted"> Aktuell: <span id="solar_val" class="value"><?php echo htmlspecialchars($solar_hours); ?></span> h/Tag</span>
- </label>
- <input id="solar" type="range" min="0" max="24" step="0.5" value="<?php echo htmlspecialchars($solar_hours); ?>">
- </div>
- <div class="control">
- <label for="run">Betriebsstunden/Tag (System läuft)
- <span class="muted"> Aktuell: <span id="run_val" class="value"><?php echo htmlspecialchars($run_hours); ?></span> h/Tag</span>
- </label>
- <input id="run" type="range" min="0" max="24" step="0.25" value="<?php echo htmlspecialchars($run_hours); ?>">
- </div>
- <div class="results" id="results">
- <div class="result">
- <div class="muted">Jahresenergiebedarf (nur Laufzeit)</div>
- <div style="font-size:18px; font-weight:700" id="annual_kwh"><?php echo number_format($annual_kwh,1); ?></div>
- <div class="muted">kWh / Jahr</div>
- </div>
- <div class="result">
- <div class="muted">Netzbezug (Jahr)</div>
- <div style="font-size:18px; font-weight:700" id="net_kwh"><?php echo number_format($net_kwh,1); ?></div>
- <div class="muted">kWh / Jahr (bei <?php echo htmlspecialchars($solar_hours); ?> h Solar/Tag)</div>
- </div>
- <div class="result">
- <div class="muted">Tägliche Kosten (Netz)</div>
- <div style="font-size:18px; font-weight:700" id="daily_cost"><?php echo number_format($daily_cost,3); ?></div>
- <div class="muted">€ / Tag</div>
- </div>
- <div class="result">
- <div class="muted">Jährliche Kosten (Netz)</div>
- <div style="font-size:18px; font-weight:700" id="annual_cost"><?php echo number_format($annual_cost,2); ?></div>
- <div class="muted">€ / Jahr</div>
- </div>
- </div>
- <div class="footer">
- <div class="muted">Kurze Hinweise:</div>
- <ul class="muted">
- <li>Die angegebenen Betriebsstunden/Tag steuern, wie lange das System täglich läuft.</li>
- <li>Solar deckt die eingegebene Anzahl Stunden/Tag vollständig; nur während laufender, nicht-solarer Stunden wird Netzstrom bezogen.</li>
- <li>Berechnungen gehen von 365 Tagen/Jahr aus; Monats- oder saisonale Schwankungen sind nicht berücksichtigt.</li>
- <li>Alle Werte sind Näherungswerte zur Orientierung: echte Messungen sind genauer.</li>
- </ul>
- </div>
- </div>
- <script>
- (function(){
- const yearDays = 365.0;
- const power = document.getElementById('power');
- const price = document.getElementById('price');
- const solar = document.getElementById('solar');
- const run = document.getElementById('run');
- const power_val = document.getElementById('power_val');
- const price_val = document.getElementById('price_val');
- const solar_val = document.getElementById('solar_val');
- const run_val = document.getElementById('run_val');
- const annual_kwh_el = document.getElementById('annual_kwh');
- const net_kwh_el = document.getElementById('net_kwh');
- const daily_cost_el = document.getElementById('daily_cost');
- const annual_cost_el = document.getElementById('annual_cost');
- const fmt = (v,dec=1) => Number(v).toLocaleString('de-DE', {minimumFractionDigits:dec, maximumFractionDigits:dec});
- const fmtPrice = (v,dec=2) => Number(v).toLocaleString('de-DE', {minimumFractionDigits:dec, maximumFractionDigits:dec});
- function recalc(){
- const p = parseFloat(power.value); // W
- const pr = parseFloat(price.value); // €/kWh
- const sh = parseFloat(solar.value); // h/day solar
- const rh = parseFloat(run.value); // h/day running
- const activeHoursYear = rh * yearDays;
- const annualKwh = p * activeHoursYear / 1000.0;
- // Netzstunden pro Tag = Betriebsstunden minus Solarstunden (clamp >=0)
- const netHoursPerDay = Math.max(0, rh - sh);
- const netHoursYear = netHoursPerDay * yearDays;
- const netKwh = p * netHoursYear / 1000.0;
- const dailyCost = (p * netHoursPerDay / 1000.0) * pr;
- const annualCost = netKwh * pr;
- power_val.textContent = Math.round(p);
- price_val.textContent = fmtPrice(pr,2);
- solar_val.textContent = (sh % 1 === 0) ? sh.toFixed(0) : sh.toFixed(1);
- run_val.textContent = (rh % 1 === 0) ? rh.toFixed(0) : rh.toFixed(2);
- annual_kwh_el.textContent = fmt(annualKwh,1);
- net_kwh_el.textContent = fmt(netKwh,1);
- daily_cost_el.textContent = fmt(dailyCost,3) + ' €';
- annual_cost_el.textContent = fmtPrice(annualCost,2) + ' €';
- }
- power.addEventListener('input', recalc);
- price.addEventListener('input', recalc);
- solar.addEventListener('input', recalc);
- run.addEventListener('input', recalc);
- recalc();
- })();
- </script>
- </body>
- </html>
|