This commit is contained in:
fakhrini
2025-07-18 19:42:27 +07:00
commit f44f5cf855
4 changed files with 4066 additions and 0 deletions

136
bot.js Normal file
View File

@ -0,0 +1,136 @@
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
});