import { makeWASocket, useMultiFileAuthState } from "@whiskeysockets/baileys"; import qrcode from "qrcode-terminal"; import express from "express"; import bodyParser from "body-parser"; const app = express(); app.use(bodyParser.json()); let sock; // Variabel global untuk menyimpan socket WhatsApp // Objek untuk menyimpan nilai terbaru let latestData = { tds: null, flow: null, ph: null, suhu: null, }; async function startBot() { const { state, saveCreds } = await useMultiFileAuthState("auth_info"); sock = makeWASocket({ auth: state, printQRInTerminal: true, // QR code akan muncul di terminal }); sock.ev.on("creds.update", saveCreds); sock.ev.on("connection.update", (update) => { const { connection, lastDisconnect } = update; if (connection === "close") { console.log("Koneksi terputus, mencoba reconnect..."); startBot(); } else if (connection === "open") { console.log("Bot WhatsApp berhasil terhubung!"); } }); sock.ev.on("messages.upsert", async (m) => { const msg = m.messages[0]; if (!msg.message) return; const sender = msg.key.remoteJid; const text = msg.message.conversation || msg.message.extendedTextMessage?.text || ""; console.log(`Pesan masuk dari ${sender}: ${text}`); // Kirim nilai terbaru jika diminta if (text.toLowerCase() === "suhu") { await sock.sendMessage(sender, { text: `🌡 Suhu: ${latestData.suhu || "belum ada data"} °C` }); } else if (text.toLowerCase() === "ph") { await sock.sendMessage(sender, { text: `🧪 pH: ${latestData.ph || "belum ada data"}` }); } else if (text.toLowerCase() === "tds") { await sock.sendMessage(sender, { text: `⚡ TDS: ${latestData.tds || "belum ada data"} ppm` }); } else if (text.toLowerCase() === "debit") { await sock.sendMessage(sender, { text: `💧 Debit: ${latestData.flow || "0"} L` }); } else if (text.toLowerCase() === "data") { const message = `📊 Data Sensor Saat Ini:\n⚡ TDS: ${latestData.tds || "belum ada data"} ppm\n💧 Debit: ${latestData.flow || "0"} L\n🧪 PH: ${latestData.ph || "belum ada data"}\n🌡 Suhu: ${latestData.suhu || "belum ada data"} °C`; await sock.sendMessage(sender, { text: message }); } }); } // Endpoint API untuk menerima data dan memperbarui nilai terbaru let notifiedFlow = false; app.post("/send-data", async (req, res) => { let { tds, flow, ph, suhu } = req.body; // Konversi ke float dan pastikan 2 desimal tds = parseFloat(tds).toFixed(2); flow = parseFloat(flow).toFixed(2); ph = parseFloat(ph).toFixed(2); suhu = parseFloat(suhu).toFixed(2); // Pastikan tetap float tds = parseFloat(tds); flow = parseFloat(flow); ph = parseFloat(ph); suhu = parseFloat(suhu); if (isNaN(tds) || isNaN(flow) || isNaN(ph) || isNaN(suhu)) { return res.status(400).send("Semua parameter harus berupa angka."); } latestData = { tds, flow, ph, suhu }; console.log("Data diperbarui:", latestData); // Kirim notifikasi if (flow >= 100.00 && !notifiedFlow) { try { await sock.sendMessage('6281919281102@s.whatsapp.net', { text: `⚠Peringatan⚠ \nDebit air melebihi batas harian\nTotal Debit: ${flow} Liter` }); console.log("Notifikasi dikirim ke WhatsApp!"); notifiedFlow = true; // Set status notifikasi agar tidak dikirim berulang } catch (error) { console.error("Gagal mengirim notifikasi:", error); } }else if (tds<1000){ await sock.sendMessage('6281919281102@s.whatsapp.net', { text: `⚠Peringatan⚠ \nTDS air melebihi batas\nTDS: ${tds} ppm`  }); console.log("Notifikasi dikirim ke WhatsApp!"); }else if (ph<6 || ph>9){ await sock.sendMessage('6281919281102@s.whatsapp.net', { text: `⚠Peringatan⚠ \nTDS air melebihi batas\nTDS: ${tds} ppm`  }); console.log("Notifikasi dikirim ke WhatsApp!"); }else if (suhu>30){ await sock.sendMessage('6281919281102@s.whatsapp.net', { text: `⚠Peringatan⚠ \nSuhu air melebihi batas\nSuhu: ${tds} °C`  }); console.log("Notifikasi dikirim ke WhatsApp!"); } // Reset status notifikasi jika flow turun di bawah 100 if (flow < 100.00) { notifiedFlow = false; } res.status(200).send("Data berhasil diperbarui."); }); // Endpoint API untuk mengambil data terbaru app.get("/get-data", (req, res) => { res.status(200).json(latestData); }); // Jalankan server API const PORT = 3000; app.listen(PORT, () => { console.log(`Server API berjalan di http://localhost:${PORT}`); startBot(); // Jalankan bot WhatsApp });