test / test (push) Failing after 5s
Arbeidsflytene var skrevet for beholderkjørere med ubuntu-latest, actions/checkout@v4 og en hemmelighet ved navn GITEA_TOKEN. Byggeserveren kjører i stedet en vertskjører med merkelappen fish, henter handlinger fra gitea.com og gir et innebygd token, slik de andre prosjektene er satt opp. Slik de var ville de ikke ha kjørt i det hele tatt. - fish som skall, og fish-syntaks i stegene - utløses når en utgivelse publiseres, ikke av tagger - release.yml legger enok-binærfilen ved utgivelsen, slik at prosjektlagre med egne bygningsmodeller kan lage energirapporter uten å ha Rust installert Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015GeH3y8fwTaTudaD88P57o
298 lines
12 KiB
Markdown
298 lines
12 KiB
Markdown
# enok
|
||
|
||
Årlig energiberegning og energirapport for bygninger etter **NS 3031:2025**, med
|
||
timesoppløsning gjennom hele året og energikarakter etter Enovas skala som gjelder fra
|
||
1. januar 2026.
|
||
|
||
Programmet tar en beskrivelse av bygningen — geometri, konstruksjoner, vinduer, ventilasjon,
|
||
varmekilder og drift — og et typisk klimaår, og gir 8760 timesverdier, et fullt energibudsjett
|
||
fra netto energibehov til vektet levert energi, en energikarakter og en ferdig rapport i PDF.
|
||
|
||
```
|
||
enok beregn bygninger/nordhusstykket-5.toml
|
||
```
|
||
|
||
```
|
||
Nordhusstykket 5 (Småhus, 140 m², byggeår 1948)
|
||
Klimadata: Indre Østfold
|
||
|
||
Varmetapstall 3,00 W/(m²K)
|
||
Netto energibehov 352,2 kWh/(m²·år)
|
||
Levert energi 328,5 kWh/(m²·år)
|
||
Vektet levert energi 328,5 kWh/(m²·år)
|
||
Energikarakter F
|
||
|
||
Tiltak:
|
||
Isolerte varmerør og kjellervegger 311,9 kWh/(m²·år) F
|
||
Nye vinduer 305,6 kWh/(m²·år) E
|
||
Etterisolert klimaskjerm 207,0 kWh/(m²·år) D
|
||
Væske-vann-varmepumpe 162,7 kWh/(m²·år) C
|
||
Full pakke 68,5 kWh/(m²·år) A
|
||
```
|
||
|
||
## Hva programmet gjør
|
||
|
||
**Beregningsmetode.** Dynamisk timesberegning etter NS-EN ISO 52016-1, slik NS 3031:2025
|
||
krever. Hver opake bygningsdel modelleres med fem noder der varmekapasiteten fordeles etter
|
||
masseplassering, vinduer med to noder, og sonen har en luftnode og en strålingsnode som
|
||
fordeler langbølget utveksling mellom innvendige overflater. Systemet løses implisitt for hver
|
||
time. Varme- og kjølebehovet bestemmes ved å løse uten tilført effekt og med en prøveeffekt;
|
||
siden systemet er lineært treffer interpolasjonen settpunktet nøyaktig.
|
||
|
||
**Beregningspunkter.** Budsjettet følger NS 3031:2025 fra A til E: netto energibehov,
|
||
brutto etter distribusjons- og akkumuleringstap, tilført energi etter systemvirkningsgrad og
|
||
årsvarmefaktor for hver varmekilde, levert energi per energibærer med fradrag for
|
||
egenprodusert solstrøm, og til slutt vektet levert energi.
|
||
|
||
**Energikarakter.** Vektet levert energi per kvadratmeter oppvarmet BRA slås opp i Enovas
|
||
skala, med arealkorreksjonen som gjelder for småhus og boligblokk. Vektingsfaktorene er
|
||
elektrisitet 1,0, fjernvarme og biobrensel 0,45, eksportert energi 0. Vedovn regnes å dekke
|
||
inntil 10 prosent av romoppvarmingen.
|
||
|
||
**Klimadata.** Timesverdier for alle norske kommuner fra datasettet som ble laget til
|
||
NS 3031:2025 (CERRA 1991–2020, CC-BY-4.0). Beregnes bygningen i lokalt klima, korrigeres de
|
||
klimaavhengige energipostene til referanseklima Oslo med klimakorrigeringsfaktorene fra
|
||
standardens tillegg, slik energimerkeforskriften krever. Arkivet lastes ned én gang og
|
||
hurtiglagres.
|
||
|
||
**Grunnen og kjelleren.** Flater mot grunnen regnes etter NS-EN ISO 13370: jordas varmemotstand
|
||
gjør at en uisolert grunnmur taper langt mindre enn U-verdien alene tilsier, og en kjellervegg
|
||
deles i en del over terreng, som er en vanlig yttervegg, og en nedgravd del. En uoppvarmet
|
||
kjeller eller et kaldt loft kan modelleres som en egen sone. Temperaturen der regnes ut time
|
||
for time av sonens varmebalanse etter NS-EN ISO 13789, med varme fra rommene over og fra
|
||
varmerør og beredere som står der. Uisolerte rør i kjelleren teller dermed både som tap fra
|
||
varmeanlegget og som varme som holder etasjeskilleren varm.
|
||
|
||
**Overoppheting.** Bygninger uten kjøleanlegg luftes gjennom vinduer. Uten det ville en tett
|
||
bygning med store vindusflater fått urealistisk høye innetemperaturer om våren og høsten, og
|
||
lagret solvarme ville kunstig redusert oppvarmingsbehovet. Grensen settes til den normerte
|
||
settpunkttemperaturen for kjøling, og luftingen koster ingen energi.
|
||
|
||
**Tiltak.** Scenarier i samme fil gir før-og-etter-tall og karakterer i én tabell.
|
||
|
||
## Installasjon
|
||
|
||
```sh
|
||
cargo install --path .
|
||
```
|
||
|
||
Typst må være installert for PDF-rapporten. Uten Typst kjører du med `--ingen-pdf`; da skrives
|
||
`rapport.typ` som du kan kompilere senere.
|
||
|
||
## Bruk
|
||
|
||
| Kommando | Hva den gjør |
|
||
| --- | --- |
|
||
| `enok beregn FIL.toml` | Beregner og skriver rapport, CSV og JSON til `ut/<navn>/` |
|
||
| `enok import FIL` | Leser IFC, gbXML eller regneark og skriver `bygning.toml` |
|
||
| `enok klima --liste` | Lister alle kommuner med klimadata |
|
||
| `enok klima --kommune Oslo` | Viser nøkkeltall for ett klimasted |
|
||
| `enok skala smaahus --areal 140` | Viser karakterskalaen med arealkorreksjon |
|
||
|
||
Nyttige valg til `beregn`: `--ingen-pdf`, `--ingen-timeserie`, `--enova-xml`,
|
||
`--uten-scenarier`, `--ut KATALOG`.
|
||
|
||
### Utdata
|
||
|
||
| Fil | Innhold |
|
||
| --- | --- |
|
||
| `rapport.pdf` | Energirapport med karakter, varmetapsbudsjett, energibudsjett og figurer |
|
||
| `rapport.typ`, `stil.typ` | Typst-kilde, slik at rapporten kan tilpasses |
|
||
| `resultat.json` | Hele resultatet, inkludert forutsetninger og månedsverdier |
|
||
| `timeserie.csv` | 8760 rader med temperaturer, laster, sol og energistrømmer |
|
||
| `maaned.csv` | Månedssummer |
|
||
| `enova-2014.xml` | XML for energimerkesystemet, med `--enova-xml` |
|
||
|
||
## Bygningsbeskrivelsen
|
||
|
||
En bygning beskrives i TOML. Alt som utelates fylles med normerte verdier for
|
||
bygningskategorien, eller med typiske verdier for byggeåret, og rapporten viser hva som er
|
||
antatt og hvor det kommer fra.
|
||
|
||
```toml
|
||
[bygning]
|
||
navn = "Nordhusstykket 5"
|
||
kategori = "smaahus"
|
||
byggeaar = 1948
|
||
oppvarmet_bra = 140.0
|
||
|
||
[klima]
|
||
kommune = "Indre Østfold"
|
||
|
||
[[flate]]
|
||
navn = "Yttervegg sør"
|
||
type = "vegg"
|
||
areal = 26.0
|
||
orientering = 180 # grader fra nord med klokka
|
||
u_verdi = 1.0 # eller `lag = [{ materiale = "tre", tykkelse = 0.02 }, …]`
|
||
masseklasse = "lett"
|
||
mot = "ute" # ute | grunn | uoppvarmet
|
||
|
||
[[vindu]]
|
||
navn = "Vinduer sør"
|
||
areal = 6.0
|
||
orientering = 180
|
||
u_verdi = 2.80
|
||
g_verdi = 0.76
|
||
|
||
[infiltrasjon]
|
||
n50 = 8.0
|
||
|
||
[[sone]] # uoppvarmet kjeller, med egen temperaturberegning
|
||
navn = "Kjeller"
|
||
volum = 165.0
|
||
andel_distribusjonstap = 1.0 # uisolerte varmerør avgir varmen sin her
|
||
|
||
[[sone.flate]]
|
||
navn = "Kjellermur"
|
||
type = "vegg"
|
||
areal = 108.0
|
||
u_verdi = 3.13
|
||
mot = "grunn"
|
||
dybde = 1.6 # nedgravd høyde
|
||
over_terreng = 0.6 # høyden som står over terreng
|
||
|
||
[ventilasjon]
|
||
type = "naturlig" # naturlig | avtrekk | balansert
|
||
|
||
[[oppvarming.kilde]]
|
||
type = "el_kjel" # direkte_el, luft_luft_vp, vaeske_vann_vp, vedovn, fjernvarme, …
|
||
andel_rom = 0.75
|
||
andel_tappevann = 1.0
|
||
|
||
[[scenario]]
|
||
navn = "Nye vinduer"
|
||
endringer.vindu = [{ navn = "Vinduer sør", u_verdi = 0.80, g_verdi = 0.50 }]
|
||
```
|
||
|
||
Scenarier flettes inn i bygningsbeskrivelsen: tabeller flettes rekursivt, elementer i lister
|
||
matches på `navn` eller `type`, nye elementer legges til, og `slett = true` fjerner et element.
|
||
|
||
Ferdige eksempler ligger i `eksempler/`.
|
||
|
||
## Import fra Vectorworks og andre BIM-verktøy
|
||
|
||
| Format | Slik henter du det | Hva som kommer med |
|
||
| --- | --- | --- |
|
||
| IFC | *Fil → Eksporter → Export IFC Project* | Flater, areal, U-verdier fra egenskapssett, himmelretning fra plassering, vinduer og dører koblet til vegg |
|
||
| gbXML | Verktøy som eksporterer gbXML | Rom, flater, åpninger, konstruksjoner med lag |
|
||
| Regneark | *Fil → Eksporter → Export Worksheet* | Enkel CSV med én rad per bygningsdel |
|
||
|
||
Himmelretningene i IFC utledes av elementenes plassering: veggens lokale akse gir planet, og
|
||
ytre normal velges som den som peker bort fra bygningens tyngdepunkt, korrigert for prosjektets
|
||
sanne nord. Kontroller dem mot tegningen etter import.
|
||
|
||
Ingen av formatene beskriver ventilasjon, lekkasjetall eller varmekilder. Importen skriver
|
||
merknader øverst i TOML-filen om hva som må fylles ut.
|
||
|
||
Regnearkformatet er bevisst enkelt, slik at det kan settes opp som en rapport i BIM-verktøyet:
|
||
|
||
```csv
|
||
type,navn,areal,u_verdi,orientering,helning,mot,g_verdi,antall
|
||
bygning,Nordhusstykket 5,140,,,,smaahus,1948,
|
||
vegg,Yttervegg sør,26,1.0,180,90,ute,,
|
||
gulv,Mot kjeller,98,0.8,,180,uoppvarmet,,
|
||
vindu,Stue sør,3.0,2.8,180,90,,0.76,2
|
||
```
|
||
|
||
## Rapporter fra byggeserveren
|
||
|
||
Arbeidsflytene i `.gitea/workflows/` kjører på vertskjøreren `fish` og utløses når en
|
||
utgivelse publiseres, på samme måte som de andre prosjektene.
|
||
|
||
| Fil | Hva den gjør |
|
||
| --- | --- |
|
||
| `test.yml` | Formatering, clippy og tester på hver push |
|
||
| `release.yml` | Bygger enok og legger binærfilen ved utgivelsen |
|
||
| `rapport.yml` | Lager energirapport for hver bygning i `bygninger/` og legger PDF, JSON og CSV ved utgivelsen |
|
||
|
||
IFC-, gbXML- og CSV-filer i `bygninger/` importeres automatisk til TOML dersom det ikke
|
||
allerede finnes en TOML-fil med samme navn. Se `bygninger/LES-MEG.md`.
|
||
|
||
### Energirapport fra et byggeprosjekt
|
||
|
||
Et prosjektlager med sin egen IFC-modell og `bygning.toml` trenger ikke Rust. Det henter
|
||
binærfilen fra enoks utgivelse:
|
||
|
||
```yaml
|
||
name: Energirapport
|
||
on:
|
||
release:
|
||
types: [published]
|
||
jobs:
|
||
rapport:
|
||
runs-on: fish
|
||
defaults:
|
||
run:
|
||
shell: fish {0}
|
||
steps:
|
||
- uses: https://gitea.com/actions/checkout@v6
|
||
- name: Hent enok og lag rapporten
|
||
env:
|
||
TOKEN: ${{ github.token }}
|
||
run: |
|
||
curl -sL -o enok --header "Authorization: token $TOKEN" \
|
||
"$GITHUB_SERVER_URL/klingenbergbygg/enok/releases/latest/download/enok"
|
||
chmod +x enok
|
||
./enok beregn bygning.toml --ut dist
|
||
```
|
||
|
||
## Kontroll av beregningen
|
||
|
||
Motoren er kontrollert mot uavhengige referanser:
|
||
|
||
| Kontroll | Resultat |
|
||
| --- | --- |
|
||
| Solinnstråling på skrå og orienterte flater, mot pvlib (Hay–Davies) | avvik under 1 % for alle himmelretninger i Oslo-klima |
|
||
| Stasjonært varmetap mot U·A·ΔT | innenfor 2 % |
|
||
| Grunnmodellen mot NS-EN ISO 13370 | kompakthet, dybde og isolasjon virker som standarden beskriver |
|
||
| Kjellermodellen mot NS-EN ISO 13789 | varme rør hever kjellertemperaturen og reduserer romoppvarmingen |
|
||
| Årlig energibalanse | går opp innenfor 2 % |
|
||
| Varmebehov som funksjon av temperaturdifferanse | eksakt lineært |
|
||
| Varmetapsbudsjett for TEK17-referansebygget | identisk med publisert tabell, 0,69 W/(m²K) |
|
||
| Normerte energiposter for småhus | varmtvann 25,1, belysning 11,4, teknisk utstyr 17,5 kWh/(m²·år) |
|
||
|
||
### Kjent avvik
|
||
|
||
Standard Norges lanseringseksempel for NS 3031:2025 oppgir 46,2 kWh/(m²·år) romoppvarming og
|
||
106,4 kWh/(m²·år) netto energibehov for TEK17-referansebygget beregnet med Simien 8. enok
|
||
beregner 27,2 og 86,7 for den samme bygningen.
|
||
|
||
Varmetapsbudsjettet, de normerte energipostene, solinnstrålingen og energibalansen stemmer
|
||
hver for seg, så avviket ligger i hvor stor del av solvarmen som nyttiggjøres. NS 3031:2025
|
||
Tillegg A er ikke offentlig tilgjengelig, så de normerte solfaktorene, skjermingsforutsetningene
|
||
og timesprofilene Simien bruker, lar seg ikke etterprøve her. `tests/referansebygg.rs` låser
|
||
dagens verdier slik at endringer i motoren blir synlige, og oppdateres når standardens
|
||
forutsetninger er tilgjengelige.
|
||
|
||
Bruk derfor tallene til å sammenligne tiltak mot hverandre og til å se hvor varmen forsvinner.
|
||
Til en energiattest som skal leveres til Enova må resultatet kontrolleres mot et validert
|
||
beregningsprogram.
|
||
|
||
## Datagrunnlag
|
||
|
||
Alle normerte verdier ligger i `data/` og kan overstyres med `--data KATALOG`.
|
||
|
||
| Fil | Innhold og kilde |
|
||
| --- | --- |
|
||
| `skala.toml` | Energikarakterskalaen fra 1.1.2026, Enova SF via Multiconsult-notatet «Grunnlag for ny energikarakterskala», 19.12.2025 |
|
||
| `vekting.toml` | Vektingsfaktorer etter energimerkeforskriften § 10a med NVEs veileder |
|
||
| `normerte/*.toml` | Normerte laster, driftstider og settpunkt. Utgangspunktet er NS 3031:2014 Tillegg A; varmtvann er oppdatert til NS 3031:2025-verdien for småhus. Timesprofiler fra NS 3031:2025 kan legges inn i `profil_*`-feltene |
|
||
| `varmepumpe_spf.toml` | Veiledende årsvarmefaktorer, NS 3031:2014 tabell B.9-3 |
|
||
| `materialer.toml` | Materialdata og typiske U-verdier per byggeperiode |
|
||
| `klimakorreksjon.csv` | Klimakorrigeringsfaktorer, Standard Norge SN/K 34, doi 10.5281/zenodo.15041587 |
|
||
|
||
Klimadata: «TMY files for Norway based on CERRA data from 1991-2020», doi
|
||
10.5281/zenodo.14779899, CC-BY-4.0.
|
||
|
||
## Regelverk
|
||
|
||
- Forskrift om energimerking av bygninger og energivurdering av varme- og klimaanlegg,
|
||
§§ 10a og 10b, med NVEs veileder
|
||
- NS 3031:2025 *Bygningers energiytelse — Beregning av energi- og effektbehov*
|
||
- NS-EN ISO 52016-1:2017 og NS-EN ISO 52010-1:2017
|
||
|
||
## Lisens
|
||
|
||
MIT.
|