Wrong call for tatget temp, should be just target

This commit is contained in:
P43YM
2025-02-27 17:06:59 +03:00
parent 5dd76c9168
commit 54095892e1

View File

@@ -975,176 +975,176 @@
console.log(error); console.log(error);
} }
//График //График
let equithermChart; let equithermChart;
async function initChart() { async function initChart() {
try { try {
const response = await fetch("/api/settings", { const response = await fetch("/api/settings", {
cache: "no-cache", cache: "no-cache",
credentials: "include" credentials: "include"
}); });
if (!response.ok) {
throw new Error('Response not valid');
}
const result = await response.json(); if (!response.ok) {
throw new Error('Response not valid');
//График переменные }
const targetTemp = result?.heating?.target_temp ?? 24;
const maxOut = result?.heating?.maxTemp ?? 90;
const Kn = result?.equitherm?.n_factor ?? 1;
const Ke = result?.equitherm?.e_factor ?? 1.3;
const Kk = result?.equitherm?.k_factor ?? 0;
function calculateTRad(targetTemp, outdoorTemp, maxOut, Kn, Ke, Kk) { const result = await response.json();
let tempDiff = targetTemp - outdoorTemp;
if (tempDiff < 0) { //График переменные
const targetTemp = result?.heating?.target ?? 24;
const maxOut = result?.heating?.maxTemp ?? 90;
const Kn = result?.equitherm?.n_factor ?? 1;
const Ke = result?.equitherm?.e_factor ?? 1.3;
const Kk = result?.equitherm?.k_factor ?? 0;
function calculateTRad(targetTemp, outdoorTemp, maxOut, Kn, Ke, Kk) {
let tempDiff = targetTemp - outdoorTemp;
if (tempDiff < 0) {
tempDiff = 0; tempDiff = 0;
} }
const minOutside = targetTemp - (maxOut - targetTemp) / Kn; const minOutside = targetTemp - (maxOut - targetTemp) / Kn;
let base = targetTemp - minOutside; let base = targetTemp - minOutside;
if (base <= 0) { if (base <= 0) {
base = 0.0001; base = 0.0001;
}
const c1 = (maxOut - targetTemp) / Math.pow(base, 1.0 / Ke);
let T_rad = targetTemp + c1 * Math.pow(tempDiff, 1.0 / Ke) + Kk;
return Math.min(T_rad, maxOut);
} }
const c1 = (maxOut - targetTemp) / Math.pow(base, 1.0 / Ke);
let T_rad = targetTemp + c1 * Math.pow(tempDiff, 1.0 / Ke) + Kk;
return Math.min(T_rad, maxOut);
}
function generateChartData(targetTemp, maxOut, Kn, Ke, Kk) { function generateChartData(targetTemp, maxOut, Kn, Ke, Kk) {
const outdoorTemps = []; const outdoorTemps = [];
const predictedTRad = []; const predictedTRad = [];
for (let temp = 25; temp >= -30; temp -= 1) { for (let temp = 25; temp >= -30; temp -= 1) {
outdoorTemps.push(temp); outdoorTemps.push(temp);
predictedTRad.push(calculateTRad(targetTemp, temp, maxOut, Kn, Ke, Kk).toFixed(1)); predictedTRad.push(calculateTRad(targetTemp, temp, maxOut, Kn, Ke, Kk).toFixed(1));
}
return { outdoorTemps, predictedTRad };
} }
return { outdoorTemps, predictedTRad };
}
// Стартовые данные // Стартовые данные
const { outdoorTemps, predictedTRad } = generateChartData(targetTemp, maxOut, Kn, Ke, Kk); const { outdoorTemps, predictedTRad } = generateChartData(targetTemp, maxOut, Kn, Ke, Kk);
// Создаем график // Создаем график
const ctx = document.getElementById('equithermChart').getContext('2d'); const ctx = document.getElementById('equithermChart').getContext('2d');
// Create gradient for the line // Create gradient for the line
const canvasHeight = ctx.canvas.height; const canvasHeight = ctx.canvas.height;
const gradient = ctx.createLinearGradient(0, canvasHeight, 0, 0); // Adjust x1, y1, x2, y2 for direction const gradient = ctx.createLinearGradient(0, canvasHeight, 0, 0); // Adjust x1, y1, x2, y2 for direction
gradient.addColorStop(0, 'rgba(75, 192, 192, 1)'); gradient.addColorStop(0, 'rgba(75, 192, 192, 1)');
gradient.addColorStop(0.5, 'rgba(255, 99, 132, 1)'); gradient.addColorStop(0.5, 'rgba(255, 99, 132, 1)');
equithermChart = new Chart(ctx, { equithermChart = new Chart(ctx, {
type: 'line', type: 'line',
data: { data: {
labels: outdoorTemps, labels: outdoorTemps,
datasets: [{ datasets: [{
label: 'Температура Радиатора (°C)', label: 'Температура Радиатора (°C)',
borderColor: gradient, // Use gradient instead of solid color borderColor: gradient, // Use gradient instead of solid color
borderWidth: 1, borderWidth: 1,
fill: false, fill: false,
tension: 0.1, tension: 0.1,
pointRadius: 2, // Reduce dot size (default is 3) pointRadius: 2, // Reduce dot size (default is 3)
pointHoverRadius: 4, pointHoverRadius: 4,
data: predictedTRad data: predictedTRad
}] }]
}, },
options: { options: {
responsive: true, responsive: true,
scales: { scales: {
x: { x: {
display: true, display: true,
title: { title: {
display: true, display: true,
text: 'Наружная температура (°C)' text: 'Наружная температура (°C)'
}
},
y: {
display: true,
title: {
display: true,
text: 'Температура Радиатора (°C)'
}
} }
},
y: {
display: true,
title: {
display: true,
text: 'Температура Радиатора (°C)'
}
}
} }
} }
});
// Показ формы
document.getElementById('equitherm-settings-busy').classList.add('hidden');
document.getElementById('equitherm-settings').classList.remove('hidden');
} catch (error) {
console.log(error);
}
}
// Обновление графика
function updateChart(formData) {
if (!equithermChart) return;
fetch("/api/settings", {
cache: "no-cache",
credentials: "include"
})
.then(response => response.json())
.then(result => {
const targetTemp = result?.heating?.target ?? 24;
const maxOut = result?.heating?.maxTemp ?? 90;
const Kn = parseFloat(formData.get('equitherm[n_factor]')) || 1;
const Ke = parseFloat(formData.get('equitherm[e_factor]')) || 1.3;
const Kk = parseFloat(formData.get('equitherm[k_factor]')) || 0;
function calculateTRad(targetTemp, outdoorTemp, maxOut, Kn, Ke, Kk) {
let tempDiff = targetTemp - outdoorTemp;
if (tempDiff < 0) {
tempDiff = 0;
}
const minOutside = targetTemp - (maxOut - targetTemp) / Kn;
let base = targetTemp - minOutside;
if (base <= 0) {
base = 0.0001;
}
const c1 = (maxOut - targetTemp) / Math.pow(base, 1.0 / Ke);
let T_rad = targetTemp + c1 * Math.pow(tempDiff, 1.0 / Ke) + Kk;
return Math.min(T_rad, maxOut);
}
const outdoorTemps = [];
const predictedTRad = [];
for (let temp = 25; temp >= -30; temp -= 1) {
outdoorTemps.push(temp);
predictedTRad.push(calculateTRad(targetTemp, temp, maxOut, Kn, Ke, Kk).toFixed(1));
}
equithermChart.data.labels = outdoorTemps;
equithermChart.data.datasets[0].data = predictedTRad;
equithermChart.update();
})
.catch(error => console.log(error));
}
// Слушаем отправку
const form = document.getElementById('equitherm-settings');
form.addEventListener('submit', (e) => {
const formData = new FormData(form);
updateChart(formData);
}); });
// Показ формы // Слушаем кнопку сохранить
document.getElementById('equitherm-settings-busy').classList.add('hidden'); const equithermSection = document.querySelector('details');
document.getElementById('equitherm-settings').classList.remove('hidden'); const saveButton = equithermSection.querySelector('button[data-i18n="button.save"]');
} catch (error) {
console.log(error);
}
}
// Обновление графика
function updateChart(formData) {
if (!equithermChart) return;
fetch("/api/settings", {
cache: "no-cache",
credentials: "include"
})
.then(response => response.json())
.then(result => {
const targetTemp = result?.heating?.target_temp ?? 24;
const maxOut = result?.heating?.maxTemp ?? 90;
const Kn = parseFloat(formData.get('equitherm[n_factor]')) || 1;
const Ke = parseFloat(formData.get('equitherm[e_factor]')) || 1.3;
const Kk = parseFloat(formData.get('equitherm[k_factor]')) || 0;
function calculateTRad(targetTemp, outdoorTemp, maxOut, Kn, Ke, Kk) {
let tempDiff = targetTemp - outdoorTemp;
if (tempDiff < 0) {
tempDiff = 0;
}
const minOutside = targetTemp - (maxOut - targetTemp) / Kn;
let base = targetTemp - minOutside;
if (base <= 0) {
base = 0.0001;
}
const c1 = (maxOut - targetTemp) / Math.pow(base, 1.0 / Ke);
let T_rad = targetTemp + c1 * Math.pow(tempDiff, 1.0 / Ke) + Kk;
return Math.min(T_rad, maxOut);
}
const outdoorTemps = [];
const predictedTRad = [];
for (let temp = 25; temp >= -30; temp -= 1) {
outdoorTemps.push(temp);
predictedTRad.push(calculateTRad(targetTemp, temp, maxOut, Kn, Ke, Kk).toFixed(1));
}
equithermChart.data.labels = outdoorTemps;
equithermChart.data.datasets[0].data = predictedTRad;
equithermChart.update();
})
.catch(error => console.log(error));
}
// Слушаем отправку
const form = document.getElementById('equitherm-settings');
form.addEventListener('submit', (e) => {
const formData = new FormData(form);
updateChart(formData);
});
// Слушаем кнопку сохранить
const equithermSection = document.querySelector('details');
const saveButton = equithermSection.querySelector('button[data-i18n="button.save"]');
saveButton.addEventListener('click', () => { saveButton.addEventListener('click', () => {
const form = document.getElementById('equitherm-settings'); const form = document.getElementById('equitherm-settings');
const formData = new FormData(form); const formData = new FormData(form);
updateChart(formData); updateChart(formData);
}); });
// инициализируем // инициализируем
initChart(); initChart();
}); });