Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari

Minggu, 21 Juli 2024

[telkomiot.id] Mengirim Data DHT11 - ESP8266 via REST API dan Menampilkan di Widget & Notif Ke Email

 


Walau sempat galau karena MQTT gagal dikirimkan ke platform Telkomiot.id, tidak usah nyinyir berlebihan karena ada satu cara yang umum dilakukan untuk kirim-terima data yaitu via REST API / HTTP/ POST . Langsung aja yuk kita mencoba menggunakan software semacam postman untuk mengirimkan data secara HTTP, dan saya pilihkan yang lebih mudah yaitu chrome extension bernama "Talend API Tester". Langkah-langkahnya cukup straight forward, kita cek dulu alamat endpoint dari REST API nya pada console :application/device di website telkomiot.




Sesuai petunjuk bapak presiden...ehhh salah..dokumentasi yang sangat sedikit, saya menerka bahwa akan ada authentification /authorization berdasarkan access key dan token key untuk access  api dan biasanya ditambahkan pada header berupa "authorization". Lanjutkan aja dengan memasukkan pasangan key yang benar



Header yang gak kalah penting adalah "Content-Type" : "application/json" dan langsung saja saya coba dan berhasil mengirimkan data suhu dan humi ke telkomiot....yeahhh



Bagaimana dengan mengirimkan secara hardware? saya pilihkan microcontroller + sensor sejuta umat paling murah meriah : Wemos + DHT11.



Bagi yang masih awam dengan wemos/esp8266 untuk mengukur suhu dengan DHT11, dapat belajar dulu seri tulisan IOT yang full menggunakan rangkaian seperti diatas ( baca dulu klik disini )


*/telkomiot.id testing from www.aisi555.com
  by nyoman yudi kurniawan ahocool@gmail.com
  08155737755 - surabaya 2024
*/
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#include "DHT.h"
#include <base64.h>

// wifi kamu sesuaikan
const char* ssid = "hotspothp";
const char* password = "tanyasebelah";

// Domain http publish dari device DHT11 ditelkomiot, sesuaikan
const char* serverName = "http://publish-data.telkomiot.id/v2.0/pubs/APP1111111111/DEV222222222223";

// account key dari telkomiot
String AccessKey   = "aaaaaaaaaaaaaaaa";
String AccessToken = "bbbbbbbbbbbbbbbb";
String auth;
String authHeader;

const int dhtPin = D3; //Sesuaikan pin DHT
#define DHTTYPE DHT11  //Sensor DHT11
DHT dht(dhtPin, DHTTYPE); 

//timer untuk membaca DHT11 tiap 10 detik
unsigned long lastTime = 0;
unsigned long timerDelay = 10000;

WiFiClient client;
HTTPClient http;

