Setelah ESP8266 berhasil terhubung ke WiFi, sekarang kita masuk ke bagian server dan database.
Database berfungsi menyimpan seluruh informasi yang dibutuhkan sistem absensi.
Data yang nantinya tersimpan antara lain:
- data siswa/pegawai
- fingerprint ID
- perangkat absensi
- data kehadiran
- aktivitas perangkat
- waktu absensi
Arsitektur sistem mulai berkembang menjadi:
AS608
↓
ESP8266
↓
WiFi
↓
API CodeIgniter 4
↓
MySQL
↓
Dashboard
1. Apa yang Akan Disimpan di Database?
Misalnya ada tiga perangkat absensi:
ABS-001 → Gerbang Utama
ABS-002 → Ruang Guru
ABS-003 → Laboratorium
Kemudian ada siswa:
Fingerprint 1 → Bayu
Fingerprint 2 → Andi
Fingerprint 3 → Siti
Ketika Bayu melakukan scan:
Device : ABS-001
Fingerprint : 1
Tanggal : 2026-09-15
Jam : 07:12:30
Server harus bisa mengetahui:
Fingerprint ID 1 milik siapa dan melakukan absensi melalui perangkat mana?
Karena itu kita membutuhkan beberapa tabel yang saling berhubungan.
2. Struktur Database
Untuk tahap awal kita gunakan tabel:
users
│
└── fingerprint_id
│
▼
attendance
devices
│
├── attendance
│
└── device_logs
Secara sederhana:
3. Membuat Database
Buka:
phpMyAdmin
Kemudian buat database baru.
Contohnya:
absensi_iot
Atau jika project yang sudah kita bangun menggunakan nama database tertentu, gunakan database project tersebut agar tidak membuat database yang tidak diperlukan.
SQL:
CREATE DATABASE absensi_iot;
Kemudian:
USE absensi_iot;
4. Tabel Users
Tabel pertama digunakan untuk menyimpan identitas siswa atau pegawai.
Contoh:
CREATE TABLE users (
id_user INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(100) NOT NULL,
nomor_identitas VARCHAR(50) NULL,
kelas VARCHAR(50) NULL,
jabatan VARCHAR(100) NULL,
fingerprint_id INT NULL,
status ENUM('aktif','nonaktif') DEFAULT 'aktif',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
Contoh data:
| ID | Nama | Identitas | Kelas | Fingerprint |
|---|---|---|---|---|
| 1 | Bayu | 1001 | XII RPL | 1 |
| 2 | Andi | 1002 | XII RPL | 2 |
| 3 | Siti | 1003 | XI RPL | 3 |
5. Mengapa Fingerprint ID Disimpan?
AS608 tidak mengetahui nama siswa.
Sensor hanya mengenal template fingerprint berdasarkan ID.
Contohnya:
ID 1
ID 2
ID 3
ID 4
Maka database yang menerjemahkannya.
AS608
ID = 2
↓
Database
↓
Fingerprint ID 2
↓
Andi
Jadi hubungan antara sensor dan database sangat penting.
6. Tabel Devices
Sekarang kita buat tabel perangkat.
CREATE TABLE devices (
id_device INT AUTO_INCREMENT PRIMARY KEY,
nama_device VARCHAR(100) NOT NULL,
kode_device VARCHAR(50) NOT NULL UNIQUE,
lokasi VARCHAR(150) NULL,
status ENUM('aktif','nonaktif') DEFAULT 'aktif',
api_key VARCHAR(255) NOT NULL,
ip_address VARCHAR(50) NULL,
firmware VARCHAR(50) NULL,
online ENUM('Y','N') DEFAULT 'N',
last_seen DATETIME NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
Contoh data:
| Device | Kode | Lokasi | Online |
|---|---|---|---|
| Mesin Absensi 1 | ABS-001 | Gerbang Utama | Y |
| Mesin Absensi 2 | ABS-002 | Ruang Guru | Y |
| Mesin Absensi 3 | ABS-003 | Laboratorium | N |
7. Device Code Harus Unik
Bagian ini sangat penting:
kode_device VARCHAR(50) NOT NULL UNIQUE
Dengan UNIQUE, database tidak mengizinkan dua perangkat memiliki kode yang sama.
Contoh:
ABS-001
ABS-002
ABS-003
Tidak boleh:
ABS-001
ABS-001
Karena server harus bisa membedakan setiap mesin.
8. API Key
Setiap device juga mempunyai API Key.
Contohnya:
ABS-001
API KEY:
a8f73b92c1d54...
API Key digunakan untuk memastikan request memang berasal dari perangkat yang telah terdaftar.
Konsepnya:
ESP8266
│
│ Device Code
│ API Key
▼
CodeIgniter 4
│
▼
Cek database
│
├── valid → lanjut
│
└── tidak valid → ditolak
Jangan memasukkan API Key asli ke artikel publik.
9. Tabel Attendance
Sekarang kita buat tabel utama untuk menyimpan data absensi.
CREATE TABLE attendance (
id_attendance BIGINT AUTO_INCREMENT PRIMARY KEY,
id_user INT NOT NULL,
id_device INT NOT NULL,
fingerprint_id INT NOT NULL,
tanggal DATE NOT NULL,
jam TIME NOT NULL,
status VARCHAR(30) DEFAULT 'Hadir',
keterangan VARCHAR(255) NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_user (id_user),
INDEX idx_device (id_device),
INDEX idx_tanggal (tanggal),
INDEX idx_fingerprint (fingerprint_id)
);
10. Contoh Data Absensi
Misalnya Bayu melakukan scan pada perangkat ABS-001.
Database dapat menyimpan:
Nama : Bayu
Fingerprint ID : 1
Device : ABS-001
Tanggal : 2026-09-15
Jam : 07:12:30
Status : Hadir
Contoh tabel:
| Nama | Fingerprint | Device | Tanggal | Jam | Status |
|---|---|---|---|---|---|
| Bayu | 1 | ABS-001 | 2026-09-15 | 07:12:30 | Hadir |
| Andi | 2 | ABS-001 | 2026-09-15 | 07:15:22 | Hadir |
| Siti | 3 | ABS-002 | 2026-09-15 | 07:18:10 | Telat |
11. Tabel Device Logs
Selain absensi, kita juga perlu mencatat aktivitas perangkat.
Misalnya:
ESP8266 terhubung
ESP8266 disconnect
Fingerprint scan
WiFi reconnect
Device online
Device offline
Buat tabel:
CREATE TABLE device_logs (
id_log BIGINT AUTO_INCREMENT PRIMARY KEY,
id_device INT NOT NULL,
fingerprint_id INT NULL,
aktivitas VARCHAR(100) NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_device (id_device),
INDEX idx_created (created_at)
);
Contoh:
| Device | Fingerprint | Aktivitas |
|---|---|---|
| ABS-001 | NULL | DEVICE_ONLINE |
| ABS-001 | 1 | FINGERPRINT_SCAN |
| ABS-001 | 1 | ABSEN_MASUK |
| ABS-001 | NULL | WIFI_RECONNECT |
12. Relasi Data
Sekarang kita memiliki:
users
│
│ id_user
▼
attendance
▲
│ id_device
│
devices
Sedangkan log:
devices
│
│ id_device
▼
device_logs
Secara konsep:
13. Tambahkan Data Device Pertama
Untuk testing, kita bisa memasukkan satu device.
INSERT INTO devices
(
nama_device,
kode_device,
lokasi,
status,
api_key,
online
)
VALUES
(
'Mesin Absensi 1',
'ABS-001',
'Gerbang Utama',
'aktif',
'API_KEY_DEVICE_001',
'N'
);
Kemudian device kedua:
INSERT INTO devices
(
nama_device,
kode_device,
lokasi,
status,
api_key,
online
)
VALUES
(
'Mesin Absensi 2',
'ABS-002',
'Ruang Guru',
'aktif',
'API_KEY_DEVICE_002',
'N'
);
14. Tambahkan Data Siswa
Untuk pengujian:
INSERT INTO users
(
nama,
nomor_identitas,
kelas,
fingerprint_id,
status
)
VALUES
(
'Bayu',
'1001',
'XII RPL',
1,
'aktif'
),
(
'Andi',
'1002',
'XII RPL',
2,
'aktif'
),
(
'Siti',
'1003',
'XI RPL',
3,
'aktif'
);
Sekarang database sudah mempunyai tiga fingerprint:
Fingerprint 1 → Bayu
Fingerprint 2 → Andi
Fingerprint 3 → Siti
15. Simulasi Data Absensi
Misalnya Bayu melakukan absensi melalui ABS-001.
Kita bisa mencoba:
INSERT INTO attendance
(
id_user,
id_device,
fingerprint_id,
tanggal,
jam,
status
)
VALUES
(
1,
1,
1,
CURDATE(),
CURTIME(),
'Hadir'
);
Kemudian cek:
SELECT * FROM attendance;
Jika berhasil, data akan muncul.
16. Kenapa Tidak Langsung Menyimpan Nama?
Sebaiknya tabel absensi menyimpan:
id_user
id_device
fingerprint_id
bukan hanya:
nama
Karena data lebih mudah dikelola.
Contohnya:
id_user = 1
mengarah ke:
Bayu
Jika nama berubah menjadi:
Bayu Sahrizal
kita cukup mengubah data pada users.
Data absensi lama tetap terhubung dengan orang yang sama.
17. Index Database
Kita sudah menambahkan:
INDEX idx_tanggal (tanggal)
Ini berguna ketika dashboard sering melakukan pencarian:
Absensi hari ini
Absensi bulan ini
Absensi minggu ini
Contohnya:
SELECT *
FROM attendance
WHERE tanggal = CURDATE();
Untuk jumlah data yang semakin besar, index akan membantu pencarian database.
18. Konsep Data dari ESP8266
Nantinya ESP8266 tidak langsung berbicara dengan MySQL.
Jangan lakukan:
ESP8266
↓
MySQL
Yang benar:
ESP8266
↓
HTTP
↓
API CodeIgniter 4
↓
Model
↓
MySQL
Jadi ESP8266 mengirim request ke API.
Contohnya secara konsep:
{
"device_code": "ABS-001",
"fingerprint_id": 1,
"tanggal": "2026-09-15",
"jam": "07:12:30"
}
CodeIgniter 4 kemudian melakukan:
1. Cek Device Code
2. Cek API Key
3. Cari fingerprint
4. Cari user
5. Cek jam absensi
6. Tentukan status
7. Simpan absensi
8. Catat device log
9. Kirim response
19. Keamanan Database
Jangan memberikan akses MySQL langsung kepada ESP8266.
Misalnya jangan membuat ESP8266 mengetahui:
Database Host
Database Username
Database Password
ESP8266 cukup mengetahui:
Server API
Device Code
API Key
Contoh:
ESP8266
│
│ HTTPS/HTTP
▼
/api/absen
│
▼
CodeIgniter 4
│
▼
MySQL
Dengan cara ini database tetap berada di belakang aplikasi server.
20. Struktur Sistem Setelah Artikel #9
Sekarang kita sudah memiliki tiga lapisan:
Perangkat
21. Kesimpulan
Database merupakan fondasi utama sistem absensi IoT.
Pada artikel ini kita sudah membuat:
users
devices
attendance
device_logs
Dengan konsep:
Fingerprint ID
↓
Users
↓
Attendance
↑
Device
↓
Device Logs
Setelah database siap, tahap berikutnya adalah membuat API CodeIgniter 4 yang menjadi jembatan antara ESP8266 dan MySQL.




Tidak ada komentar:
Posting Komentar