AP PKM SMartHome
Saya ingin membuat aplikasi penelitian berjudul:
“Smart Voice, Smart Home: Kendalikan Dunia dengan Ucapanmu (Kendali Perangkat Rumah Menggunakan Perintah Suara Alami)”.
Buatkan kode Android Studio Kotlin dan kode ESP32 secara bertahap, rapi, modular, dan siap dikembangkan.
Gunakan pendekatan bertahap. Setelah selesai setiap tahap, akhiri dengan kata: NEXT.
Spesifikasi aplikasi Android:
1. Menu-1: Splash Welcome
2. Menu-2: Input Parameter
- input kata kunci aktivasi, default: MISTER
- input 8 nama perangkat, default:
1. Lampu/ruang depan
2. Lampu/ruang tengah/tamu
3. AC/pendingin
4. Lampu/ruang belakang
5. Pompa Air
6. Fan/kipas
7. TV/televisi
8. Pemanas
3. Menu-3: Aplikasi AI
- menerima suara pengguna
- konversi voice to text
- hanya diproses jika mengandung keyword dari menu-2, misalnya “MISTER”
- kirim teks ke LLM untuk memahami maksud
- jika makna perintah terkait 8 perangkat:
Perangkat-1 ON -> kirim "A"
Perangkat-1 OFF -> kirim "a"
Perangkat-2 ON -> kirim "B"
Perangkat-2 OFF -> kirim "b"
Perangkat-3 ON -> kirim "C"
Perangkat-3 OFF -> kirim "c"
Perangkat-4 ON -> kirim "D"
Perangkat-4 OFF -> kirim "d"
Perangkat-5 ON -> kirim "E"
Perangkat-5 OFF -> kirim "e"
Perangkat-6 ON -> kirim "F"
Perangkat-6 OFF -> kirim "f"
Perangkat-7 ON -> kirim "G"
Perangkat-7 OFF -> kirim "g"
Perangkat-8 ON -> kirim "H"
Perangkat-8 OFF -> kirim "h"
- karakter dikirim ke MQTT topic publish
- Android juga subscribe status dari MQTT
- jika pertanyaan tidak terkait perangkat, tetap jawab memakai hasil LLM
- jawaban ditampilkan dalam teks dan dibacakan dengan Azure TTS
- aplikasi harus menyimpan status terakhir 8 perangkat, default OFF
Konfigurasi MQTT:
- broker host: broker.avisha.id
- port: 1883
- username: [ISI_SENDIRI]
- password: [ISI_SENDIRI]
- keep alive: 60
- topic publish: ccsa/on/off/ai
- topic subscribe: ccsa/#
Konfigurasi LLM:
- provider: Groq API
- endpoint: https://api.groq.com/openai/v1/chat/completions
- model: llama-3.1-8b-instant
- api key: [ISI_SENDIRI]
Konfigurasi TTS:
- provider: Azure TTS
- region: southeastasia
- api key: [ISI_SENDIRI]
- gunakan voice Indonesia, acak antara GadisNeural dan ArdiNeural
Buat bertahap:
Tahap 1: struktur proyek, dependency, manifest, constants, data model, SharedPreferences
Tahap 2: Splash screen + Input Parameter screen
Tahap 3: AI screen + speech to text + deteksi keyword
Tahap 4: integrasi Groq LLM + parser intent perangkat
Tahap 5: MQTT Android publish/subscribe + update status perangkat
Tahap 6: Azure TTS + playback audio
Tahap 7: kode ESP32 subscriber MQTT + penyimpanan status terakhir
Tahap 8: finalisasi dan pengujian
Gunakan Kotlin XML biasa, bukan Compose.
Gunakan placeholder untuk seluruh credential rahasia.
Akhiri setiap tahap dengan kata: NEXT
Sebelumnya:
saya mau membuat penelitian dengan judul aplikasi:
smart voice, smart home: kendalikan dunia dengan ucapanmu (kendali perangkat rumah menggunakan Perintah Suara Alami)
Dengan layout aplikasi android:
1.menu-1: Splash welcome
2.menu-2: input_paramter dengan form isian:
input kata kunci: MISTER
input 8 nama perangkat (misal default):
Lampu/ruang depan
Lampu/ruang tengah/tamu
AC/pendingin
Lampu/ruang belakang
Pompa Air
fan/kipas
TV/televisi
Pemanas
3.menu-3: aplikasi_ai sbb:
kotlin di android studio : menerima pesan suara lalu dikonversi Voice to text-> LLM untuk memahami maksudnya->
jika dalam kalimat mengandung makna 8 perangkat yang suadah di input diatas misal:
Hidupkan Perangkat-1 misal :Lampu/ruang depan (sesuai isian di form input paramter di layaout menu ke-dua), maka Mengirim kode karakter "A"
Matikan Perangkat-1 :Lampu/ruang depan, maka Mengirim kode karakter "a"
Hidupkan Perangkat-2 :Lampu/ruang tengah/tamu, maka Mengirim kode karakter "B"
Matikan Perangkat-2 :Lampu/ruang tengah/tamu, maka Mengirim kode karakter "b"
Hidupkan Perangkat-3 :AC/pendingin, maka Mengirim kode karakter "C"
Matikan Perangkat-3 :AC/pendingin, maka Mengirim kode karakter "c"
Hidupkan Perangkat-4 :Lampu/ruang belakang, maka Mengirim kode karakter "D"
Matikan Perangkat-4 :Lampu/ruang belakang, maka Mengirim kode karakter "d"
Hidupkan Perangkat-5 :Pompa Air, maka Mengirim kode karakter "E"
Matikan Perangkat-5 :Pompa Air, maka Mengirim kode karakter "e"
Hidupkan Perangkat-6 :fan/kipas, maka Mengirim kode karakter "F"
Matikan Perangkat-6 :fan/kipas, maka Mengirim kode karakter "f"
Hidupkan Perangkat-7 :TV/televisi, maka Mengirim kode karakter "G"
Matikan Perangkat-7 :TV/televisi, maka Mengirim kode karakter "g"
Hidupkan Perangkat-8 :Pemanas, maka Mengirim kode karakter "H"
Matikan Perangkat-8 :Pemanas, maka Mengirim kode karakter "h"
karakter ini akan dikirimkan (publish) k MQTT
dan MQTT server siap menampungnya untuk nanti di baca oleh esp32 (subscriber)
sbb data nya:
publish:ccsa/on/off/ai mengirimkan karakter A,a,B,b,C,c,D,d,E,e,F,f,G,g,H atau h
subscribe:ccsa/#
IP: 103.133.63.102
name:ccsaMe
clientID:mqttx_3b8153af
username:ccsa
password:Abcd/1234
keep Alive:60
jadi setelah menerima balsan dari API LLM Ai (menggunakan https://console.groq.com/), sistem jika mendeteksi akan makna jawabannya seperti di atas,
maka sistem akan post ke server MQTT;
sekaligus memberikan informasi bahwa perintah atas perangkat (Hidup/Mati) sudah di laksanakan...berupa suara dan text pada layar android (suara dari azure cloud)
namun jika tidak mengandung makna-makna tersebut di atas,sistem tetap akan memproses jawaban sesuai hasil LLM AI
dan akan memberikan jawaban dari pertanyaan yang diberikan juga berupa suara dan text pada layar.
Dan agar proses voic to text di awal tidak berat/noise,
maka sistem hanya akan memproses pertanyaan yang mengandung kata kunci yang sudah diinput di menu-2 misal: "MISTER"
Untuk suara azure TTS service :
class AzureTtsService(private val context: Context) {
private val client = OkHttpClient.Builder()
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS)
.build()
companion object {
// GANTI DENGAN CREDENTIAL AZURE TTS ANDA
private const val AZURE_TTS_API_KEY = "At3pnCH97xXXX"
private const val AZURE_TTS_REGION = "southeastasia"
private const val AZURE_TTS_ENDPOINT =
"https://$AZURE_TTS_REGION.tts.speech.microsoft.com/cognitiveservices/v1"
}
@Throws(IOException::class)
fun synthesizeSpeech(text: String): File {
// Randomly choose between GadisNeural and ArdiNeural
val voiceName = if (Random.nextBoolean()) {
"id-ID-GadisNeural"
} else {
"id-ID-ArdiNeural"
}
val ssml = """
$text
""".trimIndent()
val requestBody = ssml.toRequestBody("application/ssml+xml".toMediaType())
val request = Request.Builder()
.url(AZURE_TTS_ENDPOINT)
.addHeader("Ocp-Apim-Subscription-Key", AZURE_TTS_API_KEY)
.addHeader("Content-Type", "application/ssml+xml")
.addHeader("X-Microsoft-OutputFormat", "audio-16khz-32kbitrate-mono-mp3")
.addHeader("User-Agent", "CAK-JKN-Android")
.post(requestBody)
.build()
client.newCall(request).execute().use { response ->
if (!response.isSuccessful) {
throw IOException("TTS API call failed: ${response.code} - ${response.message}")
}
val inputStream = response.body?.byteStream()
?: throw IOException("Empty response body from TTS")
val audioFile = File(context.cacheDir, "cak_jkn_tts_${System.currentTimeMillis()}.mp3")
FileOutputStream(audioFile).use { outputStream ->
inputStream.copyTo(outputStream)
}
return audioFile
}
}
}
dan untuk LLM API saya pakai https://console.groq.com/:
define('GROQ_API_KEY', 'gsk_ADmVR8yxxxxxx');
define('GROQ_MODEL', 'llama-3.1-8b-instant');
define('GROQ_URL', 'https://api.groq.com/openai/v1/chat/completions');
buatkanlah kode-kodenya secara bertahap...dan berikan pesan NEXT untuk melanjutkan kode-kode sekira diperlukan:
kode untuk kotlin android, juga kode untuk ESP32 selaku subscriber !
sistem mampu mengenali status 8 perangkat terakhir apakah Hidup ON atau Mati Off (default Off/mati)...
sehingga jika ditanya terkait status perangkat terakhir sistem dapat mengenali...
++++++++++++
keunggulan sistem ini:
cukup install aplikasi dan koneksikan ke wifi;
perangkat akan langsung mengenali dan auto proses...sesuai tema subscriber yang di berikan...
bersifat dinamis...bisa kendalikan perangkat apapun dengan perintah apapun yang mengandung makna di atas (batasan 8 perangkat)
juga dapat menjawab automatis pertanyaan apapun sesuai kemampuan API LLM yang ada....
sistem layaknya asisten rumah tangga....bisa mengendalikan dan menjawab pertanyaan...
AP PKM SMartHome
Reviewed by Riadi Marta Dinata
on
13.06
Rating:

Tidak ada komentar: