Monday, August 31, 2026

Aplikasi Sun Outage

Jika Anda mengelola jaringan satelit, Anda pasti akan berhadapan dengan fenomena Sun Outage—momen ketika posisi Matahari berada tepat di belakang satelit geostasioner, sehingga radiasi termalnya menenggelamkan sinyal dari satelit ke antena stasiun bumi Anda.

Aplikasi Sun Outage https://sun-outage-calc.vercel.app/

Mari kita pelajari logika algoritma di baliknya!

1. Menemukan Posisi Satelit (Toposentrik 3D)

Sebelum mencari Matahari, antena harus tahu di mana satelit berada. Di dalam math_engine.js, fungsi calculatePointing bertugas untuk ini.

  • Fungsi ini tidak menggunakan rumus bumi bulat sempurna, melainkan memperhitungkan faktor kegepengan bumi (Earth Flattening Factor = 1 / 298.26).
  • Dengan trigonometri 3D, koordinat stasiun bumi dan satelit dikonversi menjadi sudut Azimuth dan Elevation yang presisi.

2. Melacak Pergerakan Matahari (Algoritma NOAA)

Ini adalah bagian paling kompleks. Fungsi getSunPosition adalah rumus raksasa yang mengadaptasi algoritma Julian Century dari NOAA.

  • Mesin mengonversi waktu UTC menjadi fraksi abad Julian (Julian Century).
  • Dari sini, kita menghitung anomali orbit bumi, deklinasi matahari, dan persamaan waktu (Equation of Time).
  • Hasil akhirnya adalah posisi Matahari saat itu juga, yang diproyeksikan ke dalam sudut Azimuth dan Elevasi relatif terhadap pengamat di stasiun bumi.

3. Menghitung Toleransi & Separasi Sudut

Kapan gangguan sinyal benar-benar terjadi? Tergantung pada seberapa besar antena Anda dan frekuensi yang digunakan.

  • Toleransi Antena: Fungsi getOutageAngle menentukan lebar sorotan (beamwidth) antena. Antena C-Band (~3.95 GHz) dan Ku-Band (~11.95 GHz) memiliki ambang batas sudut gangguan yang berbeda berdasarkan ukuran diameternya.
  • Separasi Sudut: Fungsi getAngularSeparation menggunakan trigonometri bola (Spherical Trigonometry) untuk mengukur jarak sudut antara titik arah antena (ke satelit) dan posisi Matahari saat itu. Jika jarak sudut ini lebih kecil atau sama dengan toleransi antena, maka outage terjadi!

4. Algoritma "Smart Scanning" (Rahasia Kecepatan)

Jika kita menghitung pergerakan matahari setiap detik dalam sebulan penuh, browser Anda akan crash karena kelebihan beban komputasi. Di sinilah fungsi calculateOutageTable bersinar dengan strategi Pemindaian Kasar ke Halus (Coarse to Fine):

  • Pindai Kasar: Mesin melompat setiap 30 detik untuk mencari kapan Matahari mendekati area toleransi antena.
  • Pindai Halus: Begitu Matahari terdeteksi masuk (atau keluar) dari zona antena, mesin mundur 30 detik, lalu memindai pelan-pelan per 1 detik untuk menemukan waktu (pintu masuk/keluar) yang paling presisi.

5. Studi Kasus: Simulasi Perhitungan Stasiun Bumi Jakarta

Agar tidak hanya membayangkan teori, mari kita simulasikan bagaimana mesin memproses perhitungan di lapangan. Bayangkan Anda ditugaskan menjaga link VSAT di Jakarta yang mengarah ke satelit Telkom-4.

Parameter Input:

  • Lokasi: JAKARTA (Lat: -6.17, Lon: -106.8)
  • Satelit: Telkom-4 / Merah Putih (108.0E)
  • Antena: 1.8 Meter
  • Frekuensi: C-Band
  • Tahun Prediksi: 2026

Langkah 1: Mengunci Target (Pointing)

Mesin mengkalkulasi koordinat stasiun bumi terhadap garis bujur satelit (108.0E). Hasil dari fungsi calculatePointing mencetak angka:

  • Azimuth: 11.039°
  • Elevation: 82.605°

Ini adalah titik diam antena Anda.

Langkah 2: Menghitung Zona Bahaya (3dB Beamwidth & Geometric Outage Threshold)

Mesin kemudian menjalankan fungsi getOutageAngle untuk menghitung metrik krusial: 3dB Beamwidth dan ambang batas gangguan geometrisnya.

