Tenki Weather (tenki.live)
Chatbot cuaca berbahasa Indonesia dengan karakter anime Tenki‑Chan. Dibangun dengan Unity 6 (6000.2.3f1) untuk WebGL only. Terintegrasi OpenAI, WeatherAPI.com, ElevenLabs (TTS), dan Batch CSV/XLSX.
Live Demo: https://tenki.live Repo: https://github.com/muhammadIdhamMaarif/Tenki-Weather
Khusus kepada bapak Rakhmadhany Primananda, ST., M.Kom., untuk source code multithreading bisa dilihat disini Tenki Source
Tema/brand: Light Blue Sky
Screenshot UI :
- Intent Weather vs Chitchat — Penentuan intent melalui OpenAI dengan schema JSON-only yang ketat.
- Cuaca saat ini & ramalan (forecast) — Menggunakan WeatherAPI.com; resolusi lokasi via nama (mis. Kecamatan Dukun) atau koordinat lat,lon.
- TTS Bahasa Indonesia — ElevenLabs menghasilkan audio, diputar dengan AudioSource di Unity.
- Batch Processor (CSV/XLSX) — Unggah CSV/XLSX, proses paralel dengan worker-pool (
maxConcurrency), retry/backoff, dan ekspor CSV/XLSX (writer minimal). Termasuk WebGL file‑picker & download bridge. - Tenki‑Chan Avatar — Menggunakan Animation Rigging, uLipSync, Magica Cloth 2 untuk ekspresi, lip‑sync, dan simulasi kain.
- Platform — WebGL only (Unity 6 6000.2.3f1). Status Production‑ready. Lisensi MIT.
- Opsional — Unity Services (Cloud Code/Relay) sebagai jalur aman alternatif untuk menyembunyikan kunci API (tanpa tutorial di README ini).
flowchart LR
UI["UI (Unity/WebGL)"] -->|prompt user| OpenAI["OpenAI<br/>(JSON plan)"]
OpenAI -->|intent: weather| WeatherAPI["WeatherAPI.com<br/>(current/forecast)"]
WeatherAPI --> UI
UI -->|teks final| ElevenLabs["ElevenLabs<br/>(TTS, Bahasa Indonesia)"]
ElevenLabs --> UI
%% Jalur alternatif (opsional)
UI -.-> CloudCode["Unity Cloud Code / Relay<br/>(opsional, proxy kunci API)"] -.-> OpenAI
UI -.-> CloudCode -.-> WeatherAPI
UI -.-> CloudCode -.-> ElevenLabs
%% Sorot skrip utama
subgraph Scripts
A["TenkiChatController<br/>(pipeline chat → cuaca → script → TTS)"]
B["BatchWeatherProcessor<br/>(worker pool, CSV/XLSX)"]
end
| Komponen | Peran |
|---|---|
| Unity 6 (6000.2.3f1) | Engine & build WebGL |
| TextMeshPro | UI teks berkualitas |
| Michsky DreamOS | Komponen UI/UX modern (dashboard/controls) |
| Animation Rigging | Rigging animasi Tenki‑Chan |
| uLipSync | Lip‑sync real‑time untuk dialog |
| Magica Cloth 2 | Simulasi kain/aksesori karakter |
| OpenAI API | Intent planning & perangkai naskah |
| WeatherAPI.com | Data cuaca (current/forecast) |
| ElevenLabs | TTS Bahasa Indonesia |
- Unity 6 (6000.2.3f1).
- Akun & API key untuk OpenAI, WeatherAPI.com, ElevenLabs.
- Target WebGL only.
Pergi ke tenki.live
Deteksi header (regex, case‑insensitive):
- Nama:
name|nama|kecamatan - Latitude:
lat|latitude|lintang - Longitude:
lon|lng|longitude|bujur
- Klik Upload dan pilih berkas .csv atau .xlsx.
- Tekan Process untuk mengambil cuaca tiap baris.
- Unduh hasil dengan Download CSV atau Download XLSX.
Parameter kinerja:
maxConcurrency(default 48) — jumlah worker paralel (disarankan 32–64 untuk WebGL, sesuaikan jaringan/hosting).maxRetries(default 3) — percobaan ulang untuk error sementara (429/5xx/timeouts) dengan backoff + jitter.
Kolom: Name, Latitude, Longitude, Last Update, Suhu (°C), Kelembapan (%), Kondisi, Kecepatan Angin (kph), Arah Angin, Sinar UV
Contoh (ringkas):
| Name | Latitude | Longitude | Last Update | Suhu (°C) | Kelembapan (%) | Kondisi | Kecepatan Angin (kph) | Arah Angin | Sinar UV |
|---|---|---|---|---|---|---|---|---|---|
| Kecamatan Dukun | -7.12 | 112.03 | 2025-09-01 09:30 | 28.5 | 75 | Partly cloudy | 12.4 | E (90°) | 7 |
Catatan: Penulis XLSX di proyek ini minimal (sheet tunggal, teks/angka tanpa style). Cukup untuk analisis dasar & impor ke spreadsheet.
Peringatan: Kunci API di WebGL dapat dilihat oleh pengguna (Network tab/Artifacts). Gunakan kuota khusus, rotasi kunci, dan pertimbangkan relay/Cloud Code untuk menyuntikkan kunci di server.
- Rate limit: OpenAI/WeatherAPI/ElevenLabs dapat mengembalikan HTTP 429. Lakukan retry/backoff.
- Kesalahan server: 5xx — coba ulang otomatis (sudah diterapkan di batch).
- Biaya: perhatikan biaya LLM & TTS saat batch besar; gunakan
maxConcurrencykonservatif.
- Tidak ada suara yang keluar? Browser (terutama iOS/Safari) memerlukan user gesture sebelum audio dapat diputar. Pastikan pengguna klik/tap tombol lebih dulu.
- CORS/HTTP diblokir? Pastikan hosting mengizinkan request ke domain API yang digunakan atau route lewat relay dengan CORS benar.
- LLM mengembalikan JSON tidak valid?
Sistem memaksa JSON‑only; jika gagal, ulangi prompt atau aktifkan
VerboseLogginguntuk diagnosis. - Lokasi tidak ditemukan/ambigu?
Gunakan format koordinat
lat,lon(mis.-7.98,112.63) atau nama lokasi yang lebih spesifik. - 429 / Rate limit
Turunkan
maxConcurrency, tambahmaxRetries, dan jeda ulang (backoff) otomatis akan membantu. - Audio patah‑patah di mobile Nonaktifkan streaming audio TTS; proyek ini membuffer penuh untuk stabilitas WebGL.
- Ukuran build WebGL besar Aktifkan kompresi, strip kode, dan optimalkan aset (gambar, rig, audio).
- Icon/cuaca tidak sesuai siang/malam
Pastikan penggunaan kode kondisi & flag
is_daydari WeatherAPI saat memetakan sprite.
- “Cuaca sekarang di Kecamatan Dukun apa?”
- “Besok di Bandung hujan nggak?”
- “Minta ramalan 3 hari di Malang.”
- “Koordinat -7.98,112.63 cuacanya gimana?”
- “Pakai Fahrenheit ya.”
- Stream UI untuk respons LLM (typing/partial).
- PWA & offline cache ikon/kamus kondisi.
- Multi‑voice & kontrol prosody TTS.
- Mode batch forecast (multi‑hari) + grafik ringkas.
- Relay/Cloud Code template publik (tanpa kunci).
Kontribusi terbuka! Silakan buat issue atau pull request di repo: https://github.com/muhammadIdhamMaarif/Tenki-Weather
Code of Conduct: gunakan standar komunitas (mis. Contributor Covenant). Tambahkan berkas CoC jika diperlukan.
Aset & Layanan Pihak Ketiga (tautan resmi):
- Unity — https://unity.com
- TextMeshPro — https://docs.unity3d.com/Packages/com.unity.textmeshpro
- Michsky DreamOS — https://assetstore.unity.com/DreamOS
- Animation Rigging — https://docs.unity3d.com/
- uLipSync — https://github.com/hecomi/uLipSync
- Magica Cloth 2 — https://assetstore.unity.com/MagicaCloth2
- OpenAI — https://openai.com
- WeatherAPI.com — https://www.weatherapi.com
- ElevenLabs — https://elevenlabs.io
Disclaimer AI Art: Pastikan hak pakai aset visual/AI art (termasuk model/voice) sesuai komersial/publik sebelum rilis.
Lisensi: Proyek ini berada di bawah MIT License. Lihat bagian Lisensi.
MIT License
Hak cipta (c) Pemilik Repo
Izin diberikan secara gratis, kepada siapa pun yang memperoleh salinan perangkat lunak ini dan file dokumentasi terkait ("Perangkat Lunak"), untuk berurusan dalam Perangkat Lunak tanpa batasan, termasuk tanpa batasan hak untuk menggunakan, menyalin, mengubah, menggabungkan, menerbitkan, mendistribusikan, melisensikan ulang, dan/atau menjual salinan Perangkat Lunak, serta untuk mengizinkan orang yang kepada siapa Perangkat Lunak disediakan untuk melakukannya, tunduk pada ketentuan berikut:
Pemberitahuan hak cipta di atas dan pemberitahuan izin ini harus disertakan dalam semua salinan atau bagian substansial dari Perangkat Lunak.
PERANGKAT LUNAK INI DISEDIAKAN "SEBAGAIMANA ADANYA", TANPA JAMINAN APA PUN, BAIK TERSURAT MAUPUN TERSIRAT, TERMASUK NAMUN TIDAK TERBATAS PADA JAMINAN DIPERDAGANGKAN, KESESUAIAN UNTUK TUJUAN TERTENTU DAN NONPELANGGARAN. DALAM KEADAAN APA PUN PARA PENULIS ATAU PEMEGANG HAK CIPTA TIDAK BERTANGGUNG JAWAB ATAS KLAIM, KERUSAKAN ATAU KEWAJIBAN LAINNYA, BAIK DALAM TINDAKAN KONTRAK, KESALAHAN ATAU LAINNYA, YANG TIMBUL DARI, DARI ATAU SEHUBUNGAN DENGAN PERANGKAT LUNAK ATAU PENGGUNAAN ATAU HAL LAIN DALAM PERANGKAT LUNAK.







