179 lines
7.4 KiB
TypeScript
179 lines
7.4 KiB
TypeScript
// Funktion zur Berechnung der Bilanzinnentemperatur aus Tabelle 8 EFH oder Tabelle 10 MFH
|
|
|
|
import { cubicSplineInterpolation } from "js-interpolate";
|
|
import { any } from "node_modules/cypress/types/bluebird/index.js";
|
|
|
|
// aus Eingabeformular
|
|
let WohnEinheiten = 2;
|
|
|
|
const datasetEinfamilienHaus = {
|
|
Januar: {
|
|
50: [18.83, 18.71, 18.61, 18.38, 18.16, 18.05, 17.99, 17.97, 17.95],
|
|
90: [18.99, 18.87, 18.77, 18.54, 18.31, 18.20, 18.15, 18.12, 18.11],
|
|
130: [19.14, 19.02, 18.92, 18.68, 18.45, 18.34, 18.29, 18.26, 18.25],
|
|
},
|
|
Februar: {
|
|
50: [18.88, 18.76, 18.67, 18.44, 18.23, 18.13, 18.08, 18.05, 18.04],
|
|
90: [19.04, 18.93, 18.83, 18.60, 18.39, 18.29, 18.23, 18.21, 18.20],
|
|
130: [19.18, 19.07, 18.97, 18.74, 18.53, 18.42, 18.37, 18.34, 18.33],
|
|
},
|
|
März: {
|
|
50: [19.05, 18.95, 18.87, 18.68, 18.50, 18.42, 18.37, 18.35, 18.34],
|
|
90: [19.19, 19.09, 19.01, 18.82, 18.64, 18.55, 18.51, 18.49, 18.48],
|
|
130: [19.31, 19.21, 19.13, 18.94, 18.75, 18.67, 18.62, 18.60, 18.59],
|
|
},
|
|
April: {
|
|
50: [19.33, 19.26, 19.20, 19.07, 18.94, 18.88, 18.85, 18.84, 18.83],
|
|
90: [19.43, 19.36, 19.30, 19.17, 19.04, 18.98, 18.95, 18.93, 18.92],
|
|
130: [19.51, 19.44, 19.38, 19.25, 19.12, 19.06, 19.03, 19.01, 19.00],
|
|
},
|
|
Mai: {
|
|
50: [19.63, 19.60, 19.56, 19.49, 19.42, 19.39, 19.37, 19.36, 19.36],
|
|
90: [19.69, 19.65, 19.62, 19.55, 19.48, 19.44, 19.42, 19.42, 19.41],
|
|
130: [19.73, 19.70, 19.66, 19.59, 19.52, 19.49, 19.47, 19.46, 19.46],
|
|
},
|
|
Juni: {
|
|
50: [19.80, 19.77, 19.76, 19.72, 19.68, 19.66, 19.65, 19.64, 19.64],
|
|
90: [19.83, 19.80, 19.79, 19.75, 19.71, 19.69, 19.68, 19.67, 19.67],
|
|
130: [19.85, 19.83, 19.81, 19.77, 19.73, 19.71, 19.70, 19.70, 19.70],
|
|
},
|
|
Juli: {
|
|
50: [19.94, 19.93, 19.93, 19.91, 19.90, 19.90, 19.89, 19.89, 19.89],
|
|
90: [19.95, 19.94, 19.94, 19.92, 19.91, 19.91, 19.90, 19.90, 19.90],
|
|
130: [19.95, 19.95, 19.94, 19.93, 19.92, 19.91, 19.91, 19.91, 19.91],
|
|
},
|
|
August: {
|
|
50: [19.91, 19.90, 19.90, 19.88, 19.86, 19.86, 19.85, 19.85, 19.85],
|
|
90: [19.93, 19.92, 19.91, 19.89, 19.88, 19.87, 19.86, 19.86, 19.86],
|
|
130: [19.94, 19.93, 19.92, 19.90, 19.89, 19.88, 19.87, 19.87, 19.87],
|
|
},
|
|
September: {
|
|
50: [19.65, 19.61, 19.58, 19.51, 19.44, 19.41, 19.39, 19.39, 19.38],
|
|
90: [19.70, 19.66, 19.63, 19.56, 19.49, 19.46, 19.44, 19.44, 19.43],
|
|
130: [19.74, 19.71, 19.68, 19.60, 19.54, 19.50, 19.49, 19.48, 19.47],
|
|
},
|
|
Oktober: {
|
|
50: [19.35, 19.28, 19.23, 19.10, 18.97, 18.91, 18.88, 18.87, 18.86],
|
|
90: [19.44, 19.38, 19.32, 19.19, 19.07, 19.01, 18.98, 18.96, 18.95],
|
|
130: [19.53, 19.46, 19.40, 19.27, 19.15, 19.08, 19.05, 19.04, 19.03],
|
|
},
|
|
November: {
|
|
50: [19.01, 18.91, 18.83, 18.63, 18.45, 18.35, 18.31, 18.29, 18.28],
|
|
90: [19.16, 19.06, 18.97, 18.77, 18.59, 18.49, 18.45, 18.43, 18.42],
|
|
130: [19.28, 19.18, 19.09, 18.90, 18.71, 18.61, 18.57, 18.55, 18.53],
|
|
},
|
|
Dezember: {
|
|
50: [18.83, 18.71, 18.61, 18.38, 18.15, 18.04, 17.99, 17.96, 17.95],
|
|
90: [18.99, 18.87, 18.76, 18.53, 18.30, 18.19, 18.14, 18.11, 18.10],
|
|
130: [19.14, 19.02, 18.91, 18.67, 18.45, 18.33, 18.28, 18.25, 18.24],
|
|
},
|
|
};
|
|
|
|
const datasetMehrfamilienHaus = {
|
|
Januar: {
|
|
50: [19.41, 19.37, 19.33, 19.24, 19.16, 19.12, 19.10, 19.09, 19.08],
|
|
90: [19.50, 19.45, 19.41, 19.33, 19.24, 19.20, 19.18, 19.17, 19.17],
|
|
130: [19.57, 19.53, 19.49, 19.40, 19.32, 19.28, 19.26, 19.25, 19.24],
|
|
},
|
|
Februar: {
|
|
50: [19.44, 19.40, 19.36, 19.28, 19.20, 19.16, 19.14, 19.13, 19.13],
|
|
90: [19.52, 19.48, 19.44, 19.36, 19.28, 19.24, 19.22, 19.21, 19.21],
|
|
130: [19.59, 19.55, 19.51, 19.43, 19.35, 19.31, 19.29, 19.28, 19.28],
|
|
},
|
|
März: {
|
|
50: [19.53, 19.49, 19.46, 19.39, 19.32, 19.29, 19.27, 19.27, 19.26],
|
|
90: [19.60, 19.56, 19.53, 19.46, 19.39, 19.36, 19.34, 19.33, 19.33],
|
|
130: [19.66, 19.62, 19.59, 19.52, 19.45, 19.42, 19.40, 19.39, 19.39],
|
|
},
|
|
April: {
|
|
50: [19.66, 19.64, 19.62, 19.57, 19.52, 19.50, 19.49, 19.48, 19.48],
|
|
90: [19.71, 19.69, 19.67, 19.62, 19.57, 19.55, 19.54, 19.53, 19.53],
|
|
130: [19.76, 19.73, 19.71, 19.66, 19.61, 19.59, 19.58, 19.57, 19.57],
|
|
},
|
|
Mai: {
|
|
50: [19.82, 19.80, 19.79, 19.76, 19.74, 19.73, 19.72, 19.72, 19.72],
|
|
90: [19.84, 19.83, 19.82, 19.79, 19.77, 19.75, 19.75, 19.74, 19.74],
|
|
130: [19.87, 19.85, 19.84, 19.81, 19.79, 19.78, 19.77, 19.77, 19.76],
|
|
},
|
|
Juni: {
|
|
50: [19.90, 19.89, 19.88, 19.87, 19.85, 19.85, 19.84, 19.84, 19.84],
|
|
90: [19.91, 19.91, 19.90, 19.88, 19.87, 19.86, 19.86, 19.86, 19.86],
|
|
130: [19.93, 19.92, 19.91, 19.90, 19.88, 19.87, 19.87, 19.87, 19.87],
|
|
},
|
|
Juli: {
|
|
50: [19.97, 19.97, 19.96, 19.96, 19.96, 19.95, 19.95, 19.95, 19.95],
|
|
90: [19.97, 19.97, 19.97, 19.96, 19.96, 19.96, 19.96, 19.96, 19.96],
|
|
130: [19.98, 19.98, 19.97, 19.97, 19.96, 19.96, 19.96, 19.96, 19.96],
|
|
},
|
|
August: {
|
|
50: [19.96, 19.95, 19.95, 19.94, 19.94, 19.93, 19.93, 19.93, 19.93],
|
|
90: [19.96, 19.96, 19.96, 19.95, 19.94, 19.94, 19.94, 19.94, 19.94],
|
|
130: [19.97, 19.97, 19.96, 19.96, 19.95, 19.95, 19.95, 19.94, 19.94],
|
|
},
|
|
September: {
|
|
50: [19.82, 19.81, 19.80, 19.77, 19.75, 19.74, 19.73, 19.73, 19.73],
|
|
90: [19.85, 19.84, 19.82, 19.80, 19.77, 19.76, 19.76, 19.75, 19.75],
|
|
130: [19.87, 19.86, 19.85, 19.82, 19.80, 19.78, 19.78, 19.77, 19.77],
|
|
},
|
|
Oktober: {
|
|
50: [19.67, 19.65, 19.63, 19.58, 19.53, 19.51, 19.50, 19.50, 19.49],
|
|
90: [19.72, 19.70, 19.68, 19.63, 19.58, 19.56, 19.55, 19.54, 19.54],
|
|
130: [19.76, 19.74, 19.72, 19.67, 19.62, 19.60, 19.59, 19.58, 19.58],
|
|
},
|
|
November: {
|
|
50: [19.51, 19.47, 19.44, 19.36, 19.30, 19.26, 19.25, 19.24, 19.23],
|
|
90: [19.58, 19.54, 19.51, 19.44, 19.37, 19.33, 19.32, 19.31, 19.30],
|
|
130: [19.64, 19.60, 19.57, 19.50, 19.43, 19.39, 19.38, 19.37, 19.37],
|
|
},
|
|
Dezember: {
|
|
50: [19.41, 19.36, 19.32, 19.24, 19.15, 19.11, 19.09, 19.08, 19.08],
|
|
90: [19.49, 19.45, 19.41, 19.32, 19.24, 19.20, 19.18, 19.17, 19.16],
|
|
130: [19.57, 19.52, 19.49, 19.40, 19.31, 19.27, 19.25, 19.24, 19.24],
|
|
},
|
|
};
|
|
|
|
function getDataset(WohnEinheiten: number) {
|
|
if (WohnEinheiten < 3) {
|
|
return datasetEinfamilienHaus;
|
|
} else {
|
|
return datasetMehrfamilienHaus;
|
|
}
|
|
}
|
|
|
|
const dataset = getDataset(WohnEinheiten);
|
|
|
|
// Für "Ohne Teilbeheizung" habe ich hier einfach 0 eingesetzt:
|
|
const HeizLast = [0, 5, 10, 25, 50, 75, 100, 125, 150];
|
|
|
|
// Um über die beiden Tabellen zu interpolieren können wir einfach zuerst über
|
|
// jede einzeln interpolieren und dann zwischen den Tabellen interpolieren.
|
|
// Falls wir also den Wert an Stelle Heizlast: 120, Zeitkonstante 100, Monat:
|
|
// Januar haben wollen:
|
|
export function funktionBilanzInnentemperatur(heizlast: number, zeitkonstane: number, monat: keyof typeof dataset): number {
|
|
const data = dataset[monat]
|
|
|
|
const interpolations: number[] = []
|
|
|
|
for (const key in data) {
|
|
const values = data[key as unknown as keyof typeof data]
|
|
|
|
const interpolated = cubicSplineInterpolation(
|
|
values.map((value, i) => ({ x: HeizLast[i], y: value })),
|
|
heizlast
|
|
)
|
|
|
|
interpolations.push(interpolated)
|
|
}
|
|
|
|
const interpolated = cubicSplineInterpolation(
|
|
interpolations.map((interpolation, i) => {
|
|
return {
|
|
x: Object.keys(data)[i],
|
|
y: interpolation
|
|
}
|
|
}),
|
|
zeitkonstane
|
|
)
|
|
|
|
return interpolated
|
|
} |