πŸ“‘ LoRa

LoRaWAN Protocol: Arsitektur & Implementasi

Panduan lengkap memahami protokol LoRaWAN β€” arsitektur jaringan, gateway, node end-device, Adaptive Data Rate, kelas komunikasi A/B/C, keamanan, dan implementasi nyata untuk proyek IoT

1. Pengenalan LoRaWAN

LoRaWAN (Long Range Wide Area Network) adalah protokol komunikasi LPWAN (Low Power Wide Area Network) yang dirancang untuk menghubungkan perangkat IoT baterai rendah ke internet secara nirkabel pada jarak yang sangat jauh. LoRaWAN dibangun di atas teknologi modulasi LoRa yang dikembangkan oleh Semtech Corporation.

LoRaWAN beroperasi di frekuensi ISM (Industrial, Scientific, and Medical) yang tidak memerlukan lisensi, menjadikannya solusi yang sangat ekonomis untuk deployment IoT skala besar. Di Indonesia, frekuensi yang umum digunakan adalah 920-923 MHz sesuai regulasi dari KOMINFO.

Perbedaan LoRa dan LoRaWAN

Aspek LoRa LoRaWAN
DefinisiTeknik modulasi radio (PHY layer)Protokol jaringan lengkap (MAC layer + arsitektur)
Layer OSIPhysical Layer (Layer 1)MAC Layer (Layer 2) dan Network Layer
PengembangSemtech CorporationLoRa Alliance
FungsiMengubah sinyal menjadi chirp spread spectrumMenentukan bagaimana perangkat berkomunikasi dalam jaringan
TopologiPoint-to-pointStar-of-stars (hierarchical)
KeamananTidak ada enkripsi built-inAES-128 encryption end-to-end

Karakteristik Utama LoRaWAN

Parameter Spesifikasi
Jangkauan2-15 km (urban), hingga 30+ km (rural/line-of-sight)
Data Rate0.3 kbps - 50 kbps (tergantung Spreading Factor)
PayloadHingga 243 bytes per transmisi
Konsumsi DayaSangat rendah, baterai bisa bertahan 5-10 tahun
FrekuensiISM band: 868 MHz (EU), 915 MHz (US), 920-923 MHz (ID)
TopologiStar-of-stars
EnkripsiAES-128
DuplexHalf-duplex
Diagram: Perbandingan LPWAN Technologies
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚               PERBANDINGAN TEKNOLOGI LPWAN                      β”‚
β”‚                                                                  β”‚
β”‚  Teknologi    β”‚ Range     β”‚ Data Rate β”‚ Daya   β”‚ Biaya          β”‚
β”‚  ─────────────┼───────────┼───────────┼────────┼──────────      β”‚
β”‚  LoRaWAN      β”‚ 2-15 km   β”‚ 0.3-50 kbpsβ”‚ Rendahβ”‚ Rendah         β”‚
β”‚  NB-IoT       β”‚ 1-10 km   β”‚ 200 kbps  β”‚ Sedang β”‚ Sedang         β”‚
β”‚  Sigfox       β”‚ 3-50 km   β”‚ 0.1 kbps  β”‚ Rendahβ”‚ Berlangganan   β”‚
β”‚  Zigbee       β”‚ 100m      β”‚ 250 kbps  β”‚ Rendahβ”‚ Rendah         β”‚
β”‚  WiFi         β”‚ 50m       β”‚ Mbps      β”‚ Tinggi β”‚ Rendah         β”‚
β”‚  BLE          β”‚ 30m       β”‚ 1 Mbps    β”‚ Rendahβ”‚ Rendah         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
πŸ’‘ Kapan Menggunakan LoRaWAN?

LoRaWAN ideal untuk aplikasi yang membutuhkan jangkauan jauh, konsumsi daya rendah, dan data rate kecil β€” seperti sensor pertanian, smart city, monitoring lingkungan, dan asset tracking. Jika Anda butuh bandwidth tinggi atau latency rendah, gunakan WiFi atau cellular.

2. Arsitektur Jaringan LoRaWAN

Arsitektur LoRaWAN menggunakan topologi star-of-stars yang terdiri dari empat komponen utama: End Devices, Gateway, Network Server, dan Application Server. Setiap komponen memiliki peran spesifik dalam rantai komunikasi data.

