diff --git a/persistent/images/img-00114710-09d3-4a60-a7e1-44e651b1e4df.webp b/persistent/images/img-00114710-09d3-4a60-a7e1-44e651b1e4df.webp new file mode 100644 index 00000000..a7a3b99a Binary files /dev/null and b/persistent/images/img-00114710-09d3-4a60-a7e1-44e651b1e4df.webp differ diff --git a/persistent/images/img-bc4f9c3e-b74c-450b-9109-6de7d6023521.webp b/persistent/images/img-bc4f9c3e-b74c-450b-9109-6de7d6023521.webp new file mode 100644 index 00000000..14fd1f7f Binary files /dev/null and b/persistent/images/img-bc4f9c3e-b74c-450b-9109-6de7d6023521.webp differ diff --git a/src/astro-typesafe-api-caller.ts b/src/astro-typesafe-api-caller.ts index f2a456e9..5aec6ca4 100644 --- a/src/astro-typesafe-api-caller.ts +++ b/src/astro-typesafe-api-caller.ts @@ -3,27 +3,27 @@ import { createCallerFactory } from "astro-typesafe-api/server"; export const createCaller = createCallerFactory({ "klimafaktoren": await import("../src/pages/api/klimafaktoren.ts"), "postleitzahlen": await import("../src/pages/api/postleitzahlen.ts"), + "admin/ausstellen": await import("../src/pages/api/admin/ausstellen.ts"), "aufnahme/[uid]": await import("../src/pages/api/aufnahme/[uid].ts"), "aufnahme": await import("../src/pages/api/aufnahme/index.ts"), - "admin/ausstellen": await import("../src/pages/api/admin/ausstellen.ts"), "auth/access-token": await import("../src/pages/api/auth/access-token.ts"), "auth/forgot-password": await import("../src/pages/api/auth/forgot-password.ts"), "auth/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"), "bedarfsausweis-wohnen/[uid]": await import("../src/pages/api/bedarfsausweis-wohnen/[uid].ts"), "bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/index.ts"), + "bilder/[uid]": await import("../src/pages/api/bilder/[uid].ts"), "geg-nachweis-verbrauchsausweis-wohnen/[uid]": await import("../src/pages/api/geg-nachweis-verbrauchsausweis-wohnen/[uid].ts"), "geg-nachweis-verbrauchsausweis-wohnen": await import("../src/pages/api/geg-nachweis-verbrauchsausweis-wohnen/index.ts"), - "bilder/[uid]": await import("../src/pages/api/bilder/[uid].ts"), "objekt": await import("../src/pages/api/objekt/index.ts"), - "ticket": await import("../src/pages/api/ticket/index.ts"), "rechnung": await import("../src/pages/api/rechnung/index.ts"), + "ticket": await import("../src/pages/api/ticket/index.ts"), "user": await import("../src/pages/api/user/index.ts"), "user/self": await import("../src/pages/api/user/self.ts"), "verbrauchsausweis-gewerbe/[uid]": await import("../src/pages/api/verbrauchsausweis-gewerbe/[uid].ts"), "verbrauchsausweis-gewerbe": await import("../src/pages/api/verbrauchsausweis-gewerbe/index.ts"), - "webhooks/mollie": await import("../src/pages/api/webhooks/mollie.ts"), "verbrauchsausweis-wohnen/[uid]": await import("../src/pages/api/verbrauchsausweis-wohnen/[uid].ts"), "verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"), + "webhooks/mollie": await import("../src/pages/api/webhooks/mollie.ts"), "objekt/[uid]/bilder": await import("../src/pages/api/objekt/[uid]/bilder.ts"), "objekt/[uid]": await import("../src/pages/api/objekt/[uid]/index.ts"), "objekt/[uid]/unterlagen": await import("../src/pages/api/objekt/[uid]/unterlagen.ts"), diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionEinfacheInterpolation.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionEinfacheInterpolation.ts index 185126b4..22a54b5c 100644 --- a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionEinfacheInterpolation.ts +++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionEinfacheInterpolation.ts @@ -1,34 +1,28 @@ -export function funktionDoppelteInterpolation(SuchSpalte: number, DatenZeile: number, dataZeile: any, dataBox: any): number { +export function funktionEinfacheInterpolation(gegebenerWert: number, gegebeneZeile: string, dataset: any) { - function interpolate(x: number, x0: number, y0: number, x1: number, y1: number): number { - return y0 + ((y1 - y0) * (x - x0)) / (x1 - x0); + function interpolate(x: number, x1: number, y1: number, x2: number, y2: number): number { + return y1 + ((x - x1) * (y2 - y1)) / (x2 - x1); } - - function findNearestPoints(data: any[], value: number, key: string): any[] { - let lower = data[0]; - let upper = data[data.length - 1]; - - for (let i = 0; i < data.length - 1; i++) { - if (data[i][key][0] <= value && data[i + 1][key][0] >= value) { - lower = data[i]; - upper = data[i + 1]; - break; + + function getInterpolatedValue(gegebenerWert: number, gegebeneZeile: string) { + const SuchZeile = dataset[0].DatenSpalte; + const systemValues = dataset.find(item => item.SuchSpalte.includes(gegebeneZeile))?.DatenSpalte; + + if (!systemValues) { + throw new Error(`Leitungssystem ${gegebeneZeile} nicht gefunden`); + } + + for (let i = 0; i < SuchZeile.length - 1; i++) { + if (gegebenerWert >= SuchZeile[i] && gegebenerWert <= SuchZeile[i + 1]) { + return interpolate(gegebenerWert, SuchZeile[i], systemValues[i], SuchZeile[i + 1], systemValues[i + 1]); } } - - return [lower, upper]; + + throw new Error(`LeitungsLaenge ${gegebenerWert} außerhalb des Bereichs`); } + const interpolierterWert = getInterpolatedValue(gegebenerWert, gegebeneZeile); - const [lowerSuchSpalte, upperSuchSpalte] = findNearestPoints(dataBox, SuchSpalte, 'SuchSpalte'); - const lowerIndex = dataZeile[0].DatenZeile.findIndex((val: number) => val >= DatenZeile) - 1; - const upperIndex = lowerIndex + 1; - - const lowerDatenZeile = dataZeile[0].DatenZeile[lowerIndex]; - const upperDatenZeile = dataZeile[0].DatenZeile[upperIndex]; - - const lowerDatenSpalte = interpolate(DatenZeile, lowerDatenZeile, lowerSuchSpalte.DatenSpalte[lowerIndex], upperDatenZeile, lowerSuchSpalte.DatenSpalte[upperIndex]); - const upperDatenSpalte = interpolate(DatenZeile, lowerDatenZeile, upperSuchSpalte.DatenSpalte[lowerIndex], upperDatenZeile, upperSuchSpalte.DatenSpalte[upperIndex]); - - return interpolate(SuchSpalte, lowerSuchSpalte.SuchSpalte[0], lowerDatenSpalte, upperSuchSpalte.SuchSpalte[0], upperDatenSpalte); -} \ No newline at end of file + return interpolierterWert; + +} \ No newline at end of file diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionHilfsenergieDifferenzdruckKesselBWNTbis34kwT39.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionHilfsenergieDifferenzdruckKesselBWNTbis34kwT39.ts new file mode 100644 index 00000000..d818c1b0 --- /dev/null +++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionHilfsenergieDifferenzdruckKesselBWNTbis34kwT39.ts @@ -0,0 +1,18 @@ +import { funktionEinfacheInterpolation } from "./funktionEinfacheInterpolation.js"; +export function funktionHilfsenergieDifferenzdruckKesselBWNTbis34kwT39(maximaleHeizlast: number, UebergabeSystem: string) { + + if (maximaleHeizlast < 2.5) { maximaleHeizlast = 2.5; } + if (maximaleHeizlast > 34) { maximaleHeizlast = 34; } + + +const dataset = [ + {SuchSpalte: ["maxHeizlast"], DatenSpalte: [2.5, 5, 10, 20, 30, 34]}, + {SuchSpalte: ["Heizkörper 15K"], DatenSpalte: [0.4, 1.7, 6.7, 26.9, 60.5, 77.7]}, + {SuchSpalte: ["Heizkörper 10K"], DatenSpalte: [0.9, 3.8, 15.1, 60.5, 136.1, 174.8]}, + {SuchSpalte: ["Fußbodenheizung 7K"], DatenSpalte: [1.9, 7.7, 30.9, 123.5, 277.8, 356.8]} +]; + +const VolumenStrom = funktionEinfacheInterpolation(maximaleHeizlast, UebergabeSystem, dataset); +return VolumenStrom; + +} \ No newline at end of file diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionHilfsenergieDifferenzdruckLeitungsLaengenT37.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionHilfsenergieDifferenzdruckLeitungsLaengenT37.ts new file mode 100644 index 00000000..a63db569 --- /dev/null +++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionHilfsenergieDifferenzdruckLeitungsLaengenT37.ts @@ -0,0 +1,16 @@ +import { funktionEinfacheInterpolation } from "./funktionEinfacheInterpolation.js"; + + +export function funktionHilfsenergieDifferenzdruckLeitungsLaengenT37(LeitungsLaenge: number, LeitungsSystem: string) { + + if (LeitungsLaenge < 25) { LeitungsLaenge = 25; } + + const dataset = [ + {SuchSpalte: ["maxLeitungslänge"], DatenSpalte: [25, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 250, 300, 350, 400, 450, 500]}, + {SuchSpalte: ["Heizkörper"], DatenSpalte: [5.3, 8.5, 9.8, 11.1, 12.4, 13.7, 15, 16.3, 17.6, 18.9, 20.2, 21.5, 22.8, 24.1, 25.4, 26.7, 28, 34.5, 41, 47.5, 54, 60.5, 67]}, + {SuchSpalte: ["Fußbodenheizung"], DatenSpalte: [30.3, 33.5, 34.8, 36.1, 37.4, 38.7, 40, 41.3, 42.6, 43.9, 45.2, 46.5, 47.8, 49.1, 50.4, 51.7, 53, 59.5, 66, 72.5, 79, 85.5, 92]} + ]; + + const DifferenzDruck = funktionEinfacheInterpolation(LeitungsLaenge, LeitungsSystem, dataset); + return DifferenzDruck; +} diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionHilfsenergieTermPumpeT40.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionHilfsenergieTermPumpeT40.ts new file mode 100644 index 00000000..ae8c93a3 --- /dev/null +++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionHilfsenergieTermPumpeT40.ts @@ -0,0 +1,18 @@ +import { funktionEinfacheInterpolation } from "./funktionEinfacheInterpolation.js"; +export function funktionHilfsenergieTermPumpeT40(BelastungsGrad: number, PumpenRegelung: string) { + + if (BelastungsGrad < 0.1) { BelastungsGrad = 0.1; } + if (BelastungsGrad > 1) { BelastungsGrad = 1; } + + +const dataset = [ + {SuchSpalte: ["Belastungsgrad"], DatenSpalte: [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]}, + {SuchSpalte: ["variabel"], DatenSpalte: [1.9, 1.4, 1.2, 1.2, 1.1, 1.1, 1.0, 1.0, 1.0, 1.0]}, + {SuchSpalte: ["konstant"], DatenSpalte: [3.3, 2.0, 1.6, 1.4, 1.3, 1.2, 1.1, 1.1, 1.0, 1.0]}, + {SuchSpalte: ["ungeregelt"], DatenSpalte: [7.8, 4.0, 2.8, 2.1, 1.8, 1.5, 1.3, 1.2, 1.1, 1.0]} +]; + +const TermPumpe = funktionEinfacheInterpolation(BelastungsGrad, PumpenRegelung, dataset); +return TermPumpe; + +} diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionHilfsenergieVolumenstromT38.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionHilfsenergieVolumenstromT38.ts new file mode 100644 index 00000000..67e1191a --- /dev/null +++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionHilfsenergieVolumenstromT38.ts @@ -0,0 +1,19 @@ +import { funktionEinfacheInterpolation } from "./funktionEinfacheInterpolation.js"; +export function funktionHilfsenergieVolumenstromT38(maximaleHeizlast: number, UebergabeSystem: string) { + + if (maximaleHeizlast < 2.5) { maximaleHeizlast = 2.5; } + if (maximaleHeizlast > 400) { maximaleHeizlast = 400; } + + +const dataset = [ + {SuchSpalte: ["maxHeizlast"], DatenSpalte: [2.5, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 300, 400]}, + {SuchSpalte: ["Heizkörper 15K"], DatenSpalte: [0.14, 0.29, 0.58, 1.16, 1.74, 1.97, 2.32, 2.9, 3.48, 4.06, 4.64, 5.22, 5.8, 6.38, 6.96, 7.54, 8.12, 8.7, 9.28, 9.86, 10.43, 11.01, 17.39, 23.19]}, + {SuchSpalte: ["Heizkörper 10K"], DatenSpalte: [0.22, 0.43, 0.87, 1.74, 2.61, 3.48, 4.35, 5.22, 6.09, 6.96, 7.83, 8.7, 9.57, 10.43, 11.3, 12.17, 13.04, 13.91, 14.78, 15.65, 16.52, 17.39, 26.09, 34.78]}, + {SuchSpalte: ["Fußbodenheizung 7K"], DatenSpalte: [0.31, 0.62, 1.24, 2.48, 3.73, 4.97, 6.21, 7.45, 8.7, 9.94, 11.18, 12.42, 13.66, 14.91, 16.15, 17.39, 18.63, 19.88, 21.12, 22.36, 23.6, 24.84, 37.27, 49.69]} +]; + +const VolumenStrom = funktionEinfacheInterpolation(maximaleHeizlast, UebergabeSystem, dataset); +return VolumenStrom; + +} +