Dokumen ini menerangkan cara sistem berfungsi, bukan cara pasang (rujuk SISTEM.md untuk tutorial GitHub + Firebase).
Sistem ini menggantikan cara manual (kertas/pengumuman suara) untuk pengurusan bilik panggilan (call room) dalam kejohanan olahraga, dengan 3 skrin berasingan yang saling berhubung secara masa-nyata:
| Skrin | Untuk siapa | Fungsi |
|---|---|---|
Papan TV (call-room-board.html) |
Penonton/atlet/jurulatih — dipaparkan pada TV/projektor | Papar sahaja, tiada kawalan |
Panel Admin (call-room-admin.html) |
Pegawai bilik panggilan | Tambah, urus, tukar status acara |
Setting (call-room-settings.html) |
Pegawai penyelaras | Tetapkan nama kejohanan, hari semasa, tempoh countdown |
Bila pegawai buat perubahan di Admin, Papan TV automatik kemas kini dalam masa 3-6 saat — tiada siapa perlu refresh manual.
Panel Admin ──┐
│ ┌─────────────────────┐
Setting ───┼───────▶│ Firebase Realtime │
│ │ Database │
Papan TV ◀──┘ └─────────────────────┘
(baca sahaja, poll setiap 3 saat)
Dua “kunci” data disimpan dalam Firebase:
call-board:events — senarai semua acaracall-board:settings — tetapan program (nama kejohanan, hari, tempoh countdown)Setiap acara ada satu status yang menentukan lajur mana ia dipaparkan:
| Status | Lajur di Papan TV | Bila digunakan |
|---|---|---|
upcoming (Belum Buka / Menunggu) |
Panggilan Akan Datang | Acara belum dipanggil lagi |
live (Live) |
Panggilan Semasa | Pegawai baru sahaja tekan “Live” — countdown bermula |
done (Selesai) |
Panggilan Tamat | Acara sudah diserahkan ke pegawai trek/padang |
Dalam status upcoming, ada 2 sub-keadaan (tag):
Kesemua 4 butang keadaan (Belum Buka / Menunggu / Live / Selesai) dalam Admin adalah satu klik — tekan mana-mana terus tukar keadaan acara tanpa langkah tambahan.
Bila pegawai tekan butang Live:
calledAt) acara itu jadi liveTempoh Live (dari Setting) − masa berlaluMM:SS berbaki, kemas kini setiap saatTempoh lalai 30 minit, boleh ditukar dalam Setting (Tempoh Live selepas Panggil) — perubahan ini terpakai untuk semua acara baharu yang di-“Live”-kan selepas itu.
Kejohanan selalunya berlangsung berhari-hari. Supaya admin tak perlu upload CSV berulang setiap hari:
hari diisi ikut hari sebenar setiap acarahari kosong akan sentiasa dipaparkan setiap hari (sesuai untuk acara istimewa/upacara pembukaan)Dalam Panel Admin ada checkbox “Papar semua hari (semakan sahaja)” — membolehkan pegawai semak/edit acara hari lain tanpa menjejaskan apa yang dipaparkan di TV.
| Medan | Maksud | Wajib? |
|---|---|---|
no_acara |
Nombor rasmi acara dalam buku program (cth: A101) |
Tidak |
kategori |
Kod kategori (cth: BPL12) |
Tidak |
nama_acara |
Nama acara (cth: 100m) |
Ya |
status |
upcoming / live / done |
Tidak (default upcoming) |
bilik |
Bilik panggilan (cth: CR1) |
Tidak |
pusingan |
Peringkat (Saringan/Separuh Akhir/Akhir) | Tidak |
catatan |
Nota bebas untuk pegawai | Tidak |
hari |
Hari kejohanan (01–05) — kosong = setiap hari |
Tidak |
templat-acara.csv untuk contoh format)Kedua-dua cara boleh digunakan serentak — data akan digabungkan dalam senarai yang sama.
SISTEM.md bahagian keselamatan Firebase Rules)catatan atau lain-laincallroom-mssd/
├── call-room-board.html ← Papan TV (baca sahaja)
├── call-room-admin.html ← Panel Admin (tulis/urus)
├── call-room-settings.html ← Setting program
├── firebase-config.js ← Kredential Firebase (perlu diisi sekali)
├── storage.js ← Lapisan storan (jangan edit)
├── templat-acara.csv ← Contoh fail CSV untuk import
├── SISTEM.md ← Tutorial pasang (GitHub + Firebase)
└── README.md ← Dokumen ini