# Bab 22: Jaringan Ad-Hoc Nirkabel BLE Mesh Peer-to-Peer Tanpa Internet

Ketergantungan total pada menara pemancar seluler (BTS) dan infrastruktur internet terpusat adalah titik kerapuhan terbesar aplikasi modern. Ketika bencana alam gempa bumi melanda dan memutus pasokan listrik BTS, ketika kapal patroli berlayar di laut lepas tanpa jangkauan sinyal 4G/5G, atau ketika tim medis darurat bertugas di pedalaman hutan belantara, komunikasi data antar-perangkat seluler tetap mutlak diperlukan untuk koordinasi logistik dan pertolongan pertama.

WidyaMobile memecahkan keterbatasan ini melalui teknologi **Sovereign Bluetooth Low Energy (BLE) Mesh Networking**. Mengacu pada standar *Bluetooth Mesh Profile Specification v1.0.1*, ponsel-ponsel pengguna membentuk jaringan *mesh peer-to-peer ad-hoc* terdesentralisasi tanpa membutuhkan server pusat, router Wi-Fi, maupun kartu SIM aktif. Setiap ponsel berfungsi ganda sebagai simpul pemancar (*Node*) dan simpul penerus (*Relay Node*) yang melompati rintangan fisik (*multi-hop forwarding*).

WidyaMobile mengintegrasikan kapabilitas mesh ini melalui fungsi bawaan `mobile_ble_mesh_siarkan_pesan` dan `mobile_ble_mesh_baca_inbox` pada `src/stdlib/mobile_native.rs`. Seluruh pesan dienkripsi secara berlapis menggunakan algoritma **AES-CCM 128-bit** (pada Lapisan Jaringan dan Lapisan Aplikasi) guna menjamin kerahasiaan data dari penyadapan simpul perantara.

```
┌────────────────────────────────────────────────────────────────────────┐
│             ARSITEKTUR MULTI-HOP JARINGAN BLE MESH WIDYAMOBILE         │
├────────────────────────────────────────────────────────────────────────┤
│  [ Simpul Asal A ] ──(BLE Adv)──> [ Simpul Relai B ] ──(BLE Adv)──>    │
│  (Pos Komando Medis)              (Ponsel Relawan 1)                   │
│                                           │                            │
│                                        (BLE Adv)                       │
│                                           ↓                            │
│  [ Simpul Target D ] <──(BLE Adv)── [ Simpul Relai C ]                 │
│  (Gudang Logistik Darurat)         (Ponsel Relawan 2)                  │
└────────────────────────────────────────────────────────────────────────┘
```

Prinsip dasar jaringan BLE Mesh WidyaMobile meliputi:
1. **Managed Flooding with Sequence Cache**: Pesan disiarkan (*broadcasted*) melalui paket iklan BLE non-koneksi (*Advertising Bearer*). Setiap simpul memelihara tabel *Sequence Number Cache* untuk memastikan sebuah paket pesan hanya diproses dan diteruskan sekali saja guna mencegah badai siaran (*broadcast storm*).
2. **Time-To-Live (TTL) Decay**: Setiap paket dilengkapi nilai batas lompatan (*TTL*, misalnya bernilai 7). Nilai TTL berkurang 1 pada setiap simpul relai hingga mencapai 0, membatasi radius jangkauan jaringan agar tidak membebani spektrum radio.
3. **Dual-Layer Cryptographic Security**: Kunci Jaringan (*NetKey*) mengamankan komunikasi di tingkat broadcast fisik agar simpul luar tidak bisa membanjiri jaringan, sedangkan Kunci Aplikasi (*AppKey*) mengamankan isi pesan sehingga hanya simpul penerima yang dituju yang dapat membaca teks pesan.

## Diagram Alir Propagasi Pesan Multi-Hop BLE Mesh

Diagram berikut menguraikan perjalanan pesan darurat dari simpul pengirim melintasi simpul relai hingga diterima simpul tujuan:

```mermaid
flowchart TD
    Orig["Simpul Asal: Buat Pesan Darurat Logistik"] --> Enc["Enkripsi Berlapis (AppKey + NetKey AES-CCM)"]
    Enc --> Adv["Siarkan via BLE Advertising Bearer (TTL = 5)"]
    
    Adv --> Relay["Simpul Relai Sekitar Menangkap Paket BLE"]
    Relay --> CacheCheck{"Pernah Menerima Pesan Ini (Seq Cache)?"}
    
    CacheCheck -->|Ya| Drop["Buang Paket Duplikat"]
    CacheCheck -->|Tidak| DecrTTL["Simpan ke Cache & Kurangi TTL (TTL = TTL - 1)"]
    
    DecrTTL --> IsTarget{"Apakah Ponsel Ini Simpul Tujuan?"}
    IsTarget -->|Ya| Inb["Dekripsi dengan AppKey & Masukkan ke Inbox"]
    IsTarget -->|Bukan & TTL > 0| Fwd["Siarkan Ulang Paket ke Udara (Relay Broadcast)"]
    IsTarget -->|Bukan & TTL = 0| DropEnd["Hentikan Lompatan (TTL Habis)"]
    
    Inb --> UI["Tampilkan Notifikasi Darurat di Layar Pengguna"]
```

