Spring til indhold

Tag og solceller pr. BFE

Hver tagflade målt i højdemodellen, med skygge måned for måned, paneler der kan ligge der, produktion og tre anlæg med økonomi.

GET/v1/dhm/tag/{bfe}/sol

Bygger på samme tagfit som /v1/dhm/bygninger: RANSAC-planer i overflademodellen (0,4 m) inden for GeoDanmark-omridset. Hver celle gives til den flade, der forklarer den, så hver flade får sit sande areal (planareal ÷ cos hældning), sin retning, tagfod, top og spær. Celler, ingen flade forklarer — skorsten, kviste, træ over taget — står i uden_flade_m2 og får ingen paneler.

Skyggen er målt, ikke antaget: fra op til fem punkter på fladen marcheres der stråler gennem overflademodellen ud til 100 m i 72 retninger, og horisonten blokerer den direkte sol time for time i et typisk år fra PVGIS. Ydelsen pr. kWp kommer fra PVGIS (EU JRC) for fladens hældning og retning og ganges med månedens skyggefaktor.

Panelerne pakkes i fladens eget plan med fast panel (1,762 × 1,134 m, 440 Wp) og 0,30 m fri kant. Tre anlæg: maks (alle paneler på flader over 650 kWh/kWp), foreslaaet (bedste flade først, til produktionen dækker forbruget) og lille (halvdelen). Økonomien bruger Energinets day-ahead-priser for prisområdet, vægtet med hvornår solen skinner på adressen.

En tagform, højdemodellen ikke kan navngive, får beregnet: false og en aarsag — vi gætter aldrig et tag ud fra årstal eller materiale. Alle antagelser står i forudsaetninger, og de økonomiske kan overskrives på forespørgslen.

Et overslag fra luften — ikke en besigtigelse og ikke et tilbud. Højdemodellen er fløjet én gang, så løvtræers vinterskygge er sat for højt; taget, spærene og tilladelserne skal stadig ses af en fagperson. Lokalplanens ord om solceller står i /v1/plan/ejendom/:bfe/citater.

Godkendelse · API-nøgle

Send din nøgle som Authorization: Bearer gf_live_… — eller gf_test_… for gratis sandbox-kald. Se Godkendelse og nøgler.

Afregning

Ét kald — også selvom svaret samler DHM, GeoDanmark, BBR, PVGIS og Energi Data Service.

Eksempel

curl "https://api.grundfast.dk/v1/dhm/tag/5651067/sol?forbrug_kwh=5500" \
  -H "Authorization: Bearer $GRUNDFAST_API_KEY"
