AI Assistant
Detail Karya Portofolio

INTEGRASI BACKEND DAN FRONTEND UNTUK OLAH DATA

Ebenezer Hutahaean Oleh: Ebenezer Hutahaean

Ringkasan Portofolio

Proyek ini adalah aplikasi backend yang dibangun menggunakan Flask untuk mengelola data suhu dan kelembapan yang diperoleh dari sensor. Aplikasi ini terhubung ke database MySQL untuk menyimpan, memperbarui, dan mengambil data sensor melalui tiga endpoint RESTful: POST untuk menyimpan data, PUT untuk memperbarui data berdasarkan ID, dan GET untuk mengambil semua data. Dengan menggunakan aplikasi ini, pengguna dapat memantau dan mengelola informasi suhu dan kelembapan secara efisien.

Deskripsi & Detail Proyek

Proyek ini bertujuan untuk membangun aplikasi backend sederhana yang mengelola data suhu dan kelembapan dari sensor menggunakan Flask dan MySQL. Aplikasi ini menyediakan antarmuka RESTful dengan tiga endpoint utama yang memungkinkan pengguna untuk berinteraksi dengan data sensor secara efisien.

Simulasi Wokwi

Flask di VM 3

Proses Pengiriman Data

Kode Simulasi Wokwi

 

#include <WiFi.h>

#include <HTTPClient.h>

#include <DHT.h>

 

#define DHTPIN 15

#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);

 

void setup() {

  Serial.begin(9600);

  dht.begin();

 

  WiFi.begin("Wokwi-GUEST", "", 6);

  while (WiFi.status() != WL_CONNECTED) {

    delay(100);

    Serial.print(".");

  }

  Serial.println(" Connected!");

}

 

void loop() {

  float temperature = dht.readTemperature();

  float humidity = dht.readHumidity();

 

  if (WiFi.status() == WL_CONNECTED) {

    HTTPClient http;

 

    String serverName = "http://110.239.71.90:5003/data";

    http.begin(serverName);

    http.addHeader("Content-Type", "application/json");

 

    String httpRequestData = "{\"temperature\":\"" + String(temperature) + "\",\"humidity\":\"" + String(humidity) + "\"}";

    

    int httpResponseCode = http.POST(httpRequestData);

 

    Serial.print("Temperature: ");

    Serial.print(temperature);

    Serial.print(" °C, Humidity: ");

    Serial.print(humidity);

    Serial.print(" %, Response code: ");

    Serial.println(httpResponseCode);

 

    http.end();

  } else {

    Serial.println("WiFi not connected");

  }

 

  delay(5000);

}

 

 

 

Kode Flask

 

 

 

from flask import Flask, request, jsonify

import mysql.connector

 

app = Flask(__name__)

 

def db_connection():

   connection = mysql.connector.connect(

       host='localhost',

       user='root',  # Ganti dengan username MySQL 

       password='password',  # Ganti dengan password MySQL 

       database='sensor_data'

   )

   return connection

 

@app.route('/data', methods=['POST'])

def receive_data():

   data = request.get_json()

   temperature = data.get('temperature')

   humidity = data.get('humidity')

   connection = db_connection()

   cursor = connection.cursor()

   cursor.execute("INSERT INTO readings (temperature, humidity) VALUES (%s, %s)", (temperature, humidity))

   connection.commit()

   cursor.close()

   connection.close()

   return jsonify({"status": "success", "message": "Data inserted"}), 201

 

@app.route('/data/<int:id>', methods=['PUT'])

def update_data(id):

   data = request.get_json()

   temperature = data.get('temperature')

   humidity = data.get('humidity')

   connection = db_connection()

   cursor = connection.cursor()

   cursor.execute("UPDATE readings SET temperature = %s, humidity = %s WHERE id = %s", (temperature, humidity, id))

   connection.commit()

   cursor.close()

   connection.close()

   return jsonify({"status": "success", "message": "Data updated"}), 200

 

@app.route('/data', methods=['GET'])

def get_data():

   connection = db_connection()

   cursor = connection.cursor(dictionary=True)

   cursor.execute("SELECT * FROM readings")

   results = cursor.fetchall()

   cursor.close()

   connection.close()

   return jsonify(results), 200

 

if __name__ == '__main__':

   app.run(host='0.0.0.0', port=5003, debug=True)

 

Endpoint POST /data: Endpoint ini menerima data suhu dan kelembapan dalam format JSON dari klien dan menyimpannya dalam tabel readings di database MySQL. Setelah berhasil menyimpan data, aplikasi mengembalikan respons dengan status sukses dan pesan konfirmasi.

Endpoint PUT /data/<int:id>: Endpoint ini memungkinkan pengguna untuk memperbarui data suhu dan kelembapan berdasarkan ID tertentu yang diberikan. Data baru juga diterima dalam format JSON dan, setelah berhasil diperbarui, aplikasi memberikan respons yang menunjukkan bahwa pembaruan telah berhasil dilakukan.

Endpoint GET /data: Endpoint ini mengambil semua data yang tersimpan dalam tabel readings dan mengembalikannya dalam format JSON, memungkinkan pengguna untuk mendapatkan ringkasan dari semua data sensor yang telah disimpan.

Aplikasi ini menggunakan fungsi db_connection() untuk mengatur koneksi dengan database, dan dijalankan pada host 0.0.0.0 dengan port 5003 dalam mode debug, sehingga memudahkan pengembangan dan pengujian. Dengan struktur ini, proyek ini menyediakan solusi yang efektif untuk pemantauan dan pengelolaan data sensor suhu dan kelembapan, yang dapat diterapkan dalam berbagai aplikasi IoT dan lingkungan pemantauan.