Diagram: Arsitektur LoRaWAN
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  ARSITEKTUR LoRaWAN                               β”‚
β”‚                                                                   β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  LoRa   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  IP    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚   β”‚  End     │────────→│ Gateway  │───────→│ Network Serverβ”‚    β”‚
β”‚   β”‚ Device 1 β”‚  Radio  β”‚  (GW-1)  β”‚  TCP/  β”‚               β”‚    β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  MQTT  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚    β”‚
β”‚                                             β”‚  β”‚   ADR   β”‚  β”‚    β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  LoRa   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  IP    β”‚  β”‚ Engine  β”‚  β”‚    β”‚
β”‚   β”‚  End     │────────→│ Gateway  │───────→│  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚    β”‚
β”‚   β”‚ Device 2 β”‚  Radio  β”‚  (GW-2)  β”‚  TCP/  β”‚               β”‚    β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  MQTT  β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚                                                     β”‚             β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  LoRa   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”               β”‚             β”‚
β”‚   β”‚  End     │────────→│ Gateway  β”‚               β–Ό             β”‚
β”‚   β”‚ Device 3 β”‚  Radio  β”‚  (GW-3) β”‚         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β”‚  Application  β”‚    β”‚
β”‚                                              β”‚    Server     β”‚    β”‚
β”‚                                              β”‚  (Dashboard,  β”‚    β”‚
β”‚                                              β”‚   Database)   β”‚    β”‚
β”‚                                              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Komponen Utama Arsitektur

Komponen Fungsi Protokol
End DeviceSensor/aktuator yang mengirim data via LoRa radioLoRa (PHY)
GatewayMeneruskan data dari end device ke network server via IP backhaulLoRa + TCP/IP
Network ServerManajemen jaringan, deduplikasi, ADR, routingTCP/IP, MQTT
Application ServerMemproses data aplikasi, penyimpanan, visualisasiHTTP, MQTT, WebSocket

Alur Komunikasi Uplink

  1. End Device mengirim data via radio LoRa pada channel tertentu
  2. Satu atau lebih Gateway menerima sinyal LoRa
  3. Gateway meneruskan paket ke Network Server via IP backhaul (Ethernet, WiFi, atau cellular)
  4. Network Server melakukan deduplikasi (jika beberapa gateway menerima paket yang sama), verifikasi integritas, dan meneruskan ke Application Server
  5. Application Server memproses data sesuai logika bisnis

Alur Komunikasi Downlink

  1. Application Server mengirim perintah ke Network Server
  2. Network Server memilih gateway terbaik dan menjadwalkan transmisi
  3. Gateway mengirim data ke end device pada window penerimaan yang tepat
  4. End Device menerima data dan mengeksekusi perintah

3. Gateway LoRaWAN

Gateway LoRaWAN berfungsi sebagai jembatan antara jaringan LoRa (radio) dan jaringan IP (internet). Gateway menerima paket LoRa dari end device dan meneruskannya ke network server menggunakan protokol berbasis IP.

Jenis Gateway

Tipe Kapasitas Contoh Hardware Cocok Untuk
Indoor (Single Channel)1-8 channelRaspberry Pi + RAK2245Development, testing
Indoor (Multi Channel)8 channelKerlink iFemtoCellIndoor coverage kecil
Outdoor (Standard)8 channelRAK7249, Kerlink WirnetArea coverage menengah
Outdoor (Macro)16-64 channelMultitech ConduitCoverage luas, high density

Setup Gateway dengan Raspberry Pi

Berikut adalah cara membuat LoRa gateway menggunakan Raspberry Pi dan module RAK2245:

# ============================================
# Setup LoRaWAN Gateway dengan Raspberry Pi
# Hardware: Raspberry Pi 4 + RAK2245 HAT
# ============================================

# 1. Update sistem Raspberry Pi
sudo apt update && sudo apt upgrade -y

# 2. Enable SPI interface
sudo raspi-config
# Pilih: Interface Options β†’ SPI β†’ Enable

# 3. Install dependencies
sudo apt install git cmake liblgpio-dev -y

