Setup NUT on Proxmox
Source: Dev.to
1. Setup di UPS
1.1 Koneksi UPS
Pastikan UPS sudah terhubung ke jaringan. Pada contoh ini kita memakai APC SRT3000XLI 3000VA 230V Online UPS dengan modul NMC (Network Management Control) terpasang. Tutorial lengkap dapat dilihat di sini.
1.2 Timezone
- Buka menu Configuration > General > Date/Time > Mode.
- Pilih NTP Pool →
https://www.ntppool.org/en/zone/id.

1.3 SNMPv3
-
Aktifkan SNMPv3: Configuration → Network → SNMPv3 > Access, centang Enable.

-
Buat user profile: Configuration → Network → SNMPv3 > User Profile. Pilih salah satu dari empat profil default.

1.4 Low‑Battery Delay
Set delay menjadi 20 detik pada Configuration > Shutdown → Low Battery Duration.

2. Setup di Proxmox Host
2.1 Installasi paket NUT
apt update
apt install -y snmp nut nut-snmp
2.2 Konfigurasi mode NUT
Edit file /etc/nut/nut.conf dan ubah baris MODE menjadi:
MODE=standalone
2.3 Konfigurasi UPS (ups.conf)
nano /etc/nut/ups.conf
Tambahkan (atau sesuaikan) blok berikut dengan user profile yang sudah dibuat pada UPS:
[apcsrt]
driver = snmp-ups
port = 10.0.3.136 # IP UPS
snmp_version = v3
secLevel = authPriv
secName = apc_agent3
authProtocol = SHA
authPassword = farmcenter1009
privProtocol = AES
privPassword = farmcenter1009
2.4 Buat user NUT (upsd.users)
nano /etc/nut/upsd.users
Tambahkan di bagian paling bawah:
[monuser]
password = passwordbebas
upsmon primary
Tekan
Ctrl+Wuntuk mencari, laluCtrl+Vuntuk menempel (jika menggunakan editornano).
2.5 Konfigurasi monitor (upsmon.conf)
nano /etc/nut/upsmon.conf
Modifikasi bagian NOTIFYCMD dan NOTIFYFLAG:
# Example:
# NOTIFYCMD /usr/bin/notifyme
+NOTIFYCMD /usr/local/bin/nut-notif.sh
NOTIFYFLAG ONBATT EXEC
NOTIFYFLAG LOWBATT EXEC
NOTIFYFLAG ONLINE EXEC
Di bagian paling bawah, tambahkan baris MONITOR:
MONITOR apcsrt@localhost 1 monuser passwordbebas primary
Pastikan password yang dipakai sama dengan yang didefinisikan di /etc/nut/upsd.users.
2.6 Restart service NUT
systemctl restart nut-driver nut-server nut-monitor
2.7 Verifikasi koneksi ke UPS
upsc apcsrt@localhost
Untuk menampilkan parameter penting:
upsc apcsrt@localhost | egrep "battery.charge|battery.runtime|ups.status|battery.runtime.low|battery.runtime"
Jika output menampilkan nilai‑nilai tersebut, maka NUT sudah berhasil terhubung ke UPS.
2.8 Skrip notifikasi (/usr/local/bin/nut-notif.sh)
Buat file /usr/local/bin/nut-notif.sh (pastikan memiliki izin eksekusi) dan isi dengan skrip yang mengirimkan pesan ke Telegram. Contoh sederhana:
#!/bin/bash
# nut-notif.sh – kirim notifikasi UPS ke Telegram
# ==== CONFIGURATION ====
TOKEN="YOUR_TELEGRAM_BOT_TOKEN"
CHAT_ID="YOUR_TELEGRAM_CHAT_ID"
# =======================
EVENT=$1 # ONBATT, LOWBATT, ONLINE, dll.
MESSAGE="⚡ UPS ${EVENT} pada $(date '+%Y-%m-%d %H:%M:%S')"
curl -s -X POST "https://api.telegram.org/bot${TOKEN}/sendMessage" \
-d chat_id="${CHAT_ID}" \
-d text="${MESSAGE}" >/dev/null
chmod +x /usr/local/bin/nut-notif.sh
Ganti
YOUR_TELEGRAM_BOT_TOKENdanYOUR_TELEGRAM_CHAT_IDdengan nilai yang sesuai.
3. Penutup
Dengan langkah‑langkah di atas, Proxmox akan:
- Memantau status UPS secara real‑time melalui NUT.
- Mengirim notifikasi ke Telegram ketika terjadi perubahan status (ON BATT, LOW BATT, ONLINE).
- Melakukan shutdown otomatis bila UPS berada pada kondisi Low Battery.
Semoga tutorial ini membantu! Jika ada pertanyaan atau masalah, silakan tinggalkan komentar atau hubungi saya via Telegram. 🚀
Skrip Bash untuk Notifikasi UPS ke Telegram
Berikut adalah contoh skrip Bash yang dapat dipakai untuk mengirim notifikasi status UPS (ON BATTERY, LOW BATTERY, ONLINE) ke Telegram melalui bot yang sudah dibuat di BotFather.
#!/bin/bash
# ------------------------------------------------------------------
# Setup variabel
# ------------------------------------------------------------------
TOKEN="6495733192:AAEiztfp_b6JoZB7uUWhpZV89KbpVQou_34"
CHAT_ID="-1001768856329"
TOPIC_ID="53038"
EVENT="$NOTIFYTYPE"
DATE=$(date '+%Y-%m-%d %H:%M:%S')
# ------------------------------------------------------------------
# Fungsi untuk mengirim pesan ke Telegram
# ------------------------------------------------------------------
send() {
curl -s -X POST "https://api.telegram.org/bot${TOKEN}/sendMessage" \
-d chat_id="${CHAT_ID}" \
-d message_thread_id="${TOPIC_ID}" \
-d parse_mode=HTML \
--data-urlencode text="$1"
}
# ------------------------------------------------------------------
# Buat trigger EVENT dari upsmon.conf
# ------------------------------------------------------------------
case "$EVENT" in
ONBATT)
MSG=$(printf "UPS ON BATTERY \n\n%s" "$DATE")
;;
LOWBATT)
MSG=$(printf "UPS LOW BATTERY \n\n%s\nProd server Graceful Shutdown" "$DATE")
;;
ONLINE)
MSG=$(printf "UPS ONLINE \n\n%s" "$DATE")
;;
*)
exit 0
;;
esac
# ------------------------------------------------------------------
# Panggil fungsi dengan parameter $MSG
# ------------------------------------------------------------------
send "$MSG"
Catatan:
Bagian yang berwarna hijau (variabelTOKEN) adalah token yang didapatkan dari BotFather Telegram. Pastikan token tersebut sudah benar dan bot Anda sudah di‑setup.
Cara Menguji Skrip
Jalankan skrip di atas dengan men‑set variabel lingkungan NOTIFYTYPE sesuai dengan event yang ingin diuji.
NOTIFYTYPE=ONLINE UPSNAME=apcsrt@localhost /usr/local/bin/nut-notif.sh
NOTIFYTYPE=ONBATT UPSNAME=apcsrt@localhost /usr/local/bin/nut-notif.sh
NOTIFYTYPE=LOWBATT UPSNAME=apcsrt@localhost /usr/local/bin/nut-notif.sh
Jika semuanya sudah dikonfigurasi dengan benar, Anda akan menerima pesan di Telegram sesuai dengan teks yang didefinisikan pada masing‑masing event.
Uji Coba Tingkat Lanjut
Untuk menguji secara nyata, cabut daya UPS dan tunggu hingga UPS masuk ke mode Low Battery. Jika konfigurasi sudah tepat, server akan secara otomatis mengeksekusi perintah shutdown yang telah di‑setup pada NUT (Network UPS Tools).
Selamat mencoba, semoga bermanfaat!