Files
traffic-monitoring-new/templates/index.html
2025-07-23 19:29:38 +08:00

162 lines
4.7 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Traffic Monitor</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 30px;
background-color: #f4f4f4;
}
h1 {
color: #333;
}
#stats {
margin-bottom: 20px;
}
.stat {
font-size: 18px;
margin-bottom: 10px;
}
table {
border-collapse: collapse;
width: 100%;
background-color: white;
}
th,
td {
border: 1px solid #ccc;
padding: 8px 12px;
text-align: center;
}
th {
background-color: #eee;
}
tr:nth-child(even) {
background-color: #f9f9f9;
}
.loading {
color: #888;
}
</style>
</head>
<body>
<h1>Monitoring Trafik</h1>
<div id="stats">
<div class="stat">🔢 Total Entri Log Kendaraan: <span id="total-entries" class="loading">Loading...</span></div>
<div class="stat">🚗 Kendaraan yang Saat Ini Berada di Antara Jalur: <span id="vehicle-zone"
class="loading">Loading...</span></div>
<div class="stat">🚗 kepadatan trafik saat ini: <span id="kepadatan" class="loading">Loading...</span></div>
</div>
<h2>📋 10 Entri Kendaraan Terakhir</h2>
<table>
<thead>
<tr>
<th>ID</th>
<th>ID Kenderaan</th>
<th>Arah</th>
<th>Waktu</th>
<th>Kecepatan (km/h)</th>
</tr>
</thead>
<tbody id="log-table-body">
<tr>
<td colspan="5" class="loading">Loading data...</td>
</tr>
</tbody>
</table>
<script>
function formatTanggalIndonesia(str) {
const hariMap = {
"Sun": "Minggu",
"Mon": "Senin",
"Tue": "Selasa",
"Wed": "Rabu",
"Thu": "Kamis",
"Fri": "Jumat",
"Sat": "Sabtu"
};
const parts = str.replace(" GMT", "").split(", ");
const hari = hariMap[parts[0]] || parts[0];
return `${hari}, ${parts[1]}`;
}
async function loadData() {
try {
const response = await fetch('/get_video');
const data = await response.json();
// Update stats
document.getElementById('total-entries').textContent = data.total_entries;
document.getElementById('vehicle-zone').textContent = data.vehicles_in_zone;
const N = data.vehicles_in_zone; // Jumlah kendaraan terdeteksi dalam L meter
const L = 20; // Panjang zona deteksi (dalam meter)
const P = N / L; // Kepadatan kendaraan per meter
const kendaraanPerKm = Math.round(P * 1000); // Estimasi kendaraan dalam 1 km
let keterangan = '';
if (P <= 0.1) {
keterangan = 'Kepadatan sepi';
} else if (P <= 0.20) {
keterangan = 'Kepadatan sedang';
} else {
keterangan = 'Kepadatan tinggi';
}
keterangan += ` | Estimasi ${kendaraanPerKm} kendaraan per 1 km`;
document.getElementById('kepadatan').textContent = keterangan;
// Populate table
const tbody = document.getElementById('log-table-body');
tbody.innerHTML = '';
const jumlahTampil = 20; // 💡 Ubah sesuai kebutuhan (bisa pakai input juga)
const entriesToShow = data.entries.slice(0, jumlahTampil); // Flexible slice
entriesToShow.forEach(entry => {
const row = document.createElement('tr');
row.innerHTML = `
<td>${entry.id}</td>
<td>${entry.vehicle_id}</td>
<td>${entry.direction}</td>
<td>${formatTanggalIndonesia(entry.timestamp)}</td>
<td>${entry.speed.toFixed(1)}</td>
`;
tbody.appendChild(row);
});
} catch (err) {
console.error('Error loading data:', err);
document.getElementById('log-table-body').innerHTML = `<tr><td colspan="5">Error loading data</td></tr>`;
}
}
// Initial load
loadData();
// Refresh every 10 seconds
setInterval(loadData, 2500);
</script>
</body>
</html>