Sabtu, 12 November 2016

Tutorial NodeMCU: Push data dari WeMos D1 mini ke Firebase Realtime Database via REST (ESP8266, WeMos, NodeMCU, Lua)

Pada tulisan-tulisan sebelumnya, kita telah memanfaatkan board WeMos D1 mini untuk mengendalikan Led BUILTIN melalui interface Telnet maupun Web yang berfungsi di intranet. Pada tulisan akan dicoba untuk bagaimana WeMos difungsikan untuk melakukan push data ke Firebase Realtime Database yang merupakan salah satu layanan Google yang memungkinkan kita melakukan push data ke database realtime melalui berbagai interface seperti web, Android, IOS dan dalam hal ini kita akan menggunakan metode REST yang sesuai dengan tujuan pemanfaatan WeMos D1 mini sebagai perangkat IoT.

Untuk melakukan push data ke firebase realtime database melalui REST, maka firmware NodeMCU yang akan digunakan perlu di kustomisasi dengan menambahkan module HTTP dan SSL support, TLS 1.1 with 4 cipher suites.


 Gambar 1. Kustomisasi Module fireware NodeMCU

Langkah-langkah:
1. Aktifkan ke console Firebase
2. Buatlah project anda

 Gambar 2. Membuat Project Firebase

3. Klik pada Project Setting

Gambar 3. Mengatur Project setting

4. Kemudian pada klik pada Service Account

Gambar 4. Tab Service Accounts

5. Duplikasi Database Secrets anda yang akan digunakan untuk authentication ketika proses POST, PUT maupun GET data melalui REST.

Gambar 5. Duplikasi Database Secrets

6. Aktifkan ke Database dan duplikasi url akses database yang nantinya akan dilewatkan ke server untuk mengakses sumber daya database.

Gambar 6. Alamat akses Database

7. Lakukan koding berikut ini:

database = "https://nodemculua-677a8.firebaseio.com/"
node = "sensor1.json"
dbSecret = "xjTm2qhygBgVNqQauJC2n1JyQB4NCXbc********"
url = database .. node .. "?auth=" .. dbSecret
print(url)
payload = "{\"time\":\"2016-11-13\",\"temperature\":25,\"humidity\":45}"
print(payload)

http.request(url,
  "POST",
  "Content-Type: application/json\r\n", 
  payload,
  function(code, data)
    if (code ~= 200) then
      print("Failed : HTTP error code : " .. code)
    else
      print("Succeed : " .. code, data)
    end
  end)

Pada koding diatas, kita akan melakukan push data yang terdiri dari tiga atribut, yaitu time, temperatur, dan humidity ke node sensor1 yang terdapat pada database https://nodemculua-677a8.firebaseio.com/.
 8. Jika berhasil di Run akan muncuk response sebagai berikut:

dofile('app.lua')
https://nodemculua-677a8.firebaseio.com/sensor1.json?auth=xjTm2qhygBgVNqQauJC2n1JyQB4NCXbcC******
> Succeed : 200    {"name":"-KWQDQVFJHSIdmrVyyQ1"}
9. Jika mendapatkan pesan seperti ini:
https://nodemculua-677a8.firebaseio.com/sensor1.json?auth=xjTm2qhygBgVNqQauJC2n1JyQB4NCXbcC******
Failed : HTTP error code : 400{
  "error" : "Could not parse auth token."
}
Maka pastikan database secret adalah telah benar, untuk memastikan, coba duplikasi url diatas ke web browser, dan jika berhasil harusnya mendapat respons:

Gambar 7. URL benar dan Authentication sukses

Jika terdapat kegagalan pada token, maka akan muncul pesan

Gambar 3. Firebase server gagal melakukan authentication

dan jika hasil run dengan pesan Failed : HTTP error code : -1, walaupun sudah dipastikan koding, url datatabase maupun database secret adalah telah benar, maka perlu dipastikan bahwa firmware anda mendukung module tambahan SSL support, TLS 1.1 with 4 cipher suites.

Jika koding diatas adalah menggunakan perintah http.request, maka dapat juga menggunakan perintah http.post.

database = "https://nodemculua-677a8.firebaseio.com/"
node = "sensor1.json"
secret = "xjTm2qhygBgVNqQauJC2n1JyQB4NCXbcCQ******"
url = database .. node .. "?auth=" .. secret
payload = "{\"time\":\"2016-11-13\",\"temperature\":25,\"humidity\":45}"

print(url)

http.post(url,
  "Content-Type: application/json\r\n", 
  payload,
  function(code, data)
    if (code ~= 200) then
      print("Failed : HTTP error code : " .. code)
    else
      print("Succeed : " .. code, data)
    end
  end)

Petunjuk tambahan terkait dengan pemanfaatan REST pada firebird dapat dibaca di https://firebase.google.com/docs/reference/rest/database/

Tidak ada komentar:

Posting Komentar