# LoRaWAN | Downlink Tutorial

**LoRaWAN Downlink Tutorial**

#### **1. Pendahuluan**

Pada tutorial ini, Anda akan menggunakan software POSTMAN atau MQTT FX untuk mengirim pesan downlink ke perangkat LoRaWAN Anda. Modul yang digunakan pada tutorial ini adalah modul Arduino LoRa Antares berbasis Arduino Pro Mini (ATMEGA328P).

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/1cHKp8R6BVLU0gugaTW6/image.png" alt=""><figcaption></figcaption></figure>

#### **2. Prasyarat**

Sebelum memulai, pastikan Anda telah memenuhi syarat sebagai berikut:

a. Install Arduino IDE pada komputer Anda. Klik [Software Arduino IDE](https://www.arduino.cc/en/Main/Software) jika Anda belum menginstall.

b. Untuk mengetahui cara installasi library ESP32 Klik Tutorial Berikut [Tutorial Install Board ESP32](https://docs.antares.id/contoh-kode-dan-library/broken-reference)

c. Library LoRaWAN: Download Library LoraWAN pada Arduino IDE. Klik link di bawah:<br>

{% file src="<https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/kAFtf9nk9mGcOIx8WdUm/LoRaWAN-Arduino-Library.rar>" %}

\*Note: Library hanya untuk board LYNX-32.

d. Untuk menggunakan RESTFUL API berbasis protokol HTTP, Anda perlu meng-install software POSTMAN. Klik [Software POSTMAN](https://www.postman.com/downloads/) jika Anda belum menginstall.

e. Untuk menggunakan RESTFUL API berbasis protokol MQTT, Anda perlu meng-install software MQTT FX. Klik [Software MQTT FX](https://softblade.de/en/download-2/) jika Anda belum menginstall.

#### **3. Konfigurasi Perangkat**

a. Masuk pada laman console Antares akun Anda. Buat device pada aplikasi di console akun anda. Jika sudah memiliki device Anda bisa langsung buak page device yang telah Anda buat sebelumnya. Kemudian klik Set LoRa seperti pada gambar berikut:

<figure><img src="https://3995702122-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrRkxjRLeqOm0pNhLfsus%2Fuploads%2F9kuk4Wg6LcqmxKv6UPig%2Florawan%20downlink.png?alt=media&#x26;token=9b269884-9630-4bee-9f3f-3f505f421950" alt=""><figcaption></figcaption></figure>

Lalu akan muncul kotak dialog Set LoRa Device seperti gambar di bawah. Pada pilihan Select LoRa Device Class, **pilih Class C > Aktivasi ABP > ABP Parameter Inherit > Klik Set LoRa** .

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/k541GGaMsNqdZMUe2a4W/smarthome%20SETLORA%202.png" alt=""><figcaption></figcaption></figure>

b. Pada Arduino IDE, konfigurasikan Arduino Pro or Pro Mini sebagai board yang akan Anda gunakan. Klik **Tools > Board > Arduino Pro or Pro Mini**.

c. Pada Arduino IDE, konfigurasikan Processor **ESP32 dev board** sebagai processor yang akan Anda gunakan. Klik **Tools > Processor > ESP32 dev board**.\
\*Notes: Jika menggunakan board lain, pilih sesuai board yang digunakan

d. Pada Arduino IDE, konfigurasikan Port sesuai dengan Board Arduino LoRa yang Anda gunakan. Klik **Tools > Port > COM ...**.

e. Pada Arduino IDE, upload program example class C dari library loraid melalui **File > Examples> Antares LoRaWAN > send-class-C-ABP.** Sesuaikan data access key dan juga device address sesuai akun di ANTARES. Berikut source code untuk file example class C:.

{% code lineNumbers="true" %}

```python
#include <lorawan.h>

//ABP Credentials
const char *devAddr = "Lora-Device-Address";
const char *nwkSKey = "Network-Session-Key";
const char *appSKey = "Application-Session-Key";



const unsigned long interval = 10000;    // 10 s interval to send message
unsigned long previousMillis = 0;  // will store last time message sent
unsigned int counter = 0;     // message counter

char myStr[50];
byte outStr[255];
byte recvStatus = 0;
int port, channel, freq;
bool newmessage = false;

const sRFM_pins RFM_pins = {
  .CS = 5,
  .RST = 0,
  .DIO0 = 27,
  .DIO1 = 2,
};

void setup() {
  // Setup loraid access
  Serial.begin(115200);
  delay(2000);
  if (!lora.init()) {
    Serial.println("RFM95 not detected");
    delay(5000);
    return;
  }

  // Set LoRaWAN Class change CLASS_A or CLASS_C
  lora.setDeviceClass(CLASS_C);

  // Set Data Rate
  lora.setDataRate(SF10BW125);

  // Set FramePort Tx
  lora.setFramePortTx(5);

  // set channel to random
  lora.setChannel(MULTI);

  // Set TxPower to 15 dBi (max)
  lora.setTxPower(15);

  // Put ABP Key and DevAddress here
  lora.setNwkSKey(nwkSKey);
  lora.setAppSKey(appSKey);
  lora.setDevAddr(devAddr);
}

void loop() {
  // Check interval overflow
  if (millis() - previousMillis > interval) {
    previousMillis = millis();

    sprintf(myStr, "Lora Counter-%d", counter++);

    
    Serial.print("Sending: ");
    Serial.println(myStr);
    lora.sendUplink(myStr, strlen(myStr), 0);
    port = lora.getFramePortTx();
    channel = lora.getChannel();
    freq = lora.getChannelFreq(channel);
    Serial.print(F("fport: "));    Serial.print(port);Serial.print(" ");
    Serial.print(F("Ch: "));    Serial.print(channel);Serial.print(" ");
    Serial.print(F("Freq: "));    Serial.print(freq);Serial.println(" ");

  }

  // Check Lora RX
  lora.update();

  recvStatus = lora.readDataByte(outStr);
  if (recvStatus) {
    newmessage = true;
    int counter = 0;
    port = lora.getFramePortRx();
    channel = lora.getChannelRx();
    freq = lora.getChannelRxFreq(channel);

    for (int i = 0; i < recvStatus; i++)
    {
      if (((outStr[i] >= 32) && (outStr[i] <= 126)) || (outStr[i] == 10) || (outStr[i] == 13))
        counter++;
    }
    if (port != 0)
    {
      if (counter == recvStatus)
      {
        Serial.print(F("Received String : "));
        for (int i = 0; i < recvStatus; i++)
        {
          Serial.print(char(outStr[i]));
        }
      }
      else
      {
        Serial.print(F("Received Hex: "));
        for (int i = 0; i < recvStatus; i++)
        {
          Serial.print(outStr[i], HEX); Serial.print(" ");
        }
      }
      Serial.println();
      Serial.print(F("fport: "));    Serial.print(port);Serial.print(" ");
      Serial.print(F("Ch: "));    Serial.print(channel);Serial.print(" ");
      Serial.print(F("Freq: "));    Serial.println(freq);Serial.println(" ");
    }
    else
    {
      Serial.print(F("Received Mac Cmd : "));
      for (int i = 0; i < recvStatus; i++)
      {
        Serial.print(outStr[i], HEX); Serial.print(" ");
      }
      Serial.println();
      Serial.print(F("fport: "));    Serial.print(port);Serial.print(" ");
      Serial.print(F("Ch: "));    Serial.print(channel);Serial.print(" ");
      Serial.print(F("Freq: "));    Serial.println(freq);Serial.println(" ");
    }
  }
} 
```

{% endcode %}

Setelah mengupload program example class C pada board yang digunakan. Pastikan perangkat sudah mengirimkan data lora dan sampai pada platform ANTARES. Jika data dari board sudah dapat masuk ke ANTARES, maka langkah selanjutnya yaitu melakukan downlink (mengirimkan message) ke perangkat melalui Platform ANTARES via POSTMAN atau MQTT FX.

### **Mengirim Downlink via Software POSTMAN**

Setelah Anda selesai melakukan konfigurasi pada perangkat dan perangkat sudah dipastikan dapat mengirim data ke ANTARES, saatnya mencoba untuk mengirim downlink ke device melalui Platform ANTARES dengan menggunakan software POSTMAN

Jika belum melakukan instalasi POSTMAN dapat mengikuti tutorial pada page [Tutorial POSTMAN](https://docs.antares.id/contoh-kode-dan-library/postman).

Untuk melakukan downlink digunakan metode POST. Untuk melakukan metode POST ini diperlukan paramter header dan juga body. Petama-tama Isi parameter Header sesuai tabel dibawah ini:\
\*Notes: Sesuaikan parameter access key dan alamat URI sesuai akun Anda

| **Field**            | **Initial Value**             | **Current Value**             |
| -------------------- | ----------------------------- | ----------------------------- |
| **access-key**       | `your-access-key`             | `your-access-key`             |
| **application-name** | `your app name in ANTARES`    | `your app name in ANTARES`    |
| **device-name**      | `your device name in ANTARES` | `your device name in ANTARES` |
| **e-mail**           | Your e-mail                   | Your e-mail                   |

Jika sudah diisi, tampilan header akan menjadi seperti ini

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/mYGlBpGV8wGoOiDGVA54/image.png" alt=""><figcaption></figcaption></figure>

Kemudian selanjutnya ke bagian body. Pada bagian body ini berisikan data yang ingin dikirimkan ke device LoRa Anda. Isi parameter Body sesuai dengan apa yang ingin dikirimkan ke perangkat dengan mengikuti format di bawah ini:

<table data-header-hidden><thead><tr><th width="102"></th><th></th></tr></thead><tbody><tr><td><strong>Field</strong></td><td><strong>Value</strong></td></tr><tr><td>Body</td><td><pre class="language-json" data-line-numbers><code class="lang-json">{
      "m2m:cin": {
        "con": "{\"type\":\"downlink\", \"data\":\"your-downlink-data\"}"
    }
}
</code></pre></td></tr></tbody></table>

Jika parameter body sudah diisi maka akan seperti pada gambar di bawah ini:

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/WMzlu2bCjrF0rR1OHlXt/image.png" alt=""><figcaption></figcaption></figure>

Klik send untuk mengeksekusi POST downlink message ke ANTARES. Jika sudah di POST maka downlink message akan langsung dikirimkan ke perangkat melalui gateway LoRa terdekat. Message downlink dapat dilihat melalui serial monitor pada Arduino IDE<br>

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/QDFhWjZh0iS8qULyxvQY/downlink%20data.png" alt=""><figcaption></figcaption></figure>

Jika menggunakan board arduino dapat menggunakan Baud Rate 9600 untuk melihat data downlink yang diterima. Berikut contoh serial monitor saat berhasil menerima downlink:<br>

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/Ggds8FW03Ym98fllrWok/image.png" alt=""><figcaption></figcaption></figure>

### **Mengirim Downlink via Software MQTT FX**

Setelah Anda selesai melakukan konfigurasi pada perangkat dan perangkat sudah dipastikan dapat mengirim data ke ANTARES, selain menggunakan POSTMAN, Bagi Anda yang lebih cocok menggunakan protokol MQTT, Anda dapat mencoba untuk mengirim downlink ke device melalui Platform ANTARES dengan menggunakan software MQTT FX

Pada bagian ini, Anda untuk mengirimkan data melalui MQTT FX, diperlukan konfigurasi broker ke Platform ANTARES sebagai berikut:

<table data-header-hidden><thead><tr><th width="157"></th><th></th></tr></thead><tbody><tr><td><mark style="color:red;"><code>Host</code></mark></td><td>mqtt.antares.id</td></tr><tr><td><mark style="color:red;"><code>Port</code></mark></td><td>1883<br></td></tr></tbody></table>

Untuk bagian Client ID bisa disesuaikan dengan access key akun Anda ataupun uniqe code lainnya. Setelah sesuai dapat disimpan dengan menekan tombol save.

Setelah konfigurasi broker sudah sesuai dapat langsung dihubungkan ke broker MQTT ANTARES dengan menekan tombol Connect.<br>

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/ZLQr6hFnfnkpnKX9FMeh/image.png" alt=""><figcaption></figcaption></figure>

Jika sudah terhubung maka akan menampilkan lingkaran hijau di atas kanan seperti pada gambar:

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/sbzhiMk7zVWmoT4MfKLW/image.png" alt=""><figcaption></figcaption></figure>

Setelah terhubung, langkah selanjutnya yaitu mengirimkan publish ke ANTARES ke device yang terdaftar di ANTARES dengan menginputkan topic dan juga content body sebagai berikut:

<table data-header-hidden><thead><tr><th width="140"></th><th></th></tr></thead><tbody><tr><td><strong>Topic</strong></td><td><code>/oneM2M/req/your-access-key/antares-cse/json</code></td></tr><tr><td><strong>Payload</strong></td><td><pre class="language-json"><code class="lang-json">{
  "m2m:rqp": {
    "fr": "your-access-key",
    "to": "/antares-cse/antares-id/your-application-name/your-device-name",
    "op": 1,
    "rqi": 123456,
    "pc": {
      "m2m:cin": {
        "cnf": "message",
        "con": "{\"type\":\"downlink\",\"data\":\"your-downlink-data\"}"
      }
    },
    "ty": 4
  }
}
</code></pre></td></tr></tbody></table>

Setelah data access key dan alamat device sudah sesuai, klik tombol publiish untuk mengirimkan data ke ANTARES

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/NratsBYgB6WzG1qGifHK/image.png" alt=""><figcaption></figcaption></figure>

Jika berhasil masuk ke ANTARES, maka pada device ANTARES akan muncul seperti pada gambar dibawah ini:<br>

<figure><img src="https://3995702122-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrRkxjRLeqOm0pNhLfsus%2Fuploads%2FuLblOAXQIDlrU2N2BMYj%2F135.png?alt=media&#x26;token=3af4e38d-c91c-4900-be59-cd5272353cef" alt=""><figcaption></figcaption></figure>

Jika data downlink masuk ke Platform ANTARES, maka akan langsung di forwardkan ke NS Lora dan dikirimkan melalui gateway terdekat. Data dapat diterima oleh perangkat seperti pada gambar berikut:<br>

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/lXIpSkkeuOIlYtuKP3Hq/image.png" alt=""><figcaption></figcaption></figure>
