Kategori: Programming | Perkiraan waktu baca: 8 menit
Di lingkungan pabrik tempat saya bekerja, ada kebutuhan yang cukup spesifik: memantau truck dan driver yang keluar-masuk area pabrik — kapan datang, kapan keluar, bawa muatan apa, siapa driver-nya. Sebelumnya proses ini dicatat manual di buku tamu security, yang gampang hilang datanya dan susah direkap untuk laporan bulanan.
Saya bikin sistem monitoring berbasis QR Code untuk menggantikan proses manual itu — mirip prinsipnya dengan sistem absensi karyawan yang saya bahas sebelumnya, tapi dengan kebutuhan data yang berbeda dan kompleksitas tambahan.
Beda Kebutuhan dari Absensi Karyawan Biasa
Meski basisnya sama-sama QR Code + Google Sheets, monitoring truck/driver punya requirement tambahan:
- Data lebih kompleks — bukan cuma nama dan waktu, tapi juga plat nomor, nama supir, tujuan/asal, jenis muatan
- QR Code per-kendaraan, bukan per-orang — karena driver bisa berganti-ganti tapi kendaraan yang terdaftar tetap
- Butuh approval/verifikasi security di titik masuk, bukan self-service seperti absensi karyawan
- Perlu foto sebagai bukti — untuk verifikasi kondisi kendaraan/muatan saat masuk-keluar
Struktur Data
Saya bikin beberapa sheet terpisah:
Sheet "Kendaraan Terdaftar"
| Plat Nomor | Nama Perusahaan | Jenis Kendaraan | QR Code ID |
|---|---|---|---|
| B 1234 XYZ | PT Logistik Jaya | Truck Box | TRK001 |
Sheet "Log Keluar-Masuk"
| Timestamp | QR Code ID | Nama Driver | Status | Tujuan | Petugas |
|---|
Alur Kerja Sistem
- Kendaraan yang sering keluar-masuk didaftarkan sekali di awal, dapat QR Code unik ditempel di kendaraan
- Saat kendaraan datang, security scan QR Code lewat HP/tablet
- Muncul form singkat: nama driver hari itu, tujuan, dan opsi foto kondisi kendaraan
- Data otomatis tercatat ke Google Sheets dengan timestamp dan nama petugas yang scan
Implementasi: Form Input dengan Kamera
Berbeda dari sistem absensi karyawan yang cukup dengan ID, sistem ini butuh capture foto. Ini bagian HTML yang saya pakai untuk itu:
<div class="scan-form">
<input type="text" id="qrCodeId" placeholder="Scan QR Code Kendaraan" autofocus>
<input type="text" id="namaDriver" placeholder="Nama Driver">
<input type="text" id="tujuan" placeholder="Tujuan/Keperluan">
<input type="file" id="fotoKondisi" accept="image/*" capture="environment">
<button onclick="submitLog('Masuk')">Catat Masuk</button>
<button onclick="submitLog('Keluar')">Catat Keluar</button>
</div>
Atribut capture="environment" ini yang bikin browser di HP langsung buka kamera belakang, bukan galeri foto — penting supaya petugas nggak perlu upload foto lama secara nggak sengaja.
Menyimpan Foto ke Google Drive
Karena Google Sheets nggak didesain untuk menyimpan file gambar langsung, saya upload foto ke Google Drive lewat Apps Script, lalu simpan link-nya saja di Sheets:
function uploadFoto(base64Data, namaFile) {
const folder = DriveApp.getFolderById('ID_FOLDER_DRIVE');
const decoded = Utilities.base64Decode(base64Data.split(',')[1]);
const blob = Utilities.newBlob(decoded, 'image/jpeg', namaFile);
const file = folder.createFile(blob);
file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
return file.getUrl();
}
function recordVehicleLog(qrId, driverName, tujuan, status, fotoUrl) {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const logSheet = ss.getSheetByName('Log Keluar-Masuk');
logSheet.appendRow([
new Date(),
qrId,
driverName,
status,
tujuan,
Session.getActiveUser().getEmail(),
fotoUrl
]);
}
Validasi: Mencegah Kendaraan "Masuk" Dua Kali Tanpa "Keluar"
Salah satu bug yang saya temukan di versi awal: kendaraan yang lupa di-scan waktu keluar bikin data jadi rancu (statusnya nggak pernah "Keluar"). Saya tambahkan validasi sederhana:
function getLastStatus(qrId) {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const logSheet = ss.getSheetByName('Log Keluar-Masuk');
const data = logSheet.getDataRange().getValues();
for (let i = data.length - 1; i >= 1; i--) {
if (data[i][1] === qrId) {
return data[i][3]; // kolom Status
}
}
return null;
}
function validateScan(qrId, statusBaru) {
const statusTerakhir = getLastStatus(qrId);
if (statusTerakhir === statusBaru) {
return { valid: false, message: `Kendaraan ini sudah tercatat "${statusBaru}" sebelumnya, belum ada catatan sebaliknya.` };
}
return { valid: true };
}
Dengan validasi ini, sistem akan menolak scan "Masuk" dua kali berturut-turut untuk kendaraan yang sama tanpa "Keluar" di antaranya — memaksa data tetap konsisten.
Menghubungkan ke Dashboard Monitoring
Setelah data terkumpul rapi, saya sambungkan ke dashboard monitoring seperti yang saya bahas di artikel dashboard Google Sheets — supaya bisa lihat sekilas berapa kendaraan yang sedang di dalam area pabrik, rata-rata durasi kunjungan, dan kendaraan mana yang paling sering keluar-masuk.
Penutup
Sistem sederhana berbasis Google Sheets ini terbukti cukup untuk kebutuhan monitoring kendaraan skala pabrik menengah — biaya nyaris nol, tapi cukup terstruktur untuk keperluan audit dan pelaporan. Kalau kebutuhannya sudah jauh lebih besar (ratusan kendaraan per hari, butuh integrasi dengan sistem ERP), tentu perlu solusi yang lebih robust, tapi untuk banyak kasus skala kecil-menengah, pendekatan ini sudah lebih dari cukup.
Kalau kamu butuh sistem monitoring serupa untuk kebutuhan operasional bisnis kamu, saya buka jasa untuk itu. Cek portofolio saya di april-portfolio-pearl.vercel.app atau hubungi lewat halaman Contact.
Ada kebutuhan monitoring yang mirip tapi beda kasus? Tulis di komentar, nanti saya bantu diskusikan.

Tidak ada komentar:
Posting Komentar