# Mengirim Data Menggunakan Node.js

Pada project ini Anda akan diarahkan untuk mengirimkan data sederhana dari **Raspberry Pi** ke **Antares IoT Platform** menggunakan Node.js.

## Prasyarat

Material yang dibutuhkan mengikuti **Prasyarat Umum** pada laman sebelumnya. Jika Anda belum menyiapkan kebutuhan pada laman tersebut, maka Anda dapat mengunjungi laman berikut.

{% content-ref url="prasyarat-umum-raspberry-ssh" %}
[prasyarat-umum-raspberry-ssh](https://docs.antares.id/contoh-kode-dan-library/raspberry-pi/ssh-secure-shell/prasyarat-umum-raspberry-ssh)
{% endcontent-ref %}

## Langkah Kerja

### 1. Menyalakan Raspberry Pi

Sebelum menyalakan Raspberry Pi, pastikan Anda telah memasang SD Card yang sudah ter-install OS pada slot yang tersedia di board Raspberry Pi. Anda dapat menyalakan Raspberry Pi dengan menghubungkannya ke power source menggunakan USB-C seperti pada gambar di bawah.&#x20;

{% hint style="info" %}
Raspberry Pi yang sudah menyala akan ditandai dengan indikator LED yang menyala di dekat port USB-C.
{% endhint %}

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/ZjfdONY3P5dvLZdrZ1b3/2.%20Power%20Source%20RasPi.png" alt=""><figcaption><p>Menghubungkan Raspberry Pi dengan Power Source</p></figcaption></figure>

### 2. Buka Aplikasi PuTTY

Aplikasi PuTTY digunakan untuk mengakses Raspberry Pi secara SSH. Gambar di bawah menunjukkan tampilan awal aplikasi tersebut ketika dibuka.&#x20;

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/ltxeErEaqvASoF2yX1IE/1_PuTTY.png" alt=""><figcaption><p>Tampilan Aplikasi PuTTY</p></figcaption></figure>

### 3. Periksa Koneksi Raspberry Pi dengan Jaringan WiFi

Untuk menghubungkan Raspberry Pi via SSH menggunakan aplikasi PuTTY, Anda perlu menginputkan Host Name atau IP Address dari Raspberry Pi. Untuk memeriksa apakah Raspberry Pi telah terhubung ke jaringan WiFi, Anda dapat melakukan command "ping" ke hostname Raspberry Pi. Buka command prompt dan masukkan syntax berikut.

```
ping raspberrypi
```

Apabila Raspberry Pi telah terhubung ke jaringan WiFi, maka perangkat akan mengirimkan pesan reply pada komputer seperti gambar di bawah.

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/rrFJj6HQvzogF4lyGdgw/3_Ping.png" alt=""><figcaption><p>Ping ke Raspberry Pi</p></figcaption></figure>

{% hint style="info" %}
Apabila proses ping **gagal**, maka besar kemungkinan Raspberry Pi **belum terhubung dengan jaringan WiFi** yang sudah diatur ketika proses instalasi OS. Pada kondisi ini, yang dapat Anda lakukan adalah dengan **menunggu beberapa saat** hingga ping dapat dilakukan. Jika masih gagal, Anda dapat **me-restart Raspberry Pi** dengan cara mencabut dan menghubungkan kembali sumber daya dari USB.
{% endhint %}

{% hint style="info" %}
Apabila Raspberry Pi masih tidak bisa terkoneksi dengan jaringan Wi-Fi yang telah Anda atur ketika proses instalasi OS, maka langkah terakhir yang dapat dilakukan adalah **mengganti jaringan Wi-Fi yang digunakan dengan melakukan instalasi OS kembali** pada bagian Configure Wireless LAN seperti pada gambar di bawah.
{% endhint %}

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/AlSE2sIVcF5iITkpctpr/9_Uname%20&#x26;%20Password.png" alt=""><figcaption><p>Mengubah Koneksi WiFi pada Raspberry Pi</p></figcaption></figure>

### 4. Akses Raspberry Pi secara SSH

Setelah memastikan bahwa Raspberry Pi dapat terhubung dengan komputer kita, selanjutnya kita dapat menginput hostname Raspberry Pi pada aplikasi PuTTY seperti gambar di bawah, lalu tekan Open.

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/XA6yaVqEP4hUjwxUhDy6/4_SSH.png" alt=""><figcaption><p>Menginput Host Name pada Aplikasi PuTTY</p></figcaption></figure>

Pilih Accept pada tampilan yang muncul, lalu masukkan username dan password pada terminal yang terbuka. Inputkan usernam dan password sesuai dengan yang dibuat ketika instalasi OS. Setelah berhasil login, maka tampilan pada terminal akan menjadi seperti berikut.

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/XALBOGrrt7p8Gr7oju7X/5_Terminal.png" alt=""><figcaption><p>Tampilan Terminal Raspberry Pi yang Diakses Secara SSH</p></figcaption></figure>

### 5. Install Node.js dan Library NPM

Untuk mengirimkan data ke Antares menggunakan Node.js, Anda perlu melakukan instalasi Node.js dan library NPM terlebih dahulu dengan menginputkan syntax berikut pada terminal.

```
sudo apt update
```

```
sudo apt install nodejs npm
```

{% hint style="info" %}
**Node.js** merupakan runtime environment untuk JavaScript yang bersifat open-source dan cross-platform. Dengan Node.js, Anda dapat menjalankan kode JavaScript di mana pun, tidak hanya terbatas pada lingkungan browser.
{% endhint %}

{% hint style="info" %}
**NPM** (Node Package Manager) merupakan JavaScript Package Manager bawaan dari Node.js. Melalui NPM, Anda dapat membuat Node.js package (proyek) dan mengelola penggunaan package eksternal yang digunakan.
{% endhint %}

Untuk memastikan apakah Node.js dan library NPM berhasil di-install, Anda dapat menginputkan syntax berikut pada terminal.

```
node -v
```

```
npm -v
```

Jika Anda dapat melihat versi Node.js dan library npm setelah menginputkan syntax di atas seperti pada gambar berikut, maka proses instalasi telah berhasil.&#x20;

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/Pc45kKpKoDXQvtNzTwvP/6_Node%20Version.png" alt=""><figcaption><p>Versi Node.js dan Library npm</p></figcaption></figure>

### 6. Inisiasi Library NPM

Untuk dapat menggunakan library npm, Anda perlu menginisiasi library tersebut terlebih dahulu dengan menginputkan syntax di bawah pada terminal.

```
npm init --yes
```

Jika proses inisialisasi library npm berhasil, terminal akan mengeluarkan output seperti pada gambar di bawah.

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/J1acbWAygZyQQDnGNtDg/7_Inisiasi%20npm.png" alt=""><figcaption><p>Inisiasi Library NPM</p></figcaption></figure>

### 7. Install Modul Request

Supaya Raspberry Pi dapat mengirimkan data ke platform Antares, perlu dilakukan instalasi modul **request** pada Node.js. Anda dapat menginputkan syntax di bawah untuk melakukan instalasi.

```
npm install request --save
```

{% hint style="info" %}
Modul **request** merupakan modul yang terdapat pada Node.js untuk melakukan HTTP request ke server atau API. Modul ini mampu memudahkan proses request-response antara client dan server untuk melakukan pertukaran data.
{% endhint %}

Setelah modul HTTP Request telah berhasil di-install, tampilan pada terminal akan menjadi seperti pada gambar di bawah.

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/ssnGb9s8n8eDpxyvcE6O/8_Modul%20Request.png" alt=""><figcaption><p>Instalasi Modul HTTP Request</p></figcaption></figure>

### 8. Membuat File Node.js

Setelah berhasil melakukan instalasi library yang diperlukan, Anda perlu membuat file dengan format Node.js. Masukkan syntax di bawah pada terminal untuk membuat file Node.js.

```
sudo nano your-file-name.js
```

{% hint style="info" %}
Anda perlu mengubah **your-file-name** dengan nama file sesuai preferensi kalian.
{% endhint %}

Setelah menginputkan syntax di atas dan menekan enter, maka tampilan terminal akan berubah menjadi seperti gambar di bawah.

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/iCcZS6cLBlojkyvokWqk/9_File%20Node.js.png" alt=""><figcaption><p>File Node.js yang Dibuat</p></figcaption></figure>

{% hint style="info" %}
Tampilan di atas menunjukkan file Node.js kosong yang siap untuk diinputkan dengan kode program.
{% endhint %}

### 9. Menginputkan Kode Program

Untuk mengirimkan data ke Antares, Anda dapat menginputkan kode di bawah ini.&#x20;

{% code lineNumbers="true" %}

```python
var request = require("request");

var options = {
  method: 'POST',
  url: 'masukkan URL',
  headers: {
    'cache-control': 'no-cache',
    'content-type': 'application/json;ty=4',
    'x-m2m-origin': 'masukkan access-key'
  },
  body: {
    "m2m:cin": {
      "cnf": "message",
      "con": JSON.stringify({
        "status": "0",
        "dim": "10"
      })
    }
  },
  json: true
};

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
```

{% endcode %}

{% hint style="info" %}
Jangan lupa untuk menginputkan **URL device** pada bagian **url** dan **access-key** pada bagian **x-m2m-origin** sesuai yang terdapat pada Antares IoT Platform. Pastikan tidak ada kesalahan penulisan program dan perhatikan indentasinya.
{% endhint %}

Setelah menginputkan kode di atas, maka tampilan pada terminal akan menjadi seperti pada gambar di bawah.

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/v5Qtphr4jfUlvjoJXLUl/10_Kode%20Kirim%20Data.png" alt=""><figcaption><p>Kode Program yang Sudah Diinput</p></figcaption></figure>

{% hint style="info" %}
Untuk menyimpan file Node.js yang dibuat, Anda perlu menekan **Ctrl + X > Y > Ente**r.
{% endhint %}

### 10. Mengeksekusi File Node.js

Setelah file Node.js Request berhasil disimpan. Selanjutnya Anda dapat mengeksekusi file tersebut dengan menginputkan syntax berikut.&#x20;

```
sudo node your-file-name.js
```

{% hint style="info" %}
Jangan lupa ubah **your-file-name** sesuai dengan nama yang dibuat sebelumnya.
{% endhint %}

Setelah file Node.js dieksekusi, maka tampilan pada terminal akan menjadi seperti pada gambar berikut

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/eFXulIzf71JoYOFxIUx3/11_Sudo%20node.png" alt=""><figcaption><p>Output Terminal ketika File Node.js Dieksekusi</p></figcaption></figure>

{% hint style="info" %}
Gambar di atas menunjukkan bahwa data telah berhasil dikirimkan ke **Antares IoT Platform**
{% endhint %}

### 11. Periksa Data pada Antares IoT Platfom

Untuk memastikan bahwa data telah terkirim dengan benar dari Raspberry Pi ke Antares IoT Platform, Anda dapat membuka URL device Anda. Gambar berikut menunjukkan tampilan pada Antares IoT Platform yang sudah menerima data dari Raspberry Pi.

<figure><img src="https://3995702122-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrRkxjRLeqOm0pNhLfsus%2Fuploads%2FWcFx56XOoqGwTpR0eNli%2F142.png?alt=media&#x26;token=0820c181-7ab0-4df2-be20-5cfb451c1991" alt=""><figcaption><p>Tampilan pada Antares IoT Platform yang Telah Menerima Data dari Raspberry Pi</p></figcaption></figure>