# 4. Clone packet forwarder dari RAK
git clone https://github.com/RAKWireless/rak_common_for_gateway.git
cd rak_common_for_gateway

# 5. Install untuk RAK2245
sudo ./install.sh

# 6. Edit konfigurasi gateway
sudo nano /opt/ttn-gateway/packet_forwarder/lora_pkt_fwd/global_conf.json

# Konfigurasi umum:
{
    "gateway_conf": {
        "gateway_ID": "AABBCCDD11223344",
        "server_address": "eu1.cloud.thethings.network",
        "serv_port_up": 1700,
        "serv_port_down": 1700,
        "fake_gps": false,
        "ref_latitude": -6.2088,
        "ref_longitude": 106.8456,
        "ref_altitude": 10
    }
}

# 7. Jalankan packet forwarder
cd /opt/ttn-gateway/packet_forwarder/lora_pkt_fwd
sudo ./lora_pkt_fwd

# 8. Buat service agar otomatis start
sudo systemctl enable ttn-gateway
sudo systemctl start ttn-gateway
⚠️ Frekuensi Indonesia

Di Indonesia, LoRaWAN menggunakan frekuensi 920-923 MHz sesuai KOMINFO. Pastikan konfigurasi gateway menggunakan region AS923 (sub-band yang sesuai). Penggunaan frekuensi yang salah dapat melanggar regulasi dan mengganggu komunikasi lain.

Gateway Placement Best Practices

4. End Device / Node

End device (atau node) adalah perangkat ujung yang berisi sensor atau aktuator dan berkomunikasi dengan gateway melalui radio LoRa. End device umumnya memiliki konsumsi daya sangat rendah sehingga bisa bertahan bertahun-tahun dengan baterai.

Modul LoRa Populer

Modul Chipset Freq Interface Harga (est.)
SX1276 (Ra-02)Semtech SX1276433/868/915 MHzSPIRp 35.000
RFM95WSemtech SX1276868/915 MHzSPIRp 50.000
RAK4200STM32 + SX1276868/915 MHzUARTRp 120.000
RAK4631nRF52840 + SX1262868/915 MHzSPIRp 250.000
Heltec WiFi LoRa 32ESP32 + SX1276868/915 MHzSPI + WiFiRp 180.000

Contoh: End Device dengan ESP32 + LoRa

// ============================================
// LoRaWAN End Device - ESP32 + SX1276
// Library: MCCI LoRaWAN LMIC library
// ============================================

#include <lmic.h>
#include <hal/hal.h>
#include <SPI.h>

