WEB_PROJECT_TA/api/bc-notif-redaman dan volt.txt

224 lines
5.5 KiB
Plaintext

<?php
require_once __DIR__ . '/../config/database.php';
set_time_limit(300);
$db = new Database();
$conn = $db->getConnection();
// 🔥 GROUP TEKNISI
$groupTeknisi = "120363427232707228@g.us";
// ======================
// 🔥 FUNCTION WA
// ======================
if (!function_exists('kirimWA')) {
function kirimWA($target, $pesan) {
if (!$target) return;
$token = "XjC9oSr4jECWG93JQRWf";
$data = [
"target" => $target,
"message" => $pesan,
];
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fonnte.com/send",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query($data),
CURLOPT_HTTPHEADER => [
"Authorization: $token"
],
CURLOPT_TIMEOUT => 10
]);
curl_exec($curl);
curl_close($curl);
}
}
// ======================
// 🔥 TEST MODE (OPSIONAL)
// ======================
$TEST_MODE = false;
// ======================
// 🔥 AMBIL DATA DARI DATABASE (JOIN HISTORY)
// ======================
$stmt = $conn->query("
SELECT
f.id,
f.name,
f.sn_onu,
f.latitude,
f.longitude,
f.customer_phone,
o.rx_power,
o.voltage,
o.updated_at
FROM ftth_items f
LEFT JOIN onu_daily_history o
ON o.sn = f.sn_onu
INNER JOIN item_types it
ON it.id = f.item_type_id
WHERE f.sn_onu IS NOT NULL
AND LOWER(it.name) = 'pelanggan'
");
$dataItems = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($dataItems as $item) {
usleep(200000);
$sn = strtoupper(trim($item['sn_onu']));
$nama = $item['name'];
$lat = $item['latitude'];
$lng = $item['longitude'];
$phone = $item['customer_phone'];
// ======================
// 🔥 AMBIL RX & VOLT DARI DB
// ======================
$rx = isset($item['rx_power']) ? floatval($item['rx_power']) : null;
$volt = isset($item['voltage']) ? floatval($item['voltage']) : null;
if ($rx === null && $volt === null) {
continue;
}
// ======================
// 🔥 STATUS DETEKSI
// ======================
$isBadRx = ($rx !== null && $rx <= -25.99);
$isBadVolt = ($volt !== null && $volt < 3.29);
echo "DEBUG $sn | RX:$rx | Volt:$volt<br>";
if (!$isBadRx && !$isBadVolt) {
continue;
}
// ======================
// 🔥 CEK ANTI SPAM LOG
// ======================
$cek = $conn->prepare("
SELECT last_rx, last_voltage
FROM notif_device_log
WHERE sn = ?
");
$cek->execute([$sn]);
$last = $cek->fetch(PDO::FETCH_ASSOC);
$lastRx = $last['last_rx'] ?? null;
$lastVolt = $last['last_voltage'] ?? null;
$isChanged = ($lastRx != $rx || $lastVolt != $volt);
if (!$isChanged) {
continue;
}
// ======================
// 🔥 MAPS
// ======================
$maps = ($lat && $lng)
? "https://www.google.com/maps?q={$lat},{$lng}"
: "-";
// ======================
// 🔥 FORMAT NOMOR
// ======================
$phoneFix = null;
if ($phone) {
$phoneFix = preg_replace('/[^0-9]/', '', $phone);
if (substr($phoneFix, 0, 1) == '0') {
$phoneFix = '62' . substr($phoneFix, 1);
}
}
// ======================
// 🔥 NOTIFIKASI
// ======================
if ($isBadRx && $isBadVolt) {
kirimWA($phoneFix,
"🚨 *Gangguan Jaringan & Perangkat*\n\n" .
"Yth. {$nama},\n" .
"📉 RX: " . number_format($rx,2) . " dBm\n" .
"🔌 Volt: " . number_format($volt,2) . " V\n\n" .
"Gangguan pada jaringan & perangkat terdeteksi.\n" .
"Estimasi perbaikan ±2 jam.\n\n" .
"Mohon maaf 🙏"
);
kirimWA($groupTeknisi,
"🚨 *DOUBLE ISSUE*\n\n" .
"👤 {$nama}\n" .
"📉 RX: {$rx} dBm\n" .
"🔌 Volt: " . number_format($volt,2) . " V\n\n" .
"📡 Gangguan IKR + ONU\n" .
"📍 {$maps}\n\n" .
"⚠ PRIORITAS TINGGI"
);
} elseif ($isBadRx) {
kirimWA($phoneFix,
"🚨 *Gangguan Jaringan*\n\n" .
"Yth. {$nama},\n" .
"📉 RX: {$rx} dBm\n\n" .
"Terjadi gangguan pada jalur fiber.\n" .
"Tim akan segera ke lokasi.\n"
);
kirimWA($groupTeknisi,
"🚨 *REDAMAN TIDAK NORMAL*\n\n" .
"👤 {$nama}\n" .
"📉 RX: {$rx} dBm\n" .
"📍 {$maps}"
);
} elseif ($isBadVolt) {
kirimWA($phoneFix,
"⚡ *Perangkat Bermasalah*\n\n" .
"Yth. {$nama},\n" .
"🔌 Volt: " . number_format($volt,2) . " V\n\n" .
"Indikasi power tidak stabil.\n"
);
kirimWA($groupTeknisi,
"⚡ *VOLTAGE TIDAK NORMAL*\n\n" .
"👤 {$nama}\n" .
"🔌 Volt: " . number_format($volt,2) . " V\n" .
"📍 {$maps}"
);
}
// ======================
// 🔥 UPDATE LOG ANTI SPAM
// ======================
$update = $conn->prepare("
INSERT INTO notif_device_log (sn, last_rx, last_voltage, last_sent)
VALUES (?, ?, ?, NOW())
ON DUPLICATE KEY UPDATE
last_rx = VALUES(last_rx),
last_voltage = VALUES(last_voltage),
last_sent = NOW()
");
$update->execute([$sn, $rx, $volt]);
echo "✅ SENT $sn | RX:$rx | V:$volt<br>";
}