{"id":11224,"date":"2025-10-11T21:18:48","date_gmt":"2025-10-11T18:18:48","guid":{"rendered":"https:\/\/teplodom.net.ua\/kalkulyator-solnechnoj-energii\/"},"modified":"2026-02-14T23:43:01","modified_gmt":"2026-02-14T21:43:01","slug":"kalkulyator-solnechnoj-energii","status":"publish","type":"page","link":"https:\/\/teplodom.net.ua\/ru\/kalkulyator-solnechnoj-energii\/","title":{"rendered":"\u041a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u0441\u043e\u043b\u043d\u0435\u0447\u043d\u043e\u0439 \u044d\u043d\u0435\u0440\u0433\u0438\u0438"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"11224\" class=\"elementor elementor-11224 elementor-10928\">\n\t\t\t\t<div class=\"elementor-element elementor-element-34cd348 e-flex e-con-boxed e-con e-parent\" data-id=\"34cd348\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-613fb1b e-con-full e-flex e-con e-child\" data-id=\"613fb1b\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-e18b5ca e-con-full e-flex e-con e-child\" data-id=\"e18b5ca\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-78a552f elementor-widget elementor-widget-button\" data-id=\"78a552f\" data-element_type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/teplodom.net.ua\/kalkulyator-sonyachnoyi-energiyi\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0456\u044f<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ed12fb7 elementor-widget elementor-widget-button\" data-id=\"ed12fb7\" data-element_type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/teplodom.net.ua\/kalkulyator-chasu-avtonomnoyi-roboty\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">\u0410\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u0456\u0441\u0442\u044c<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-05d7af2 elementor-widget elementor-widget-button\" data-id=\"05d7af2\" data-element_type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/teplodom.net.ua\/kalkulyator-okupnosti-ses\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">\u041e\u043a\u0443\u043f\u043d\u0456\u0441\u0442\u044c<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-51a4856 elementor-widget elementor-widget-button\" data-id=\"51a4856\" data-element_type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/teplodom.net.ua\/kalkulyator-peretynu-kabeliv\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">\u041f\u0435\u0440\u0435\u0440\u0456\u0437 \u043a\u0430\u0431\u0435\u043b\u044e<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d429771 elementor-widget elementor-widget-shortcode\" data-id=\"d429771\" data-element_type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div id=\"solar-calc-root\"><\/div>\n<script>\n(function(){\n  const root = document.getElementById('solar-calc-root');\n  const ajaxurl = \"https:\/\/teplodom.net.ua\/wp-admin\/admin-ajax.php\";\n  root.innerHTML = `\n  <style>\n    :root { --bg:#0f172a; --panel:#111827; --muted:#94a3b8; --text:#e5e7eb;\n            --primary:#22c55e; --primary-600:#16a34a; --ring:rgba(34,197,94,.35);\n            --danger:#ef4444; --card:#0b1220; --card2:#111827; --border:#1f2937; }\n    *{box-sizing:border-box}\n    .sc-wrap{background:linear-gradient(180deg,#07101f,#0b1220 35%,#0f172a);color:var(--text);font:500 16px\/1.4 system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,\"Helvetica Neue\",Arial,\"Noto Sans\"}\n    .sc-inner{max-width:1100px;margin:32px auto;padding:0 16px}\n    .sc-hero{display:grid;gap:14px;margin-bottom:16px}\n    .sc-title{font-size:clamp(24px,3vw,34px);font-weight:800}\n    .sc-sub{color:var(--muted)}\n    .sc-card{background:radial-gradient(1200px 600px at 0% -10%, rgba(34,197,94,.08), transparent 50%), radial-gradient(800px 600px at 100% 110%, rgba(59,130,246,.06), transparent 50%), var(--card2); border:1px solid var(--border); border-radius:18px; padding:18px; box-shadow:0 8px 24px rgba(0,0,0,.35)}\n    .sc-grid{display:grid;gap:12px}\n    @media(min-width:900px){.sc-grid-2{grid-template-columns:1.2fr .8fr}}\n\n    label{display:block;font-size:13px;color:var(--muted);margin:8px 0 6px}\n    input[type=text],input[type=number],select{\n      width:100%; background:#0a0f1a; color:var(--text); border:1px solid var(--border);\n      border-radius:12px; padding:12px 14px; height:56px; outline:none;\n      transition:120ms border-color ease,120ms box-shadow ease;\n    }\n    input:focus,select:focus{border-color:var(--primary); box-shadow:0 0 0 4px var(--ring)}\n\n    \/* \u0420\u044f\u0434 \u043f\u043e\u043b\u0456\u0432: \u0440\u0456\u0432\u043d\u044f\u0454\u043c\u043e \u0421\u0410\u041c\u0406 \u0456\u043d\u043f\u0443\u0442\u0438 \u043f\u043e \u043d\u0438\u0436\u043d\u0456\u0439 \u043a\u0440\u043e\u043c\u0446\u0456 \u2014 \u0437\u0430\u0432\u0436\u0434\u0438 \u0432 \u043e\u0434\u043d\u0443 \u043b\u0456\u043d\u0456\u044e *\/\n    .sc-row{ display:grid; grid-template-columns:1.2fr 1fr 1fr auto; gap:10px; align-items:end; }\n    .sc-row>div{ display:flex; flex-direction:column; }\n    .sc-row select,.sc-row input[type=number]{ margin-top:auto; }\n\n    .btn{cursor:pointer;border:0;border-radius:12px;padding:12px 16px;font-weight:700;height:56px;display:flex;align-items:center;justify-content:center}\n    .btn-primary{background:linear-gradient(180deg,var(--primary),var(--primary-600));color:#08120d}\n    .btn-ghost{background:transparent;color:var(--text);border:1px dashed var(--border)}\n    .btn-danger{background:var(--danger);color:#fff}\n    .btn:disabled{opacity:.6;cursor:not-allowed}\n\n    .fields{display:grid;gap:12px;margin-top:8px}\n    .pill{display:inline-flex;align-items:center;gap:10px;background:#0a0f1a;border:1px solid var(--border);border-radius:999px;padding:8px 12px;font-size:13px;color:var(--muted)}\n    .help{font-size:13px;color:var(--muted)}\n    .result{background:var(--card);border:1px solid var(--border);border-radius:16px;padding:16px}\n    .total{font-size:clamp(20px,2.5vw,28px);font-weight:900}\n    .mono{font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\"}\n    .muted{color:var(--muted)}\n    .spinner{width:18px;height:18px;border:3px solid rgba(255,255,255,.15);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite;display:inline-block;vertical-align:-4px}\n    @keyframes spin{to{transform:rotate(360deg)}}\n    .footer{margin-top:16px;font-size:14px;color:var(--muted)}\n    .small{font-size:12px;color:var(--muted)}\n    .tag{font-size:12px;padding:6px 10px;border-radius:999px;background:#082012;color:#93e3b0;border:1px solid #0f3d24}\n  <\/style>\n\n  <div class=\"sc-wrap\">\n    <div class=\"sc-inner\">\n      <div class=\"sc-hero\">\n        <div class=\"sc-title\">\u041a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0456\u0457 \u0441\u043e\u043d\u044f\u0447\u043d\u043e\u0457 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u0441\u0442\u0430\u043d\u0446\u0456\u0457<\/div>\n        <div class=\"sc-sub\">\u041e\u0431\u043b\u0456\u043a \u043a\u0456\u043b\u044c\u043a\u043e\u0445 \u043f\u043e\u043b\u0456\u0432 (\u043d\u0430\u043f\u0440\u044f\u043c\u043a\u0456\u0432), \u043a\u0443\u0442\u0430 \u043d\u0430\u0445\u0438\u043b\u0443, \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e\u0457 \u043f\u043e\u0442\u0443\u0436\u043d\u043e\u0441\u0442\u0456 \u0442\u0430 \u0433\u0435\u043e\u043b\u043e\u043a\u0430\u0446\u0456\u0457 \u0437\u0430 \u0430\u0434\u0440\u0435\u0441\u043e\u044e.<\/div>\n      <\/div>\n\n      <div class=\"sc-grid sc-grid-2\">\n        <section class=\"sc-card\">\n          <div>\n            <label for=\"sc-address\">\u0410\u0434\u0440\u0435\u0441\u0430 \/ \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0439 \u043f\u0443\u043d\u043a\u0442<\/label>\n            <input id=\"sc-address\" type=\"text\" placeholder=\"\u041d\u0430\u043f\u0440.: \u0425\u0430\u0440\u043a\u0456\u0432, \u0423\u043a\u0440\u0430\u0457\u043d\u0430 \u0430\u0431\u043e Wroc\u0142aw, Poland\" \/>\n            <div class=\"help\">\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u043c\u043e OpenStreetMap Nominatim + PVGIS.<\/div>\n          <\/div>\n\n          <div class=\"pill\" style=\"margin-top:12px\">\n            <span>\u041a\u043e\u0435\u0444\u0456\u0446\u0456\u0454\u043d\u0442 \u0432\u0442\u0440\u0430\u0442 (PR, %)<\/span>\n            <input id=\"sc-losses\" type=\"number\" min=\"0\" max=\"40\" value=\"14\" style=\"width:90px;text-align:center\"\/>\n            <span class=\"small\">\u0422\u0438\u043f\u043e\u0432\u043e 14% (\u043a\u0430\u0431\u0435\u043b\u0456, \u0456\u043d\u0432\u0435\u0440\u0442\u043e\u0440, \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u0442\u043e\u0449\u043e)<\/span>\n          <\/div>\n\n          <div style=\"margin-top:16px\">\n            <div class=\"help\">\u041f\u043e\u043b\u044f (\u043d\u0430\u043f\u0440\u044f\u043c\u043a\u0438): \u0432\u0432\u0435\u0434\u0456\u0442\u044c \u0430\u0437\u0438\u043c\u0443\u0442 (\u00b0), \u043a\u0443\u0442 \u043d\u0430\u0445\u0438\u043b\u0443 (\u00b0) \u0456 \u043f\u043e\u0442\u0443\u0436\u043d\u0456\u0441\u0442\u044c (\u043a\u0412\u0442).<\/div>\n            <div id=\"sc-fields\" class=\"fields\"><\/div>\n            <button id=\"sc-addField\" class=\"btn btn-ghost\" type=\"button\" style=\"margin-top:8px\">+ \u0414\u043e\u0434\u0430\u0442\u0438 \u043f\u043e\u043b\u0435<\/button>\n          <\/div>\n\n          <div style=\"display:flex;gap:10px;margin-top:16px;align-items:center\">\n            <button id=\"sc-calc\" class=\"btn btn-primary\" type=\"button\">\u0420\u043e\u0437\u0440\u0430\u0445\u0443\u0432\u0430\u0442\u0438 \u0440\u0456\u0447\u043d\u0443 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0456\u044e<\/button>\n            <span id=\"sc-status\" class=\"small\"><\/span>\n          <\/div>\n\n          <div class=\"small\" style=\"margin-top:8px\">\u041f\u0456\u0434\u043a\u0430\u0437\u043a\u0430: \u0430\u0437\u0438\u043c\u0443\u0442 0\u00b0 \u2014 <b>\u041f\u0456\u0432\u0434\u0435\u043d\u044c<\/b> (PVGIS), \u0432\u0456\u0434\u2019\u0454\u043c\u043d\u0456 \u2014 \u0441\u0445\u0456\u0434 (\u221290\u00b0), \u0434\u043e\u0434\u0430\u0442\u043d\u0456 \u2014 \u0437\u0430\u0445\u0456\u0434 (+90\u00b0), \u00b1180\u00b0 \u2014 <b>\u041f\u0456\u0432\u043d\u0456\u0447<\/b>.<\/div>\n        <\/section>\n\n        <aside class=\"sc-card\">\n          <div style=\"display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:12px\">\n            <div class=\"tag\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0438<\/div>\n            <div id=\"sc-geo\" class=\"small\"><\/div>\n          <\/div>\n          <div class=\"result\" id=\"sc-results\"><div class=\"muted\">\u0422\u0443\u0442 \u0437\u2019\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0438 \u043f\u043e \u043a\u043e\u0436\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u044e \u0442\u0430 \u0441\u0443\u043c\u0430\u0440\u043d\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0456\u044f.<\/div><\/div>\n          <div class=\"footer\">\u26a0\ufe0f \u041e\u0440\u0456\u0454\u043d\u0442\u043e\u0432\u043d\u0438\u0439 \u0440\u043e\u0437\u0440\u0430\u0445\u0443\u043d\u043e\u043a \u0437\u0430 \u0434\u0430\u043d\u0438\u043c\u0438 PVGIS. \u0414\u043b\u044f \u0431\u0456\u043b\u044c\u0448 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u043e\u0437\u0440\u0430\u0445\u0443\u043d\u043a\u0443 \u0437 \u0443\u0440\u0430\u0445\u0443\u0432\u0430\u043d\u043d\u044f\u043c \u0437\u0430\u0442\u0456\u043d\u0435\u043d\u044c, \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043c\u0456\u0441\u0446\u044f \u0440\u043e\u0437\u0442\u0430\u0448\u0443\u0432\u0430\u043d\u043d\u044f, \u0434\u043e\u0432\u0436\u0438\u043d\u0438 \u0441\u0442\u0440\u0438\u043d\u0433\u0456\u0432, \u043e\u0431\u043b\u0430\u0434\u043d\u0430\u043d\u043d\u044f \u0437\u0432\u0435\u0440\u0442\u0430\u0439\u0442\u0435\u0441\u044c \u0437\u0430 \u043d\u043e\u043c\u0435\u0440\u043e\u043c +38 077 402 51 89, \u0430\u0431\u043e \u0432\u0432\u0435\u0434\u0456\u0442\u044c \u0441\u0432\u043e\u0457 \u0434\u0430\u043d\u0456 \u0432 \u0444\u043e\u0440\u043c\u0443 \u043d\u0438\u0436\u0447\u0435 \u0456 \u043c\u0438 \u0437 \u0412\u0430\u043c\u0438 \u0437\u0432'\u044f\u0436\u0435\u043c\u043e\u0441\u044c \u043d\u0430\u0439\u0431\u043b\u0438\u0436\u0447\u0438\u043c \u0447\u0430\u0441\u043e\u043c<\/div>\n        <\/aside>\n      <\/div>\n\n      <div class=\"sc-card\" style=\"margin-top:16px\">\n        <div class=\"total\" id=\"sc-totalLine\">\u041f\u0456\u0434\u0441\u0443\u043c\u043e\u043a: \u2014<\/div>\n        <div class=\"help\" style=\"margin-top:8px\">\u041f\u043e\u0442\u0440\u0456\u0431\u0435\u043d \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u0438\u0439 \u043f\u0440\u043e\u0454\u043a\u0442? \u0417\u0432\u0435\u0440\u0442\u0430\u0439\u0442\u0435\u0441\u044f \u2014 \u043f\u0456\u0434\u0431\u0435\u0440\u0435\u043c\u043e \u043e\u0431\u043b\u0430\u0434\u043d\u0430\u043d\u043d\u044f, \u0437\u0440\u043e\u0431\u0438\u043c\u043e \u0444\u0456\u043d\u043c\u043e\u0434\u0435\u043b\u044c \u043e\u043a\u0443\u043f\u043d\u043e\u0441\u0442\u0456 \u0442\u0430 \u0442\u043e\u0447\u043d\u0438\u0439 \u0440\u043e\u0437\u0440\u0430\u0445\u0443\u043d\u043e\u043a. +38 077 402 51 89<\/div>\n      <\/div>\n\n      <div class=\"small\" style=\"text-align:center;margin:16px 0;opacity:.8\">@\u0422\u0435\u043f\u043b\u043e\u0434\u043e\u043c.\u041d\u0435\u0442.\u042e\u0430 \u2014 \u0443\u0441\u0456 \u043f\u0440\u0430\u0432\u0430 \u0437\u0430\u0445\u0438\u0449\u0435\u043d\u0456, 2025<\/div>\n    <\/div>\n  <\/div>\n  `;\n\n  \/\/ ========= JS =========\n  const fieldsEl  = document.getElementById('sc-fields');\n  const addBtn    = document.getElementById('sc-addField');\n  const calcBtn   = document.getElementById('sc-calc');\n  const statusEl  = document.getElementById('sc-status');\n  const resultsEl = document.getElementById('sc-results');\n  const geoEl     = document.getElementById('sc-geo');\n  const totalLine = document.getElementById('sc-totalLine');\n  const addressEl = document.getElementById('sc-address');\n  const lossesEl  = document.getElementById('sc-losses');\n\n  function createFieldRow(defaults={aspect:0, tilt:30, kw:10}){\n    const row = document.createElement('div');\n    row.className = 'sc-row';\n\n    \/\/ \u0410\u0437\u0438\u043c\u0443\u0442 \u2014 \u0422\u041e\u041b\u042c\u041a\u041e \u0447\u0438\u0441\u043b\u043e\n    const azWrap = document.createElement('div');\n    const azLabel = document.createElement('label'); azLabel.textContent='\u0410\u0437\u0438\u043c\u0443\u0442 (\u00b0)';\n    const azInput = document.createElement('input'); azInput.type='number'; azInput.step='1'; azInput.min='-180'; azInput.max='180'; azInput.placeholder='0'; azInput.value=defaults.aspect;\n    azWrap.appendChild(azLabel); azWrap.appendChild(azInput);\n\n    \/\/ \u041a\u0443\u0442\n    const tiltWrap = document.createElement('div');\n    const tiltLabel = document.createElement('label'); tiltLabel.textContent='\u041a\u0443\u0442 \u043d\u0430\u0445\u0438\u043b\u0443 (\u00b0)';\n    const tiltInput = document.createElement('input'); tiltInput.type='number'; tiltInput.min='0'; tiltInput.max='60'; tiltInput.value=defaults.tilt;\n    tiltWrap.appendChild(tiltLabel); tiltWrap.appendChild(tiltInput);\n\n    \/\/ \u041f\u043e\u0442\u0443\u0436\u043d\u0456\u0441\u0442\u044c\n    const kwWrap = document.createElement('div');\n    const kwLabel = document.createElement('label'); kwLabel.textContent='\u041f\u043e\u0442\u0443\u0436\u043d\u0456\u0441\u0442\u044c \u043d\u0430 \u043f\u043e\u043b\u0456 (\u043a\u0412\u0442)';\n    const kwInput = document.createElement('input'); kwInput.type='number'; kwInput.min='0'; kwInput.step='0.1'; kwInput.value=defaults.kw;\n    kwWrap.appendChild(kwLabel); kwWrap.appendChild(kwInput);\n\n    \/\/ \u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438\n    const rmWrap = document.createElement('div');\n    const rmLabel = document.createElement('label'); rmLabel.textContent=' ';\n    const rmBtn = document.createElement('button'); rmBtn.className='btn btn-danger'; rmBtn.type='button'; rmBtn.textContent='\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438';\n    rmWrap.appendChild(rmLabel); rmWrap.appendChild(rmBtn);\n\n    row.appendChild(azWrap); row.appendChild(tiltWrap); row.appendChild(kwWrap); row.appendChild(rmWrap);\n    fieldsEl.appendChild(row);\n\n    rmBtn.addEventListener('click', ()=> row.remove());\n\n    return {\n      get aspect(){ return parseFloat(azInput.value||0); },\n      get tilt(){ return parseFloat(tiltInput.value||0); },\n      get kw(){ return parseFloat(kwInput.value||0); }\n    };\n  }\n\n  const controllers=[];\n  function addField(preset){ controllers.push(createFieldRow(preset)); }\n  addField({aspect:0, tilt:30, kw:10});\n  addField({aspect:-90, tilt:15, kw:5});\n  addBtn.addEventListener('click', ()=> addField({aspect:0, tilt:30, kw:5}));\n\n  async function geocode(address){\n    const url = `https:\/\/nominatim.openstreetmap.org\/search?format=json&limit=1&q=${encodeURIComponent(address)}`;\n    const res = await fetch(url, { headers:{'Accept':'application\/json'} });\n    if(!res.ok) throw new Error('\u041f\u043e\u043c\u0438\u043b\u043a\u0430 \u0433\u0435\u043e\u043a\u043e\u0434\u0443\u0432\u0430\u043d\u043d\u044f');\n    const data = await res.json();\n    if(!data.length) throw new Error('\u0410\u0434\u0440\u0435\u0441\u0443 \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e');\n    return { lat:+data[0].lat, lon:+data[0].lon, disp:data[0].display_name };\n  }\n\n  async function pvgisCalc({lat, lon, peakpower, angle, aspect, losses}){\n    const params = new URLSearchParams({ lat, lon, peakpower, angle, aspect, loss: losses, outputformat:'json' });\n    const url = `${ajaxurl}?action=pvgis_proxy&${params.toString()}`;\n    const res = await fetch(url);\n    if(!res.ok) throw new Error('\u041f\u043e\u043c\u0438\u043b\u043a\u0430 PVGIS');\n    const json = await res.json();\n    const Ey = json?.outputs?.totals?.fixed?.E_y;\n    if(typeof Ey !== 'number') throw new Error('\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u0438 \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u044c PVGIS');\n    return { kwh: Ey };\n  }\n\n  const fmt =(n)=> new Intl.NumberFormat('uk-UA',{maximumFractionDigits:0}).format(n);\n  const fmt1=(n)=> new Intl.NumberFormat('uk-UA',{maximumFractionDigits:1}).format(n);\n\n  document.getElementById('sc-calc').addEventListener('click', async ()=>{\n    resultsEl.innerHTML = '<span class=\"muted\">\u0412\u0438\u043a\u043e\u043d\u0443\u0454\u043c\u043e \u0440\u043e\u0437\u0440\u0430\u0445\u0443\u043d\u043e\u043a\u2026<\/span>';\n    totalLine.textContent = '\u041f\u0456\u0434\u0441\u0443\u043c\u043e\u043a: \u2014';\n    statusEl.innerHTML = '<span class=\"spinner\"><\/span> \u0417\u0430\u043f\u0438\u0442 \u0434\u043e \u0441\u0435\u0440\u0432\u0456\u0441\u0456\u0432\u2026';\n\n    try{\n      const address = addressEl.value.trim();\n      if(!address) throw new Error('\u0412\u043a\u0430\u0436\u0456\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u0443 \/ \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0439 \u043f\u0443\u043d\u043a\u0442');\n      const losses = Math.min(40, Math.max(0, parseFloat(lossesEl.value||14)));\n      const geo = await geocode(address);\n      geoEl.textContent = `\u0422\u043e\u0447\u043a\u0430 \u0440\u043e\u0437\u0440\u0430\u0445\u0443\u043d\u043a\u0443: ${geo.disp} (${geo.lat.toFixed(4)}, ${geo.lon.toFixed(4)})`;\n\n      const snaps = Array.from(fieldsEl.children).map((_,i)=>controllers[i]).filter(Boolean)\n        .map(c=>({aspect:c.aspect, angle:c.tilt, kw:c.kw}));\n\n      let total = 0; const details = [];\n      for(const [i,f] of snaps.entries()){\n        if(!isFinite(f.kw) || f.kw<=0) continue;\n        const r = await pvgisCalc({lat:geo.lat, lon:geo.lon, peakpower:f.kw, angle:f.angle, aspect:f.aspect, losses});\n        total += r.kwh; details.push({idx:i+1, ...f, kwh:r.kwh});\n      }\n      if(!details.length) throw new Error('\u041d\u0435 \u0432\u043a\u0430\u0437\u0430\u043d\u0430 \u043f\u043e\u0442\u0443\u0436\u043d\u0456\u0441\u0442\u044c \u043d\u0456 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f');\n\n      const list = details.map(d=>`\n        <div style=\"display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center;padding:10px 0;border-bottom:1px dashed var(--border)\">\n          <div>\n            <div class=\"small muted\">\u041f\u043e\u043b\u0435 #${d.idx}<\/div>\n            <div>\u0410\u0437\u0438\u043c\u0443\u0442: <span class=\"mono\">${d.aspect}\u00b0<\/span> \u00b7 \u041a\u0443\u0442: <span class=\"mono\">${d.angle}\u00b0<\/span> \u00b7 \u041f\u043e\u0442\u0443\u0436\u043d\u0456\u0441\u0442\u044c: <span class=\"mono\">${fmt1(d.kw)} \u043a\u0412\u0442<\/span><\/div>\n          <\/div>\n          <div style=\"text-align:right;font-weight:800\" class=\"mono\">${fmt(d.kwh)} \u043a\u0412\u0442\u00b7\u0433\u043e\u0434\/\u0440\u0456\u043a<\/div>\n        <\/div>`).join('');\n\n      resultsEl.innerHTML = list + `\n        <div style=\"display:flex;justify-content:space-between;padding-top:12px\">\n          <div class=\"muted\">\u0421\u0443\u043c\u0430 \u043f\u043e \u0432\u0441\u0456\u0445 \u043f\u043e\u043b\u044f\u0445<\/div>\n          <div class=\"mono\" style=\"font-weight:900;font-size:20px\">${fmt(total)} \u043a\u0412\u0442\u00b7\u0433\u043e\u0434\/\u0440\u0456\u043a<\/div>\n        <\/div>`;\n\n      totalLine.innerHTML = `\u041f\u0456\u0434\u0441\u0443\u043c\u043e\u043a: <span class=\"mono\">${fmt(total)} \u043a\u0412\u0442\u00b7\u0433\u043e\u0434\/\u0440\u0456\u043a<\/span>`;\n      statusEl.textContent = '\u0413\u043e\u0442\u043e\u0432\u043e';\n    } catch(err){\n      console.error(err);\n      statusEl.textContent = '';\n      resultsEl.innerHTML = `<span style=\"color:#ef4444\">${err.message || '\u041f\u043e\u043c\u0438\u043b\u043a\u0430 \u0440\u043e\u0437\u0440\u0430\u0445\u0443\u043d\u043a\u0443'}<\/span>`;\n    }\n  });\n})();\n<\/script>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7230ab9 e-grid e-con-boxed e-con e-parent\" data-id=\"7230ab9\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0456\u044f \u0410\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u0456\u0441\u0442\u044c \u041e\u043a\u0443\u043f\u043d\u0456\u0441\u0442\u044c \u041f\u0435\u0440\u0435\u0440\u0456\u0437 \u043a\u0430\u0431\u0435\u043b\u044e<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-11224","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u041a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u0441\u043e\u043b\u043d\u0435\u0447\u043d\u043e\u0439 \u044d\u043d\u0435\u0440\u0433\u0438\u0438 - teplodom.net.ua<\/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:\/\/teplodom.net.ua\/kalkulyator-sonyachnoyi-energiyi\/\" \/>\n<meta property=\"og:locale\" content=\"ru_RU\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u041a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u0441\u043e\u043b\u043d\u0435\u0447\u043d\u043e\u0439 \u044d\u043d\u0435\u0440\u0433\u0438\u0438 - teplodom.net.ua\" \/>\n<meta property=\"og:description\" content=\"\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0456\u044f \u0410\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u0456\u0441\u0442\u044c \u041e\u043a\u0443\u043f\u043d\u0456\u0441\u0442\u044c \u041f\u0435\u0440\u0435\u0440\u0456\u0437 \u043a\u0430\u0431\u0435\u043b\u044e\" \/>\n<meta property=\"og:url\" content=\"https:\/\/teplodom.net.ua\/kalkulyator-sonyachnoyi-energiyi\/\" \/>\n<meta property=\"og:site_name\" content=\"teplodom.net.ua\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/teplodomnetua\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-14T21:43:01+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 \u043c\u0438\u043d\u0443\u0442\u044b\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/teplodom.net.ua\/kalkulyator-sonyachnoyi-energiyi\/\",\"url\":\"https:\/\/teplodom.net.ua\/kalkulyator-sonyachnoyi-energiyi\/\",\"name\":\"\u041a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u0441\u043e\u043b\u043d\u0435\u0447\u043d\u043e\u0439 \u044d\u043d\u0435\u0440\u0433\u0438\u0438 - teplodom.net.ua\",\"isPartOf\":{\"@id\":\"https:\/\/teplodom.net.ua\/#website\"},\"datePublished\":\"2025-10-11T18:18:48+00:00\",\"dateModified\":\"2026-02-14T21:43:01+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/teplodom.net.ua\/kalkulyator-sonyachnoyi-energiyi\/#breadcrumb\"},\"inLanguage\":\"ru-RU\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/teplodom.net.ua\/kalkulyator-sonyachnoyi-energiyi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/teplodom.net.ua\/kalkulyator-sonyachnoyi-energiyi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u0413\u043e\u043b\u043e\u0432\u043d\u0430\",\"item\":\"https:\/\/teplodom.net.ua\/ru\/glavnaya\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u041a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u0441\u043e\u043b\u043d\u0435\u0447\u043d\u043e\u0439 \u044d\u043d\u0435\u0440\u0433\u0438\u0438\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/teplodom.net.ua\/#website\",\"url\":\"https:\/\/teplodom.net.ua\/\",\"name\":\"teplodom.net.ua\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/teplodom.net.ua\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/teplodom.net.ua\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ru-RU\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/teplodom.net.ua\/#organization\",\"name\":\"teplodom.net.ua\",\"url\":\"https:\/\/teplodom.net.ua\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ru-RU\",\"@id\":\"https:\/\/teplodom.net.ua\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/teplodom.net.ua\/wp-content\/uploads\/2025\/08\/cropped-logotyp2.png\",\"contentUrl\":\"https:\/\/teplodom.net.ua\/wp-content\/uploads\/2025\/08\/cropped-logotyp2.png\",\"width\":1206,\"height\":514,\"caption\":\"teplodom.net.ua\"},\"image\":{\"@id\":\"https:\/\/teplodom.net.ua\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/teplodomnetua\/\",\"https:\/\/www.instagram.com\/teplodom.net.ua\/\",\"https:\/\/www.youtube.com\/@Teplodomnetua\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u041a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u0441\u043e\u043b\u043d\u0435\u0447\u043d\u043e\u0439 \u044d\u043d\u0435\u0440\u0433\u0438\u0438 - teplodom.net.ua","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:\/\/teplodom.net.ua\/kalkulyator-sonyachnoyi-energiyi\/","og_locale":"ru_RU","og_type":"article","og_title":"\u041a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u0441\u043e\u043b\u043d\u0435\u0447\u043d\u043e\u0439 \u044d\u043d\u0435\u0440\u0433\u0438\u0438 - teplodom.net.ua","og_description":"\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0456\u044f \u0410\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u0456\u0441\u0442\u044c \u041e\u043a\u0443\u043f\u043d\u0456\u0441\u0442\u044c \u041f\u0435\u0440\u0435\u0440\u0456\u0437 \u043a\u0430\u0431\u0435\u043b\u044e","og_url":"https:\/\/teplodom.net.ua\/kalkulyator-sonyachnoyi-energiyi\/","og_site_name":"teplodom.net.ua","article_publisher":"https:\/\/www.facebook.com\/teplodomnetua\/","article_modified_time":"2026-02-14T21:43:01+00:00","twitter_card":"summary_large_image","twitter_misc":{"\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f":"2 \u043c\u0438\u043d\u0443\u0442\u044b"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/teplodom.net.ua\/kalkulyator-sonyachnoyi-energiyi\/","url":"https:\/\/teplodom.net.ua\/kalkulyator-sonyachnoyi-energiyi\/","name":"\u041a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u0441\u043e\u043b\u043d\u0435\u0447\u043d\u043e\u0439 \u044d\u043d\u0435\u0440\u0433\u0438\u0438 - teplodom.net.ua","isPartOf":{"@id":"https:\/\/teplodom.net.ua\/#website"},"datePublished":"2025-10-11T18:18:48+00:00","dateModified":"2026-02-14T21:43:01+00:00","breadcrumb":{"@id":"https:\/\/teplodom.net.ua\/kalkulyator-sonyachnoyi-energiyi\/#breadcrumb"},"inLanguage":"ru-RU","potentialAction":[{"@type":"ReadAction","target":["https:\/\/teplodom.net.ua\/kalkulyator-sonyachnoyi-energiyi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/teplodom.net.ua\/kalkulyator-sonyachnoyi-energiyi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u0413\u043e\u043b\u043e\u0432\u043d\u0430","item":"https:\/\/teplodom.net.ua\/ru\/glavnaya\/"},{"@type":"ListItem","position":2,"name":"\u041a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u0441\u043e\u043b\u043d\u0435\u0447\u043d\u043e\u0439 \u044d\u043d\u0435\u0440\u0433\u0438\u0438"}]},{"@type":"WebSite","@id":"https:\/\/teplodom.net.ua\/#website","url":"https:\/\/teplodom.net.ua\/","name":"teplodom.net.ua","description":"","publisher":{"@id":"https:\/\/teplodom.net.ua\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/teplodom.net.ua\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ru-RU"},{"@type":"Organization","@id":"https:\/\/teplodom.net.ua\/#organization","name":"teplodom.net.ua","url":"https:\/\/teplodom.net.ua\/","logo":{"@type":"ImageObject","inLanguage":"ru-RU","@id":"https:\/\/teplodom.net.ua\/#\/schema\/logo\/image\/","url":"https:\/\/teplodom.net.ua\/wp-content\/uploads\/2025\/08\/cropped-logotyp2.png","contentUrl":"https:\/\/teplodom.net.ua\/wp-content\/uploads\/2025\/08\/cropped-logotyp2.png","width":1206,"height":514,"caption":"teplodom.net.ua"},"image":{"@id":"https:\/\/teplodom.net.ua\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/teplodomnetua\/","https:\/\/www.instagram.com\/teplodom.net.ua\/","https:\/\/www.youtube.com\/@Teplodomnetua"]}]}},"_links":{"self":[{"href":"https:\/\/teplodom.net.ua\/ru\/wp-json\/wp\/v2\/pages\/11224","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/teplodom.net.ua\/ru\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/teplodom.net.ua\/ru\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/teplodom.net.ua\/ru\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/teplodom.net.ua\/ru\/wp-json\/wp\/v2\/comments?post=11224"}],"version-history":[{"count":4,"href":"https:\/\/teplodom.net.ua\/ru\/wp-json\/wp\/v2\/pages\/11224\/revisions"}],"predecessor-version":[{"id":13403,"href":"https:\/\/teplodom.net.ua\/ru\/wp-json\/wp\/v2\/pages\/11224\/revisions\/13403"}],"wp:attachment":[{"href":"https:\/\/teplodom.net.ua\/ru\/wp-json\/wp\/v2\/media?parent=11224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}