Lag bygning.toml av IFC-modellen og en tilleggsfil

«enok import modell.ifc --tillegg prosjekt.toml» fletter inn det modellen ikke beskriver,
som varmeanlegg og tiltak, og rettelser der den mangler noe. Tilleggsfilen kan holde rom
utenfor oppvarmet BRA, og et navn med «*» treffer alle elementer det passer på, også i
scenarioer.

Importen er nå deterministisk: entitetene leses i fast rekkefølge, helningen arealvektes
når flater slås sammen, og skrå tak får alltid normalen oppover. Vegger får himmelretningen
i navnet, slik at tilleggsfiler kan vise til dem.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015GeH3y8fwTaTudaD88P57o
This commit is contained in:
bl
2026-09-15 20:05:20 +02:00
co-authored by Claude Opus 5
parent d02a3d9666
commit 6d87ef496f
6 changed files with 348 additions and 23 deletions
+90 -6
View File
@@ -68,6 +68,17 @@ bygning med store vindusflater fått urealistisk høye innetemperaturer om våre
lagret solvarme ville kunstig redusert oppvarmingsbehovet. Grensen settes til den normerte
settpunkttemperaturen for kjøling, og luftingen koster ingen energi.
**Ventilasjon.** Varmegjenvinneren reguleres ned når den ellers ville varmet tilluften over
settpunktet. Et anlegg med `kjolebatteri = true` holder tilluften på normert temperatur i
driftstiden, slik DiBKs modellbygg for energirammene er regnet, og energien føres som
ventilasjonskjøling.
**Bygningskategorier.** Normerte laster og driftstider er lagt inn for småhus, boligblokk,
barnehage, kontorbygg, skolebygg, idrettsbygg og kulturbygg. Driftstidene har timer per døgn,
dager per uke og uker per år; lastene gjelder bare på driftsdager, og ukene uten drift legges
i ferier. For sykehus, sykehjem, hotell, forretningsbygg, universitet og lett industri er det
ikke funnet offentlige kilder, og de krever en egen fil i `--data KATALOG/normerte/`.
**Tiltak.** Scenarier i samme fil gir før-og-etter-tall og karakterer i én tabell.
## Installasjon
@@ -85,6 +96,7 @@ Typst må være installert for PDF-rapporten. Uten Typst kjører du med `--ingen
| --- | --- |
| `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 import FIL --tillegg prosjekt.toml` | Som over, med en tilleggsfil flettet inn (se nedenfor) |
| `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 |
@@ -154,6 +166,7 @@ over_terreng = 0.6 # høyden som står over terreng
[ventilasjon]
type = "naturlig" # naturlig | avtrekk | balansert
# kjolebatteri = true # balansert anlegg med kjølebatteri
[[oppvarming.kilde]]
type = "el_kjel" # direkte_el, luft_luft_vp, vaeske_vann_vp, vedovn, fjernvarme, …
@@ -167,6 +180,7 @@ 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.
Et navn med `*` treffer alle elementer det passer på, for eksempel `navn = "Yttervegg*"`.
Ferdige eksempler ligger i `eksempler/`.
@@ -178,6 +192,53 @@ Ferdige eksempler ligger i `eksempler/`.
| gbXML | Verktøy som eksporterer gbXML | Rom, flater, åpninger, konstruksjoner med lag |
| Regneark | *Fil → Eksporter → Export Worksheet* | Enkel CSV med én rad per bygningsdel |
### Modellen og en tilleggsfil
Modellen bør være kilden til alt den kan beskrive. Det den ikke beskriver, som varmeanlegg,
lekkasjetall og tiltak, og rettelser der den mangler noe, legges i en tilleggsfil som flettes
inn ved hver import etter de samme reglene som scenarioene:
```sh
enok import modell.ifc --tillegg prosjekt.toml --ut bygning.toml
enok beregn bygning.toml
```
```toml
# prosjekt.toml
[import]
uoppvarmede_rom = ["Kott", "Bod"] # holdes utenfor oppvarmet BRA
[[flate]]
navn = "Yttervegg*" # alle ytterveggene, uansett himmelretning
masseklasse = "lett"
[[flate]]
navn = "Roof Slab" # skråtaket mangler U-verdi i modellen
u_verdi = 0.55
[[vindu]]
navn = "V-*"
g_verdi = 0.76
[[sone]]
navn = "Kjeller"
andel_distribusjonstap = 1.0
[[sone.flate]]
navn = "Kjellermur*"
over_terreng = 0.6
[[oppvarming.kilde]]
type = "el_kjel"
andel_rom = 1.0
andel_tappevann = 1.0
```
Flatene får navn etter konstruksjonen i modellen, og vegger får himmelretningen etter navnet
(«Yttervegg, sør»), slik at tilleggsfilen kan vise til dem. Importen er deterministisk: samme
modell og tilleggsfil gir alltid samme `bygning.toml`. Et mønster som ikke treffer noe, nevnes
i merknadene, og et vanlig navn som ikke finnes i modellen, legges til som ny oppføring.
### Hva enok henter ut av en IFC-modell
| Opplysning | Hvor den kommer fra |
@@ -267,8 +328,9 @@ vertskjøreren `fish` på samme måte som de andre prosjektene:
### Energirapport fra et byggeprosjekt
Et prosjektlager med sin egen IFC-modell og `bygning.toml` trenger ikke Rust. Det henter
binærfilen fra enoks siste utgivelse:
Et prosjektlager med sin egen IFC-modell og tilleggsfil trenger ikke Rust. Det henter
binærfilen fra enoks siste utgivelse. Én jobb lager `bygning.toml` av modellen, og en annen
beregner rapporten av den:
```yaml
name: Energirapport
@@ -276,14 +338,14 @@ on:
release:
types: [published]
jobs:
rapport:
bygningsmodell:
runs-on: fish
defaults:
run:
shell: fish {0}
steps:
- uses: https://gitea.com/actions/checkout@v6
- name: Hent enok og lag rapporten
- name: Hent enok og lag bygning.toml
env:
TOKEN: ${{ github.token }}
run: |
@@ -293,6 +355,27 @@ jobs:
curl -sSL --fail -o enok --header "Authorization: token $TOKEN" \
"$GITHUB_SERVER_URL/klingenbergbygg/enok/releases/download/$TAG/enok"
chmod +x enok
./enok import modell.ifc --tillegg prosjekt.toml --ut bygning.toml
- uses: https://gitea.com/actions/upload-artifact@v4
with:
name: bygningsmodell
path: |
bygning.toml
enok
rapport:
needs: bygningsmodell
runs-on: fish
defaults:
run:
shell: fish {0}
steps:
- uses: https://gitea.com/actions/checkout@v6
- uses: https://gitea.com/actions/download-artifact@v4
with:
name: bygningsmodell
- name: Lag rapporten
run: |
chmod +x enok
./enok beregn bygning.toml --ut dist
```
@@ -310,12 +393,13 @@ Motoren er kontrollert mot uavhengige referanser:
| 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) |
| Faste energiposter for yrkesbyggene | belysning, utstyr og varmtvann treffer energibudsjettene i kildene |
### 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.
beregner 27,1 og 86,6 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
@@ -336,7 +420,7 @@ Alle normerte verdier ligger i `data/` og kan overstyres med `--data KATALOG`.
| --- | --- |
| `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 |
| `normerte/*.toml` | Normerte laster, driftstider og settpunkt. Utgangspunktet er NS 3031:2014 Tillegg A; varmtvann for boliger er oppdatert til NS 3031:2025-verdien for småhus. Tillegg A er ikke offentlig, så yrkesbyggverdiene er hentet fra publiserte Simien-utskrifter og DiBK-utredninger. Hver fil oppgir kildene og hvilke verdier som er antatt. 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 |