136 lines
4.8 KiB
JavaScript
136 lines
4.8 KiB
JavaScript
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
|
||
}); |