Svar · eksempel, forkortet200
{
  "bfe_nummer": 4045894,
  "prisomraade": "DK1",
  "antal": 1,
  "bygninger": [
    {
      "bbr_uuid": "0a3f5097-5b4e-42b8-9e44-0003ba298018",
      "bbr": {
        "anvendelse": "Fritliggende enfamiliehus",
        "opfoerelsesaar": 1974,
        "tagdaekning": "Tegl",
        "bebygget_areal_m2": 140
      },
      "tagform": "saddeltag",
      "konfidens": 0.78,
      "haeldning_grader": 37.5,
      "terraen_m": 40,
      "beregnet": true,
      "aarsag": null,
      "tag_aarsag": null,
      "fodaftryk_m2": 140,
      "uden_flade_m2": 0,
      "tagmaal": {
        "tagfod_m": 28.8,
        "rygning_m": 14.4,
        "spaer_m": 6.6,
        "tagflade_m2": 185,
        "tagflade_inkl_udhaeng_m2": 201.9
      },
      "flader": [
        {
          "nr": 1,
          "haeldning_grader": 37.1,
          "aspekt_grader": 180,
          "retning": "S",
          "areal_m2": 93.8,
          "areal_vandret_m2": 74.9,
          "tagfod_m": 14.4,
          "top_m": 14.4,
          "spaer_m": 6.6,
          "skygge": {
            "aar_pct": 4.4,
            "maaned_pct": [
              22,
              17.6,
              2.2,
              1.3,
              1.4,
              1.4,
              1.6,
              1.5,
              1.7,
              12.4,
              28.1,
              19.2
            ],
            "horisont_grader": [
              37.4,
              37.4,
              37.4,
              29.5,
              29.5,
              26.1,
              24.2,
              18.6,
              11.6,
              4.1,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              19.1,
              25.5,
              24.1,
              21.8,
              19.1,
              0,
              0,
              0,
              0,
              7.4,
              13.9,
              20.5,
              26.1,
              29.5,
              29.5,
              36.9,
              37.4
            ]
          },
          "kwh_pr_kwp": 902,
          "kwh_pr_kwp_uden_skygge": 943,
          "maaned_kwh_pr_kwp": [
            17.2,
            31.4,
            82.7,
            117.2,
            129.6,
            129.1,
            122.1,
            107.7,
            84.8,
            48.5,
            19.1,
            12.6
          ],
          "paneler": {
            "antal": 35,
            "retning": "liggende",
            "kwp": 15.4,
            "kwh_aar": 13894,
            "placering": [
              [
                [
                  9.1733889,
                  56.4111018,
                  2.92
                ],
                [
                  9.1733604,
                  56.4111018,
                  2.92
                ],
                [
                  9.1733604,
                  56.4111099,
                  3.6
                ],
                [
                  9.173389,
                  56.4111099,
                  3.6
                ]
              ]
            ]
          }
        },
        {
          "nr": 2,
          "haeldning_grader": 38,
          "aspekt_grader": 0,
          "retning": "N",
          "areal_m2": 91.2,
          "areal_vandret_m2": 71.8,
          "tagfod_m": 14.4,
          "top_m": 14.4,
          "spaer_m": 6.6,
          "skygge": {
            "aar_pct": 0,
            "maaned_pct": [
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0
            ],
            "horisont_grader": [
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              7.1,
              13.7,
              20.2,
              25.6,
              29.2,
              29.2,
              36.3,
              37,
              37,
              37,
              37,
              29.2,
              29.2,
              25.6,
              24,
              17.9,
              11.3,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0,
              0
            ]
          },
          "kwh_pr_kwp": 443,
          "kwh_pr_kwp_uden_skygge": 443,
          "maaned_kwh_pr_kwp": [
            4.9,
            10.8,
            24.1,
            42.3,
            77,
            90.9,
            83.4,
            55.6,
            29.4,
            15.6,
            6,
            3.1
          ],
          "paneler": {
            "antal": 31,
            "retning": "liggende",
            "kwp": 13.6,
            "kwh_aar": 6043,
            "placering": [
              [
                [
                  9.1731687,
                  56.4111898,
                  2.89
                ],
                [
                  9.1731973,
                  56.4111897,
                  2.89
                ],
                [
                  9.1731972,
                  56.4111817,
                  3.59
                ],
                [
                  9.1731687,
                  56.4111818,
                  3.59
                ]
              ]
            ]
          }
        }
      ],
      "anlaeg": {
        "lille": {
          "paneler": 6,
          "kwp": 2.6,
          "kwh_aar": 2382,
          "maaned_kwh": [
            46,
            83,
            218,
            309,
            342,
            341,
            322,
            284,
            224,
            128,
            50,
            33
          ],
          "fordeling": [
            {
              "flade": 1,
              "paneler": 6
            }
          ],
          "oekonomi": {
            "pris_kr": 34400,
            "egetforbrug_andel": 0.48,
            "egetforbrug_kwh": 1146,
            "salg_kwh": 1236,
            "vaerdi_aar1_kr": 2249,
            "tilbagebetaling_aar": 15.9
          }
        },
        "foreslaaet": {
          "paneler": 12,
          "kwp": 5.3,
          "kwh_aar": 4764,
          "maaned_kwh": [
            91,
            166,
            437,
            619,
            685,
            682,
            645,
            569,
            448,
            256,
            101,
            67
          ],
          "fordeling": [
            {
              "flade": 1,
              "paneler": 12
            }
          ],
          "oekonomi": {
            "pris_kr": 56900,
            "egetforbrug_andel": 0.34,
            "egetforbrug_kwh": 1620,
            "salg_kwh": 3143,
            "vaerdi_aar1_kr": 3892,
            "tilbagebetaling_aar": 15.1
          }
        },
        "maks": {
          "paneler": 35,
          "kwp": 15.4,
          "kwh_aar": 13894,
          "maaned_kwh": [
            266,
            484,
            1274,
            1805,
            1997,
            1988,
            1880,
            1658,
            1306,
            748,
            294,
            194
          ],
          "fordeling": [
            {
              "flade": 1,
              "paneler": 35
            }
          ],
          "oekonomi": {
            "pris_kr": 142900,
            "egetforbrug_andel": 0.2,
            "egetforbrug_kwh": 2767,
            "salg_kwh": 11126,
            "vaerdi_aar1_kr": 9583,
            "tilbagebetaling_aar": 15.5
          }
        }
      },
      "anlaeg_aarsag": null
    }
  ],
  "elpris": {
    "prisomraade": "DK1",
    "fra": "2025-10-05",
    "til": "2026-10-05",
    "gennemsnit_kr_kwh": 0.77,
    "solvaegtet_kr_kwh": 0.53,
    "kilde": "Energi Data Service (Energinet), DayAheadPrices — CC BY 4.0"
  },
  "forudsaetninger": {
    "panel": {
      "laengde_m": 1.762,
      "bredde_m": 1.134,
      "effekt_wp": 440,
      "kantafstand_m": 0.3,
      "mellemrum_m": 0.02
    },
    "forbrug_kwh": 4500,
    "egetforbrug_andel": 0.35,
    "egetforbrug_regel": "andel = egetforbrug_andel × kvadratroden af (forbrug_kwh / produktion), højst 0,8",
    "pris_fast_kr": 12000,
    "pris_kr_pr_kwp": 8500,
    "tillaeg_kr_kwh": 0.6,
    "moms_andel": 0.25,
    "salgsgebyr_kr_kwh": 0.02,
    "degradering_pr_aar": 0.005,
    "horisont_aar": 30,
    "min_kwh_pr_kwp": 650,
    "systemtab_pct": 14,
    "udhaeng_m": 0.3,
    "horisont_afstand_m": 100,
    "observator_over_flade_m": 0.3,
    "albedo": 0.2,
    "noter": [
      "Panel: 1,76 × 1,13 m, 440 Wp, 0,3 m fri kant til tagets kanter, skorstene og kviste.",
      "Hældning, retning og flader er målt i Danmarks Højdemodel (0,4 m celler) inden for GeoDanmarks omrids — ikke på taget. En flade, højdemodellen ikke kan navngive, får ingen tal.",
      "Skygge fra bygninger, træer og terræn op til 100 m væk er målt i overflademodellen, som er fløjet én gang; løvfald om vinteren er ikke med, så vinterskyggen fra løvtræer er sat for højt."
    ]
  },
  "metode": {
    "tagflader": "RANSAC-planer fra /v1/dhm/bygninger; hver 0,4 m-celle i omridset tildeles den definerende flade, der forklarer den inden for 0,35 m",
    "skygge": "Horisont målt ved ray-marching i overflademodellen (0,8 m) ud til 100 m fra op til fem punkter på fladen; direkte stråling blokeres time for time i et typisk år, diffus reduceres med den skjulte del af himlen foran fladen",
    "instraaling": "PVGIS PVcalc (månedligt gennemsnit, 1 kWp, uden PVGIS-horisont) ganget med månedens skyggefaktor fra PVGIS TMY",
    "paneler": "Fladens målte celler i fladens eget plan, formindsket med kantafstanden; rækker fra tagfoden og op, stående og liggende afprøvet",
    "elpris": "Day-ahead-priser for prisområdet over de seneste 365 dage, vægtet time for time med adressens typiske solindstråling"
  },
  "ufuldstaendig": false,
  "kilder": [
    {
      "navn": "Danmarks Højdemodel (Klimadatastyrelsen) via Dataforsyningen",
      "brug": "Tagflader, hældning, retning og horisont",
      "vilkaar": "Frie data"
    },
    {
      "navn": "GeoDanmark",
      "brug": "Bygningernes omrids",
      "vilkaar": "CC BY 4.0 — @geodanmark"
    },
    {
      "navn": "PVGIS (EU Joint Research Centre)",
      "brug": "Indstråling og ydelse pr. kWp",
      "vilkaar": "PVGIS © European Union, 2001-2026 (EU Joint Research Centre) — genbrug tilladt med kildeangivelse"
    },
    {
      "navn": "Energi Data Service (Energinet)",
      "brug": "Day-ahead-elpriser",
      "vilkaar": "CC BY 4.0"
    },
    {
      "navn": "BBR",
      "brug": "Anvendelse, opførelsesår og tagdækning",
      "vilkaar": "Frie data"
    }
  ],
  "attribution": "@geodanmark",
  "meta": {
    "kilde": "Dataforsyningen DHM + GeoDanmark + PVGIS + Energi Data Service via Grundfast",
    "grundfast_version": "0.1.0"
  }
}

