alarms parameters (NOT READY)
This commit is contained in:
parent
817f3e8b71
commit
4b91a9fd93
29
server.js
29
server.js
@ -2577,6 +2577,35 @@ app.post('/install-parameters', async (req, res) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
app.post('/ai-parameters', async (req, res) => {
|
||||||
|
if (req.session.userId === undefined) {
|
||||||
|
return res.redirect("/signin");
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const { serial } = req.body;
|
||||||
|
|
||||||
|
const requestResponse = await axios.get(`http://${process.env.SERVER_IP}:8080/http/parameters/request?serial=${serial}`, {
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
data: JSON.stringify({
|
||||||
|
"FIELDS": [
|
||||||
|
"DSM"
|
||||||
|
]
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 300));
|
||||||
|
|
||||||
|
const getResponse = await axios.get(`http://${process.env.SERVER_IP}:8080/http/parameters/get?serial=${serial}`);
|
||||||
|
|
||||||
|
res.json(getResponse.data);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
res.status(500).json({ error: 'Internal server error' });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
app.put('/install-parameters', async (req, res) => {
|
app.put('/install-parameters', async (req, res) => {
|
||||||
if (req.session.userId === undefined) {
|
if (req.session.userId === undefined) {
|
||||||
return res.redirect("/signin");
|
return res.redirect("/signin");
|
||||||
|
@ -6,7 +6,7 @@ const content2 = document.getElementById("ethernet");
|
|||||||
const content3 = document.getElementById("wifi");
|
const content3 = document.getElementById("wifi");
|
||||||
const content4 = document.getElementById("communication");
|
const content4 = document.getElementById("communication");
|
||||||
const content5 = document.getElementById("install");
|
const content5 = document.getElementById("install");
|
||||||
const content6 = document.getElementById("cameras");;
|
const content6 = document.getElementById("ai");;
|
||||||
const radioButtons = document.querySelectorAll(
|
const radioButtons = document.querySelectorAll(
|
||||||
'input[type="radio"][name="newStage"]'
|
'input[type="radio"][name="newStage"]'
|
||||||
);
|
);
|
||||||
@ -60,6 +60,7 @@ function fadeOut(element, callback) {
|
|||||||
requestAnimationFrame(animate);
|
requestAnimationFrame(animate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var givenData;
|
||||||
|
|
||||||
for (let radioButton of radioButtons) {
|
for (let radioButton of radioButtons) {
|
||||||
radioButton.addEventListener("change", () => {
|
radioButton.addEventListener("change", () => {
|
||||||
@ -238,8 +239,145 @@ for (let radioButton of radioButtons) {
|
|||||||
|
|
||||||
})
|
})
|
||||||
.catch(error => console.error('Ошибка:', error));
|
.catch(error => console.error('Ошибка:', error));
|
||||||
} else if (radioButton.value === "cameras") {
|
} else if (radioButton.value === "ai") {
|
||||||
switchContent(content6);
|
switchContent(content6);
|
||||||
|
document.getElementById('parameters-bg').style.display = 'flex';
|
||||||
|
|
||||||
|
fetch('/ai-parameters', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify(requestBody)
|
||||||
|
})
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(data => {
|
||||||
|
|
||||||
|
document.getElementById('parameters-bg').style.display = 'none';
|
||||||
|
|
||||||
|
camerasData = data;
|
||||||
|
|
||||||
|
console.log(data.DATA);
|
||||||
|
givenData = data.DATA.DSM.DSMA;
|
||||||
|
|
||||||
|
console.log(givenData);
|
||||||
|
|
||||||
|
function encodeCHValue(channels) {
|
||||||
|
let CH = 0;
|
||||||
|
for (const channelNumber of channels) {
|
||||||
|
if (channelNumber >= 1 && channelNumber <= 32) {
|
||||||
|
const channelBit = 1 << (channelNumber - 1);
|
||||||
|
CH |= channelBit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return CH;
|
||||||
|
}
|
||||||
|
|
||||||
|
let selectedCameras;
|
||||||
|
|
||||||
|
function checkSelectedCameras() {
|
||||||
|
const checkboxes = document.querySelectorAll('.checkbox-input');
|
||||||
|
selectedCameras = [];
|
||||||
|
|
||||||
|
checkboxes.forEach((checkbox) => {
|
||||||
|
if (checkbox.checked) {
|
||||||
|
const cameraNumber = checkbox.id.replace('camera', '');
|
||||||
|
selectedCameras.push(cameraNumber);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function decodeCHValue(CH) {
|
||||||
|
const channels = [];
|
||||||
|
for (let i = 0; i < 32; i++) {
|
||||||
|
const channelBit = (CH >> i) & 1;
|
||||||
|
if (channelBit === 1) {
|
||||||
|
const channelNumber = i + 1;
|
||||||
|
channels.push(channelNumber);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return channels;
|
||||||
|
}
|
||||||
|
|
||||||
|
var desiredCameras;
|
||||||
|
|
||||||
|
function updateCheckboxes() {
|
||||||
|
var checkboxes = document.querySelectorAll('.checkbox-input');
|
||||||
|
|
||||||
|
checkboxes.forEach(function (checkbox) {
|
||||||
|
var cameraNumber = parseInt(checkbox.id.replace('camera', ''), 10);
|
||||||
|
|
||||||
|
checkbox.checked = desiredCameras.includes(cameraNumber);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
let newCH;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function updateFields(selectedIndex) {
|
||||||
|
const selectedData = givenData[selectedIndex];
|
||||||
|
console.log(selectedData);
|
||||||
|
|
||||||
|
document.getElementById("system-ai-en1").value = selectedData.EN;
|
||||||
|
document.getElementById("system-ai-as1").value = selectedData.AS;
|
||||||
|
document.getElementById("system-ai-ensp1").value = selectedData.APR.ENSP;
|
||||||
|
document.getElementById("system-ai-fgms1").value = selectedData.FGMS;
|
||||||
|
document.getElementById("system-ai-sgms1").value = selectedData.SGMS;
|
||||||
|
document.getElementById("system-ai-esst1").value = selectedData.ESST;
|
||||||
|
document.getElementById("system-ai-udt1").value = selectedData.UDT;
|
||||||
|
document.getElementById("system-ai-vt1").value = selectedData.VT;
|
||||||
|
document.getElementById("system-ai-sdt1").value = selectedData.SDT;
|
||||||
|
document.getElementById("system-ai-et1").value = selectedData.APR.ET;
|
||||||
|
document.getElementById("system-ai-ss-en1").value = selectedData.APR.SS.EN;
|
||||||
|
document.getElementById("system-ai-ar-d1").value = selectedData.APR.AR.D;
|
||||||
|
|
||||||
|
desiredCameras = decodeCHValue(selectedData.APR.AR.CH);
|
||||||
|
updateCheckboxes();
|
||||||
|
|
||||||
|
checkSelectedCameras();
|
||||||
|
newCH = encodeCHValue(selectedCameras);
|
||||||
|
console.log('Выбранные камеры:', newCH);
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById("system-ai").addEventListener("change", function () {
|
||||||
|
const selectedIndex = parseInt(this.value);
|
||||||
|
updateFields(selectedIndex);
|
||||||
|
});
|
||||||
|
|
||||||
|
document.getElementById("checkboxContainer").addEventListener("change", function () {
|
||||||
|
checkSelectedCameras();
|
||||||
|
newCH = encodeCHValue(selectedCameras);
|
||||||
|
console.log('Выбранные камеры:', newCH);
|
||||||
|
});
|
||||||
|
function updateDataInArray(selectedIndex) {
|
||||||
|
const selectedDataRow = data.DATA.DSM.DSMA[selectedIndex];
|
||||||
|
|
||||||
|
selectedDataRow.EN = document.getElementById("system-ai-en1").value;
|
||||||
|
selectedDataRow.AS = document.getElementById("system-ai-as1").value;
|
||||||
|
selectedDataRow.APR.ENSP = document.getElementById("system-ai-ensp1").value;
|
||||||
|
selectedDataRow.FGMS = document.getElementById("system-ai-fgms1").value;
|
||||||
|
selectedDataRow.SGMS = document.getElementById("system-ai-sgms1").value;
|
||||||
|
selectedDataRow.ESST = document.getElementById("system-ai-esst1").value;
|
||||||
|
selectedDataRow.UDT = document.getElementById("system-ai-udt1").value;
|
||||||
|
selectedDataRow.VT = document.getElementById("system-ai-vt1").value;
|
||||||
|
selectedDataRow.SDT = document.getElementById("system-ai-sdt1").value;
|
||||||
|
selectedDataRow.APR.ET = document.getElementById("system-ai-et1").value;
|
||||||
|
selectedDataRow.APR.SS.EN = document.getElementById("system-ai-ss-en1").value;
|
||||||
|
selectedDataRow.APR.AR.D = document.getElementById("system-ai-ar-d1").value;
|
||||||
|
|
||||||
|
selectedDataRow.APR.AR.CH = encodeCHValue(selectedCameras);
|
||||||
|
|
||||||
|
console.log(selectedDataRow);
|
||||||
|
}
|
||||||
|
|
||||||
|
updateFields(0);
|
||||||
|
|
||||||
|
$("select").trigger("input");
|
||||||
|
|
||||||
|
})
|
||||||
|
.catch(error => console.error('Ошибка:', error));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -526,6 +526,7 @@ header img {
|
|||||||
|
|
||||||
.organisation label,
|
.organisation label,
|
||||||
#parameters label,
|
#parameters label,
|
||||||
|
#ai label,
|
||||||
.permission-group label {
|
.permission-group label {
|
||||||
color: rgba(0, 0, 0, 0.5);
|
color: rgba(0, 0, 0, 0.5);
|
||||||
cursor: pointer !important;
|
cursor: pointer !important;
|
||||||
@ -807,11 +808,13 @@ td {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.table input[type="checkbox"],
|
.table input[type="checkbox"],
|
||||||
#parameters input[type="checkbox"] {
|
#parameters input[type="checkbox"],
|
||||||
|
#ai input[type="checkbox"] {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#parameters .checkbox-label {
|
#parameters .checkbox-label,
|
||||||
|
#ai .checkbox-label {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -831,6 +834,11 @@ td {
|
|||||||
background: url(../img/checkbox-table-check.svg);
|
background: url(../img/checkbox-table-check.svg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#checkboxContainer .checkbox-label {
|
||||||
|
width: fit-content !important;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
.table .trash,
|
.table .trash,
|
||||||
#adminTable .trash {
|
#adminTable .trash {
|
||||||
height: 22px;
|
height: 22px;
|
||||||
|
@ -140,6 +140,8 @@
|
|||||||
<input name="newStage" type="radio" value="communication" id="stage-communication"><label for="stage-communication">Коммуникации</label>
|
<input name="newStage" type="radio" value="communication" id="stage-communication"><label for="stage-communication">Коммуникации</label>
|
||||||
<div class="vertical-line" style="background: transparent;"></div>
|
<div class="vertical-line" style="background: transparent;"></div>
|
||||||
<input name="newStage" type="radio" value="install" id="stage-install"><label for="stage-install">Установка сервера</label>
|
<input name="newStage" type="radio" value="install" id="stage-install"><label for="stage-install">Установка сервера</label>
|
||||||
|
<div class="vertical-line" style="background: transparent;"></div>
|
||||||
|
<input name="newStage" type="radio" value="ai" id="stage-ai"><label for="stage-ai">Тревоги</label>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
<section id="add-new-container" class="add-new">
|
<section id="add-new-container" class="add-new">
|
||||||
@ -465,6 +467,132 @@
|
|||||||
<button style="margin-right: 25px;" onclick="addServer()" type="button">Добавить сервер</button>
|
<button style="margin-right: 25px;" onclick="addServer()" type="button">Добавить сервер</button>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="ai" class="new-parameters">
|
||||||
|
|
||||||
|
<h1>Управления тревогами</h1>
|
||||||
|
|
||||||
|
<div class="horizontal-line"></div>
|
||||||
|
|
||||||
|
<div class="parameters-inputs">
|
||||||
|
<label for="system-ai">Статус</label>
|
||||||
|
<select style="width: 100%;" name="AI" id="system-ai">
|
||||||
|
<option value="0">0 - Физиологическая усталость</option>
|
||||||
|
<option value="1">1 - Нет водителя</option>
|
||||||
|
<option value="2">2 - Говорит по телефону</option>
|
||||||
|
<option value="3">3 - Курение</option>
|
||||||
|
<option value="4">4 - Отклекся</option>
|
||||||
|
<option value="5">5 - Предупреждение о покидании полосы движения</option>
|
||||||
|
<option value="6">6 - Предупреждение о столкновении</option>
|
||||||
|
<option value="9">9 - Расстояние до машины слишком близко</option>
|
||||||
|
<option value="10">10 - Зевание</option>
|
||||||
|
<option value="11">11 - Столкновение с пешеходом</option>
|
||||||
|
</select>
|
||||||
|
<div class="parameters-input">
|
||||||
|
<label for="system-ai-en1">Статус</label>
|
||||||
|
<select name="AI-EN1" id="system-ai-en1">
|
||||||
|
<option value="0">Выключено</option>
|
||||||
|
<option value="1">Включено</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="parameters-input">
|
||||||
|
<label for="system-ai-as1">Тип угрозы</label>
|
||||||
|
<select name="AI-AS1" id="system-ai-as1">
|
||||||
|
<option value="0">Событие</option>
|
||||||
|
<option value="1">Предупреждение</option>
|
||||||
|
<option value="2">Тревога</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="parameters-input">
|
||||||
|
<label for="system-ai-ensp1">ENSP</label>
|
||||||
|
<select name="AI-ENSP1" id="system-ai-ensp1">
|
||||||
|
<option value="0">Выключено</option>
|
||||||
|
<option value="1">Включено</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="parameters-input">
|
||||||
|
<label for="system-ai-fgms1">Нижний диапозон скорости</label>
|
||||||
|
<input name="AI-FGMS1" type="text" id="system-ai-fgms1" placeholder="0 - 50 км/ч" required>
|
||||||
|
</div>
|
||||||
|
<div class="parameters-input">
|
||||||
|
<label for="system-ai-sgms1">Верхний диапозон скорости</label>
|
||||||
|
<input name="AI-SGMS1" type="text" id="system-ai-sgms1" placeholder="0 - 50 км/ч" required>
|
||||||
|
</div>
|
||||||
|
<div class="parameters-input">
|
||||||
|
<label for="system-ai-esst1">Чувствительность</label>
|
||||||
|
<select name="AI-ESST1" id="system-ai-esst1">
|
||||||
|
<option value="1">Низкая</option>
|
||||||
|
<option value="2">Средняя</option>
|
||||||
|
<option value="3">Высокая</option>
|
||||||
|
<option value="4">Пользовательская</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="parameters-input">
|
||||||
|
<label for="system-ai-udt1">Длительность распознования</label>
|
||||||
|
<input name="AI-UDT1" type="text" id="system-ai-udt1" placeholder="0 - 60 секунд" required>
|
||||||
|
</div>
|
||||||
|
<div class="parameters-input">
|
||||||
|
<label for="system-ai-vt1">Длительность</label>
|
||||||
|
<input name="AI-VT1" type="text" id="system-ai-vt1" placeholder="0 - 600 секунд" required>
|
||||||
|
</div>
|
||||||
|
<div class="parameters-input">
|
||||||
|
<label for="system-ai-sdt1">Эффективное время</label>
|
||||||
|
<input name="AI-SDT1" type="text" id="system-ai-sdt1" placeholder="0 - 10 секунд" required>
|
||||||
|
</div>
|
||||||
|
<div class="parameters-input">
|
||||||
|
<label for="system-ai-et1">Длительность тревоги</label>
|
||||||
|
<input name="AI-ET1" type="text" id="system-ai-et1" placeholder="В секундах" required>
|
||||||
|
</div>
|
||||||
|
<div class="parameters-input">
|
||||||
|
<label for="system-ai-ss-en1">Снимки сразу после тревог</label>
|
||||||
|
<select name="AI-SS-EN1" id="system-ai-ss-en1">
|
||||||
|
<option value="0">Выключено</option>
|
||||||
|
<option value="1">Включено</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="parameters-input">
|
||||||
|
<label for="system-ai-ar-d1">Запись после тревоги</label>
|
||||||
|
<input name="AI-ar-d1" type="text" id="system-ai-ar-d1" placeholder="В секундах" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="horizontal-line"></div>
|
||||||
|
|
||||||
|
<div id="checkboxContainer"></div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="horizontal-line"></div>
|
||||||
|
|
||||||
|
<button onclick="updateDataInArray(0);" type="button">Сохранить</button>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.addEventListener('DOMContentLoaded', function () {
|
||||||
|
const checkboxContainer = document.getElementById('checkboxContainer');
|
||||||
|
const resultSpan = document.getElementById('result');
|
||||||
|
|
||||||
|
for (let i = 1; i <= 16; i++) {
|
||||||
|
const checkbox = document.createElement('input');
|
||||||
|
checkbox.type = 'checkbox';
|
||||||
|
checkbox.className = 'checkbox-input';
|
||||||
|
checkbox.hidden = true;
|
||||||
|
checkbox.id = `camera${i}`;
|
||||||
|
|
||||||
|
const label = document.createElement('label');
|
||||||
|
label.htmlFor = `camera${i}`;
|
||||||
|
label.className = 'checkbox-label';
|
||||||
|
label.innerHTML = `<div class="checkmark"></div>${i} Камера`;
|
||||||
|
|
||||||
|
|
||||||
|
checkboxContainer.appendChild(checkbox);
|
||||||
|
checkboxContainer.appendChild(label);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user