Bayangkan antena parabola Anda memancarkan zona tangkapan berbentuk kerucut. Lebar kerucut inilah yang direpresentasikan oleh Beamwidth.

  • Beamwidth Coefficient: Lebar sorotan sinyal dipengaruhi oleh bagaimana energi didistribusikan pada reflektor (illumination taper). Aplikasi ini menggunakan pendekatan koefisien empiris 73.3 yang menjadi standar umum industri. Saat dimasukkan ke dalam persamaan panjang gelombang, koefisien ini disederhanakan menjadi angka pembilang 11 untuk menghitung jari-jari (setengah bukaan) sorotan sinyal antena.
  • Rumus Radius Beam: Dihitung dengan formula 11 / (Frekuensi × Diameter Antena).
  • Jari-jari Matahari: Dilihat dari bumi, matahari memiliki diameter visual rata-rata sekitar 0.53°. Untuk perhitungan gelombang radio, jari-jari matahari (setengah diameter) ditetapkan pada angka 0.267°.

Lalu, kapan gangguan terjadi? Sun outage sejatinya disebabkan oleh radiasi termal matahari yang masuk ke dalam sorotan antena. Radiasi ini mendongkrak suhu noise ($T_{sys}$) sistem secara drastis, sehingga kualitas sinyal ($C/N$) merosot tajam.

Karena menghitung fluktuasi noise secara persis membutuhkan data perangkat keras yang spesifik, para engineer menggunakan model geometri untuk memprediksi kapan gangguan tersebut mulai berisiko menenggelamkan link margin:

Geometric Threshold = Jari-jari Beamwidth + Jari-jari Matahari (0.267°)

Mari kita masukkan angkanya! Menggunakan frekuensi C-Band rata-rata (3.95 GHz) dan antena 1.8 meter, mesin mendapatkan radius beam sebesar 1.547°. Ditambah jari-jari matahari 0.267°, maka didapatkan Geometric Threshold sebesar 1.814°.

Artinya, jika jarak sudut antara titik pusat Matahari dan arah boresight antena menyempit hingga melewati ambang batas 1.814° ini, VSAT Anda diperkirakan telah memasuki periode sun outage dan sangat berisiko mengalami gangguan koneksi!

Langkah 3: Pemindaian (Scanning)

Mesin memindai pergerakan Matahari di bulan Maret dan September 2026. Sebagai contoh, pada tanggal 23 Maret 2026, algoritma pemindaian mendeteksi momen kritis:

  • Pada pukul 04:46:34 GMT, jarak Matahari ke antena menyentuh batas 1.797°. Status: Outage dimulai!
  • Matahari terus bergeser melewati titik buta antena.
  • Pada pukul 05:00:55 GMT, jarak Matahari kembali menjauh lebih dari 1.797°. Status: Outage selesai!

Mesin mencatat durasi gangguan hari itu berlangsung selama 14 menit 21 detik. Siklus ini diulangi untuk hari-hari sebelum dan sesudahnya hingga mesin menyusun laporan final.

Hasil Akhir (Predicted Outage Report)

Berikut adalah output murni yang dihasilkan oleh aplikasi setelah merangkum seluruh hasil pemindaian matematis di atas:

PREDICTED OUTAGE REPORT
========================================================================
Ground Station : JAKARTA (Lat: -6.17, Lon: -106.8)
Satellite      : Telkom-4 / Merah Putih (108.0E)
Antenna Point  : Azimuth 11.039°, Elevation 82.605°
3dB Beamwidth  : 3.094°, Outage threshold: 1.814°
Parameters     : 1.8m C-Band (3.95 GHz), k-Factor: 73.3, Year: 2026
========================================================================

[ MARCH EQUINOX ]
Date             | GMT      | GMT      | Duration | WIB      | WIB
dd/MMM/yyyy      | Start    | End      | mm:ss    | Start    | End
-----------------|----------|----------|----------|----------|----------
19/Mar/2026      | 04:52:02 | 04:57:49 | 05:47    | 11:52:02 | 11:57:49
20/Mar/2026      | 04:49:29 | 04:59:48 | 10:19    | 11:49:29 | 11:59:48
21/Mar/2026      | 04:48:01 | 05:00:39 | 12:38    | 11:48:01 | 12:00:39
22/Mar/2026      | 04:47:06 | 05:00:59 | 13:53    | 11:47:06 | 12:00:59
23/Mar/2026      | 04:46:34 | 05:00:55 | 14:21    | 11:46:34 | 12:00:55
24/Mar/2026      | 04:46:23 | 05:00:30 | 14:07    | 11:46:23 | 12:00:30
25/Mar/2026      | 04:46:34 | 04:59:43 | 13:09    | 11:46:34 | 11:59:43
26/Mar/2026      | 04:47:13 | 04:58:28 | 11:15    | 11:47:13 | 11:58:28
27/Mar/2026      | 04:48:38 | 04:56:27 | 07:49    | 11:48:38 | 11:56:27