void setup() {
  Serial.begin(9600);
  delay(1000);
  Serial.println("www.aisi555.com ==> telkomiot.id testing");
  WiFi.begin(ssid, password);
  Serial.println("Connecting");
  while(WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Terhubung wifi : ");
  Serial.print(ssid);
  Serial.print("  IP : ");
  Serial.println(WiFi.localIP());


   //auth header untuk POST
  auth = AccessKey+ ":" + AccessToken;
  authHeader = "Basic " + base64::encode(auth);
 
}

String SendTempHumid(){ // pengukuran DHT
   
 
    float h = dht.readHumidity();
    float t = dht.readTemperature();

    if (isnan(h) || isnan(t)) {
      Serial.println("Failed to read from DHT sensor!");
    }
    
    Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(t);
    Serial.println(" °C ");
  //yang dikirim data berupa string JSON
  
  return( "{\"suhu\":" + String(t) + ",\"humi\":" + String(h) +"}"); 
  }


void loop() {
  //Send HTTP POST request tiap 10 detik
  if ((millis() - lastTime) > timerDelay) {
    //Check WiFi connection status
    if(WiFi.status()== WL_CONNECTED){

      
      // server untuk kirim REST API
      http.begin(client, serverName);
      
      // Specify content-type header
      http.addHeader("Authorization", authHeader);
      http.addHeader("Content-Type", "application/json");
      // Data to send with HTTP POST
      String httpRequestData = SendTempHumid();           
      // Send HTTP POST request
      int httpResponseCode = http.POST(httpRequestData);
      

      Serial.print("HTTP Response code: ");
      Serial.println(httpResponseCode);
        
      // Free resources
      http.end();
    }
    else {
      Serial.println("WiFi terputus");
    }
    lastTime = millis();
  }
}


Hasilnya bagaimana  ?




Penjabarannya seperti berikut :


Library :

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#include "DHT.h"
#include <base64.h>


Yang digunakan library standar ESP8266 untuk kirim terima data via http dan sudah tersedia semua secara default. Yang mungkin berbeda adalah base64.h yang jarang digunakan, kali ini tujuannya untuk meng-enkripsi auth key sebagai standar auth pada REST API.


Rest API endpoint + auth:

// Domain http publish dari device DHT11 ditelkomiot, sesuaikan
const char* serverName = "http://publish-data.telkomiot.id/v2.0/pubs/APP1111111111111111/DEV222222222222222";

// account key dari telkomiot
String AccessKey   = "aaaaaaaaaaaaaaaa";
String AccessToken = "bbbbbbbbbbbbbbbb";
String auth;
String authHeader;

WiFiClient client;
HTTPClient http;


Base 64 auth Header :

   //auth header untuk POST
  auth = AccessKey+ ":" + AccessToken;
  authHeader = "Basic " + base64::encode(auth);


Baca DHT 11 :

String SendTempHumid(){ // pengukuran DHT
   
 
    float h = dht.readHumidity();
    float t = dht.readTemperature();

    if (isnan(h) || isnan(t)) {
      Serial.println("Failed to read from DHT sensor!");
    }
    
    Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(t);
    Serial.println(" °C ");
  //yang dikirim data berupa string JSON
  
  return( "{\"suhu\":" + String(t) + ",\"humi\":" + String(h) +"}"); 
  }

Kirim secara post :

      // server untuk kirim REST API
      http.begin(client, serverName);
      
      // Specify content-type header
      http.addHeader("Authorization", authHeader);
      http.addHeader("Content-Type", "application/json");
      // Data to send with HTTP POST
      String httpRequestData = SendTempHumid();           
      // Send HTTP POST request
      int httpResponseCode = http.POST(httpRequestData);
      

      Serial.print("HTTP Response code: ");
      Serial.println(httpResponseCode);
        
      // Free resources
      http.end();


Lumayan straight forward, hanya meniru apa yang sudah dilakukan pada aplikasi testing REST API sebelumnya, dan jika data json / dht11 benar maka pada monitor terminal muncul ini.


Http response 200 artinya data diterima dengan benar, sedangkan jika 400 berarti json pengambilan data dht11 nya salah.

Lalu bagaimana cara menampilkan gauge dan grafik seperti gambar paling diatas? tinggal menuju menu personal dashboard , lalu buat dashboard kamu serta tambahkan widget yang dihubungkan ke device kamu.



Dan jika benar, maka akan muncul widget berupa gauge-line chart-bar chart sesuai yang kamu pilih. Dan tiap widget ini dapat ditempelkan pada website kamu lhoo..



Dan bisa kirim alarm lewat  event trigger ke email lhooo ...






Walau kekecewaan masih tersirat pada saya yang pencinta MQTT ini, namun dengan praktek diatas agak sedikit terobati, dan semoga kalian bisa mencobanya sendiri

Share:

0 komentar:

Posting Komentar

Kontak Penulis



12179018.png (60×60)
+628155737755

Mail : ahocool@gmail.com

Site View

Categories

555 (8) 7 segmen (3) adc (4) amplifier (2) analog (19) android (12) antares (11) arduino (27) artikel (11) attiny (3) attiny2313 (19) audio (5) baterai (5) blog (1) bluetooth (1) chatgpt (2) cmos (2) crypto (2) dasar (46) digital (11) dimmer (5) display (3) esp8266 (26) euro2020 (13) gcc (1) gsm (1) iklan (1) infrared (2) Input Output (3) iot (74) jam (7) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (17) komputer (3) komunikasi (1) kontrol (8) lain-lain (8) lcd (2) led (14) led matrix (6) line tracer (1) lm35 (1) lora (11) lorawan (2) MATV (1) memory (1) metal detector (4) microcontroller (70) micropython (6) mikrokontroler (1) mikrokontroller (14) mikrotik (5) modbus (9) mqtt (3) ninmedia (5) ntp (1) paket belajar (19) palang pintu otomatis (1) parabola (88) pcb (2) power (1) praktek (2) project (33) proyek (1) python (8) radio (28) raspberry pi (9) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (2) sharing (3) signage (1) sinyal (1) sms (6) software (18) solar (1) solusi (1) tachometer (2) technology (1) teknologi (2) telegram (2) telepon (9) televisi (167) television (28) telkomiot (5) transistor (2) troubleshoot (3) tulisan (94) tutorial (108) tv digital (6) tvri (2) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3) yolo (7)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika