Ihsan Ramadhan · projects
Kembali ke Project

NutriTrack

496 words 3 min read #flask#flutter#mongo#iot
Categories Campus

NutriTrack

NutriTrack melacak nutrisi dengan menghubungkan timbangan IoT, API nutrisi pihak ketiga, dan model rekomendasi ML. Saya bekerja terutama di sisi backend dan integrasi IoT, dengan kontribusi kecil di sisi mobile.

Cara Kerja

Pengguna mencatat makanan melalui aplikasi mobile. Aplikasi mengirimkan nama makanan ke backend, lalu backend meminta data berat ke ESP32. ESP32 membaca sensor load cell dan baru mengirimkan respons setelah beban stabil.

Backend menggabungkan berat dengan nama makanan dan melakukan query ke CalorieNinjas. Data nutrisi dihitung berdasarkan porsi aktual di atas timbangan. Hasilnya disimpan ke log harian dan dikirim kembali ke aplikasi mobile.

Integrasi IoT — Server Web ESP32

ESP32 bertindak sebagai web server. Backend terhubung ke ESP32 melalui IP statis dan mengambil data via protokol REST API. Logika stabilitas beban berjalan langsung di ESP32, sehingga perangkat hanya merespons saat pembacaan sensor stabil. Hal ini membebaskan backend dari retry loop dan pemrosesan logika perangkat keras.

API Pihak Ketiga — CalorieNinjas

Backend memanggil CalorieNinjas untuk mencari data nutrisi. Pencatatan teks menggunakan data gram dari ESP32 agar perhitungan makronutrien sesuai dengan porsi asli. Pencatatan gambar memanfaatkan endpoint pengenalan gambar CalorieNinjas untuk mendeteksi makanan dan mengurai nutrisinya. Semua respons dari pihak ketiga diseragamkan ke format kode HTTP standar sebelum dikembalikan ke klien mobile.

Inferensi ML — Rekomendasi Diet

Fitur rekomendasi menggunakan model inferensi pre-trained yang diambil dari GitHub. Model ini dijalankan secara lokal di server untuk mengubah data profil pengguna menjadi rencana diet. Menjalankan model secara lokal menghilangkan latensi API eksternal dan menjaga privasi data pengguna.

Dokumentasi API

Arsitektur Sistem (ERD & Sequence Diagram)

ERD menggambarkan struktur data untuk profil, log harian, dan item makanan di MongoDB. Sequence diagram memetakan komunikasi sinkron antara aplikasi mobile, backend Flask, ESP32, dan CalorieNinjas saat pengguna mencatat makanan.

Integrasi Swagger

Dokumentasi Swagger UI NutriTrack

Dokumentasi API tersedia melalui Swagger UI di /api/docs menggunakan spesifikasi OpenAPI 3.0.3. Dokumentasi ini mencakup format request, response, dan autentikasi JWT untuk 8 endpoint, menggantikan file Postman yang terpisah dengan dokumentasi terpusat yang bisa diuji langsung.

Tech Stack

  • Mobile: Flutter
  • Backend: Python, Flask
  • Database: MongoDB
  • IoT: ESP32 + HX711 load cell
  • Nutrition API: CalorieNinjas

Tautan Proyek