[ SEPTEMBER EQUINOX ]
Date             | GMT      | GMT      | Duration | WIB      | WIB
dd/MMM/yyyy      | Start    | End      | mm:ss    | Start    | End
-----------------|----------|----------|----------|----------|----------
16/Sep/2026      | 04:38:29 | 04:45:43 | 07:14    | 11:38:29 | 11:45:43
17/Sep/2026      | 04:36:16 | 04:47:12 | 10:56    | 11:36:16 | 11:47:12
18/Sep/2026      | 04:34:55 | 04:47:51 | 12:56    | 11:34:55 | 11:47:51
19/Sep/2026      | 04:34:01 | 04:48:02 | 14:01    | 11:34:01 | 11:48:02
20/Sep/2026      | 04:33:29 | 04:47:51 | 14:22    | 11:33:29 | 11:47:51
21/Sep/2026      | 04:33:18 | 04:47:20 | 14:02    | 11:33:18 | 11:47:20
22/Sep/2026      | 04:33:29 | 04:46:26 | 12:57    | 11:33:29 | 11:46:26
23/Sep/2026      | 04:34:08 | 04:45:05 | 10:57    | 11:34:08 | 11:45:05
24/Sep/2026      | 04:35:38 | 04:42:53 | 07:15    | 11:35:38 | 11:42:53

6. Di Balik Layar: Rumus Sin Cos dan Logika Looping

Bagi Anda yang penasaran melihat langsung bentuk kodenya, mari kita bedah dua fungsi krusial yang membuat aplikasi ini berjalan sangat akurat dan efisien tanpa membuat komputer melambat.

A. Trigonometri Bola (Menghitung Jarak Matahari & Antena)

Anda benar sekali jika menebak ada banyak rumus Sin dan Cos di sini! Karena Bumi dan kubah langit berbentuk bola, kita tidak bisa mengukur jarak antara titik arah antena dan titik posisi matahari menggunakan rumus Pythagoras biasa. Kita harus menggunakan Trigonometri Bola (Spherical Trigonometry).

Di dalam math_engine.js, tugas ini ditangani oleh fungsi getAngularSeparation. Secara matematis, kita menggunakan Spherical Law of Cosines:

cos(θ) = sin(El1) × sin(El2) + cos(El1) × cos(El2) × cos(Az1 - Az2)

Berikut adalah makna dari masing-masing variabel di atas:

  • θ (Theta): Jarak Sudut (Angular Separation) absolut antara titik tengah sorotan antena dan titik pusat Matahari di kubah langit.
  • El1: Sudut Elevasi Antena (tingkat kemiringan/dongakan parabola Anda menuju satelit).
  • El2: Sudut Elevasi Matahari (ketinggian Matahari diukur dari batas ufuk/cakrawala pengamat pada detik tersebut).
  • Az1: Sudut Azimuth Antena (arah derajat kompas ke mana antena parabola Anda menghadap).
  • Az2: Sudut Azimuth Matahari (arah derajat kompas letak Matahari pada detik tersebut).

Singkatnya, karena kita berhadapan dengan objek di langit (3D), kita tidak bisa sekadar mengurang-kurangkan angkanya. Rumus ini menggabungkan perbedaan arah kompas (Azimuth) dan ketinggian (Elevation) untuk mendapatkan satu jarak sudut melengkung yang akurat!

Lalu, Apa Kaitan θ (Theta) dengan Waktu Start dan End Outage?

Ini adalah kunci utama dari seluruh perhitungan kita! Untuk memahami kapan gangguan dimulai dan berakhir, bayangkan antena VSAT Anda memiliki sebuah "zona bahaya" atau area tangkapan berbentuk kerucut (kita sebut saja Sudut Toleransi atau Beamwidth). Besar lingkaran zona bahaya ini sudah kita hitung sebelumnya berdasarkan ukuran antena dan jenis frekuensi.

