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 AP PKM SMartHome Reviewed by Riadi Marta Dinata on 13.06 Rating: 5

Tidak ada komentar:

Diberdayakan oleh Blogger.