Lompat ke konten utama
Beranda Tentang Cara Kerja Dokumentasi
Masuk Daftar Sekarang
Referensi

Dokumentasi
API Gateway.

Semua endpoint mengembalikan JSON. Autentikasi perangkat menggunakan API key yang dikirim di dalam body request.

POST /api/sensor-data

1. Kirim Data Sensor

Dipanggil oleh gateway setiap kali ada pembacaan baru. Server akan mengklasifikasikan status secara otomatis berdasarkan nilai MQ-135.

Body (JSON)

{ "api_key": "fd_live_xxxxxxxxxxxx", "temperature": 27.4, "humidity": 68.2, "mq135": 182.5 }

Cukup api_key. Tidak ada device_id dan tidak ada menu — keduanya diambil dari data perangkat yang tersimpan di website.

api_key boleh dikirim lewat body JSON, form-urlencoded, query string (?api_key=…), atau header X-API-Key / Authorization: Bearer …. Semuanya diterima.

Parameter

FieldTipeWajibKeterangan
api_keystringYaAPI key perangkat — satu-satunya kredensial
temperaturenumberYaSuhu dalam °C (−50…100)
humiditynumberYaKelembaban dalam % (0…100)
mq135numberYaKadar gas dalam ppm (0…10000)

Respons sukses

{ "ok": true, "message": "Data sensor tersimpan.", "data": { "id": 97, "temperature": 27.4, "humidity": 68.2, "mq135": 182.5, "status": "Aman", "menu": "Daging Ayam", "device_name": "ESP8266-01", "created_at": "2026-11-02 00:15:00" }, "source_of_truth": { "menu": "devices.menu (diatur di halaman Perangkat)", "device_name": "devices.name (diatur di halaman Perangkat)" }, "ignored": [] }

menu dan device_name SELALU berasal dari pengaturan perangkat di website. Bila firmware lama masih mengirim menu / device_id / device_name, nilainya diabaikan dan nama field-nya dilaporkan di ignored — sehingga data yang tersimpan dan yang dikembalikan selalu konsisten.

GET /api/sensor-logs

2. Ambil Riwayat

Mengembalikan daftar pembacaan terbaru. Mendukung filter menu, status, dan pembatasan jumlah baris.

Query parameter

ParameterDefaultKeterangan
limit50Jumlah baris (maks 500)
menu—Filter nama menu
status—Aman / Terkontaminasi / Bahaya

Contoh

curl "/api/sensor-logs?limit=10&status=Aman"
GET /api/sensor-data

3. Pembacaan Terakhir

Mengembalikan satu pembacaan terbaru beserta ringkasan statistik. Berguna untuk widget atau integrasi eksternal.

{ "ok": true, "latest": { "mq135": 182.5, "temperature": 27.4, "status": "Aman" }, "summary": { "total": 96, "safe": 71, "warn": 19, "danger": 6 } }

4. Firmware ESP8266

Contoh sketch minimal. Ganti kredensial WiFi dan API key sebelum mengunggah.

#include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h> #include <ArduinoJson.h> #include <Wire.h> #include "Adafruit_SHT31.h" const char* SSID = "NamaWiFi"; const char* PASSWORD = "PasswordWiFi"; const char* ENDPOINT = "/api/sensor-data"; const char* API_KEY = "fd_live_xxxxxxxxxxxx"; #define MQ135_PIN A0 Adafruit_SHT31 sht31 = Adafruit_SHT31(); void setup() { Serial.begin(115200); Wire.begin(); sht31.begin(0x44); WiFi.begin(SSID, PASSWORD); while (WiFi.status() != WL_CONNECTED) delay(500); } void loop() { int raw = analogRead(MQ135_PIN); float ppm = map(raw, 0, 1023, 100, 500); StaticJsonDocument<256> doc; doc["api_key"] = API_KEY; doc["temperature"] = sht31.readTemperature(); doc["humidity"] = sht31.readHumidity(); doc["mq135"] = ppm; String body; serializeJson(doc, body); HTTPClient http; http.begin(ENDPOINT); http.addHeader("Content-Type", "application/json"); http.POST(body); http.end(); delay(30000); }

5. Kalibrasi Sensor

MQ-135 memerlukan pemanasan awal (burn-in) sebelum pembacaan stabil.

24

Jam pemanasan awal

Biarkan sensor menyala terus selama 24 jam pertama di udara bersih.

R0

Ukur resistansi baseline

Catat nilai Rs di udara bersih, hitung R0 = Rs / 3,6.

30

Kalibrasi berkala

Ulangi setiap 30 hari atau setelah sensor dipindahkan.

6. Kode Error

StatusKodeArti
400missing_api_keyField api_key tidak dikirim (respons memuat field dan missing)
400invalid_payloadField wajib tidak lengkap atau tipe salah — missing menyebut field yang benar-benar kurang
401invalid_api_keyAPI key tidak dikenali
422out_of_rangeNilai sensor di luar rentang wajar
403device_inactivePerangkat dinonaktifkan
429rate_limitedTerlalu banyak request per menit
500server_errorKesalahan internal server