Forkortet: lange lister og geometrier er skåret ned — de viste værdier er uændrede.

Parametre

bfeintegerstipåkrævet
BFE-nummeret på ejendommen.Eksempel: 5651067
bygningstringqueryvalgfri
Kun denne bygning (BBR-UUID). Uden: alle bygninger, de fire største tage beregnet.
forbrug_kwhintegerqueryvalgfri
Husstandens årsforbrug, som det foreslåede anlæg dimensioneres efter. Standard 4500.Eksempel: 5500
egetforbrug_andelnumberqueryvalgfri
Andel af produktionen, der bruges i huset, når anlægget producerer præcis forbruget. Standard 0,35.
pris_kr_pr_kwpintegerqueryvalgfri
Installeret pris pr. kWp inkl. moms. Standard 8.500 kr.
pris_fast_krintegerqueryvalgfri
Fast del af prisen (inverter, stillads, tilslutning) inkl. moms. Standard 12.000 kr.
tillaeg_kr_kwhnumberqueryvalgfri
Hvad en købt kWh koster oven i spotprisen, ekskl. moms (nettarif, afgifter, handelstillæg). Standard 0,60 kr.

Felter i svaret

bygninger[].flader[]object[]
Én pr. målt tagflade: haeldning_grader, aspekt_grader/retning, areal_m2 (sandt) og areal_vandret_m2, tagfod_m, top_m, spaer_m, skygge, kwh_pr_kwp (med skygge) og kwh_pr_kwp_uden_skygge (PVGIS’ eget tal), maaned_kwh_pr_kwp og paneler.
bygninger[].flader[].skyggeobject
aar_pct og maaned_pct: andel af indstrålingen, den målte horisont tager. horisont_grader: 36 vinkler (10° ad gangen fra nord med uret) til den højeste forhindring set fra fladens midte.
bygninger[].flader[].paneler.placeringnumber[][][]
Hvert panels fire hjørner som [lon, lat, h]; h er meter over bygningens terraen_m — klar til at tegne i et kort eller en 3D-model.
bygninger[].tagmaalobject | null
Til tækkemanden: tagfod_m (samlet), rygning_m (null på fladt og ensidigt tag), spaer_m, tagflade_m2 og tagflade_inkl_udhaeng_m2 med det antagne udhæng ved tagfod og gavle.
bygninger[].anlaegobject | null
lille, foreslaaet og maks: paneler, kwp, kwh_aar, maaned_kwh, fordeling pr. flade og oekonomi (pris, egetforbrug, værdi år 1, tilbagebetaling_aar). null med anlaeg_aarsag, når ingen flade egner sig.
bygninger[].aarsagstring | null
Hvorfor en bygning ikke er beregnet: tag_ikke_maalt (se tag_aarsag), for_lille, uden_for_budget (spørg med bygning=), horisont_utilgaengelig eller instraaling_utilgaengelig.
elprisobject | null
Prisområde, periode, gennemsnitlig og solvægtet day-ahead-pris i kr./kWh. null, når priserne ikke kunne hentes — så er oekonomi også null, mens produktionen står.
forudsaetningerobject
Hver antagelse tallene hviler på — panel, kantafstand, forbrug, priser, egetforbrugsreglen, degradering, udhæng, horisontafstand — og noter i klar tekst til at vise ved siden af tallene.
kilderobject[]
Kilderne med vilkår. PVGIS må genbruges med kildeangivelse; GeoDanmark kræver @geodanmark, hvor omridsene vises.

Statuskoder

StatusBetydning
200Svaret er leveret.
400BFE-nummeret er ikke et positivt heltal, eller en antagelse ligger uden for sit interval.
401Nøglen mangler eller er ugyldig.
404BFE-nummeret findes ikke, eller bygning er ikke en bygning på ejendommen.
429Burst-grænsen eller månedskvoten er nået. Se Retry-After.
502Højdemodellen kunne ikke nås for nogen af bygningerne. En delvis fejl er en 200 med beregnet: false og en aarsag på de berørte bygninger.
503DHM-, GeoDanmark- eller PVGIS-kilden er ikke konfigureret i dette miljø.

Fejl har altid formen { "error": "…" }. Se Fejl og statuskoder for, hvad der kan prøves igen.

Prøv det

Live-kald fra siden

Demo-endpointet svarer live med standardantagelserne, men kun for sidens udvalgte demo-ejendomme. Andre BFE-numre giver 404.

GET /v1/demo/dhm/tag/sol

Bruges ofte sammen med

Læs mere om DHM, og hvad data kan bruges til, på produktsiden.