Modul Flask Dan Microdot - Integrasi Fingerprint Dan Dashboard Absensi Dengan Raspberry Pi Pi
Modul Flask Dan Microdot - Integrasi Fingerprint Dan Dashboard Absensi Dengan Raspberry Pi Pi
dan Dashboard
Absensi dengan
Raspberry Pi Pico W
Disusun oleh :
Agus Dwi Kurniawan,
S.Kom Syahrul
Banadi, S.Kom
Ayu Candra Amalia,
S.Kom
Pelatihan Upsklilling dan
Reskilling Angkatan XVII
IT Business berbasis Data
Science
Modul Flask dan Microdot: Integrasi Fingerprint dan Dashboard
Absensi dengan Raspberry Pi Pico W
Bab 1: Instalasi Python dan PyCharm
Persiapan lingkungan pengembangan
Instalasi Python
Instalasi PyCharm
Lampiran
A. Referensi dan Bacaan Tambahan
B. Daftar Pustaka
Indeks
Kata Pengantar
Bismillahirrahmanirrahim.
Segala puji bagi Allah SWT, Tuhan semesta alam, yang telah memberikan hidayah dan
petunjuk-Nya kepada kita semua. Shalawat dan salam semoga tercurah kepada Nabi
Muhammad SAW, suri teladan bagi umat manusia dalam menuntut ilmu dan
mengamalkannya.
Modul ini disusun sebagai hasil dari pelatihan Upskilling dan Reskilling Angkatan ke
XVII dengan tema IT Business Berbasis Data Science. Pelatihan ini bertujuan untuk
meningkatkan keterampilan dan pengetahuan para peserta dalam bidang teknologi informasi
dan data science, yang semakin penting di era digital saat ini.
Dalam modul ini, kami mengajak para pembaca untuk menggali dan memahami bagaimana
mengembangkan aplikasi manajemen absensi siswa menggunakan teknologi Flask dan
Microdot di Raspberry Pi Pico W. Pembaca akan dibimbing melalui langkah-langkah mulai
dari instalasi, pengembangan, hingga penerapan analisis data untuk menghasilkan wawasan
yang bermanfaat dalam pengelolaan absensi.
Semoga modul ini dapat memberikan manfaat yang besar bagi pembaca, khususnya dalam
meningkatkan kompetensi di bidang teknologi informasi dan data science. Kami berharap
pembaca dapat mengaplikasikan ilmu yang didapat untuk kebaikan, serta memberikan
kontribusi positif bagi masyarakat dan bangsa.
Akhir kata, kami mohon maaf jika terdapat kekurangan dalam penyampaian modul ini.
Semoga Allah SWT senantiasa membimbing kita dalam menuntut ilmu dan
mengamalkannya, serta memberikan keberkahan dalam setiap langkah yang kita ambil.
Sebelum memulai pengembangan aplikasi dengan Flask dan Microdot, kita perlu
menyiapkan lingkungan pengembangan yang sesuai. Dalam bab ini, kita akan membahas
langkah-langkah untuk menginstal Python dan PyCharm, dua alat yang sangat penting dalam
proses pengembangan aplikasi ini.
1.1.1 Kebutuhan Sistem Pastikan komputer Anda memenuhi kebutuhan sistem minimum
untuk menjalankan Python dan PyCharm:
Klik tombol Download Python di halaman tersebut. Versi terbaru akan otomatis
dipilih berdasarkan sistem operasi Anda.
Setelah instalasi selesai, buka Command Prompt (Windows + R, ketik cmd, lalu
Enter).
python –-version
Jika Python terinstal dengan benar, Anda akan melihat versi Python yang terinstal.
pip --version
Jika pip belum terinstal, Anda bisa mengikuti petunjuk instalasi di situs resmi Python.
Saat pertama kali membuka PyCharm, Anda akan diminta untuk mengkonfigurasi
environment.
Pilih Create New Project.
Jalankan kode dengan klik kanan pada file dan pilih Run 'hello.py'.
Jika muncul output "Hello, World!", maka PyCharm sudah terinstal dan dikonfigurasi dengan
benar.
venv\Scripts\activate
o Di macOS/Linux:
source venv/bin/activate
o Setelah diaktifkan, Anda akan melihat nama lingkungan virtual di awal baris
perintah.
1.5 Kesimpulan
Pada bab ini, Anda telah berhasil menginstal Python dan PyCharm serta mengkonfigurasi
lingkungan pengembangan untuk proyek Flask dan Microdot. Dengan lingkungan yang telah
disiapkan, Anda siap untuk melanjutkan ke bab berikutnya dan memulai pengembangan
aplikasi.
Bab 2
Instalasi
Flask
Berikut adalah langkah-langkah untuk menginstall Flask di project yang sudah dibuat di
PyCharm menggunakan menu package:
Buka PyCharm dan buka project yang sudah Anda buat sebelumnya.
Di jendela PyCharm, klik File > Settings (atau PyCharm > Preferences jika Anda
menggunakan macOS).
Di jendela Settings, cari dan klik opsi Project: [nama proyek Anda] > Python
Interpreter pada menu sebelah kiri.
3. Menambahkan Flask ke Project
Pada halaman Python Interpreter, Anda akan melihat daftar package yang sudah terinstal di
environment proyek Anda.
Klik tombol + (di sebelah kanan atas) untuk membuka jendela Available Packages.
4. Cari Flask
5. Install Flask
Setelah memilih Flask, klik tombol Install Package yang ada di bagian bawah jendela.
PyCharm akan secara otomatis mengunduh dan menginstall Flask di proyek Anda.
6. Verifikasi Instalasi Flask
Setelah instalasi selesai, Flask akan muncul dalam daftar package di Python Interpreter.
Anda juga bisa memverifikasi dengan menambahkan kode berikut di file Python:
@app.route('/')
def
hello_world():
return 'Hello, Flask!'
Flask akan menjalankan server lokal dan Anda bisa mengaksesnya di browser dengan URL
http://127.0.0.1:5000.
Selamat! Flask sudah berhasil diinstall di proyek PyCharm Anda.
Tips: Anda juga bisa menambahkan package dengan menekan menu package di sebelah kiri
bawah Jendela Aplikasi
Bab 3
Membangun Website Dinamis dengan Flask dan Jinja2: Menggunakan
CSS dan JavaScript
Buat folder static dan templates dengan cara kita klik kanan di folder python kita lalu pilih file terus
directory
Lalu buat file python untuk aplikasinya contohnya kita buat dengan nama app.py. Caranya kita klik
kanan pada folder project kita lalu pilih New – python file
@app.route('/')
def home():
return render_template('index.html', title="Home")
Buat file index.html di dalam folder templates dengan cara klik kanan pada folder
templates lalu Pilih New – HTML File
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ title }}</title>
<link rel="stylesheet" href="{{ url_for('static',
filename='css/style.css') }}">
</head>
<body>
<h1>Welcome to My Flask Website</h1>
<p>This is a simple website using Flask, CSS, and JavaScript.</p>
Penjelasan:
o {{ title }} adalah contoh penggunaan Jinja2 untuk memanfaatkan
variabel Python di HTML.
o CSS dan JavaScript dihubungkan menggunakan {{
url_for('static', filename='...') }}.
Langkah 4: Buat File CSS (style.css)
Buat folder css di dalam folder static dengan cara klik kanan pada folder static lalu Pilih
New – Directory
Lalu kita buat file baru bernama style.css dengan cara klik kanan pada folder css lalu pilih
New – File
Ketik nama file nya, yaitu style.css
body {
font-family: Arial, sans-serif;
background-color: #f0f0f0;
margin: 0;
padding: 0;
text-align: center;
}
h1 {
color: #333;
margin-top: 50px;
}
button {
padding: 10px 20px;
font-size: 16px;
margin-top: 20px;
}
Langkah 5: Buat File JavaScript (script.js)
Buat folder js di dalam folder static dengan cara klik kanan pada folder static lalu Pilih
New – Directory
document.getElementById("alertButton").addEventListener("click", function()
{
alert("Button clicked!");
});
Kita jalankan file app.py dengan membuka file app.py lalu klik kanan Run atau dengan klik
tombol run.
Buka browser dan akses website di http://127.0.0.1:5000 .
Hasil Akhir:
Ketika Anda mengunjungi situs, Anda akan melihat halaman sederhana dengan judul,
paragraf, dan tombol. Jika Anda mengklik tombol tersebut, alert dari JavaScript akan muncul.
Secara keseluruhan struktur direktori project yang sudah kita buat adalah seperti berikut:
ProjectFlask/
│
├── static/
│ ├── css/
│ │ └── style.css
│ ├── js/
│ │ └── script.js
│
├── templates/
│ └── index.html
│
└── app.py
Di bagian ini, kita akan membahas cara menghubungkan perangkat fingerprint ke komputer
menggunakan jaringan LAN. Pastikan perangkat fingerprint sudah terhubung ke jaringan
yang sama dengan komputer yang menjalankan aplikasi Flask.
Langkah-langkah:
1. Persiapkan perangkat fingerprint dan pastikan sudah terhubung ke jaringan lokal
(LAN).
2. Catat alamat IP dari perangkat fingerprint. Alamat ini akan digunakan untuk
menghubungkan Flask dengan perangkat.
3. Pastikan port yang digunakan oleh perangkat fingerprint terbuka dan dapat diakses
dari komputer.
Buka Alatnya tekan M/OK
Pada saat mendaftar fingerprint yang bagus itu harus jelas , jadi jangan malu malu pada saat
mendaftarkan sidik jari
Mesin ini memakai sensor cahaya. Jadi pada saat meletakkan alat jangan kena
cahaya langsung
Cek IP nya, cek user nya , cek Nomer mesin nya.
Untuk menjaga keawetan alat kita algoritma itu jangan Masuk Pulang lewat tombol
Maka kita pakai algoritma
Jadi pada saat masuk diambil yang paling awal dan pulang diambil yang paling akhir
Tapi jangan langsung dicoba tapi kita lihat berdasarkan data yang dipakai dulu baru kita
algoritmakan
Posisikan yang enak, jangan terlalu tinggi dan jangan terlalu rendah
Bagaimana kalua orangnya banyak, kita pecah jaraknya
Makanya Konsepnya harus benar, Lokasi nya yang tepat, manajemen tata letak alat juga
Bagaimana apabila pada saat absen tiba tiba data terputus ?
Jadi ada peluang lost disitu, solusinya bagaimana ?
Kita akan menggunakan zklib, sebuah library yang dirancang untuk berkomunikasi dengan
perangkat fingerprint dari ZKTeco.
Instalasi ZKLib:
atau
Dalam file Python Flask Anda, import library zklib dan buat koneksi ke perangkat
fingerprint.
device_info = conn.get_device_info()
print(device_info)
def get_attendance():
attendance_data = conn.get_attendance()
return attendance_data
Menyimpan Data ke Database SQLite: Buat skema database SQLite untuk
menyimpan data absensi. Pastikan Anda telah menginstal SQLite.
import sqlite3
def save_attendance(attendance_data):
for record in attendance_data:
user_id = record.user_id # Sesuaikan dengan struktur data
yang diterima
cursor.execute('INSERT INTO attendance (user_id) VALUES (?)',
(user_id,))
conn_db.commit()
Menggabungkan Semuanya dalam Route Flask: Anda dapat mengatur route Flask
untuk mengakses fungsi ini.
@app.route('/fetch_attendance')
def fetch_attendance():
attendance_data = get_attendance()
save_attendance(attendance_data)
return "Data absensi berhasil diambil dan disimpan."
python app.py
Kesimpulan
Bab ini telah menjelaskan bagaimana cara menghubungkan perangkat fingerprint ke
komputer menggunakan Flask, serta mengimplementasikan fungsi untuk mengambil dan
menyimpan data absensi ke dalam database SQLite. Dengan integrasi ini, aplikasi Anda
dapat secara otomatis merekam kehadiran pengguna berdasarkan data dari perangkat
fingerprint.
Bab 5: Membangun CRUD untuk Pengguna dengan Template SB Admin
5.1 Pendahuluan
Di bagian ini, kita akan membangun antarmuka pengguna menggunakan template SB Admin.
Kita akan membuat halaman dashboard yang mencakup fitur CRUD (Create, Read, Update,
Delete) untuk mengelola data pengguna. Template ini memberikan tampilan yang responsif
dan modern.
Struktur folder untuk aplikasi Flask dengan template SB Admin akan terlihat seperti ini:
/project_root
│
├── /templates
│ ├── /base.html
│ ├── /dashboard.html
│ ├── /user
│ │ ├── index.html
│ │ ├── create.html
│ │ └── edit.html
│ └── /partials
│ ├── sidebar.html
│ └── header.html
│
├── app.py
└── requirements.txt
Membuat File base.html: Buat file base.html yang akan menjadi template dasar
untuk semua halaman. Ini akan memuat CSS dan JavaScript dari template SB Admin.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-
scale=1, shrink-to-fit=no">
<link rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstra
p.min.css">
<link rel="stylesheet" href="{{ url_for('static',
filename='css/sb-admin.css') }}">
<title>{% block title %}Dashboard{% endblock %}</title>
</head>
<body>
{% include 'partials/header.html' %}
{% include 'partials/sidebar.html' %}
<div class="container-fluid">
{% block content %}{% endblock %}
</div>
<script src="https://code.jquery.com/jquery-
3.5.1.slim.min.js"></script>
<script
src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.b
undle.min.js"></script>
</body>
</html>
{% extends 'base.html' %}
{% block content %}
<h1 class="mt-4">Dashboard</h1>
<div class="row">
<div class="col-xl-3 col-md-6 mb-4">
<div class="card border-left-primary shadow h-100 py-2">
<div class="card-body">
<div class="row no-gutters align-items-center">
<div class="col mr-2">
<div class="text-xs font-weight-bold text-
primary text-uppercase mb-1">Total Pengguna</div>
<div class="h5 mb-0 font-weight-bold text-
gray-800">{{ total_users }}</div>
</div>
<div class="col-auto">
<i class="fas fa-users fa-2x text-gray-
300"></i>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
Membuat File index.html: Buat file index.html dalam folder user untuk
menampilkan daftar pengguna.
{% extends 'base.html' %}
{% block content %}
<h1 class="mt-4">Daftar Pengguna</h1>
<a href="{{ url_for('create_user') }}" class="btn btn-primary mb-
3">Tambah Pengguna</a>
<table class="table table-bordered">
<thead>
<tr>
<th>ID</th>
<th>Nama</th>
<th>Email</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
{% for user in users %}
<tr>
<td>{{ user.id }}</td>
<td>{{ user.name }}</td>
<td>{{ user.email }}</td>
<td>
<a href="{{ url_for('edit_user', user_id=user.id) }}"
class="btn btn-warning">Edit</a>
<a href="{{ url_for('delete_user', user_id=user.id)
}}" class="btn btn-danger">Hapus</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
{% extends 'base.html' %}
{% block content %}
<h1 class="mt-4">Tambah Pengguna</h1>
<form action="{{ url_for('create_user') }}" method="POST">
<div class="form-group">
<label for="name">Nama</label>
<input type="text" class="form-control" id="name" name="name"
required>
</div>
<div class="form-group">
<label for="email">Email</label>
<input type="email" class="form-control" id="email"
name="email" required>
</div>
<button type="submit" class="btn btn-primary">Simpan</button>
</form>
{% endblock %}
Membuat File edit.html: Buat file edit.html untuk form mengedit data
pengguna yang sudah ada.
{% extends 'base.html' %}
{% block content %}
<h1 class="mt-4">Edit Pengguna</h1>
<form action="{{ url_for('edit_user', user_id=user.id) }}"
method="POST">
<div class="form-group">
<label for="name">Nama</label>
<input type="text" class="form-control" id="name" name="name"
value="{{ user.name }}" required>
</div>
<div class="form-group">
<label for="email">Email</label>
<input type="email" class="form-control" id="email"
name="email" value="{{ user.email }}" required>
</div>
<button type="submit" class="btn btn-warning">Perbarui</button>
</form>
{% endblock %}
def get_db_connection():
conn = sqlite3.connect('attendance.db')
conn.row_factory = sqlite3.Row
return conn
@app.route('/dashboard')
def dashboard():
conn = get_db_connection()
total_users = conn.execute('SELECT COUNT(*) FROM
users').fetchone()[0]
conn.close()
return render_template('dashboard.html', total_users=total_users)
@app.route('/user')
def user_index():
conn = get_db_connection()
users = conn.execute('SELECT * FROM users').fetchall()
conn.close()
return render_template('user/index.html', users=users)
5.8 Kesimpulan
Pada bab ini, kita telah berhasil membangun aplikasi CRUD untuk pengguna dengan
menggunakan template SB Admin. Dengan ini, kita dapat mengelola data pengguna melalui
antarmuka yang menarik dan responsif.
Catatan: Pastikan untuk menyesuaikan koneksi database dan struktur tabel sesuai kebutuhan
proyek Anda.
Bab 6
Merekam dan Mengelola Data Log dari Fingerprint
6.1 Menyimpan Data Log ke dalam Database
Pada bagian ini, Anda akan mempelajari bagaimana merekam data log absensi yang diambil
dari perangkat fingerprint ke dalam database SQLite. Data yang akan direkam meliputi ID
pengguna, waktu masuk, dan waktu keluar.
1. Membuat Tabel untuk Pencatatan Absensi Pastikan Anda telah membuat tabel di
database SQLite untuk menyimpan data log absensi. Anda bisa menggunakan
skema tabel berikut:
def record_attendance():
try:
zk.connect()
users = zk.get_users()
attendance = zk.get_attendance()
# Simpan ke database
cursor = conn.cursor()
cursor.execute("INSERT INTO attendance (user_id,
timestamp, status) VALUES (?, ?, ?)",
(user_id, timestamp, status))
conn.commit()
zk.disable_device()
except Exception as e:
print(f"Error: {e}")
finally:
conn.close()
Setelah Anda menyimpan data absensi, penting untuk mengatur tampilan dan pengelolaan
data log ini. Anda akan membuat halaman untuk menampilkan data absensi yang telah
direkam.
Contoh attendance.html:
{% extends 'base.html' %}
{% block content %}
<h1>Log Absensi</h1>
<table>
<thead>
<tr>
<th>ID</th>
<th>User ID</th>
<th>Waktu</th>
<th>Status</th>
</tr>
</thead>
<tbody>
{% for record in attendance %}
<tr>
<td>{{ record.id }}</td>
<td>{{ record.user_id }}</td>
<td>{{ record.timestamp }}</td>
<td>{{ record.status }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
@app.route('/attendance')
def attendance_index():
conn = sqlite3.connect('absensi.db')
cursor = conn.cursor()
cursor.execute("SELECT * FROM
attendance") attendance =
cursor.fetchall() conn.close()
return render_template('attendance.html', attendance=attendance)
6.3 Kesimpulan
Dalam bab ini, Anda telah berhasil merekam data log dari perangkat fingerprint ke dalam
database SQLite. Anda juga telah mengatur tampilan untuk menampilkan data absensi
melalui halaman web. Dengan ini, Anda dapat mengelola data absensi dengan lebih efektif.
Selanjutnya, Anda dapat melanjutkan ke bab berikutnya, yang akan membahas tentang
analisis data menggunakan teknik data science.
Bab 7: Data Science untuk Prediksi Keterlambatan dengan Naive Bayes
Data science adalah disiplin ilmu yang menggabungkan statistik, analisis data, dan
pemrograman untuk memahami dan memprediksi data. Dalam konteks ini, kita akan
menggunakan data absensi siswa untuk membangun model yang dapat memprediksi
kemungkinan keterlambatan siswa berdasarkan data yang ada.
Kita akan mengumpulkan data absensi siswa dari database SQLite yang telah dibuat
sebelumnya. Misalkan tabel absensi kita memiliki struktur berikut:
Kita akan menggunakan pandas untuk mengambil data dari database dan
mempersiapkannya untuk analisis. Berikut adalah contoh pengambilan data:
import sqlite3
import pandas as pd
# Koneksi ke database
conn = sqlite3.connect('attendance.db')
conn.close()
# Menampilkan data
print(data.head())
Setelah data siap, kita bisa melanjutkan untuk membangun model Naive Bayes.
# Membangun model
model = GaussianNB()
model.fit(X_train, y_train)
# Melakukan prediksi
y_pred = model.predict(X_test)
# Menghitung akurasi
accuracy = accuracy_score(y_test, y_pred)
print(f"Akurasi model: {accuracy:.2f}")
Setelah model dibuat, kita perlu menyimpan model yang sudah dilatih ke file menggunakan
pickle, agar bisa digunakan di aplikasi Flask.
import pickle
# Menyimpan model
with open('naive_bayes_model.pkl', 'wb') as model_file:
pickle.dump(model, model_file)
Setelah model disimpan, kita bisa mengintegrasikannya ke dalam aplikasi Flask untuk
melakukan prediksi keterlambatan siswa berdasarkan data yang baru.
# Memuat model
with open('naive_bayes_model.pkl', 'rb') as model_file:
model = pickle.load(model_file)
@app.route('/predict', methods=['POST'])
def predict():
user_id = request.json['user_id']
prediction = model.predict([[user_id]])
return jsonify({'is_late': prediction[0]})
7.9 Kesimpulan
Pada bab ini, kita telah berhasil membangun model prediksi keterlambatan siswa
menggunakan algoritma Naive Bayes. Kita juga telah mempersiapkan data dari database dan
menyimpan model untuk digunakan di aplikasi Flask. Dengan model ini, kita dapat membuat
prediksi yang lebih baik mengenai keterlambatan siswa di masa mendatang.
Bab 8: Mengintegrasikan Model Prediksi ke dalam Flask
Pendahuluan
Setelah kita melatih model prediksi menggunakan algoritma Naive Bayes dan menyimpannya
dalam bentuk file pickle, langkah selanjutnya adalah mengintegrasikan model ini ke dalam
aplikasi Flask. Dengan melakukan ini, kita dapat membuat endpoint yang memungkinkan
pengguna untuk mengakses prediksi keterlambatan siswa secara real-time. Di bab ini, kita
akan belajar cara menggunakan file pickle untuk memuat model, menyiapkan endpoint Flask
untuk mengakses prediksi, dan menampilkan hasil prediksi dalam antarmuka pengguna.
Untuk menggunakan model yang telah dilatih dalam aplikasi Flask, kita perlu memuat model
tersebut dari file pickle yang telah kita buat sebelumnya.
1. Memuat Model Kita akan menggunakan library pickle untuk memuat model yang
disimpan.
import pickle
def load_model():
with open('model_naive_bayes.pkl', 'rb') as f:
model = pickle.load(f)
return model
Setelah model dimuat, kita akan menyiapkan endpoint dalam aplikasi Flask yang akan
menerima input dan memberikan prediksi.
@app.route('/predict', methods=['POST'])
def predict():
# Mendapatkan data dari request
data = request.json
hour = data['hour'] # Mengambil jam dari input
# Membuat prediksi
prediction = model.predict([[hour]])
result = 'late' if prediction[0] == 1 else 'on time'
return jsonify({'prediction': result})
Kita perlu membuat antarmuka pengguna untuk mengirim data dan menampilkan hasil
prediksi. Kita akan membuat halaman HTML baru yang memungkinkan pengguna untuk
memasukkan data dan mendapatkan prediksi.
1. Membuat Formulir untuk Input Data Di dalam folder templates, kita akan
membuat file baru bernama predict.html yang berisi formulir untuk
memasukkan jam absensi.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-
scale=1.0">
<link rel="stylesheet" href="{{ url_for('static',
filename='css/style.css') }}">
<title>Prediksi Keterlambatan</title>
</head>
<body>
<h1>Prediksi Keterlambatan Siswa</h1>
<form id="predict-form">
<label for="hour">Jam Masuk (0-23):</label>
<input type="number" id="hour" name="hour" min="0" max="23"
required>
<button type="submit">Prediksi</button>
</form>
<h2 id="result"></h2>
<script>
document.getElementById('predict-form').onsubmit = async
function(e) {
e.preventDefault();
const hour = document.getElementById('hour').value;
@app.route('/predict_page')
def predict_page():
return render_template('predict.html')
Kesimpulan
Di bab ini, Anda telah belajar bagaimana mengintegrasikan model prediksi keterlambatan
siswa ke dalam aplikasi Flask. Anda telah mempelajari cara memuat model dari file pickle,
menyiapkan endpoint untuk menerima input dan memberikan prediksi, serta menampilkan
hasil prediksi dalam antarmuka pengguna. Integrasi ini memungkinkan aplikasi Anda untuk
memberikan analisis dan prediksi secara real-time kepada pengguna.
Pendahuluan
Microdot adalah framework ringan yang memungkinkan kita untuk menjalankan aplikasi
web di perangkat mikrokontroler seperti Raspberry Pi Pico W. Pertama, kita perlu
memastikan bahwa kita telah menginstal Microdot di Raspberry Pi Pico W.
1. Instalasi Microdot
o Pastikan Anda telah mengunduh Microdot dan pustaka yang diperlukan
untuk Raspberry Pi Pico W.
o Salin file Microdot ke direktori proyek Anda.
2. Membuat Struktur Folder Proyek Microdot Buat struktur folder berikut di
Raspberry Pi Pico W:
bash
Salin kode
/pico_dashboard/
├── main.py
└── templates/
└── dashboard.html
Kita akan membuat file HTML bernama dashboard.html yang akan digunakan
untuk menampilkan data absensi dan hasil prediksi. Dashboard ini akan mengambil
data dari aplikasi Flask yang berjalan di komputer.
html
Salin kode
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-
scale=1.0">
<title>Dashboard Absensi</title>
</head>
<body>
<h1>Dashboard Absensi Siswa</h1>
<div id="attendance-data">
<h2>Data Absensi</h2>
<table id="attendance-table">
<thead>
<tr>
<th>Nama</th>
<th>Jam Masuk</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<!-- Data absensi akan ditambahkan di sini -->
</tbody>
</table>
</div>
<div id="prediction-result">
<h2>Prediksi Keterlambatan</h2>
<p id="predicted-status">Hasil Prediksi: </p>
</div>
</body>
</html>
9.3 Menghubungkan Dashboard dengan Flask untuk Mengambil Data Secara Real-
Time
Untuk mendapatkan data absensi dan prediksi dari aplikasi Flask, kita perlu mengatur
endpoint di Flask yang dapat diakses oleh Microdot.
@app.route('/attendance_data', methods=['GET'])
def attendance_data():
# Ambil data absensi dari database
attendance = get_attendance_data() # Ganti dengan fungsi yang
sesuai
return jsonify(attendance)
app = Microdot()
@app.route('/')
def index():
return open('templates/dashboard.html').read()
@app.route('/attendance')
def attendance():
response =
urequests.get('http://<IP_FLASK_SERVER>/attendance_data')
return response.json()
app.run(host='0.0.0.0', port=80)
Selanjutnya, kita perlu memperbarui bagian dalam dashboard.html untuk mengambil data
absensi dan menampilkannya di tabel.
<script>
async function fetchAttendance() {
const response = await fetch('/attendance');
const data = await response.json();
const tableBody = document.querySelector('#attendance-table
tbody');
tableBody.innerHTML = ''; // Menghapus data lama
data.forEach(record => {
const row = document.createElement('tr');
row.innerHTML = `
<td>${record.name}</td>
<td>${record.check_in}</td>
<td>${record.status}</td>
`;
tableBody.appendChild(row);
});
}
Kesimpulan
Di bab ini, Anda telah belajar cara membangun dashboard menggunakan Microdot di
Raspberry Pi Pico W. Anda telah mempelajari cara menyiapkan Microdot, mendesain
antarmuka dashboard, dan menghubungkannya dengan aplikasi Flask untuk mengambil data
absensi dan hasil prediksi secara real-time. Dengan dashboard ini, Anda dapat memantau data
absensi siswa dan mendapatkan prediksi keterlambatan dengan mudah.
Pendahuluan
Setelah membangun aplikasi yang lengkap dengan integrasi fingerprint, dashboard, dan
model prediksi, penting untuk melakukan pengujian untuk memastikan bahwa semuanya
berfungsi dengan baik. Pengujian yang menyeluruh akan membantu mengidentifikasi
kesalahan dan mengoptimalkan kinerja aplikasi. Dalam bab ini, kita akan membahas cara
melakukan pengujian aplikasi Flask, menangani kesalahan yang mungkin terjadi, serta
praktik terbaik dalam pengujian.
Untuk memastikan aplikasi Flask berfungsi sesuai harapan, kita perlu melakukan pengujian
pada berbagai komponen, termasuk route, fungsi, dan integrasi dengan database.
Instalasi pytest:
ProjectFlask/
├── static/
├── templates/
├── app.py
└── test_app.py
import pytest
from app import app # Pastikan untuk menyesuaikan dengan nama file
Anda
@pytest.fixture
def client():
with app.test_client() as client:
yield client
def test_index(client):
response = client.get('/')
assert response.status_code == 200
assert b'Dashboard' in response.data
def test_attendance_data(client):
response = client.get('/attendance_data')
assert response.status_code == 200
assert b'absensi' in response.data # Ganti dengan data yang
relevan
@app.errorhandler(404)
def page_not_found(e):
return "Halaman tidak ditemukan", 404
@app.errorhandler(500)
def internal_error(e):
return "Terjadi kesalahan internal", 500
2. Membuat Log Kesalahan Mencatat kesalahan dalam log akan membantu dalam
pemecahan masalah. Kita bisa menggunakan modul logging untuk mencatat
kesalahan.
import logging
logging.basicConfig(filename='error.log', level=logging.ERROR)
@app.errorhandler(Exception)
def handle_exception(e):
logging.error(f'Error occurred: {e}')
return "Terjadi kesalahan, silakan coba lagi.", 500
Jika Anda juga menggunakan Microdot di Raspberry Pi Pico W, penting untuk melakukan
pengujian dan penanganan kesalahan di sisi tersebut.
@app.route('/attendance')
def attendance():
try:
response =
urequests.get('http://<IP_FLASK_SERVER>/attendance_data')
response.raise_for_status() # Memicu error untuk status kode
HTTP yang tidak berhasil
return response.json()
except Exception as e:
return {"error": "Gagal mengambil data absensi"}, 500
Kesimpulan
Di bab ini, Anda telah mempelajari pentingnya pengujian aplikasi dan cara menangani
kesalahan yang mungkin terjadi. Dengan melakukan pengujian yang menyeluruh dan
menangani kesalahan dengan baik, Anda dapat memastikan aplikasi yang lebih stabil dan
mudah digunakan. Pastikan untuk menjalankan pengujian secara rutin saat melakukan
perubahan pada aplikasi.
Pendahuluan
Setelah mengembangkan aplikasi dengan berbagai fitur yang diperlukan untuk manajemen
absensi siswa dan analisis data, langkah berikutnya adalah melakukan deployment aplikasi ke
lingkungan nyata. Deployment yang tepat akan memastikan bahwa aplikasi dapat diakses dan
digunakan oleh pengguna akhir dengan efektif. Dalam bab ini, kita akan membahas langkah-
langkah untuk melakukan deployment aplikasi Flask dan Microdot, serta penggunaan aplikasi
di lapangan.
Sebelum melakukan deployment, Anda perlu menyiapkan lingkungan server yang akan
menjalankan aplikasi Flask. Berikut adalah beberapa langkah yang perlu diperhatikan:
1. Memilih Hosting Pilih platform hosting yang sesuai, seperti DigitalOcean, Heroku,
atau VPS (Virtual Private Server) yang bisa diatur sendiri. Pastikan platform
tersebut mendukung Python dan Flask.
2. Menginstal Dependensi Setelah mengakses server, instal Python dan dependensi
yang diperlukan menggunakan pip.
Untuk menjalankan aplikasi Flask di server, Anda perlu mengatur server agar dapat meng-
handle permintaan HTTP.
Di sini, app:app merujuk pada nama file dan nama objek Flask Anda.
2. Mengatur Nginx sebagai Reverse Proxy Jika Anda ingin mengakses aplikasi
melalui HTTP (port 80) atau HTTPS (port 443), Anda bisa menggunakan
Nginx sebagai reverse proxy.
Instalasi Nginx:
server {
listen 80;
server_name your_domain_or_IP;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Kesimpulan
Di bab ini, Anda telah mempelajari cara melakukan deployment aplikasi Flask dan Microdot
ke lingkungan nyata, serta penggunaan aplikasi oleh pengguna akhir. Langkah-langkah yang
tepat dalam deployment dan pelatihan pengguna sangat penting untuk keberhasilan
implementasi aplikasi. Pada bab selanjutnya, kita akan menyimpulkan pembelajaran dari
modul ini dan menyusun rencana pengembangan untuk fitur tambahan di masa depan.
Bab 12: Penutup dan Rencana Pengembangan Selanjutnya
Pendahuluan
Modul ini telah membawa Anda melalui proses pengembangan aplikasi manajemen absensi
siswa menggunakan Flask dan Microdot di Raspberry Pi Pico W. Dari instalasi dasar hingga
penerapan model prediksi menggunakan metode data science, setiap langkah telah dirancang
untuk memberikan pemahaman yang mendalam dan keterampilan praktis. Di bab penutup ini,
kita akan merangkum pembelajaran dari modul ini dan mendiskusikan ide-ide untuk
pengembangan fitur tambahan di masa depan.
Setelah menyelesaikan modul ini, terdapat banyak potensi untuk pengembangan lebih lanjut.
Beberapa ide yang dapat dipertimbangkan adalah:
1. Fitur Notifikasi:
o Tambahkan sistem notifikasi kepada orang tua melalui email atau SMS tentang
kehadiran atau keterlambatan anak mereka. Hal ini dapat dilakukan dengan
menggunakan API dari layanan pihak ketiga.
2. Analisis Data Lanjutan:
o Kembangkan lebih lanjut analisis data dengan menerapkan algoritma machine
learning lain untuk memprediksi pola absensi dan keterlambatan yang lebih
kompleks.
3. Integrasi dengan Sistem Informasi Sekolah:
o Pertimbangkan untuk mengintegrasikan aplikasi ini dengan sistem informasi sekolah
yang sudah ada agar data absensi dapat digunakan secara lebih luas.
4. Peningkatan Antarmuka Pengguna:
o Lakukan desain ulang antarmuka pengguna untuk meningkatkan pengalaman
pengguna dengan fokus pada usability dan aksesibilitas.
5. Modul Pelaporan:
o Buat modul pelaporan untuk memberikan analisis data secara visual, seperti grafik
dan tabel, agar lebih mudah dipahami oleh pengguna.
6. Dukungan Multi-Platform:
o Pertimbangkan untuk mengembangkan aplikasi ini menjadi aplikasi mobile
sehingga dapat diakses oleh pengguna melalui perangkat seluler.
Kesimpulan
Modul ini telah memberikan dasar yang kuat dalam pengembangan aplikasi menggunakan
Flask dan Microdot, serta penerapan teknologi untuk manajemen absensi siswa. Dengan
menggabungkan pengembangan perangkat lunak dan data science, Anda telah menciptakan
aplikasi yang tidak hanya fungsional tetapi juga memberikan wawasan berharga. Ke depan,
eksplorasi lebih lanjut dan pengembangan fitur tambahan akan semakin memperkaya
pengalaman pengguna dan meningkatkan efisiensi dalam pengelolaan absensi siswa.
Lampiran
B. Daftar Pustaka
Grinberg, M. (2018). Flask Web Development: Developing Web Applications with Python.
O'Reilly Media.
Géron, A. (2019). Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow.
O'Reilly Media.
Dokumentasi zklib. (n.d.). Diambil dari GitHub Repository
Indeks
Catatan Akhir
Lampiran ini memberikan referensi yang bermanfaat dan bisa dijadikan sumber tambahan
untuk pembaca yang ingin memperdalam pengetahuan mereka mengenai Flask, data science,
dan aplikasi terkait.