Smart Rack Server Monitoring System

Panduan lengkap implementasi sistem pemantauan kondisi fisik server rack berbasis IoT untuk laboratorium TKJ SMK.

Server Rack Monitoring

Gambaran Umum

Sistem ini memantau kondisi fisik server rack secara real-time menggunakan sensor suhu, kelembaban, asap, dan pintu. Ketika terjadi anomali seperti suhu berlebih, kebakaran, atau akses tidak sah, sistem akan memberikan peringatan melalui:

Cocok untuk pembelajaran mata pelajaran: IoT, Sistem Embedded, Keamanan Fisik Infrastruktur TI, dan Pemrograman Python.

Kebutuhan Perangkat Keras

Kebutuhan Perangkat Lunak

Langkah Instalasi

  1. Siapkan Raspberry Pi: Install Raspberry Pi OS, aktifkan SSH dan GPIO.
  2. Instal dependensi Python:
    sudo apt update
    sudo apt install python3-pip
    pip3 install Adafruit_DHT RPi.GPIO requests
  3. Sambungkan komponen elektronik:
    • DHT22 → GPIO 4
    • MQ-2 → GPIO 17 (analog via MCP3008 opsional, atau gunakan digital out)
    • Reed switch → GPIO 27
    • Kipas → GPIO 22 (via transistor)
    • Buzzer → GPIO 23
    • LED hijau → GPIO 5, LED merah → GPIO 6
  4. Buat bot Telegram: Gunakan BotFather, simpan token dan chat ID.
  5. Jalankan skrip utama:
    python3 rack_monitor.py

Kode Program Lengkap (rack_monitor.py)

import RPi.GPIO as GPIO
import time
import requests
import Adafruit_DHT

# Konfigurasi GPIO
DHT_PIN = 4
MQ2_PIN = 17
DOOR_PIN = 27
FAN_PIN = 22
BUZZER_PIN = 23
LED_GREEN = 5
LED_RED = 6

# Telegram
BOT_TOKEN = 'ISI_DENGAN_TOKEN_BOT_ANDA'
CHAT_ID = 'ISI_DENGAN_CHAT_ID_ANDA'

GPIO.setmode(GPIO.BCM)
GPIO.setup([FAN_PIN, BUZZER_PIN, LED_GREEN, LED_RED], GPIO.OUT)
GPIO.setup([MQ2_PIN, DOOR_PIN], GPIO.IN)

# Matikan semua output awal
GPIO.output([FAN_PIN, BUZZER_PIN, LED_GREEN, LED_RED], GPIO.LOW)

def send_telegram(msg):
    url = f'https://api.telegram.org/bot{BOT_TOKEN}/sendMessage'
    try:
        requests.post(url, data={'chat_id': CHAT_ID, 'text': msg})
    except:
        pass

def read_dht():
    humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, DHT_PIN)
    return temperature, humidity

def main():
    last_alert_time = 0
    while True:
        # Baca sensor
        temp, hum = read_dht()
        smoke = GPIO.input(MQ2_PIN)  # 1 = asap terdeteksi
        door_open = GPIO.input(DOOR_PIN)  # 1 = pintu terbuka (reed switch terbuka)

        alert_msg = []
        danger = False

        if temp is not None and temp > 35:
            alert_msg.append(f"Suhu tinggi: {temp:.1f}°C")
            danger = True
            GPIO.output(FAN_PIN, GPIO.HIGH)
        else:
            GPIO.output(FAN_PIN, GPIO.LOW)

        if smoke == 1:
            alert_msg.append("⚠️ Asap terdeteksi!")
            danger = True

        if door_open == 1:
            alert_msg.append("🚪 Pintu rack dibuka!")
            danger = True

        # Kontrol LED & buzzer
        if danger:
            GPIO.output(LED_GREEN, GPIO.LOW)
            GPIO.output(LED_RED, GPIO.HIGH)
            GPIO.output(BUZZER_PIN, GPIO.HIGH)
            time.sleep(0.2)
            GPIO.output(BUZZER_PIN, GPIO.LOW)
        else:
            GPIO.output(LED_GREEN, GPIO.HIGH)
            GPIO.output(LED_RED, GPIO.LOW)

        # Kirim notifikasi (max sekali per 60 detik)
        if danger and (time.time() - last_alert_time > 60):
            msg = "🚨 ALERT RACK SERVER:\n" + "\n".join(alert_msg)
            send_telegram(msg)
            last_alert_time = time.time()

        time.sleep(5)

if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        GPIO.cleanup()

Diagram Koneksi (Sederhana)

Raspberry Pi ──┬── DHT22 (VCC → 3.3V, GND → GND, DATA → GPIO4)
              ├── MQ-2 (VCC → 5V, GND → GND, DO → GPIO17)
              ├── Reed Switch (GPIO27 ──/ ── GND, dengan pull-up internal)
              ├── Kipas (GPIO22 → Basis transistor → Kipas → 5V)
              ├── Buzzer (GPIO23 → Buzzer → GND)
              ├── LED Hijau (GPIO5 → Resistor 220Ω → LED → GND)
              └── LED Merah (GPIO6 → Resistor 220Ω → LED → GND)
            

Pemecahan Masalah