## Implementasi Program Komunikasi Darurat BLE Mesh

Berikut adalah implementasi sistem komunikasi obrolan darurat bencana alam tanpa jaringan seluler maupun internet:

```widya
// Program: jaringan_mesh_darurat_ble.wya
// Menyiarkan dan menerima pesan logistik bencana via jaringan ad-hoc BLE Mesh

gunakan modul::mobile;

fungsi utama() {
    cetak("==============================================================");
    cetak("📻 JARINGAN NIRKABEL AD-HOC BLE MESH WIDYAMOBILE");
    cetak("==============================================================");

    // 1. Inisialisasi Simpul Mesh Lokal
    misal id_simpul_lokal = "NODE-MEDIS-POSKO-01";
    misal grup_tujuan = "LOGISTIK_DARURAT_SEMUA";
    cetak("ID Simpul Lokal    : " + id_simpul_lokal);
    cetak("Saluran Mesh Grup  : " + grup_tujuan);
    cetak("Status Infrastruktur: Mandiri Penuh (0% Internet / BTS 🛰️)");

    // 2. Menyiarkan Pesan Kebutuhan Logistik Darurat (Multi-Hop)
    misal pesan_darurat = "MEMBUTUHKAN 20 KANTONG DARAH GOL O & 5 TABUNG OKSIGEN DI SEKTOR B4";
    misal ttl_lompatan = 5; // Mampu melompat hingga 5 ponsel perantara

    cetak("
Menyiarkan pesan darurat ke jaringan mesh udara...");
    misal status_kirim = mobile_ble_mesh_siarkan_pesan(pesan_darurat, grup_tujuan, ttl_lompatan);

    cetak("Status Penyiaran   : " + status_kirim.status_broadcast);
    cetak("Batas Lompatan TTL : " + teks(status_kirim.ttl_maksimal) + " Hop");
    cetak("Protokol Enkripsi  : " + status_kirim.protokol_keamanan);
    cetak("Ukuran Payload     : " + teks(status_kirim.ukuran_paket_byte) + " Byte");

    // 3. Memeriksa Kotak Masuk Pesan yang Masuk dari Simpul Sekitar
    cetak("
Membaca antrean pesan masuk dari jaringan mesh...");
    misal kotak_masuk = mobile_ble_mesh_baca_inbox();
    cetak("Pesan Masuk Terbaru: " + teks(panjang(kotak_masuk.daftar_pesan)) + " Pesan Diterima");

    // 4. Merakit Antarmuka Pengguna Komunikasi Darurat
    kembalikan Aplikasi({
        "judul": "Komunikasi Darurat Mesh",
        "tema": "#dc2626",
        "badan": Halaman({
            "navigasi": BilahAtas({
                "judul": "📻 Radio Mesh Darurat Bencana",
                "warna": "#dc2626"
            }),
            "badan": Kolom([
                Kartu({
                    "elevasi": 3,
                    "isi": Kolom([
                        TeksWidget("📡 Status Jaringan Mesh Offline:"),
                        TeksWidget("• Simpul: " + id_simpul_lokal),
                        TeksWidget("• Status: Terhubung ke Simpul Relawan Sekitar"),
                        TeksWidget("• Enkripsi: AES-CCM 128-bit Berlapis"),
                        Pemisah()
                    ])
                }),
                Kartu({
                    "elevasi": 2,
                    "isi": Kolom([
                        TeksWidget("📢 Siaran Terakhir Terkirim:"),
                        TeksWidget(pesan_darurat),
                        Pemisah(),
                        TombolUtama("📢 Siarkan Peringatan Darurat Baru", fungsi() {
                            mobile_ble_mesh_siarkan_pesan("SEMUA TIM EVAKUASI BERKUMPUL DI TITIK B1", grup_tujuan, 5);
                            GetarHaptik([100, 50, 100]);
                            cetak("Pesan evakuasi berhasil disiarkan.");
                        })
                    ])
                })
            ])
        })
    });
}
```

## Evaluasi Metrik & Benchmark Propagasi BLE Mesh

Tabel di bawah ini merangkum waktu propagasi pesan melintasi jaringan multi-hop BLE Mesh beranggotakan 20 ponsel relawan:

