[{"data":1,"prerenderedAt":395},["ShallowReactive",2],{"example-optimal-tilt-en":3,"faq-optimal-tilt-en":229,"sources-optimal-tilt-en":257,"location-compare-52.52,13.405":263,"city-tilt-table":314},{"input":4,"output":9},{"location":5,"azimuthDeg":6,"tiltDeg":7,"tolerancePercent":8},"52.52,13.405",0,30,2,{"table":10,"bestAnnualTiltDeg":58,"bestAnnualKwhM2":59,"refinedAnnualTiltDeg":122,"bestWinterTiltDeg":93,"bestSummerTiltDeg":41,"toleranceBandDeg":123,"flatPenaltyPercent":126,"currentAnnualKwhM2":47,"currentPenaltyPercent":127,"monthlyPshAtBest":128,"monthlyPshAtCurrent":141,"horizonApplied":154,"calibrationFactorAnnual":155,"azimuthDeg":6,"schedules":156,"steps":197,"warnings":222},[11,16,22,28,34,40,46,51,57,62,68,74,80,86,92,98,104,110,116],{"tiltDeg":6,"annualKwhM2":12,"winterAveragePsh":13,"summerAveragePsh":14,"relativeToBestPercent":15},1075.3286816527868,0.8203917051955196,5.1327737885416065,-18.036329996583646,{"tiltDeg":17,"annualKwhM2":18,"winterAveragePsh":19,"summerAveragePsh":20,"relativeToBestPercent":21},5,1128.7159692814541,0.9305774285105454,5.2588760193808755,-13.967045785873388,{"tiltDeg":23,"annualKwhM2":24,"winterAveragePsh":25,"summerAveragePsh":26,"relativeToBestPercent":27},10,1175.75382609304,1.0358732302203526,5.355440329346105,-10.381727697410415,{"tiltDeg":29,"annualKwhM2":30,"winterAveragePsh":31,"summerAveragePsh":32,"relativeToBestPercent":33},15,1216.1211455931252,1.1354777456945868,5.4218704346668405,-7.3048511006269745,{"tiltDeg":35,"annualKwhM2":36,"winterAveragePsh":37,"summerAveragePsh":38,"relativeToBestPercent":39},20,1249.6523298463956,1.228632924427638,5.4586741728971395,-4.749038196302147,{"tiltDeg":41,"annualKwhM2":42,"winterAveragePsh":43,"summerAveragePsh":44,"relativeToBestPercent":45},25,1276.4379259569907,1.3146297992607137,5.469318727027748,-2.7073873058235165,{"tiltDeg":7,"annualKwhM2":47,"winterAveragePsh":48,"summerAveragePsh":49,"relativeToBestPercent":50},1295.9684378240224,1.3928138820499996,5.450902858358204,-1.2187332254666505,{"tiltDeg":52,"annualKwhM2":53,"winterAveragePsh":54,"summerAveragePsh":55,"relativeToBestPercent":56},35,1307.8384210526315,1.4625901447166303,5.4010997924919835,-0.3139797255410026,{"tiltDeg":58,"annualKwhM2":59,"winterAveragePsh":60,"summerAveragePsh":61,"relativeToBestPercent":6},40,1311.9577022453554,1.5234275477696553,5.320288560832233,{"tiltDeg":63,"annualKwhM2":64,"winterAveragePsh":65,"summerAveragePsh":66,"relativeToBestPercent":67},45,1308.2953638533868,1.574863081837209,5.209084185647051,-0.27915064530668054,{"tiltDeg":69,"annualKwhM2":70,"winterAveragePsh":71,"summerAveragePsh":72,"relativeToBestPercent":73},50,1297.1807873266682,1.6165052914474156,5.068859632689369,-1.1263255586210774,{"tiltDeg":75,"annualKwhM2":76,"winterAveragePsh":77,"summerAveragePsh":78,"relativeToBestPercent":79},55,1279.0829117558878,1.6480372542408874,4.907020561191964,-2.505781278863173,{"tiltDeg":81,"annualKwhM2":82,"winterAveragePsh":83,"summerAveragePsh":84,"relativeToBestPercent":85},60,1254.1583181153512,1.6692189929412447,4.724759397292927,-4.405582895781112,{"tiltDeg":87,"annualKwhM2":88,"winterAveragePsh":89,"summerAveragePsh":90,"relativeToBestPercent":91},65,1222.2047216667322,1.6798893017270966,4.517158149849016,-6.841148950535148,{"tiltDeg":93,"annualKwhM2":94,"winterAveragePsh":95,"summerAveragePsh":96,"relativeToBestPercent":97},70,1183.1568686688724,1.6799669731056728,4.285276066250651,-9.817453211795346,{"tiltDeg":99,"annualKwhM2":100,"winterAveragePsh":101,"summerAveragePsh":102,"relativeToBestPercent":103},75,1137.3084466527366,1.6694514159508829,4.030877909168246,-13.312110237526309,{"tiltDeg":105,"annualKwhM2":106,"winterAveragePsh":107,"summerAveragePsh":108,"relativeToBestPercent":109},80,1085.0082613478812,1.6484226600021419,3.755899802187003,-17.29853336803928,{"tiltDeg":111,"annualKwhM2":112,"winterAveragePsh":113,"summerAveragePsh":114,"relativeToBestPercent":115},85,1027.0852411628634,1.6170407467897299,3.466347374369615,-21.713540047437952,{"tiltDeg":117,"annualKwhM2":118,"winterAveragePsh":119,"summerAveragePsh":120,"relativeToBestPercent":121},90,964.8032919732442,1.575544511622111,3.172132331873005,-26.460792880591534,40.14680195934217,[124,125],27.37592908640651,53.16673608495961,18.036329996583646,1.2187332254666505,[129,130,131,132,133,134,135,136,137,138,139,140],1.1908385502048906,2.2892602725338596,3.5062708143067427,4.9886520023754315,5.300363149621659,5.593335530529358,5.325283400186561,5.0422467517807785,4.369111165983722,2.8213726606643657,1.5584040026786805,1.0901838205702157,[142,143,144,145,146,147,148,149,150,151,152,153],1.1045822009630217,2.1030322535714285,3.343934878477453,4.9145326686342345,5.447799099314428,5.812524125272209,5.479220156502824,5.060964293299579,4.213268160310013,2.6530958426069757,1.4333550850451415,0.9708271916155486,true,0.9207306061936339,{"monthlyBestTiltDeg":157,"monthly":158,"twoSeason":183,"fourSeason":189},[87,87,75,58,41,29,41,52,69,81,87,99],{"annualKwhM2":159,"gainPercent":160,"blocks":161},1360.548990036252,3.703723657228797,[162,164,165,167,169,170,172,174,176,178,179,181],{"fromMonth":163,"tiltDeg":87},1,{"fromMonth":8,"tiltDeg":87},{"fromMonth":166,"tiltDeg":75},3,{"fromMonth":168,"tiltDeg":58},4,{"fromMonth":17,"tiltDeg":41},{"fromMonth":171,"tiltDeg":29},6,{"fromMonth":173,"tiltDeg":41},7,{"fromMonth":175,"tiltDeg":52},8,{"fromMonth":177,"tiltDeg":69},9,{"fromMonth":23,"tiltDeg":81},{"fromMonth":180,"tiltDeg":87},11,{"fromMonth":182,"tiltDeg":99},12,{"annualKwhM2":184,"gainPercent":185,"blocks":186},1349.16248770415,2.8358220234631304,[187,188],{"fromMonth":17,"tiltDeg":41},{"fromMonth":177,"tiltDeg":75},{"annualKwhM2":190,"gainPercent":191,"blocks":192},1355.834978368284,3.3444124035275413,[193,194,195,196],{"fromMonth":168,"tiltDeg":58},{"fromMonth":17,"tiltDeg":35},{"fromMonth":175,"tiltDeg":52},{"fromMonth":177,"tiltDeg":81},[198,204,207,211,215,219],{"label":199,"expression":200,"value":201,"unit":202,"provenance":203},"tiltSweep","Σ_8760h Perez-POA × 19 tilts, az 0°",1424.9094071816319,"kWh\u002Fm2","measured",{"label":205,"expression":206,"value":59,"unit":202,"provenance":203},"climateCalibration","POA × mean(2005–2023)\u002FTMY @ 35° S (× 0.921)",{"label":208,"expression":209,"value":58,"unit":210,"provenance":203},"bestAnnualAnchor","argmax_beta H_a(beta)","deg",{"label":212,"expression":213,"value":122,"unit":210,"provenance":214},"parabolicRefinement","parabola vertex, top-3 sweep points","assumed",{"label":216,"expression":217,"value":218,"unit":210,"provenance":203},"toleranceBand","H_a(beta) >= (1 - 2 %) * H_a,max",25.790806998553098,{"label":220,"expression":221,"value":184,"unit":202,"provenance":203},"adjustmentSchedules","argmax partition(19×12) — 2 tilts +2.8 %, 12 tilts +3.7 %",[223],{"level":224,"code":225,"params":226,"anchors":227},"info","TILT_TOLERANCE_WIDE",{},[228],"tolerancePercent",[230,233,236,239,242,245,248,251,254],{"q":231,"a":232},"What is the best tilt angle for solar panels?","For south-facing panels in the DACH region the annual optimum is around 35–40° depending on the location. More important than the exact number is the shape of the curve: it is flat around the optimum — ±10° usually stays within 2% of annual yield. That is why this calculator shows not just the best angle but the whole tolerance band for your location and azimuth.",{"q":234,"a":235},"Does the optimum also apply to east- or west-facing roofs?","No — and that is exactly what this calculator computes hour by hour. The further the surface turns away from south, the flatter the optimum: an east-facing roof in Berlin peaks at roughly 5–20° instead of 40°, because steep east surfaces lose the afternoon sun. The azimuth is freely adjustable (0 = south, −90 = east, +90 = west) and the sweep is computed for exactly that orientation — validated against the PVGIS hourly calculation to about 1%.",{"q":237,"a":238},"Why do the annual, winter and summer optima differ?","Because the sun sits low in winter and high in summer. The winter optimum in central Europe is a steep 60–70° — relevant for off-grid systems sized by the worst month. The summer optimum is a flat 20–25° (seasonal use, gardens, camping). The annual optimum is the compromise in between. Which angle is “right” depends on the goal, not on a rule of thumb.",{"q":240,"a":241},"How accurate is the computed optimum?","The calculator simulates every tilt from 0–90° hour by hour through the typical meteorological year (TMY) of your grid point, calibrated to the 2005–2023 multi-year mean, with terrain horizon. Cross-validated against PVGIS’s own optimal-angle search: deviation below 2.5°, annual total at the optimum below 1%. And because the curve is flat, even that residual uncertainty costs practically no yield. For comparison: almost every other calculator uses latitude rules of thumb (e.g. latitude × 0.76 + 3.1°, or latitude minus 15°). Those come from clear-sky maths — in Central Europe the high diffuse share pushes the real optimum well below them. This calculator computes your actual weather, not your latitude.",{"q":243,"a":244},"My roof has a fixed pitch — is a tilt-up frame worth it?","Usually not. Enter your roof pitch: the calculator quantifies the loss versus the optimum, and for common roofs (25–50°) it is almost always below 2%. A tilt-up frame costs money, adds wind load and often needs permits — one percent of extra yield rarely pays for that. The cost of the frame itself is explicitly not modelled here.",{"q":246,"a":247},"Is it worth adjusting the tilt through the year?","Usually less than US rules of thumb promise — and this calculator computes it for your location. Example Berlin: switching twice a year (around May to ~25°, September to ~55°) yields about 3% more than staying fixed at the optimum; adjusting monthly by hand almost 4%. Popular calculators promise 5–15% — that holds for sunny climates; in cloudy central Europe diffuse light dominates, and diffuse light barely cares about tilt. The planner shows the optimal angles, switch months and the honest gain — relevant for adjustable ground mounts and campers, not for fixed roofs.",{"q":249,"a":250},"What angle for a flat roof?","On a flat roof the angle competes with area: a 30° tilt-up needs considerably more roof area per kWp because of row spacing — total roof yield is often higher with a flatter 10–15° layout and more modules. Also, below roughly 10–12° rain no longer cleans the modules reliably. Practical rule: mount at 10–15°, check spacing with the row-spacing calculator — and the tolerance band above shows how little the last degrees cost.",{"q":252,"a":253},"What about vertical panels — balcony railings, walls, fences?","Vertical mounting (90°) costs about a third of the yield over the year at a south-facing site compared to the optimum — but has an underrated winter advantage: the low winter sun hits steep modules favourably, and snow does not settle. If you can tilt a railing panel out by 20–30°, you recover a large part of the loss. The balcony solar calculator computes the exact numbers for your site; the peak sun hours calculator shows the monthly curve at 90°.",{"q":255,"a":256},"Does this calculator work outside Germany, Austria and Switzerland?","Not yet. The hourly grid currently covers the DACH region (1,155 grid points at 0.25°). For other regions the official tools are the best choice: PVGIS by the European Commission (worldwide except polar regions) with its \"optimize slope\" option, or NREL PVWatts for the United States. A US grid built on NSRDB hourly data is in preparation — with the same tolerance-band and seasonal analysis as here.",[258],{"name":259,"url":260,"retrievedAt":261,"version":262},"JRC Photovoltaic Geographical Information System (PVGIS), European Commission — endpoints tmy, MRcalc, printhorizon","https:\u002F\u002Fre.jrc.ec.europa.eu\u002Fpvg_tools\u002F","2026-07-30","PVGIS API v5_3, solar radiation database PVGIS-SARAH3",[264,269,275,280,286,291,297,303,309],{"name":265,"slug":266,"distanceKm":163,"annualPsh":267,"p90KwhM2":268,"bestTiltDeg":58},"Berlin","de-berlin",3.5831189617880312,1207.886,{"name":270,"slug":271,"distanceKm":272,"annualPsh":273,"p90KwhM2":274,"bestTiltDeg":58},"Oranienburg","de-oranienburg",19,3.503000720980533,1193.894,{"name":276,"slug":277,"distanceKm":35,"annualPsh":278,"p90KwhM2":279,"bestTiltDeg":52},"Blankenfelde-Mahlow","de-blankenfelde-mahlow",3.5798803172314346,1197.9479999999999,{"name":281,"slug":282,"distanceKm":283,"annualPsh":284,"p90KwhM2":285,"bestTiltDeg":58},"Potsdam","de-potsdam",22,3.5934405191059837,1215.032,{"name":287,"slug":288,"distanceKm":283,"annualPsh":289,"p90KwhM2":290,"bestTiltDeg":52},"Bernau","de-bernau",3.520992069214132,1209.374,{"name":292,"slug":293,"distanceKm":294,"annualPsh":295,"p90KwhM2":296,"bestTiltDeg":58},"Ludwigsfelde","de-ludwigsfelde",26,3.642096611391492,1218.8539999999998,{"name":298,"slug":299,"distanceKm":300,"annualPsh":301,"p90KwhM2":302,"bestTiltDeg":58},"Königs Wusterhausen","de-koenigs-wusterhausen",29,3.569196827685653,1203.042,{"name":304,"slug":305,"distanceKm":306,"annualPsh":307,"p90KwhM2":308,"bestTiltDeg":58},"Strausberg","de-strausberg",33,3.62602451333814,1231.65,{"name":310,"slug":311,"distanceKm":63,"annualPsh":312,"p90KwhM2":313,"bestTiltDeg":58},"Eberswalde","de-eberswalde",3.5717015140591206,1227.4499999999998,[315,319,324,329,333,338,342,346,350,354,358,364,368,372,378,383,387,391],{"name":265,"slug":266,"country":316,"bestAnnualDeg":58,"bandLowDeg":317,"bandHighDeg":318,"bestWinterDeg":93,"bestSummerDeg":41,"flatPenaltyPercent":126},"DE",27,53,{"name":320,"slug":321,"country":316,"bestAnnualDeg":58,"bandLowDeg":41,"bandHighDeg":322,"bestWinterDeg":87,"bestSummerDeg":41,"flatPenaltyPercent":323},"Hamburg","de-hamburg",52,16.19555848638616,{"name":325,"slug":326,"country":316,"bestAnnualDeg":58,"bandLowDeg":41,"bandHighDeg":327,"bestWinterDeg":87,"bestSummerDeg":35,"flatPenaltyPercent":328},"München","de-muenchen",51,16.112170277851902,{"name":330,"slug":331,"country":316,"bestAnnualDeg":58,"bandLowDeg":41,"bandHighDeg":322,"bestWinterDeg":87,"bestSummerDeg":35,"flatPenaltyPercent":332},"Köln","de-koeln",15.8139001261701,{"name":334,"slug":335,"country":316,"bestAnnualDeg":52,"bandLowDeg":336,"bandHighDeg":327,"bestWinterDeg":81,"bestSummerDeg":35,"flatPenaltyPercent":337},"Frankfurt am Main","de-frankfurt-am-main",24,15.084317469808417,{"name":339,"slug":340,"country":316,"bestAnnualDeg":58,"bandLowDeg":41,"bandHighDeg":322,"bestWinterDeg":87,"bestSummerDeg":35,"flatPenaltyPercent":341},"Düsseldorf","de-duesseldorf",15.836746629474085,{"name":343,"slug":344,"country":316,"bestAnnualDeg":52,"bandLowDeg":336,"bandHighDeg":69,"bestWinterDeg":87,"bestSummerDeg":35,"flatPenaltyPercent":345},"Stuttgart","de-stuttgart",15.046321729831714,{"name":347,"slug":348,"country":316,"bestAnnualDeg":52,"bandLowDeg":336,"bandHighDeg":327,"bestWinterDeg":87,"bestSummerDeg":35,"flatPenaltyPercent":349},"Essen","de-essen",14.658447819248966,{"name":351,"slug":352,"country":316,"bestAnnualDeg":58,"bandLowDeg":336,"bandHighDeg":322,"bestWinterDeg":87,"bestSummerDeg":35,"flatPenaltyPercent":353},"Dortmund","de-dortmund",15.1277721276465,{"name":355,"slug":356,"country":316,"bestAnnualDeg":58,"bandLowDeg":294,"bandHighDeg":322,"bestWinterDeg":87,"bestSummerDeg":35,"flatPenaltyPercent":357},"Dresden","de-dresden",17.014746269678504,{"name":359,"slug":360,"country":361,"bestAnnualDeg":52,"bandLowDeg":283,"bandHighDeg":362,"bestWinterDeg":75,"bestSummerDeg":35,"flatPenaltyPercent":363},"Wien","at-wien","AT",48,13.231463348233518,{"name":365,"slug":366,"country":361,"bestAnnualDeg":58,"bandLowDeg":41,"bandHighDeg":327,"bestWinterDeg":87,"bestSummerDeg":35,"flatPenaltyPercent":367},"Graz","at-graz",16.812661432568298,{"name":369,"slug":370,"country":361,"bestAnnualDeg":52,"bandLowDeg":336,"bandHighDeg":327,"bestWinterDeg":87,"bestSummerDeg":35,"flatPenaltyPercent":371},"Linz","at-linz",15.698299619945534,{"name":373,"slug":374,"country":361,"bestAnnualDeg":52,"bandLowDeg":375,"bandHighDeg":376,"bestWinterDeg":75,"bestSummerDeg":35,"flatPenaltyPercent":377},"Salzburg","at-salzburg",23,49,14.161030263652641,{"name":379,"slug":380,"country":381,"bestAnnualDeg":58,"bandLowDeg":41,"bandHighDeg":327,"bestWinterDeg":87,"bestSummerDeg":35,"flatPenaltyPercent":382},"Zürich","ch-zuerich","CH",16.135340149195976,{"name":384,"slug":385,"country":381,"bestAnnualDeg":58,"bandLowDeg":41,"bandHighDeg":327,"bestWinterDeg":87,"bestSummerDeg":35,"flatPenaltyPercent":386},"Genf","ch-genf",16.613297881683962,{"name":388,"slug":389,"country":381,"bestAnnualDeg":52,"bandLowDeg":375,"bandHighDeg":69,"bestWinterDeg":81,"bestSummerDeg":35,"flatPenaltyPercent":390},"Basel","ch-basel",14.676258148047284,{"name":392,"slug":393,"country":381,"bestAnnualDeg":58,"bandLowDeg":294,"bandHighDeg":327,"bestWinterDeg":87,"bestSummerDeg":35,"flatPenaltyPercent":394},"Lausanne","ch-lausanne",17.327186571392183,1786101727474]