diff --git a/src_data/pages/settings.html b/src_data/pages/settings.html
index 12f53d0..05121e4 100644
--- a/src_data/pages/settings.html
+++ b/src_data/pages/settings.html
@@ -975,176 +975,176 @@
console.log(error);
}
-//График
-let equithermChart;
+ //График
+ let equithermChart;
-async function initChart() {
- try {
- const response = await fetch("/api/settings", {
- cache: "no-cache",
- credentials: "include"
- });
-
- if (!response.ok) {
- throw new Error('Response not valid');
- }
+ async function initChart() {
+ try {
+ const response = await fetch("/api/settings", {
+ cache: "no-cache",
+ credentials: "include"
+ });
- const result = await response.json();
-
- //График переменные
- 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;
+ if (!response.ok) {
+ throw new Error('Response not valid');
+ }
- function calculateTRad(targetTemp, outdoorTemp, maxOut, Kn, Ke, Kk) {
- let tempDiff = targetTemp - outdoorTemp;
- if (tempDiff < 0) {
+ const result = await response.json();
+
+ //График переменные
+ 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;
- }
- const minOutside = targetTemp - (maxOut - targetTemp) / Kn;
- let base = targetTemp - minOutside;
- if (base <= 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 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) {
- const outdoorTemps = [];
- const predictedTRad = [];
-
- for (let temp = 25; temp >= -30; temp -= 1) {
+ function generateChartData(targetTemp, maxOut, Kn, Ke, Kk) {
+ 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));
+ }
+ 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');
- // Create gradient for the line
- const canvasHeight = ctx.canvas.height;
- 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.5, 'rgba(255, 99, 132, 1)');
+ // Создаем график
+ const ctx = document.getElementById('equithermChart').getContext('2d');
+ // Create gradient for the line
+ const canvasHeight = ctx.canvas.height;
+ 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.5, 'rgba(255, 99, 132, 1)');
-
- equithermChart = new Chart(ctx, {
- type: 'line',
- data: {
+
+ equithermChart = new Chart(ctx, {
+ type: 'line',
+ data: {
labels: outdoorTemps,
datasets: [{
- label: 'Температура Радиатора (°C)',
- borderColor: gradient, // Use gradient instead of solid color
- borderWidth: 1,
- fill: false,
- tension: 0.1,
- pointRadius: 2, // Reduce dot size (default is 3)
- pointHoverRadius: 4,
- data: predictedTRad
+ label: 'Температура Радиатора (°C)',
+ borderColor: gradient, // Use gradient instead of solid color
+ borderWidth: 1,
+ fill: false,
+ tension: 0.1,
+ pointRadius: 2, // Reduce dot size (default is 3)
+ pointHoverRadius: 4,
+ data: predictedTRad
}]
- },
- options: {
+ },
+ options: {
responsive: true,
scales: {
- x: {
- display: true,
- title: {
- display: true,
- text: 'Наружная температура (°C)'
- }
- },
- y: {
- display: true,
- title: {
- display: true,
- text: 'Температура Радиатора (°C)'
- }
+ x: {
+ 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');
- 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_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"]');
+ // Слушаем кнопку сохранить
+ const equithermSection = document.querySelector('details');
+ const saveButton = equithermSection.querySelector('button[data-i18n="button.save"]');
saveButton.addEventListener('click', () => {
const form = document.getElementById('equitherm-settings');
const formData = new FormData(form);
updateChart(formData);
- });
+ });
-// инициализируем
-initChart();
+ // инициализируем
+ initChart();
});