AI Pocket Assistant
Offline “Jarvis Saku”
Perangkat asisten AI pribadi seukuran HT kecil / pager modern yang muat di saku kemeja — mengingat jadwal, mencatat, menjawab pertanyaan teknis, dan membantu troubleshooting, sepenuhnya offline dengan suara Bahasa Indonesia dan privasi data 100% lokal.
Disusun sebagai: Senior Embedded System Engineer · AI Engineer · Product Designer | Target tier: Seimbang (± Rp 1,5–2,5 jt/unit) | 13 Juni 2026
0Ringkasan Eksekutif
Bunai adalah perangkat saku dengan dua otak: sebuah ESP32-S3 sebagai pengendali front-end yang selalu menyala (audio, layar, tombol, daya, RTC, wake-word) dan sebuah modul Linux H618 (Orange Pi Zero 2W) yang menjalankan AI sungguhan (LLM, STT, TTS, database memori) dan tidur saat tidak dipakai.
Tumpukan AI offline (semua lokal, tanpa internet)
🎙️ STT — whisper.cpp
Whisper tiny/base, multibahasa termasuk Indonesia. Vosk tidak dipakai karena belum ada model Bahasa Indonesia resmi.
🧠 LLM — llama.cpp
Qwen2.5-1.5B (utama) + 0.5B (mode cepat). Berjalan di CPU 4×A53; STT/embedding juga di CPU (H618 tanpa NPU).
🔊 TTS — Piper
Suara neural Bahasa Indonesia (id_ID), ringan & cepat, jalan penuh offline.
🗄️ Memori — SQLite + sqlite-vec
Database relasional + pencarian vektor untuk RAG memori pribadi, semua di microSD.
🗣️ Wake-word — ESP-SR
WakeNet "Hai Bunai" berjalan di ESP32-S3, sangat hemat daya, mengaktifkan modul AI.
🔐 Privasi
Tidak ada radio yang harus aktif. Data tidak pernah keluar perangkat. Opsi enkripsi disk.
Apa yang bisa dilakukan Bunai
- Manajemen jadwal — "Besok jam 8 saya meeting dengan vendor." → tersimpan + pengingat otomatis.
- Catatan cepat — "Ingatkan saya beli oli BMW E36." → masuk memori, muncul di briefing.
- Tanya-jawab ringkas — "Berapa suhu operasi normal bearing pompa?" → jawaban singkat.
- Problem solving teknis — "Vibrasi pompa naik 20%, penyebabnya?" → analisis + langkah cek.
- Daily briefing — satu tombol: agenda hari ini, tugas tertunda, ringkasan.
- Memori pribadi — nama keluarga, pekerjaan, proyek aktif, preferensi — diingat lokal.
1Konsep & Bentuk Fisik
Bentuk seperti HT (handy-talky) kecil / pager modern — tinggi, ramping, satu tangan, dengan klip saku kemeja. Tombol Push-To-Talk (PTT) besar di sisi sebagai aksi utama, layar OLED untuk konfirmasi visual, dan grille speaker + mic di depan.
Spesifikasi Fisik
| Parameter | Target | Desain Bunai |
|---|---|---|
| Dimensi (P×L×T) | ≤ 100×60×20 mm | 96 × 52 × 19 mm |
| Berat | ≤ 250 g | ± 165 g (dgn baterai) |
| Layar | OLED / e-ink | OLED 1.5" 128×128 mono (default) — opsi e-ink 2.13" |
| Input utama | PTT fisik | PTT samping + wake-word "Hai Bunai" |
| Kontrol | — | OK, ▲▼, Power, Vol±, 2 soft-key |
| Audio | mic + speaker | MEMS mic I2S + speaker 8Ω 2W |
| Isi ulang | USB-C | USB-C 5V/2A, ± 2 jam penuh |
| Sarung | saku kemeja | klip belt + lubang lanyard |
2Arsitektur Dual-Brain
Dua prosesor dengan pembagian tugas tegas: Front-End Controller (ESP32-S3) selalu menyala & hemat daya; AI Compute Module (H618) kuat tapi hanya bangun saat dibutuhkan, lalu tidur lagi.
Kenapa dipisah?
LLM butuh ratusan MB–GB RAM & CPU kuat → harus di Linux SoC. Wake-word + audio + UI butuh always-on hemat daya → cocok di ESP32-S3. Memisah keduanya = baterai awet dan AI berkualitas.
Pola hemat daya
H618 default suspend-to-RAM. ESP32 menahan jalur GPIO WAKE; saat PTT/wake-word, ESP32 menarik pin → H618 bangun <1.5 s, proses, lalu tidur lagi setelah timeout.
Alternatif tier
Hemat: Pi Zero 2W 512MB (cuma model 0.5B/360M). Performa: Orange Pi 3B / RK3588 (NPU, LLM ~20 tok/s) — lebih cepat tapi lebih besar & mahal. Bunai default = Orange Pi Zero 2W 4GB (mudah, murah, RAM lega).
3Diagram Blok Sistem
Aliran daya (ungu) dan data (sesuai bus) lengkap: dari USB-C/baterai ke regulator, lalu ke dua prosesor dan periferalnya.
4Diagram Komunikasi
Urutan pesan satu siklus perintah suara, dari wake-word sampai jawaban diputar. Komunikasi memakai USB-CDC (audio Opus + JSON terbingkai) dan satu jalur GPIO WAKE.
Format frame
Tiap pesan: [0xAA][len:2][type:1][payload][crc:2]. type JSON untuk kontrol, biner untuk audio. Audio = Opus 16 kHz mono (~12–24 kbps) agar muat di USB-CDC dengan latensi rendah.
Keandalan
Heartbeat tiap 2 s; jika H618 tak balas → ESP32 tampilkan "AI sibuk/booting" dan retry. Semua aksi kritis (simpan jadwal) di-ACK; alarm tetap jalan di ESP32+RTC walau AI module mati.
5Daftar Komponen (BOM)
Tier Seimbang, semua komponen tersedia di Tokopedia/Shopee/AliExpress. Harga di bawah = referensi; harga ritel lokal aktual ≈ 3× — lihat daftar belanja & total trial di Bunai_Trial_Readiness.html.
| # | Komponen | Spesifikasi / Part | Fungsi | Qty | Harga (Rp) |
|---|---|---|---|---|---|
| 1 | AI Compute Module | Orange Pi Zero 2W — H618, 4GB LPDDR4, 16MB SPI flash | Otak AI (LLM/STT/TTS/DB) | 1 | 410.000 |
| 2 | Front-End MCU | ESP32-S3-WROOM-1 N16R8 (16MB/8MB) | Wake-word, audio, UI, daya | 1 | 75.000 |
| 3 | Layar OLED | 1.5" 128×128 mono, SH1107, I2C | Tampilan teks/status | 1 | 110.000 |
| 4 | Mikrofon digital | INMP441 MEMS, I2S | Tangkap suara | 1 | 28.000 |
| 5 | Amplifier audio | MAX98357A, I2S klas-D 3.2W | Driver speaker | 1 | 32.000 |
| 6 | Speaker mini | 8Ω 2W, Ø28mm | Output suara | 1 | 18.000 |
| 7 | RTC | DS3231SN + baterai CR2032 | Jam/alarm presisi (always-on) | 1 | 22.000 |
| 8 | Fuel gauge | MAX17048, I2C | Persen baterai akurat | 1 | 38.000 |
| 9 | PMIC / Charger | BQ25895 1S 3A, power-path, USB-C PD | Charging + power-path | 1 | 65.000 |
| 10 | Regulator | Buck 5V/3A (H618) + 3.3V/1A (ESP32+I/O) | Rail tegangan | 1 set | 45.000 |
| 11 | Baterai | LiPo 1S 3.7V 4000mAh + proteksi | Sumber daya | 1 | 115.000 |
| 12 | Konektor USB-C | USB-C 2.0 + proteksi ESD/TVS | Charge + data + dock | 1 | 15.000 |
| 13 | Tombol | PTT samping + 5 tactile (OK/nav/power) | Kontrol fisik | 1 set | 25.000 |
| 14 | Haptic | Motor LRA + driver DRV2605L | Getar konfirmasi | 1 | 35.000 |
| 15 | LED status | WS2812B RGB | Indikator (dengar/proses) | 1 | 8.000 |
| 16 | microSD + kartu | Slot + SanDisk 32GB A2 | OS + model + DB (penyimpanan utama) | 1 | 55.000 |
| 17 | PCB | 4-layer, ENIG, ± 90×50mm (proto qty kecil) | Papan utama | 1 | 150.000 |
| 18 | Enclosure | 3D print resin/SLA + klip + tombol | Casing saku | 1 | 90.000 |
| 19 | Pasif & konektor | R/C/L, FFC, header, JST | Pendukung | lot | 60.000 |
| 20 | Mekanik/misc | Heat-spreader grafit, sekrup, standoff, lanyard | Termal & rakit | lot | 30.000 |
| TOTAL per unit prototipe (qty 1) | ± 1.426.000 | ||||
6Wiring Diagram
Peta koneksi pin ESP32-S3 ke seluruh periferal. Tiga bus utama: I2S (mic & speaker terpisah), I2C (shared: OLED, RTC, gauge, haptic), USB ke H618.
Tabel Pin-Mapping ESP32-S3
| Sinyal | Pin ESP32-S3 | Terhubung ke | Bus | Catatan |
|---|---|---|---|---|
| Mic I2S — SCK / WS / SD | GPIO4 / 5 / 6 | INMP441 | I2S0 (RX) | L/R pin → GND (mono kiri) |
| Speaker I2S — BCLK / LRC / DIN | GPIO7 / 8 / 9 | MAX98357A | I2S1 (TX) | GPIO10 = SD/shutdown amp |
| I2C — SDA / SCL | GPIO17 / 18 | OLED, RTC, gauge, haptic | I2C | pull-up 4.7kΩ; 4 alamat berbeda |
| RTC alarm INT | GPIO11 | DS3231 INT/SQW | GPIO | wake ESP32 saat alarm |
| USB data | GPIO19 / 20 (D-/D+) | H618 USB OTG | USB-CDC | audio Opus + JSON |
| WAKE → AI | GPIO21 | H618 wake pin | GPIO | bangunkan dari suspend |
| READY ← AI | GPIO14 | H618 GPIO | GPIO | sinyal AI siap |
| EN rail 5V | GPIO13 | Buck 5V enable | GPIO | putus daya AI saat hemat ekstrem |
| Tombol PTT / OK / ▲ / ▼ | GPIO1 / 2 / 15 / 16 | Tactile switch | GPIO | internal pull-up, aktif-LOW |
| Power / wake button | GPIO0 | Tombol + PMIC | GPIO | long-press on/off |
| LED status | GPIO48 | WS2812B | RMT | warna = state (dengar/proses/error) |
7Estimasi Baterai
Baterai LiPo 1S 4000 mAh = 14,8 Wh. Kapasitas pakai efektif ± 3.400 mAh (85%, sudah memperhitungkan rugi konversi boost 5V untuk H618).
Anggaran arus per blok
| Kondisi | ESP32-S3 | H618 | Layar+Audio | Total arus (@3,7V) |
|---|---|---|---|---|
| Deep sleep (malam) | ~6 mA (light sleep) | OFF | off | ± 12 mA |
| Idle — dengar "Hai Bunai" | ~45 mA (WakeNet) | ~12 mA (suspend) | off | ± 75 mA |
| Aktif — STT+LLM+TTS | ~80 mA | ~800 mA (boost) | ~200 mA | ± 1.100 mA |
| Mode hemat — PTT idle | ~6 mA | OFF (EN low) | off | ± 12 mA |
Anggaran energi harian (skenario normal)
⚡ Pengisian
USB-C 5V/2A (10W). Dari 0→100% ± 2–2,5 jam (fase CC ~1,7 jam + CV). Mendukung pakai-sambil-charge (power-path BQ25895).
🔋 Strategi hemat otomatis
Baterai <20% → wake-word off, hanya PTT, kecerahan turun. <8% → matikan H618, ESP32 tetap simpan jadwal & alarm. Target: alarm jalan walau "AI mati".
8Estimasi Biaya Proyek
Selain BOM per-unit (§5), berikut biaya pengembangan (NRE) dari nol sampai produk siap jual.
| Fase | Item biaya | Rincian | Estimasi (Rp) |
|---|---|---|---|
| Prototipe (P0–P1) | 3 unit dev (breadboard→PCB v1) | 3 × ± 1,8 jt + spare | 6.500.000 |
| Alat & lisensi | solder station, logic analyzer, dll | 3.000.000 | |
| Engineering (P2) | Desain PCB + revisi (2–3 spin) | fab + assembly + stencil | 5.000.000 |
| Enclosure (3D print iterasi) | resin SLA × beberapa versi | 2.000.000 | |
| Software/AI (P2–P3) | Fine-tune/optimasi model + dataset ID | kuantisasi, prompt, eval | waktu (in-house) |
| Tooling dashboard & OTA | web UI + updater | waktu (in-house) | |
| Pra-produksi (P4) | Mold/jig + sertifikasi awal | injection mold sederhana | 25.000.000 |
| Total NRE menuju produk (di luar gaji) | ± 41,5 juta | ||
9Arsitektur Software
Dua tumpukan software paralel: firmware ESP32 (C/ESP-IDF, real-time) dan AI engine H618 (Linux + Python/C++).
10Struktur Folder
Monorepo: firmware ESP32, AI engine H618, dashboard, hardware, dan model.
# Monorepo Project Bunai bunai/ ├── firmware-esp32/ # ESP-IDF / PlatformIO (C) │ ├── src/ │ │ ├── main.c # state machine utama │ │ ├── wakeword.c # ESP-SR WakeNet "Hai Bunai" │ │ ├── audio_io.c # I2S mic + speaker │ │ ├── codec.c # Opus/ADPCM encode-decode │ │ ├── display.c # UI OLED (u8g2) │ │ ├── buttons.c # PTT, nav, debounce │ │ ├── power.c # sleep, fuel gauge, EN rail │ │ ├── rtc.c # DS3231 alarm │ │ └── link.c # protokol USB-CDC ke H618 │ ├── partitions.csv │ └── platformio.ini │ ├── ai-engine/ # Linux H618 (Python + C++) │ ├── server.py # API lokal + dashboard host │ ├── orchestrator.py # alur: STT→intent→aksi→TTS │ ├── intent.py # router aturan + klasifikasi LLM │ ├── llm.py # wrapper llama.cpp (Qwen2.5) │ ├── stt.py # wrapper whisper.cpp │ ├── tts.py # wrapper Piper │ ├── skills/ │ │ ├── schedule.py # tambah/lihat/ubah jadwal │ │ ├── notes.py # catatan cepat │ │ ├── briefing.py # daily briefing │ │ ├── qa.py # tanya-jawab teknis │ │ ├── troubleshoot.py # analisis masalah │ │ └── memory_recall.py # ingat info pribadi (RAG) │ ├── memory/ │ │ ├── db.py # akses SQLite │ │ ├── vector.py # sqlite-vec + embedding │ │ └── schema.sql # skema database │ ├── prompts/ │ │ ├── system_id.txt # persona Bunai (Bahasa Indonesia) │ │ └── tools.json # definisi function-calling │ ├── config.yaml # model, voice, daya, sensitivitas │ └── requirements.txt │ ├── models/ # aset AI (di microSD) │ ├── qwen2.5-1.5b-q4_k_m.gguf │ ├── qwen2.5-0.5b-q4_k_m.gguf │ ├── whisper-base.bin │ ├── piper-id_ID.onnx │ └── embed-multilingual-e5-small.gguf │ ├── dashboard/ # web UI lokal (disajikan H618) │ ├── index.html │ ├── app.js │ └── style.css │ ├── hardware/ │ ├── schematic/ # KiCad │ ├── pcb/ │ ├── bom.csv │ └── enclosure/ # STEP/STL casing │ ├── scripts/ # flashing, OTA, konversi model └── docs/ # dossier ini, API, runbook
11API Lokal (ESP32 ↔ AI Engine)
Dua lapis: protokol serial terbingkai (jalur cepat ESP32↔H618) dan REST lokal (dipakai dashboard & dock; bisa diakses via USB-networking).
A. Pesan serial USB-CDC
| Arah | Tipe pesan | Payload | Fungsi |
|---|---|---|---|
| ESP→AI | wake | {"src":"ptt"|"wakeword"} | Mulai sesi, minta AI resume |
| AI→ESP | ready | {"model":"qwen1.5b"} | AI siap menerima audio |
| ESP→AI | audio | biner Opus 16kHz (frame 20ms) | Stream suara pengguna |
| ESP→AI | audio_end | {"ms":3200} | VAD deteksi selesai bicara |
| AI→ESP | partial | {"text":"besok jam 8..."} | Transkrip sementara (tampil live) |
| AI→ESP | display | {"text":"Tersimpan ✓","icon":"cal"} | Teks/ikon untuk OLED |
| AI→ESP | tts | biner audio (Opus/PCM) | Stream jawaban suara |
| AI→ESP | action | {"kind":"reminder_set","at":"..."} | Sinkron alarm ke RTC ESP32 |
| ESP→AI | status | {"batt":74,"chg":false} | Lapor baterai (untuk briefing) |
| AI→ESP | idle | {"timeout":20} | Sesi selesai → AI boleh suspend |
| ↔ | ping/pong | — | Heartbeat 2 dtk (deteksi hang) |
B. REST API lokal (port 8080, host H618)
| Method · Endpoint | Fungsi | Dipakai oleh |
|---|---|---|
POST /v1/voice | Upload audio → balas {transkrip, jawaban, audio} | tes / dock |
POST /v1/command | Perintah teks → balas jawaban + aksi | dashboard, debug |
GET /v1/briefing | Daily briefing (agenda, tugas, baterai) | ESP32, dashboard |
GET/POST /v1/schedules | CRUD jadwal | dashboard |
GET/POST /v1/notes | CRUD catatan | dashboard |
GET/POST /v1/memory | CRUD pengetahuan/kontak/proyek | dashboard |
GET /v1/analytics | Statistik penggunaan (untuk grafik) | dashboard |
GET/PUT /v1/settings | Konfigurasi model, voice, daya, persona | dashboard |
POST /v1/model/switch | Ganti model aktif (0.5B↔1.5B) | dashboard |
GET /v1/health | Status: model, RAM, suhu, uptime | dashboard, dock |
// Contoh respons POST /v1/command {"text":"Vibrasi pompa naik 20%, kenapa?"}
{
"intent": "troubleshoot",
"answer": "Kemungkinan misalignment atau bearing aus. Cek: 1) alignment coupling, 2) kondisi bearing, 3) kekencangan baut pondasi.",
"actions": [],
"used_memory": ["pompa P-101 riwayat servis"],
"latency_ms": 2140,
"model": "qwen2.5-1.5b"
}
12Struktur Database
SQLite tunggal bunai.db + tabel virtual sqlite-vec untuk pencarian semantik. Lima domain memori + tabel sistem.
Skema SQL inti
-- 5 domain memori + sistem CREATE TABLE users(id INTEGER PRIMARY KEY, name TEXT, role TEXT, family JSON, prefs JSON, created_at INT); CREATE TABLE schedules(id INTEGER PRIMARY KEY, user_id INT, title TEXT, location TEXT, start_at INT, end_at INT, reminder_offset INT, status TEXT DEFAULT 'active', created_at INT); CREATE TABLE notes(id INTEGER PRIMARY KEY, user_id INT, content TEXT, category TEXT, due_at INT, done INT DEFAULT 0, created_at INT); CREATE TABLE projects(id INTEGER PRIMARY KEY, user_id INT, name TEXT, status TEXT, description TEXT, started_at INT); CREATE TABLE tasks(id INTEGER PRIMARY KEY, project_id INT, title TEXT, due_at INT, status TEXT, priority INT); CREATE TABLE contacts(id INTEGER PRIMARY KEY, user_id INT, name TEXT, relation TEXT, phone TEXT, org TEXT, notes TEXT); CREATE TABLE knowledge(id INTEGER PRIMARY KEY, user_id INT, topic TEXT, content TEXT, source TEXT, created_at INT); -- pencarian semantik (RAG) — embedding 384-dim (e5-small) CREATE VIRTUAL TABLE knowledge_vec USING vec0( embedding FLOAT[384]); CREATE TABLE reminders(id INTEGER PRIMARY KEY, ref_type TEXT, ref_id INT, fire_at INT, fired INT DEFAULT 0, channel TEXT); CREATE TABLE conversations(id INTEGER PRIMARY KEY, ts INT, user_text TEXT, ai_text TEXT, intent TEXT, latency_ms INT, model TEXT); CREATE TABLE settings(key TEXT PRIMARY KEY, value TEXT); CREATE TABLE analytics(id INTEGER PRIMARY KEY, ts INT, event TEXT, payload JSON); -- contoh retrieval RAG SELECT k.topic, k.content FROM knowledge_vec v JOIN knowledge k ON k.id = v.rowid WHERE v.embedding MATCH :query_embedding ORDER BY distance LIMIT 3;
13Sistem Memori
Memori dibagi 5 domain, semua di SQLite lokal. Yang bersifat "pengetahuan bebas" juga di-embed ke sqlite-vec untuk pencarian semantik (RAG), sehingga Bunai bisa "mengingat" dan mengaitkan info pribadi.
📅 Jadwal
Meeting, agenda, deadline. Otomatis buat reminder yang disinkron ke RTC. Muncul di daily briefing.
📝 Catatan
To-do & catatan cepat ("beli oli BMW E36"). Kategori otomatis, bisa ditandai selesai.
📁 Proyek
Proyek aktif + tugas turunannya. Bunai paham konteks ("proyek pompa P-101").
👥 Kontak
Nama keluarga, rekan, vendor + relasi. Dipakai saat menjadwalkan ("meeting dengan vendor").
🧠 Pengetahuan Pribadi
Pekerjaan, preferensi, fakta teknis, spesifikasi alat. Di-embed → retrieval semantik untuk QA.
🔁 Alur RAG
Pertanyaan → embed → cari 3 memori terdekat (sqlite-vec) → suntik ke prompt LLM → jawaban kontekstual.
Jalur tulis (write)
Suara → STT → intent router. Jika "simpan" (jadwal/catatan/fakta) → ekstrak field via LLM function-call → INSERT ke tabel + (untuk pengetahuan) hitung embedding & simpan ke knowledge_vec.
Jalur baca (recall)
Pertanyaan personal → embedding query → MATCH sqlite-vec → ambil konten asli → konteks LLM. Pertanyaan terstruktur (jadwal hari ini) → query SQL langsung, tanpa LLM.
SQLCipher + unlock PIN saat boot untuk perlindungan bila perangkat hilang.14Perbandingan Model AI
Diuji untuk dijalankan di H618 (4×A53 @1.5GHz) via llama.cpp, kuantisasi Q4_K_M. Kecepatan = token/detik generasi (estimasi konservatif CPU; NPU RK3588 di kolom terpisah).
| Model | Param | RAM (Q4) | Kecepatan H618 CPU | Kecepatan RK3588 NPU | Daya aktif | Bahasa Indonesia | Kualitas |
|---|---|---|---|---|---|---|---|
| SmolLM2-360M | 360M | ~300 MB | ~13–18 tok/s | ~45 tok/s | Terendah | Lemah | ★★☆☆☆ |
| Qwen2.5-0.5B | 0.5B | ~420 MB | ~7–10 tok/s | ~30 tok/s | Rendah | Cukup baik | ★★★☆☆ |
| Gemma 3 1B | 1B | ~800 MB | ~4–6 tok/s | ~20 tok/s | Sedang | Baik | ★★★★☆ |
| Qwen2.5-1.5B ✓ | 1.5B | ~1,1 GB | ~3–5 tok/s | ~18–25 tok/s | Sedang-tinggi | Sangat baik | ★★★★☆ |
| Phi-3-mini | 3.8B | ~2,3 GB | ~1–2 tok/s | ~8–10 tok/s | Tinggi | Sedang (ID lemah) | ★★★★★ |
🏆 Pilihan utama: Qwen2.5-1.5B (Q4_K_M)
- Bahasa Indonesia terkuat di kelas mungil ini — penting untuk voice command ID.
- Kualitas reasoning cukup untuk QA teknis & troubleshooting singkat.
- RAM ~1,1 GB → aman di H618 4 GB (sisa untuk STT/TTS/OS).
- ~3–5 tok/s = jawaban pendek (20–40 token) selesai ± 6–12 detik → dapat diterima.
⚡ Pendamping: Qwen2.5-0.5B (mode cepat)
- Untuk intent, catatan, jadwal, dan jawaban super-pendek → ~2× lebih cepat.
- Otomatis dipakai saat baterai <30% atau mode "Cepat".
- SmolLM2-360M opsional khusus klasifikasi intent (router) agar 1.5B hanya dipanggil saat perlu.
- Phi-3 dihindari: terlalu berat & ID-nya lemah untuk perangkat saku.
15Karakter AI
Bunai = profesional, ramah, solutif, tidak kaku, singkat, fokus tindakan. Bukan chatbot bertele-tele — setiap jawaban mengarah ke langkah konkret.
System prompt (inti)
# prompts/system_id.txt
Kamu "Bunai", asisten saku pribadi berbahasa Indonesia.
GAYA:
- Jawab SINGKAT (1-3 kalimat), langsung ke inti.
- Profesional tapi ramah, tidak formal kaku.
- Selalu beri langkah/tindakan konkret bila relevan.
- Untuk masalah teknis: sebut kemungkinan penyebab +
urutan pengecekan, jangan ceramah panjang.
- Jika perlu simpan data, panggil fungsi yang sesuai.
- Jika tidak tahu, katakan singkat & sarankan langkah cek.
KONTEKS: gunakan memori pengguna (jadwal, proyek,
catatan, pengetahuan) yang diberikan di bawah.
Contoh gaya jawaban
🎚️ Nada
Bisa diatur di dashboard: Ringkas / Normal / Hangat.
⏱️ Panjang
Batas token output (default 60) agar selalu padat.
🔧 Domain
Bias ke konteks teknik/maintenance bila diaktifkan.
🇮🇩 Bahasa
Indonesia utama; istilah teknis Inggris dibiarkan.
16Alur Percakapan & Intent
Setelah STT, intent router mengarahkan ke salah satu dari 6 skill. Perintah jelas pakai aturan cepat; sisanya pakai LLM.
Contoh dialog tiap kemampuan
🤖 "Oke, meeting vendor besok 08:00 dicatat. Diingatkan 30 menit sebelumnya."
🤖 "Tercatat: beli oli BMW E36. Muncul di briefing besok."
🤖 "Umumnya 40–70°C; alarm bila >90°C. Pantau tren, bukan angka sesaat."
🤖 "Mungkin misalignment/bearing aus. Cek alignment coupling, bearing, lalu baut pondasi."
🤖 "Hari ini 3 agenda, terdekat meeting vendor 08:00. 2 tugas belum selesai. Baterai 74%."
🤖 "Pompa P-101 (revisi alignment) dan retrofit panel listrik gudang B."
17Flowchart Interaksi Pengguna
Siklus operasional lengkap dari diam → aktivasi → proses → tidur, termasuk jalur hemat daya.
18Roadmap Prototipe → Produk
Estimasi ± 7–9 bulan menuju produk MVP yang andal. Setiap fase punya gerbang keluar (exit gate) yang jelas.
P0–P1 · Buktikan dulu
Fokus: validasi bahwa Qwen2.5-1.5B + whisper + Piper berjalan layak di H618 dengan Bahasa Indonesia. Pakai dev board dulu, jangan buru-buru PCB.
P2–P3 · Bentuk & rapikan
PCB custom + casing saku, lalu kejar baterai & latensi. Tambah dashboard, OTA model, mode hemat. Iterasi enclosure 3D-print.
P4–P5 · Andalkan & jual
Uji lapangan (teknisi nyata), perbaiki reliabilitas, lalu naik skala produksi + sertifikasi. Casing injection mold saat volume cukup.
19Risiko & Mitigasi
| Risiko | Dampak | Mitigasi |
|---|---|---|
| Latensi LLM terlalu lambat (CPU H618) | Tinggi | Router 2-tier (0.5B cepat → 1.5B saat perlu), cache jawaban umum, batas token output, opsi tier RK3588 (NPU) |
| Baterai boros (wake-word always-on) | Tinggi | Mode hemat PTT-only (~1 mgg), matikan H618 saat idle, gating wake-word saat di saku |
| Panas H618 di casing kecil | Sedang | Heat-spreader grafit + frame Al, throttle, inferensi singkat lalu suspend, batasi durasi beban |
| Akurasi STT Indonesia + noise pabrik | Sedang | whisper-base (bukan tiny), PTT untuk audio bersih, AGC mic, prompt-bias istilah teknis |
| Kualitas jawaban model kecil terbatas | Sedang | RAG memori, prompt domain teknik, jawaban template untuk pola umum, disclaimer "perlu verifikasi" |
| Ketersediaan/harga modul AI | Rendah | Orange Pi Zero 2W murah & mudah dicari (Tokopedia/Shopee/AliExpress); alt: Pi Zero 2W (budget) atau Orange Pi 3B/RK3588 (performa) |
| Kehilangan perangkat = data sensitif | Sedang | Enkripsi SQLCipher + PIN boot, backup terenkripsi ke microSD/dock |
| Kompleksitas dua-otak (sinkronisasi) | Rendah | Protokol ACK + heartbeat, alarm fail-safe di ESP32+RTC tanpa bergantung AI module |
20Dashboard Setting & Analitik
Dibuat terpisah sebagai web UI lokal yang disajikan H618 (akses via dock USB / Wi-Fi sementara saat setup). File: Bunai_Dashboard.html — interaktif, bisa dibuka langsung di browser.
📊 Overview
Status baterai, suhu, model aktif, agenda hari ini, statistik cepat.
⚙️ Settings
Pilih model (0.5B/1.5B), suara TTS, sensitivitas wake-word, profil daya, nada persona, bahasa.
🧠 Memori
Kelola 5 domain: jadwal, catatan, proyek, kontak, pengetahuan — tambah/cari/hapus.
📈 Analitik
Grafik: perintah/hari, distribusi intent, latensi, tren baterai, topik teratas.
Ringkasan Keputusan Desain
| Aspek | Keputusan Bunai |
|---|---|
| Arsitektur | Dual-brain: ESP32-S3 (front-end) + H618 (AI), bukan ESP32 tunggal |
| Model AI | Qwen2.5-1.5B (utama) + 0.5B (cepat), router SmolLM2 opsional |
| Suara | whisper.cpp (STT ID) + Piper (TTS ID) — Vosk dihindari (tak ada model ID) |
| Memori | SQLite + sqlite-vec, 5 domain, RAG, enkripsi opsional |
| Daya | 4000mAh → ~2 hari normal, ~1 minggu mode hemat, USB-C ~2,5 jam |
| Bentuk | 96×52×19mm · ~165g · gaya pager/HT kecil, klip saku, PTT samping |
| Biaya | ~Rp 1,78jt proto · ~Rp 950rb @1000 unit |
| Privasi | Offline 100%, radio off default, data tak pernah keluar perangkat |
Project Bunai · Dossier Desain Teknik v1.0 · 13 Juni 2026 · Disusun sebagai Embedded/AI Engineer & Product Designer