| Jumlah Lompatan (Hops) | Waktu Tempuh Rata-rata | Jangkauan Fisik Total | Rasio Keberhasilan |
| :--- | :---: | :---: | :---: |
| **1 Hop (Langsung)** | **24 milidetik** | **30 - 50 meter** | **99.8%** |
| **2 Hops (1 Relai)** | **58 milidetik** | **80 - 100 meter** | **98.4%** |
| **3 Hops (2 Relai)** | **92 milidetik** | **140 - 180 meter** | **96.5%** |
| **5 Hops (4 Relai)** | **165 milidetik** | **250 - 320 meter** | **92.8%** |
| **Konsumsi Baterai Relai**| **< 0.8% Baterai / Jam**| **Bekerja Nonaktif Layar**| **Hemat Energi** |

## Latihan Evaluasi Pemahaman Bab 22

### Bagian A: Soal Esai
1. Jelaskan bagaimana arsitektur jaringan *ad-hoc* nirkabel berbasis *BLE Mesh* memungkinkan komunikasi data tetap berjalan normal ketika seluruh menara BTS seluler mati total akibat bencana alam!
2. Uraikan teknik *Managed Flooding with Sequence Cache* dalam mencegah terjadinya badai paket siaran (*broadcast storm*) yang dapat menyumbat spektrum frekuensi radio 2.4 GHz!
3. Mengapa sistem keamanan BLE Mesh menggunakan dua lapisan kunci enkripsi terpisah (*NetKey* dan *AppKey*)?

### Bagian B: Soal Pilihan Ganda
1. Standar spesifikasi global resmi yang mendasari jaringan nirkabel terdesentralisasi berbasis Bluetooth Low Energy adalah...
   A. Bluetooth Mesh Profile Specification  
   B. Token Ring  
   C. Ethernet 10Base-T  
   D. X.25  
2. Peran dari sebuah ponsel di dalam jaringan BLE Mesh yang bertugas meneruskan paket data dari ponsel lain menuju simpul target disebut...
   A. Simpul Relai (Relay Node)  
   B. Server Web  
   C. Modulator TV  
   D. Antena Satelit  
3. Parameter pada paket data jaringan mesh yang menyatakan sisa batas jumlah lompatan antar-perangkat sebelum paket dihanguskan adalah...
   A. TTL (Time-To-Live)  
   B. Ping Latency  
   C. Bandwidth  
   D. Byte Rate  
4. Algoritma enkripsi kriptografis simetris standar yang digunakan untuk mengamankan paket jaringan BLE Mesh adalah...
   A. AES-CCM 128-bit  
   B. DES 56-bit  
   C. MD5  
   D. XOR Sederhana  
5. Fungsi resmi pada subsistem native WidyaMobile yang digunakan untuk menyiarkan pesan teks ke jaringan BLE Mesh adalah...
   A. `mobile_ble_mesh_siarkan_pesan()`  
   B. `kirim_surat_pos()`  
   C. `nyalakan_radio_fm()`  
   D. `broadcast_ke_satelit()`  
6. Apa yang terjadi pada paket data di simpul relai jika nilai TTL-nya telah mencapai angka 0?
   A. Paket segera dihentikan dan dibuang dari udara untuk mencegah looping tak berujung  
   B. Paket kembali ke simpul asal  
   C. Ponsel relai restart otomatis  
   D. Pesan dicetak ke kertas  
7. Saluran fisik radio Bluetooth yang digunakan untuk menyiarkan paket BLE Mesh tanpa memerlukan proses *pairing* koneksi dua arah adalah...
   A. Advertising Bearer (Saluran Iklan 37, 38, 39)  
   B. Wi-Fi Direct  
   C. Infrared IrDA  
   D. Kabel USB OTG  
8. Jangkauan fisik transmisi data langsung (1 hop) antara dua ponsel di ruang terbuka bebas halangan berkisar pada...
   A. 30 s/d 50 meter  
   B. 5.000 kilometer  
   C. 1 milimeter  
   D. 100 kilometer  
9. Kunci kriptografis dalam BLE Mesh yang digunakan untuk memastikan bahwa hanya aplikasi yang dituju yang dapat membaca isi pesan rahasia adalah...
   A. Application Key (AppKey)  
   B. Network Key (NetKey)  
   C. Device Key (DevKey)  
   D. Master PIN  
10. Berapakah latensi waktu tempuh rata-rata untuk sebuah pesan darurat logistik melompat sejauh 3 simpul perantara (3 hops) pada WidyaMobile?
    A. Sekitar 92 milidetik  
    B. 10 menit  
    C. 1 jam  
    D. 45 detik  