Nah, nilai θ (Theta) ini tidaklah statis. Ia terus berubah setiap detiknya seiring pergerakan Matahari melintasi langit. Mesin scanner (calculateOutageTable) memantau pergerakan nilai θ ini dengan kronologi sebagai berikut:

  • Menjelang Outage: Matahari di langit perlahan-lahan mendekati posisi satelit. Artinya, jarak sudut atau nilai θ perlahan-lahan mengecil. Sinyal VSAT Anda di titik ini masih aman.
  • Waktu START (Mulai): Tepat pada detik di mana nilai θ lebih kecil atau sama dengan (≤) Sudut Toleransi antena (artinya, piringan Matahari mulai menyentuh tepi "zona bahaya" antena), mesin mencatat detik tersebut sebagai Start UTC. Pada titik ini, radiasi panas Matahari mulai masuk ke LNB, menaikkan noise, dan membuat kualitas sinyal (Eb/No atau SNR) modem Anda merosot tajam.
  • Puncak Outage: Matahari berada persis di belakang satelit. Pada momen ini, nilai θ mencapai angka terkecilnya (mendekati 0°). Interference mencapai titik maksimal dan link VSAT Anda kemungkinan besar putus total (Loss of Lock).
  • Waktu END (Selesai): Matahari terus bergerak menjauhi satelit, sehingga nilai θ perlahan-lahan membesar kembali. Tepat pada detik ketika nilai θ lebih besar (>) dari Sudut Toleransi (piringan Matahari keluar dari "zona bahaya"), mesin mencatat detik tersebut sebagai End UTC. Panas Matahari tak lagi masuk ke antena, noise mereda, dan sinyal VSAT Anda kembali normal!

Singkatnya, math_engine.js bekerja layaknya sensor alarm batas wilayah: "Catat waktu START saat nilai Theta mengecil melewati batas toleransi, dan catat waktu END saat nilai Theta kembali membesar keluar dari batas toleransi tersebut!"

Dan jika kita terjemahkan ke dalam bahasa JavaScript, kodenya akan terlihat rapi seperti ini:

  getAngularSeparation(az1, el1, az2, el2) {
    const el1R = this.toRadians(el1);
    const el2R = this.toRadians(el2);
    const azDiff = this.toRadians(az1 - az2);

    // Rumus Inti Trigonometri Bola
    const cosAngle = Math.sin(el1R) * Math.sin(el2R) + 
                     Math.cos(el1R) * Math.cos(el2R) * Math.cos(azDiff);
                     
    return this.toDegrees(Math.acos(cosAngle));
  }

B. Logika Looping: Coarse to Fine Scanning

Untuk menemukan detik yang presisi kapan outage terjadi, mesin harus melakukan looping (perulangan pencarian waktu). Jika kita mengecek pergerakan matahari satu per satu setiap detik dalam setahun penuh, browser pasti akan hang. Solusinya adalah metode Smart Scanning.

Logikanya sangat elegan dan dibagi menjadi tiga langkah utama:

  1. Pindai Kasar: Mesin melompat setiap 30 detik (s += 30) untuk mencari tahu kapan matahari mulai mendekat ke antena[cite: 3].
  2. Mencari Pintu Masuk: Jika mesin mendeteksi gangguan, ia akan berhenti, mundur 30 detik, lalu memindai pelan-pelan per 1 detik (fineS++) untuk mencari detik pasti kapan sinyal mulai tumbang[cite: 3].
  3. Mencari Pintu Keluar: Hal yang sama dilakukan saat matahari mulai menjauh. Mesin memindai per 1 detik untuk mencari detik pasti kapan sinyal kembali normal, lalu segera melompat (break) memindai hari berikutnya[cite: 3].

Berikut adalah potongan logika utama dari fungsi calculateOutageTable tersebut:

  // 1. Pindai KASAR: Lompat setiap 30 detik (Sangat Cepat!)
  for (let s = 0; s < 86400; s += 30) {
    // ... Hitung posisi matahari dan cek status outage
    
    // 2. Jika status berubah menjadi MASUK (Mencari Pintu Masuk)
    if (isOutage && !currentlyOutage) {
      // Pindai HALUS: Mundur 30 detik, maju pelan-pelan per 1 detik
      for (let fineS = s - 30; fineS <= s; fineS++) {
         // Temukan detik pasti masuknya matahari -> startUTC
      }
    }
    
    // 3. Jika status berubah menjadi KELUAR (Mencari Pintu Keluar)
    else if (!isOutage && currentlyOutage) {
      // Pindai HALUS: Mundur 30 detik, maju pelan-pelan per 1 detik
      for (let fineS = s - 30; fineS <= s; fineS++) {
         // Temukan detik pasti keluarnya matahari -> endUTC
      }
      break; // Waktu keluar sudah ketemu, langsung lompat ke hari besok!
    }
  }

Dengan memahami logika algoritma di baliknya, laporan di atas bukan lagi sekadar tabel waktu, melainkan hasil perhitungan pergerakan tata surya kita.

No comments: