Aplikasi desktop Electron.js untuk Windows 10/11 yang memainkan azan secara automatik mengikut zon waktu solat JAKIM, menyokong notifikasi awal, serta memainkan bacaan al-Quran atau zikir ketika sistem berada dalam keadaan idle.
Direka untuk berjalan 24 jam tanpa gangguan pada mini PC atau komputer desktop biasa.
myAzan dibangunkan untuk kegunaan desktop atau mini PC yang berjalan 24 jam, dengan fokus kepada:
- Azan automatik mengikut zon pilihan pengguna
- Notifikasi audio sebelum masuk waktu solat tertentu
- Mod offline-first β terus berfungsi tanpa internet selepas data dimuat turun
- Lantunan audio idle (al-Quran / zikir) semasa tiada aktiviti audio lain
- Antara muka pengguna sepenuhnya dalam Bahasa Melayu
| Ciri | Keterangan |
|---|---|
| π Azan Automatik | Memainkan azan tepat pada waktunya mengikut zon JAKIM |
| π Notifikasi Awal | Bunyi peringatan beberapa minit sebelum masuk waktu |
| π Audio Idle | Lantunan al-Quran / zikir berterusan semasa tiada audio lain |
| π Offline-First | Berfungsi tanpa internet selepas data tahunan tersimpan |
| πΊοΈ 58 Zon JAKIM | Sokongan penuh semua zon seluruh Malaysia |
| πΎ Simpanan Lokal | Data waktu solat disimpan dalam SQLite, tiada bergantung awan |
| π Kitaran Tahunan | Auto muat turun data tahun baru pada OktoberβDisember |
| ποΈ Kawalan Kelantangan | Kelantangan berasingan untuk azan, notifikasi, dan idle |
| π Mula Bersama Windows | Boleh ditetapkan untuk bermula secara automatik ketika Windows dihidupkan |
| π²πΎ Bahasa Melayu | Semua UI, butang, dan mesej dalam Bahasa Melayu |
Aplikasi menyokong 58 zon merangkumi 14 negeri seluruh Malaysia:
- Wilayah Persekutuan (WLY01βWLY02) β 2 zon
- Johor (JHR01βJHR04) β 4 zon
- Kedah (KDH01βKDH07) β 7 zon
- Kelantan (KTN01, KTN03) β 2 zon (tiada KTN02 dalam sistem JAKIM)
- Melaka (MLK01) β 1 zon
- Negeri Sembilan (NSN01βNSN03) β 3 zon
- Pahang (PHG01βPHG05) β 5 zon
- Perak (PRK01βPRK07) β 7 zon
- Perlis (PLS01) β 1 zon
- Pulau Pinang (PNG01βPNG02) β 2 zon
- Sabah (SBH01βSBH07) β 7 zon
- Sarawak (SWK01βSWK09) β 9 zon
- Selangor (SGR01βSGR04) β 4 zon
- Terengganu (TRG01βTRG04) β 4 zon
Apabila myAzan dibuka, ia menjalankan proses bootstrap secara berperingkat:
Buka aplikasi
β
βΌ
[1] Buka sambungan SQLite & jalankan migrasi pangkalan data
β
βΌ
[2] Baca tetapan pengguna β dapatkan kod zon aktif
β
βββ Tiada zon aktif β langkau sync, tunggu pengguna pilih zon
β
βββ Ada zon aktif βββββββββββββββββββββββββββββββββββββββββββ
β
βΌ β
[3] Semak sama ada data waktu solat zon + tahun ini sudah ada ββ
β
βββ Data sudah ada β guna cache lokal, tiada muat turun
β
βββ Data belum ada β muat turun dari API JAKIM
β
βββ Berjaya β simpan dalam SQLite
βββ Gagal β log amaran, teruskan dengan data sedia ada
β
βΌ
[4] Mulakan Scheduler (semak waktu setiap 10 saat)
β
βΌ
[5] Mulakan Audio Engine (3 player berasingan)
β
βΌ
Aplikasi sedia & berjalan π’
Data waktu solat diambil dari API JAKIM e-Solat secara tahunan:
URL: https://www.e-solat.gov.my/index.php?r=esolatApi/takwimsolat&period=year&zone={zone}
Proses sync data:
syncPrayerTimesForZone(zoneCode)
β
βΌ
Semak: adakah data zon + tahun SEMASA sudah ada dalam SQLite?
β
βββ Ada β teruskan tanpa muat turun (jimat bandwidth)
β
βββ Tiada β muat turun dari JAKIM API (sehingga 3 percubaan semula)
β
βΌ
Validasi data:
- β₯300 rekod wajib ada
- Format tarikh DD-MMM-YYYY β YYYY-MM-DD
- Semua waktu fajr, dhuhr, asr, maghrib, isha mesti ada
β
βΌ
Simpan ke jadual prayer_times dalam SQLite
β
βΌ
Semak: adakah bulan semasa OktoberβDisember?
β
βββ Bukan β selesai
β
βββ Ya β cuba pra-muat data tahun BERIKUTNYA
(supaya app terus berfungsi pada 1 Januari)
π‘ Mengapa pra-muat OktoberβDisember? Supaya apabila tahun baru bermula, data sudah siap dan azan masih berbunyi walaupun tiada internet.
Scheduler adalah "jam penyelaras" yang menentukan bila azan atau notifikasi perlu berbunyi:
[Setiap 10 saat]
β
βΌ
Dapatkan masa semasa & tarikh hari ini
β
βββ Tarikh berubah? β jalankan proses pertukaran hari:
β - sync data waktu solat
β - bersihkan log lama (>90 hari)
β
βΌ
Dapatkan zon aktif & data waktu solat hari ini dari SQLite
β
βΌ
Untuk setiap waktu solat (imsak, subuh, syuruk, dhuha, zohor, asar, maghrib, isyak):
β
βββ [AZAN] Semak: adakah masa semasa dalam tetingkap 60 saat dari waktu azan?
β β
β βββ Tidak β langkau
β β
β βββ Ya β semak trigger_log: adakah azan ini SUDAH berbunyi hari ini?
β β
β βββ Sudah β elak ulang, langkau
β βββ Belum β catat dalam trigger_log, cetuskan event AZAN π
β
βββ [NOTIFIKASI] Semak: adakah masa semasa dalam tetingkap 60 saat dari (waktu - X minit)?
β
βββ Tidak β langkau
β
βββ Ya β semak trigger_log: adakah notifikasi ini SUDAH berbunyi hari ini?
β
βββ Sudah β elak ulang, langkau
βββ Belum β catat dalam trigger_log, cetuskan event NOTIFIKASI π
π‘οΈ Mekanisme anti-ulang: Setiap trigger yang dicetuskan disimpan dalam
trigger_log. Sekiranya azan Maghrib telah berbunyi pada hari ini, ia tidak akan berbunyi lagi walaupun komputer disambungkan atau waktu ditetapkan semula.
myAzan menggunakan 3 player audio berasingan dengan sistem keutamaan yang ketat:
KEUTAMAAN AUDIO: π₯ Azan > π₯ Notifikasi > π₯ Idle
Event AZAN diterima dari Scheduler
β
βΌ
Semak: adakah fail MP3 azan ditetapkan dan wujud?
β
βββ Tidak β log amaran, azan tidak dimainkan
β
βββ Ya βββββββββββββββββββββββββββββββββββββββββββ
β
βΌ β
Hentikan Notification Player (jika sedang main) ββ
β
βΌ
Jeda Idle Player (jika sedang main)
β
βΌ
Main Azan Player dengan fail:
- Waktu Subuh β gunakan fail "Azan Subuh"
- Waktu lain β gunakan fail "Azan Selain Subuh"
β
βΌ
Azan selesai / ralat
β
βΌ
Sambung semula Idle Player (jika diaktifkan)
Event NOTIFIKASI diterima dari Scheduler
β
βΌ
Semak: adakah Azan sedang main?
β
βββ Ya β abaikan notifikasi (azan lebih utama)
β
βββ Tidak ββββββββββββββββββββββββββββββββββββββββ
β
βΌ β
Semak: adakah fail MP3 notifikasi ditetapkan? ββ
β
βββ Tidak β langkau
β
βββ Ya βββββββββββββββββββββββββββββββββββββββββββ
β
βΌ β
Jeda Idle Player ββ
β
βΌ
Main Notification Player
β
βΌ
Notifikasi selesai / ralat
β
βΌ
Sambung semula Idle Player (jika diaktifkan)
App dimulakan & idle diaktifkan
β
βΌ
Baca senarai fail MP3 dari folder yang dipilih
Isih mengikut nama fail (A β Z)
β
βΌ
Main fail pertama
β
βΌ
Fail selesai β main fail seterusnya
β (jika fail terakhir β kembali ke fail pertama)
βΌ
[Bila diganggu oleh Azan/Notifikasi]
β
βββ Jeda / hentikan idle
β
βββ Selepas azan/notifikasi selesai β sambung semula mengikut mod:
- restart_playlist β mulakan semula dari fail pertama
- restart_track β ulang semula fail yang sedang main
- resume_track β sambung dari kedudukan semasa
[Scheduler mengesan tarikh berubah]
β
βΌ
Sync data waktu solat:
βββ Data hari ini masih sama tahun β terus guna dari cache
βββ Tahun bertukar (1 Jan) β data tahun baru sudah pra-dimuat sebelumnya (OktβDis)
β
βΌ
Bersihkan trigger_log yang lebih lama dari 90 hari
β
βΌ
Scheduler terus berjalan seperti biasa π
- Pengguna memilih negeri & zon dari senarai lengkap 58 zon JAKIM
- Selepas zon ditukar, data waktu solat zon baru dimuat turun secara automatik (jika belum ada)
- Data zon lama tidak dipadam, boleh digunakan semula jika zon ditukar balik
| Waktu | Fail Audio |
|---|---|
| Subuh | Boleh pilih fail MP3 berasingan |
| Zohor, Asar, Maghrib, Isyak | Gunakan fail "Azan Selain Subuh" |
Untuk setiap waktu solat, pengguna boleh:
- β Aktif / nyahaktif pemberitahuan
- β±οΈ Tetapkan berapa minit sebelum waktu untuk pemberitahuan berbunyi
- π΅ Pilih fail MP3 pemberitahuan yang berbeza
- π Laraskan kelantangan pemberitahuan
Waktu yang disokong untuk pemberitahuan:
| Waktu | Lalai |
|---|---|
| Imsak | Tidak diaktifkan, 10 minit sebelum |
| Subuh (Fajr) | Diaktifkan, 15 minit sebelum |
| Syuruk | Tidak diaktifkan, 5 minit sebelum |
| Dhuha | Tidak diaktifkan, 5 minit sebelum |
| Zohor | Diaktifkan, 15 minit sebelum |
| Asar | Diaktifkan, 15 minit sebelum |
| Maghrib | Diaktifkan, 15 minit sebelum |
| Isyak | Diaktifkan, 15 minit sebelum |
- Pilih folder yang mengandungi fail-fail MP3
- Fail dimainkan mengikut susunan nama fail (A β Z)
- Selepas fail terakhir, ulang dari awal secara berterusan
- Boleh aktifkan atau nyahaktifkan sepenuhnya
- 3 mod sambung semula selepas gangguan azan/pemberitahuan
- Kelantangan Azan: 0β100
- Kelantangan Notifikasi: 0β100
- Kelantangan Idle: 0β100
- Togol "Buka Pada Startup" β hidupkan untuk myAzan bermula secara automatik apabila Windows dihidupkan
- Sesuai untuk mini PC atau komputer yang sentiasa aktif
Aplikasi myAzan mempunyai 6 halaman utama yang boleh dinavigasi melalui bar sisi (sidebar) di sebelah kiri skrin:
Halaman utama dipaparkan secara lalai apabila aplikasi dibuka. Ia memaparkan:
- Kiraan masa mundur β bar kemajuan menuju waktu solat seterusnya, bersama nama dan baki masa
- Jam digital & tarikh β masa semasa dan tarikh hari ini
- Zon aktif β zon JAKIM yang sedang digunakan ditunjukkan pada pil lokasi
- Garis Masa Waktu Solat β carta visual menunjukkan kedudukan semua waktu solat dalam tempoh masa sehari
- Grid Waktu Solat Hari Ini β 8 waktu solat (Imsak, Subuh, Syuruk, Dhuha, Zohor, Asar, Maghrib, Isyak) dalam susun atur bento, dengan waktu seterusnya ditonjolkan
- Kad Status Zikir/Idle β menunjukkan sama ada audio idle sedang aktif dan nama fail semasa
- Kad Status Sistem Audio β menunjukkan keadaan semasa audio engine (
Idle,Azan, atauNotifikasi)
Jika zon belum dipilih, papan pemuka akan memaparkan arahan untuk pergi ke halaman Tetapan. Jika data waktu solat tidak ada, sistem akan cuba muat turun secara automatik dari API JAKIM.
Halaman Tetapan membolehkan pengguna mengkonfigurasi zon waktu solat, fail audio azan, dan pilihan permulaan sistem:
Pengguna memilih kawasan melalui 2 peringkat dropdown:
| Kawalan | Fungsi |
|---|---|
| Dropdown Negeri | Pilih negeri dari senarai 14 negeri Malaysia |
| Dropdown Zon JAKIM | Pilih zon spesifik dalam negeri tersebut (contoh: WLY01 β Kuala Lumpur) |
Selepas zon disimpan, sistem semak sama ada data waktu solat untuk zon baru sudah ada. Jika belum β muat turun secara automatik dari JAKIM. Data zon lama tidak dipadam β boleh digunakan semula tanpa muat turun.
| Tetapan | Keterangan |
|---|---|
| Azan Subuh | Fail MP3 khas untuk azan waktu Subuh |
| Azan Selain Subuh | Fail MP3 untuk Zohor, Asar, Maghrib, dan Isyak |
| π Kelantangan Azan | Gelangsar 0%β100% |
Klik "Pilih Fail" untuk buka dialog pemilihan fail Windows. Klik "β" untuk padam pilihan.
β οΈ Jika fail tidak dipilih atau tidak lagi wujud, azan tidak akan dimainkan.
| Kawalan | Fungsi |
|---|---|
| Togol "Buka Pada Startup" | Apabila diaktifkan, myAzan dilancarkan secara automatik setiap kali Windows dihidupkan |
Semua perubahan hanya disimpan apabila butang "Simpan Perubahan" ditekan. Butang "Set Semula" memulihkan semula nilai asal sebelum disimpan.
Halaman Pemberitahuan membolehkan pengguna mengurus bunyi peringatan sebelum masuk waktu solat. Terdapat 8 kad β satu untuk setiap waktu solat:
Untuk setiap waktu, pengguna boleh:
| Kawalan | Fungsi |
|---|---|
| Togol Aktif/Tidak | Hidupkan atau matikan pemberitahuan untuk waktu tersebut |
| Input Minit Awal | Bilangan minit sebelum waktu solat (0β60 minit) |
| π΅ Butang Fail | Pilih fail MP3 pemberitahuan untuk waktu tersebut |
| Butang β | Padam pilihan fail |
| π Kelantangan Pemberitahuan | Gelantangan global untuk semua pemberitahuan (0%β100%) |
Tetapan lalai:
| Waktu | Aktif | Minit Sebelum |
|---|---|---|
| Imsak | β | 10 minit |
| Subuh | β | 15 minit |
| Syuruk | β | 5 minit |
| Dhuha | β | 5 minit |
| Zohor | β | 15 minit |
| Asar | β | 15 minit |
| Maghrib | β | 15 minit |
| Isyak | β | 15 minit |
π‘οΈ Setiap pemberitahuan hanya berbunyi sekali sehari. Walaupun aplikasi dimulakan semula, pemberitahuan yang sudah berbunyi tidak akan berulang pada hari yang sama.
Halaman Audio menyediakan kawalan kelantangan berpusat untuk semua jenis audio dalam aplikasi:
| Jenis Audio | Keterangan |
|---|---|
| π Azan | Kelantangan untuk semua azan (0%β100%) |
| π Notifikasi | Kelantangan untuk pemberitahuan waktu solat (0%β100%) |
| π΅ Idle | Kelantangan untuk audio zikir/al-Quran latar (0%β100%) |
Klik "Simpan Tetapan Audio" untuk menyimpan semua perubahan kelantangan.
Halaman Zikir membolehkan pengguna mengkonfigurasi audio idle β lantunan al-Quran atau zikir yang dimainkan secara berterusan semasa tiada audio lain aktif:
- Klik "Pilih Folder" untuk memilih folder yang mengandungi fail-fail MP3
- Fail akan dimainkan mengikut susunan nama fail (A β Z) secara berulang
- Senarai fail dalam folder dipaparkan di bahagian bawah halaman untuk rujukan
| Kawalan | Fungsi |
|---|---|
| Togol "Aktifkan Audio Idle" | Hidupkan atau matikan fungsi audio idle |
| π Kelantangan Idle | Gelantangan khusus untuk audio idle (0%β100%) |
Cara kerja audio idle:
- Semua fail
.mp3dalam folder disusun mengikut nama fail (AβZ) - Fail pertama dimainkan apabila aplikasi dimulakan dan idle diaktifkan
- Fail seterusnya dimainkan secara automatik selepas setiap fail selesai
- Selepas fail terakhir selesai, senarai berulang semula dari fail pertama
3 Mod Sambung Semula selepas Azan/Pemberitahuan:
| Mod | Tingkah Laku |
|---|---|
restart_playlist |
Kembali ke fail pertama dalam senarai (lalai) |
restart_track |
Ulang semula fail yang sedang dimainkan dari awal |
resume_track |
Sambung semula tepat dari kedudukan yang terputus |
Halaman Tentang memaparkan maklumat tentang aplikasi dan pembangunnya dalam reka bentuk "Digital Sanctuary" yang moden:
| Maklumat | Nilai |
|---|---|
| Nama | Fara Farizul |
| Jawatan | Pembangun Utama |
| βοΈ Emel | farxpeace@gmail.com |
| π Telefon | +60137974467 |
| Maklumat | Nilai |
|---|---|
| Aplikasi | myAzan |
| Platform | Windows 10 / 11 |
| Status Lesen | Proprietari |
Halaman ini turut memaparkan grid ciri-ciri utama aplikasi dan objektif projek β termasuk ketepatan waktu solat, pengalaman minimalis tanpa gangguan, dan integrasi yang harmoni dalam persekitaran desktop harian.
Β© 2025 Fara Farizul. Hak Cipta Terpelihara.Dibuat dengan β₯ di Malaysia
Berikut adalah nilai lalai yang digunakan oleh myAzan selepas pemasangan baru, seperti yang ditetapkan dalam fail migrasi pangkalan data:
| Kunci | Nilai Lalai | Keterangan |
|---|---|---|
active_zone_code |
SGR01 |
Zon aktif lalai β Gombak, Petaling, Sepang, Hulu Langat, Hulu Selangor, Shah Alam |
idle_enabled |
false |
Audio idle dimatikan secara lalai |
auto_download_next_year |
true |
Auto muat turun data tahun berikutnya pada OktoberβDisember |
launch_on_startup |
true |
Bermula bersama Windows secara automatik |
| Tetapan | Nilai Lalai | Keterangan |
|---|---|---|
azan_subuh_file_path |
NULL |
Tiada fail lalai β perlu dipilih oleh pengguna |
azan_other_file_path |
NULL |
Tiada fail lalai β perlu dipilih oleh pengguna |
idle_folder_path |
NULL |
Tiada folder lalai β perlu dipilih oleh pengguna |
idle_enabled |
0 (mati) |
Audio idle dimatikan secara lalai |
idle_resume_mode |
restart_playlist |
Mulakan semula dari fail pertama selepas gangguan |
idle_sort_mode |
filename_asc |
Isih fail mengikut nama (A β Z) |
azan_volume |
100 |
Kelantangan azan β 100% |
notification_volume |
100 |
Kelantangan notifikasi β 100% |
idle_volume |
50 |
Kelantangan audio idle β 50% |
| Waktu | Aktif Lalai | Minit Sebelum Lalai |
|---|---|---|
| Imsak | β Tidak | 10 minit |
| Subuh (Fajr) | β Ya | 15 minit |
| Syuruk | β Tidak | 5 minit |
| Dhuha | β Tidak | 5 minit |
| Zohor (Dhuhr) | β Ya | 15 minit |
| Asar | β Ya | 15 minit |
| Maghrib | β Ya | 15 minit |
| Isyak (Isha) | β Ya | 15 minit |
π‘ Semua tetapan boleh diubah suai melalui halaman Tetapan, Pemberitahuan, Audio, dan Zikir dalam aplikasi.
myAzan menyimpan semua data secara lokal:
| Jadual | Fungsi |
|---|---|
zones |
Senarai 58 zon JAKIM dengan nama negeri |
prayer_times |
Cache data waktu solat tahunan dari JAKIM |
app_settings |
Tetapan umum (zon aktif, dll.) |
audio_settings |
Laluan fail azan, folder idle, mod sambung semula |
notification_settings |
Tetapan per-waktu untuk notifikasi |
trigger_log |
Log sejarah azan/notifikasi yang telah dimainkan (90 hari) |
π Hanya laluan fail yang disimpan dalam database, bukan kandungan MP3.
Aplikasi menggunakan API tahunan JAKIM e-Solat:
https://www.e-solat.gov.my/index.php?r=esolatApi/takwimsolat&period=year&zone={zone}
Contoh kod zon:
WLY01β Kuala Lumpur & PutrajayaSGR01β Gombak, Hulu Langat, Sepang (Selangor)JHR01β Pulau Aur, Pulau Pemanggil (Johor)KTN01β Kota Bharu (Kelantan)
Data yang diterima mengandungi waktu harian untuk: Imsak Β· Subuh Β· Syuruk Β· Dhuha Β· Zohor Β· Asar Β· Maghrib Β· Isyak
Sebelum menjalankan npm install, pastikan perkara berikut telah dipasang:
- Node.js β muat turun dari nodejs.org (cadangan: LTS terbaru)
- Python 3.x β diperlukan oleh
better-sqlite3untuk kompilasi modul natif - Visual Studio Build Tools dengan komponen "Desktop development with C++"
- Muat turun dari visualstudio.microsoft.com/visual-cpp-build-tools
# 1. Clone repositori
git clone <url-repositori>
cd myazan
# 2. Pasang semua kebergantungan
npm install
# 3. Jalankan aplikasi dalam mod pembangunan
npm startNota:
npm installakan memuat turun binari Electron (~150 MB) dan membinabetter-sqlite3untuk Electron. Proses ini mungkin mengambil masa beberapa minit.
| Perintah | Fungsi |
|---|---|
npm start |
Kompil + lancarkan Electron (mod biasa) |
npm run dev |
Mod pembangunan dengan hot-reload β kompil semula secara automatik apabila kod berubah |
npm run compile |
Kompil sahaja (tanpa lancarkan Electron) |
npm run typecheck |
Semak jenis TypeScript tanpa kompil |
npm run lint |
Jalankan ESLint untuk semak kualiti kod |
npm run format |
Format kod automatik menggunakan Prettier |
npm run buildPemasang NSIS dan fail EXE mudah alih akan dihasilkan dalam folder dist-build/.
src/
main/
bootstrap/ β inisialisasi app
database/
migrations/ β fail SQL migrasi
repositories/ β operasi CRUD per-jadual
services/
prayer-time/ β JAKIM client, parser, sync
audio/ β audio engine (3 player + coordinator)
scheduler/ β semakan waktu & trigger event
settings/ β baca/simpan konfigurasi
zones/ β urus senarai zon
ipc/ β pendaftaran saluran IPC
preload/ β bridge selamat antara main & renderer
renderer/ β UI (HTML, TypeScript, CSS)
shared/
types/ β jenis data dikongsi
constants/ β pemalar app
- contextIsolation: true β renderer tidak boleh akses terus Node.js API
- nodeIntegration: false β keselamatan Electron terjaga
- Offline-first β app berfungsi walaupun internet tidak tersedia
- Trigger anti-ulang β
trigger_logmemastikan azan/notifikasi tidak berbunyi berganda pada hari yang sama - Validasi laluan β semua laluan fail/folder disahkan wujud sebelum digunakan
- Validasi data API β respon JAKIM disemak format dan jumlah rekod sebelum disimpan
Perisian ini adalah Proprietary Software.
- Kod sumber adalah sulit dan tidak dibenarkan untuk diedarkan atau diubah suai tanpa kebenaran pemilik.
- Aplikasi dalam bentuk binari boleh digunakan secara percuma tertakluk kepada syarat pemilik.
myAzan dibangunkan oleh Fara Farizul dengan niat untuk memudahkan umat Islam menunaikan solat tepat pada waktunya, tanpa perlu bergantung kepada aplikasi awan atau sambungan internet yang berterusan. π€²
Maklumat lanjut pembangun boleh dilihat dalam aplikasi melalui halaman Tentang (π§βπ» Kad Pembangun).