// LoRaWAN keys dari TTN (The Things Network)
static const u1_t PROGMEM APPEUI[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static const u1_t PROGMEM DEVEUI[8] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
static const u1_t PROGMEM APPKEY[16] = { /* 16 bytes dari TTN console */ };

void os_getArtEui(u1_t* buf) { memcpy_P(buf, APPEUI, 8); }
void os_getDevEui(u1_t* buf) { memcpy_P(buf, DEVEUI, 8); }
void os_getDevKey(u1_t* buf) { memcpy_P(buf, APPKEY, 16); }

// Pin mapping untuk ESP32 + LoRa
const lmic_pinmap lmic_pins = {
    .nss = 5,
    .rxtx = LMIC_UNUSED_PIN,
    .rst = 14,
    .dio = {26, 33, 32},
};

void onEvent(ev_t ev) {
    switch(ev) {
        case EV_JOINED:
            Serial.println("Device joined network!");
            LMIC_setLinkCheckMode(0);
            break;
        case EV_TXCOMPLETE:
            Serial.println("Transmit complete");
            if (LMIC.txrxFlags & TXRX_ACK) {
                Serial.println("Received ACK");
            }
            if (LMIC.dataLen > 0) {
                Serial.printf("Received %d bytes\n", LMIC.dataLen);
            }
            break;
    }
}

void setup() {
    Serial.begin(115200);
    os_init();
    LMIC_reset();
    LMIC_startJoining();
}

void loop() {
    // Kirim data sensor setiap 60 detik
    static unsigned long lastSend = 0;
    if (millis() - lastSend > 60000) {
        // Baca sensor
        float temperature = readTemperature();
        float humidity = readHumidity();

        // Encode payload (2 bytes suhu + 2 bytes kelembaban)
        uint8_t payload[4];
        int16_t tempInt = (int16_t)(temperature * 100);
        uint16_t humInt = (uint16_t)(humidity * 100);
        payload[0] = tempInt >> 8;
        payload[1] = tempInt & 0xFF;
        payload[2] = humInt >> 8;
        payload[3] = humInt & 0xFF;

        // Kirim pada port 1
        LMIC_setTxData2(1, payload, sizeof(payload), 0);
        lastSend = millis();
    }
    os_runloop_once();
}

5. Kelas LoRaWAN: A, B, dan C

LoRaWAN mendefinisikan tiga kelas operasi yang berbeda untuk menyeimbangkan antara konsumsi daya dan latensi. Pemilihan kelas sangat bergantung pada kebutuhan aplikasi.

Class A β€” Bi-directional (Lowest Power)

Class A adalah kelas default dan paling hemat daya. Setelah mengirim data (uplink), device membuka dua window penerimaan singkat (RX1 dan RX2) untuk menerima downlink. Di luar window ini, device dalam mode sleep.

Diagram: Class A Communication
Class A - Bi-directional
═══════════════════════

  End Device                Gateway
     β”‚                        β”‚
     β”‚  ── Uplink ────────→  β”‚     ← Device mengirim data
     β”‚                        β”‚
     β”‚  (RX1 Delay: 1 detik)  β”‚
     β”‚  ←── Downlink ───────  β”‚     ← Window penerimaan #1
     β”‚                        β”‚
     β”‚  (RX2 Delay: 2 detik)  β”‚
     β”‚  ←── Downlink ───────  β”‚     ← Window penerimaan #2
     β”‚                        β”‚
     β”‚  ══ SLEEP ═══════════  β”‚     ← Device sleep sampai
     β”‚  ══ (sangat hemat) ══  β”‚        transmisi berikutnya
     β”‚                        β”‚
     β”‚  ── Uplink ────────→  β”‚     ← Siklus berulang
     β”‚  ...                   β”‚

  βœ… Konsumsi daya paling rendah
  ❌ Downlink hanya setelah uplink
  ❌ Latensi tinggi untuk downlink

Class B β€” Scheduled Receive Windows

Class B menambahkan beacon dan ping slots terjadwal sehingga device secara periodik membuka jendela penerimaan. Ini memungkinkan network server mengirim downlink kapan saja dalam slot yang dijadwalkan.

Diagram: Class B Communication
Class B - Scheduled Receive
══════════════════════════

  End Device                Gateway
     β”‚                        β”‚
     β”‚  ←── Beacon ────────  β”‚     ← Beacon periodik (setiap 128s)
     β”‚                        β”‚
     β”‚  ── Uplink ────────→  β”‚
     β”‚                        β”‚
     β”‚  ←── Ping Slot 1 ──  β”‚     ← Jendela penerimaan terjadwal
     β”‚  ←── Ping Slot 2 ──  β”‚
     β”‚  ←── Ping Slot 3 ──  β”‚
     β”‚  ←── Ping Slot N ──  β”‚
     β”‚                        β”‚
     β”‚  (sleep di antara slot)β”‚
     β”‚                        β”‚

  βœ… Downlink dapat dijadwalkan
  βœ… Latensi lebih rendah dari Class A
  ❌ Konsumsi daya lebih tinggi
  ❌ Membutuhkan sinkronisasi beacon

Class C β€” Always Listening

Class C adalah kelas dengan latensi terendah. Device selalu membuka jendela penerimaan kecuali saat mengirim data. Cocok untuk perangkat yang memiliki pasokan listrik terus-menerus.

Diagram: Class C Communication
Class C - Always Listening
══════════════════════════

  End Device                Gateway
     β”‚                        β”‚
     β”‚  ══ RX WINDOW OPEN ══  β”‚     ← Selalu mendengarkan
     β”‚  ═════════════════════  β”‚
     β”‚  ←── Downlink ───────  β”‚     ← Kapan saja gateway kirim
     β”‚  ═════════════════════  β”‚
     β”‚  ── Uplink ────────→  β”‚     ← Hanya saat perlu kirim
     β”‚  ═════════════════════  β”‚
     β”‚  ←── Downlink ───────  β”‚
     β”‚  ═════════════════════  β”‚

  βœ… Latensi sangat rendah
  βœ… Downlink kapan saja
  ❌ Konsumsi daya sangat tinggi
  ❌ Tidak cocok untuk baterai

Perbandingan Ketiga Kelas

Fitur Class A Class B Class C
Downlink latencyTinggi (setelah uplink)Sedang (menunggu ping slot)Rendah (kapan saja)
Konsumsi daya🟒 Paling rendah🟑 SedangπŸ”΄ Paling tinggi
UplinkKapan sajaKapan sajaKapan saja
DownlinkSetelah uplink sajaDi ping slot terjadwalKapan saja
Contoh aplikasiSensor suhu, smart agricultureSmart metering, lamp controlActuator, industrial control
Baterai?βœ… Idealβœ… Bisa❌ Butuh power supply

6. Adaptive Data Rate (ADR)

Adaptive Data Rate (ADR) adalah mekanisme LoRaWAN yang secara otomatis mengoptimalkan data rate dan power output end device berdasarkan kualitas link antara device dan gateway. Tujuannya untuk memaksimalkan kapasitas jaringan dan menghemat daya.

Cara Kerja ADR

  1. Pengumpulan Data: Network server menerima informasi RSSI (Received Signal Strength Indicator) dan SNR (Signal-to-Noise Ratio) dari setiap transmisi uplink
  2. Evaluasi Link: Server menghitung apakah data rate bisa dioptimalkan β€” jika sinyal sangat kuat, data rate bisa dinaikkan atau power diturunkan
  3. Perintah ADR: Server mengirim perintah ke end device melalui downlink untuk mengubah SF (Spreading Factor), bandwidth, atau TX power
  4. Adaptasi: Device menerapkan parameter baru pada transmisi berikutnya
Diagram: ADR Optimization
ADR - Adaptive Data Rate
════════════════════════

  Scenario: Device dekat gateway (sinyal kuat)
  ──────────────────────────────────────────────
  Awal:     SF12 (250 bps)  β†’ BW 125kHz β†’ TX Power 14 dBm
  ADR ON:   SF7  (5470 bps) β†’ BW 125kHz β†’ TX Power 2 dBm
  ──────────────────────────────────────────────
  Result:   22x lebih cepat! Daya hemat 12 dBm!

  Scenario: Device jauh dari gateway (sinyal lemah)
  ──────────────────────────────────────────────
  Awal:     SF7  (5470 bps) β†’ Sering lost
  ADR ON:   SF12 (250 bps)  β†’ BW 125kHz β†’ TX Power 14 dBm
  ──────────────────────────────────────────────
  Result:  Jangkauan meningkat, reliability naik

  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚ Spreading Factor β”‚ Data Rate β”‚ Range   β”‚
  β”‚ SF7              β”‚ 5470 bps  β”‚ Pendek  β”‚
  β”‚ SF8              β”‚ 3125 bps  β”‚ ↓       β”‚
  β”‚ SF9              β”‚ 1760 bps  β”‚ ↓       β”‚
  β”‚ SF10             β”‚ 980 bps   β”‚ ↓       β”‚
  β”‚ SF11             β”‚ 440 bps   β”‚ ↓       β”‚
  β”‚ SF12             β”‚ 250 bps   β”‚ Terjauh β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Kapan ADR Aktif vs Nonaktif?

Kondisi ADR Alasan
Device posisi tetap (static)βœ… ONChannel conditions stabil, bisa dioptimasi
Device bergerak (mobile)❌ OFFChannel berubah terus, perlu SF tinggi untuk reliability
Dekat gateway (<1 km)βœ… ONBisa menggunakan SF rendah, hemat daya
Jauh dari gateway (>5 km)❌ OFFPerlu TX power maksimum dan SF tinggi
High density networkβœ… ONMengoptimalkan penggunaan channel, hindari collision

7. Keamanan LoRaWAN

Keamanan adalah aspek kritis dalam LoRaWAN. Protokol ini menggunakan AES-128 bit encryption pada dua level untuk memastikan kerahasiaan dan integritas data dari end device hingga application server.

Dua Tingkat Enkripsi

Level Key Fungsi Lokasi
Network LevelNwkSKeyMemverifikasi integritas pesan (MIC) dan autentikasi jaringanEnd Device ↔ Network Server
Application LevelAppSKeyMengenkripsi payload data aplikasi (kerahasiaan)End Device ↔ Application Server
Diagram: LoRaWAN Security Stack
LoRaWAN Security Layers
════════════════════════

  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚           Application Payload            β”‚ ← Data sensor
  β”‚        (encrypted dengan AppSKey)        β”‚ ← Kerahasiaan
  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚          LoRaWAN MAC Header              β”‚ ← Metadata
  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚     MIC (Message Integrity Code)         β”‚ ← Integritas
  β”‚        (generated dengan NwkSKey)        β”‚ ← Autentikasi
  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚          LoRa PHY Header                 β”‚ ← Radio info
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

  OTAA Join Process:
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚End Deviceβ”‚          β”‚Network   β”‚
  β”‚          │──JoinReq─→│Server    β”‚
  β”‚          β”‚          β”‚          β”‚
  β”‚          │←JoinAcceptβ”‚          β”‚
  β”‚          β”‚          β”‚          β”‚
  β”‚  Derive: NwkSKey, AppSKey      β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

OTAA vs ABP Activation

Metode OTAA (Over-The-Air Activation) ABP (Activation By Personalization)
Keamanan🟒 Lebih aman β€” keys diturunkan setiap join🟑 Kurang aman β€” keys statis
ProsesDevice mengirim JoinReq, server membalas JoinAcceptKeys dikonfigurasi langsung di device
KeyAppKey β†’ derive NwkSKey & AppSKeyNwkSKey & AppSKey langsung di-set
Re-joinBisa re-join ke server berbedaTidak bisa pindah server tanpa re-flash
Rekomendasiβœ… Untuk production⚠️ Untuk testing/development saja
⚠️ Best Practice Keamanan
  • Selalu gunakan OTAA untuk deployment production
  • Jangan pernah menyimpan AppKey di source code yang bisa diakses publik
  • Gunakan LoRaWAN 1.1 untuk keamanan yang lebih baik (separate keys untuk join dan session)
  • Rotasi keys secara berkala untuk perangkat kritis
  • Monitor network server untuk aktivitas mencurigakan

8. Implementasi LoRaWAN

Langkah-langkah Deployment LoRaWAN

1. Pilih Network Server

Platform Tipe Gratis? Fitur
The Things Network (TTN)Cloud (shared)βœ… Ya (fair use)Komunitas besar, integrasi banyak
The Things Industries (TTI)Cloud (dedicated)πŸ’° BerbayarSLA, multi-tenant, enterprise
ChirpStackSelf-hostedβœ… Open SourceFleksibel, full control, MQTT/HTTP integration
Actility ThingParkCloud/HybridπŸ’° BerbayarEnterprise, carrier-grade

2. Register Device di TTN

# Langkah-langkah registrasi di The Things Network:

# 1. Buat akun di https://console.cloud.thethings.network
# 2. Buat Application baru
# 3. Generate DevEUI (atau gunakan dari hardware)
# 4. Register End Device:
#    - Frequency plan: AS923 (for Indonesia)
#    - LoRaWAN version: 1.0.3 (atau 1.1)
#    - Activation: OTAA
#    - Generate AppEUI dan AppKey
# 5. Copy keys ke firmware device

# TTN MQTT Configuration untuk menerima data:
# Broker: eu1.cloud.thethings.network
# Port: 1883 (MQTT) / 8883 (MQTTS)
# Username: your-app-name@ttn
# Password: NNSXS.XXXXXXXXXXX (API key dari TTN console)
# Topic: v3/your-app-name@ttn/devices/your-device-id/up

3. Integrasi dengan Application Server

// ============================================
// Node.js: Menerima data LoRaWAN dari TTN via MQTT
// ============================================

const mqtt = require('mqtt');

// Koneksi ke TTN MQTT broker
const client = mqtt.connect('mqtts://eu1.cloud.thethings.network:8883', {
    username: 'my-app@ttn',
    password: 'NNSXS.XXXXXXXXXXXXXXX'
});

client.on('connect', () => {
    console.log('Connected to TTN MQTT broker');

    // Subscribe ke uplink topic
    client.subscribe('v3/my-app@ttn/devices/+/up');
});

client.on('message', (topic, message) => {
    const data = JSON.parse(message.toString());
    const deviceId = data.end_device_ids.device_id;

    // Decode payload
    const rawPayload = Buffer.from(data.uplink_message.frm_payload, 'base64');

    // Parse sensor data (contoh: 2 byte suhu + 2 byte kelembaban)
    const temperature = rawPayload.readInt16BE(0) / 100;
    const humidity = rawPayload.readUInt16BE(2) / 100;

    console.log(`Device: ${deviceId}`);
    console.log(`Suhu: ${temperature}Β°C`);
    console.log(`Kelembaban: ${humidity}%`);
    console.log(`RSSI: ${data.uplink_message.rx_metadata[0].rssi} dBm`);
    console.log(`SNR: ${data.uplink_message.rx_metadata[0].snr} dB`);
    console.log('---');

    // Simpan ke database
    saveToDatabase({
        device: deviceId,
        temperature,
        humidity,
        timestamp: new Date(),
        rssi: data.uplink_message.rx_metadata[0].rssi,
        snr: data.uplink_message.rx_metadata[0].snr
    });
});

9. Troubleshooting Umum

Masalah Penyebab Solusi
Device tidak bisa joinKeys salah, frekuensi bedaPeriksa AppEUI, AppKey, DevEUI di TTN console. Pastikan frequency plan AS923
Packet loss tinggiJarak terlalu jauh, obstacleTambah gateway, gunakan SF lebih tinggi, naikkan antenna
Data corruptEncoding/decoding salahPastikan payload format dan decoder di TTN cocok dengan firmware
Duty cycle exceededTerlalu sering kirimTambah interval transmisi minimal 60 detik, cek regulasi region
Gateway offlineInternet putus, power issueCek backhaul internet, pastikan power supply stabil, cek log gateway
RSSI rendahJarak jauh, interferenceGunakan antenna external, naikkan posisi antenna, kurangi kabel coax
πŸ’‘ Tips Monitoring

Gunakan fitur Live Data di TTN Console untuk memantau traffic real-time. Perhatikan RSSI (idealnya > -100 dBm) dan SNR (idealnya > 0 dB) untuk mengevaluasi kualitas link. Data yang hilang di uplink tapi diterima gateway biasanya masalah network server, bukan radio.

10. Quiz: Uji Pemahamanmu!

Setelah membaca tutorial di atas, jawablah 5 pertanyaan berikut untuk menguji pemahamanmu tentang LoRaWAN Protocol:

Pertanyaan 1: Apa perbedaan utama antara LoRa dan LoRaWAN?

a) LoRa adalah modulasi fisik (PHY layer), sedangkan LoRaWAN adalah protokol jaringan lengkap (MAC + arsitektur)
b) LoRa untuk jarak dekat, LoRaWAN untuk jarak jauh
c) LoRa dan LoRaWAN adalah hal yang sama
d) LoRaWAN adalah versi upgrade dari LoRa

Pertanyaan 2: Kelas LoRaWAN mana yang paling hemat daya?

a) Class A
b) Class B
c) Class C
d) Semua kelas memiliki konsumsi daya yang sama

Pertanyaan 3: Apa fungsi dari Adaptive Data Rate (ADR)?

a) Mengenkripsi data sensor
b) Mengoptimalkan data rate dan TX power berdasarkan kualitas link
c) Mengatur jadwal kirim data
d) Mengubah frekuensi operasi

Pertanyaan 3: Berapa tingkat enkripsi yang digunakan LoRaWAN?

a) Satu tingkat dengan AES-256
b) Dua tingkat: NwkSKey (network) dan AppSKey (application) dengan AES-128
c) Tidak ada enkripsi
d) Satu tingkat dengan RSA-2048

Pertanyaan 5: Metode aktivasi mana yang direkomendasikan untuk production?

a) ABP (Activation By Personalization)
b) OTAA (Over-The-Air Activation)
c) Keduanya sama amannya
d) Manual key entry
πŸ” Zoom
100%
🎨 Tema