flask_inference_api_g / settings.html
DmitrMakeev's picture
Update settings.html
60964ab verified
raw
history blame
14.9 kB
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<link rel="icon" type="image/ico" href="https://huggingface.co/spaces/igs-img/stor/resolve/main/list.ico">
<title>My static Space</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<style>
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
-webkit-appearance: inner-spin-button;
opacity: 1;
}
input[type="number"] {
-moz-appearance: textfield;
}
#protection-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5); /* Полупрозрачный чёрный */
z-index: 5; /* На передний план */
display: block; /* Включено по умолчанию */
pointer-events: auto; /* Блокирует клики */
}
/* Поднимаем SweetAlert2 выше */
.swal2-container {
z-index: 10 !important;
}
</style>
</head>
<body>
<div id="protection-overlay"></div> <!-- Полупрозрачный фон -->
<script>
document.addEventListener("DOMContentLoaded", function () {
const overlay = document.getElementById("protection-overlay");
let pageKey = localStorage.getItem("page_key");
// Функция проверки ключа
function checkApiKey(apiKey) {
fetch(`/page_key?api_sys=${apiKey}`)
.then(response => response.json())
.then(data => {
if (data.status === "ok") {
overlay.style.display = "none"; // ✅ Убираем защиту
} else {
requestNewKey("Неверный код. Введите заново!");
}
})
.catch(() => requestNewKey("Ошибка сервера. Попробуйте снова."));
}
// Функция запроса нового ключа
function requestNewKey(message = "Введите код доступа:") {
Swal.fire({
title: "Внимание!",
text: message,
input: "text",
inputAttributes: { autocapitalize: "off" },
showCancelButton: false,
confirmButtonText: "Отправить",
confirmButtonColor: "#4CAF50",
allowOutsideClick: false
}).then((result) => {
if (result.isConfirmed && result.value) {
localStorage.setItem("page_key", result.value); // 🔥 Сохраняем ключ
checkApiKey(result.value); // 🔥 Проверяем ключ
} else {
requestNewKey("Введите корректный код!"); // Повторяем ввод
}
});
}
// Если ключ есть → Проверяем его, иначе запрашиваем новый
if (pageKey) {
checkApiKey(pageKey);
} else {
requestNewKey();
}
});
</script>
<nav class="navbar navbar-light bg-light">
<a class="navbar-brand" href="/settings">
<img src="https://huggingface.co/spaces/igs-img/stor/resolve/main/list.png" width="30" height="30" class="d-inline-block align-top" alt="">
MackorLab
</a>
<form class="form-inline">
<button id="st_onl" class="btn btn-outline-success" type="button" >Онлайн</button>
<button id="st_set" class="btn btn-success" type="button" >Настройки</button>
<button id="st_plot" class="btn btn-outline-success" type="button">Графики</button>
<button id="st_table" class="btn btn-outline-success" type="button">Таблица</button>
</form>
</nav>
<div class="container mt-3">
<div class="container text-center">
<h1>Настройки системы</h1>
</div> <br>
<div class="card-deck">
<div class="card">
<div class="card-body">
<!-- Уровень - PH --> <div class="container text-center">
<h4>Уровень pH</h4> </div>
<p>EEPROM : <span id="pH_eep"></span></p>
<form>
<label for="pH_set">Новое : </label>
<input type="number" id="pH_set" value="5.7" min="1" max="14" step="0.01">
</form>
</div>
<div class="card-footer">
<button id="pH_set_but" type="button" class="btn btn-success btn-lg">Записать</button>
</div>
</div>
<div class="card">
<div class="card-body">
<!-- PH ON - sec -->
<h4>pH доз. ON sec.</h4>
<p>EEPROM : <span id="ph_on_eep"></span></p>
<form>
<label for="ph_on_set">Новое : </label>
<input type="number" id="ph_on_set" value="2.5" min="0.1" max="20" step="0.01">
</form>
</div>
<div class="card-footer">
<button id="ph_on_set_but" type="button" class="btn btn-success btn-lg">Записать</button>
</div>
</div>
<div class="card">
<div class="card-body">
<h4>Уровень EC</h4>
<p>EEPROM : <span id="ec_eep"></span></p>
<form>
<label for="ec_set">Новое : </label>
<input type="number" id="ec_set" value="0.85" min="0.1" max="4" step="0.01">
</form>
</div>
<div class="card-footer">
<button id="ec_set_but" type="button" class="btn btn-success btn-lg">Записать</button>
</div>
</div>
</div>
<br>
<div class="card-deck">
<div class="card">
<div class="card-body">
<h4>EC доз. A_ON sec.</h4>
<p>EEPROM : <span id="ec_A_eep"></span></p>
<form>
<label for="ec_A_set">Новое : </label>
<input type="number" id="ec_A_set" value="1.5" min="0.1" max="20" step="0.01">
</form>
</div>
<div class="card-footer">
<button id="ec_A_set_but" type="button" class="btn btn-success btn-lg">Записать</button>
</div>
</div>
<div class="card">
<div class="card-body">
<h4>EC доз. B_ON sec.</h4>
<p>EEPROM : <span id="ec_B_eep"></span></p>
<form>
<label for="ec_B_set">Новое : </label>
<input type="number" id="ec_B_set" value="1.5" min="0.1" max="20" step="0.01">
</form>
</div>
<div class="card-footer">
<button id="ec_B_set_but" type="button" class="btn btn-success btn-lg">Записать</button>
</div>
</div>
<div class="card">
<div class="card-body">
<h4>EC доз. C_ON sec.</h4>
<p>EEPROM : <span id="ec_C_eep"></span></p>
<form>
<label for="ec_C_set">Новое : </label>
<input type="number" id="ec_C_set" value="1.5" min="0.1" max="20" step="0.01">
</form>
</div>
<div class="card-footer">
<button id="ec_C_set_but" type="button" class="btn btn-success btn-lg">Записать</button>
</div>
</div>
</div>
<br>
<div class="card-deck">
<div class="card">
<div class="card-body">
<h4>Свет ON </h4>
<p>EEPROM: <span id="l_ON_h_eep"></span> : <span id="l_ON_m_eep"></span></p>
<form>
<label for="l_ON_h_set">Новое h : </label>
<input type="number" id="l_ON_h_set" value="12" min="0" max="23" step="1">
</form>
<form>
<label for="l_ON_m_set">Новое m : </label>
<input type="number" id="l_ON_m_set" value="30" min="0" max="59" step="1">
</form>
</div>
<div class="card-footer">
<button id="l_ON_set" type="button" class="btn btn-success btn-lg">Записать</button>
</div>
</div>
<div class="card">
<div class="card-body">
<h4>Свет OFF </h4>
<p>EEPROM: <span id="l_OFF_h_eep"></span> : <span id="l_OFF_m_eep"></span></p>
<form>
<label for="l_OFF_h_set">Новое h : </label>
<input type="number" id="l_OFF_h_set" value="12" min="0" max="23" step="1">
</form>
<form>
<label for="l_OFF_m_set">Новое m : </label>
<input type="number" id="l_OFF_m_set" value="30" min="0" max="59" step="1">
</form>
</div>
<div class="card-footer">
<button id="l_OFF_set" type="button" class="btn btn-success btn-lg">Записать</button>
</div>
</div>
<div class="card">
<div class="card-body">
<h4>Тем. воздуха</h4>
<p>EEPROM : <span id="t_Voz_eep"></span></p>
<form>
<label for="t_Voz_eep_set">Новое : </label>
<input type="number" id="t_Voz_eep_set" value="25" min="10" max="40" step="1">
</form>
</div>
<div class="card-footer">
<button id="t_Voz_set" type="button" class="btn btn-success btn-lg">Записать</button>
</div>
</div>
</div>
<br><br><br><br>
</div>
<script>
document.getElementById("st_onl").addEventListener("click", function() {
// Получаем основной URL без пути и параметров
var baseUrl = window.location.origin;
// Добавляем необходимый путь к основному URL
var targetUrl = baseUrl + "/online";
// Переходим по сформированному URL
window.location.href = targetUrl;
});
</script>
<script>
document.getElementById("st_set").addEventListener("click", function() {
// Получаем основной URL без пути и параметров
var baseUrl = window.location.origin;
// Добавляем необходимый путь к основному URL
var targetUrl = baseUrl + "/settings";
// Переходим по сформированному URL
window.location.href = targetUrl;
});
</script>
<script>
document.getElementById("st_plot").addEventListener("click", function() {
// Получаем основной URL без пути и параметров
var baseUrl = window.location.origin;
// Добавляем необходимый путь к основному URL
var targetUrl = baseUrl + "/plot_week";
// Переходим по сформированному URL
window.location.href = targetUrl;
});
</script>
<script>
let fetchInterval = null;
let timeoutReset = null;
function updateValues(data) {
document.getElementById("pH_eep").textContent = data.ph_eep;
document.getElementById("ph_on_eep").textContent = data.ph_on_eep;
document.getElementById("ec_eep").textContent = data.ec_eep;
document.getElementById("ec_A_eep").textContent = data.ec_A_eep;
document.getElementById("ec_B_eep").textContent = data.ec_B_eep;
document.getElementById("ec_C_eep").textContent = data.ec_C_eep;
document.getElementById("l_ON_h_eep").textContent = data.l_ON_h_eep;
document.getElementById("l_ON_m_eep").textContent = data.l_ON_m_eep;
document.getElementById("l_OFF_h_eep").textContent = data.l_OFF_h_eep;
document.getElementById("l_OFF_m_eep").textContent = data.l_OFF_m_eep;
document.getElementById("t_Voz_eep").textContent = data.t_Voz_eep;
// 🔽 Подсветка фона в зависимости от режима настройки
if (data.set_st === "1") {
// Светло-зелёный фон — режим настройки активен
document.body.style.backgroundColor = "#eaffea";
} else {
// Обычный белый фон — режим настройки не активен
document.body.style.backgroundColor = "#ffffff";
}
}
function fetchValues() {
var xhr = new XMLHttpRequest();
xhr.open("GET", "/settings_api", true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
var response = JSON.parse(xhr.responseText);
updateValues(response);
}
};
xhr.send();
}
function startFetching(intervalTime) {
if (fetchInterval) clearInterval(fetchInterval);
fetchInterval = setInterval(fetchValues, intervalTime);
}
function resetToSlowUpdate() {
startFetching(10000); // 10 секунд
timeoutReset = null;
}
function activateFastUpdate() {
startFetching(2500); // 2.5 секунды
if (timeoutReset) clearTimeout(timeoutReset);
timeoutReset = setTimeout(resetToSlowUpdate, 5 * 60 * 1000); // 5 минут
}
function buttonHandler(url) {
var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.send();
activateFastUpdate(); // Ускоряем обновление
}
// Стартуем медленно
fetchValues();
startFetching(10000);
// Первичный вызов
window.onload = function() {
var xhr = new XMLHttpRequest();
xhr.open("GET", "/set_res", true);
xhr.send();
};
// Таблица
document.getElementById("st_table").addEventListener("click", function() {
activateFastUpdate();
var baseUrl = window.location.origin;
var targetUrl = baseUrl + "/table";
window.location.href = targetUrl;
});
// Назначение обработчиков для всех кнопок
document.getElementById("pH_set_but").addEventListener("click", function() {
let val = document.getElementById("pH_set").value;
buttonHandler("/pH_set?value=" + val);
});
document.getElementById("ph_on_set_but").addEventListener("click", function() {
let val = document.getElementById("ph_on_set").value;
buttonHandler("/ph_on_set?value=" + val);
});
document.getElementById("ec_set_but").addEventListener("click", function() {
let val = document.getElementById("ec_set").value;
buttonHandler("/EC_set?value=" + val);
});
document.getElementById("ec_A_set_but").addEventListener("click", function() {
let val = document.getElementById("ec_A_set").value;
buttonHandler("/ec_A_set?value=" + val);
});
document.getElementById("ec_B_set_but").addEventListener("click", function() {
let val = document.getElementById("ec_B_set").value;
buttonHandler("/ec_B_set?value=" + val);
});
document.getElementById("ec_C_set_but").addEventListener("click", function() {
let val = document.getElementById("ec_C_set").value;
buttonHandler("/ec_C_set?value=" + val);
});
document.getElementById("l_ON_set").addEventListener("click", function() {
let h = document.getElementById("l_ON_h_set").value;
let m = document.getElementById("l_ON_m_set").value;
buttonHandler("/l_ON_set?l_ON_h_set=" + h + "&l_ON_m_set=" + m);
});
document.getElementById("l_OFF_set").addEventListener("click", function() {
let h = document.getElementById("l_OFF_h_set").value;
let m = document.getElementById("l_OFF_m_set").value;
buttonHandler("/l_OFF_set?l_OFF_h_set=" + h + "&l_OFF_m_set=" + m);
});
document.getElementById("t_Voz_set").addEventListener("click", function() {
let val = document.getElementById("t_Voz_eep_set").value;
buttonHandler("/t_Voz_eep_set?value=" + val);
});
</script>
</body>
</html>