7.7 KiB
7.7 KiB
🔔 Smart Rack Vibration Monitoring API
Backend API untuk menerima data sensor getar dan mengirim notifikasi otomatis jika getaran tidak wajar.
📡 API Endpoints
1. Kirim Data Sensor Getar
POST /api/vibration/data
Content-Type: application/json
{
"device_id": 1,
"x_axis": 0.5,
"y_axis": 1.2,
"z_axis": 0.8,
"threshold": 2.0,
"metadata": {
"sensor_type": "accelerometer",
"firmware_version": "1.2.3"
}
}
Response Success:
{
"success": true,
"message": "Vibration data received successfully",
"data": {
"id": 123,
"magnitude": 1.56,
"status": "normal",
"is_abnormal": false,
"alert_sent": false
}
}
Response Abnormal (Alert Triggered):
{
"success": true,
"message": "Vibration data received successfully",
"data": {
"id": 124,
"magnitude": 3.45,
"status": "critical",
"is_abnormal": true,
"alert_sent": true
}
}
2. Ambil Data Vibration Terbaru
GET /api/vibration/readings?device_id=1&limit=50&status=critical
Response:
{
"success": true,
"data": [
{
"id": 124,
"device_id": 1,
"x_axis": 2.1,
"y_axis": 2.8,
"z_axis": 1.9,
"magnitude": 3.45,
"is_abnormal": true,
"threshold": 2.0,
"status": "critical",
"recorded_at": "2026-04-28T10:30:00Z",
"device": {
"id": 1,
"name": "Rak Server A",
"location": "Ruang Server"
}
}
],
"count": 1
}
3. Ambil Statistik Getaran
GET /api/vibration/statistics?device_id=1&hours=24
Response:
{
"success": true,
"data": {
"total_readings": 150,
"normal_count": 120,
"warning_count": 25,
"critical_count": 5,
"abnormal_percentage": 20.0,
"avg_magnitude": 1.85,
"max_magnitude": 4.2,
"latest_reading": {
"id": 124,
"magnitude": 3.45,
"status": "critical",
"recorded_at": "2026-04-28T10:30:00Z"
}
},
"period_hours": 24
}
4. Test Notifikasi
POST /api/test-notification
🚨 Sistem Alert & Notifikasi
Status Getaran:
- normal: magnitude ≤ threshold
- warning: threshold < magnitude ≤ threshold × 1.5
- critical: magnitude > threshold × 1.5
Jenis Notifikasi:
- 📧 Email - Ke admin sistem
- 📱 SMS - Untuk alert critical
- 🔔 Push Notification - Real-time ke mobile app
- 🔗 Webhook - Ke sistem monitoring eksternal
- 📝 Log - Audit trail lengkap
Contoh Notifikasi:
🚨 ALERT: Getaran abnormal pada Rak Server A
Magnitude: 3.45 (Normal: <2.0)
Status: critical
Lokasi: Ruang Server
Waktu: 2026-04-28 10:30:00
Sumbu: X=2.1, Y=2.8, Z=1.9
🔧 Konfigurasi Threshold
Default Threshold: 2.0
Custom Threshold per Device:
{
"device_id": 1,
"threshold": 1.5, // Lebih sensitif
"x_axis": 0.8,
"y_axis": 1.2,
"z_axis": 0.9
}
Threshold Recommendations:
- Server Rack: 1.5 - 2.0 (sensitif)
- Storage Rack: 2.0 - 3.0 (normal)
- Network Equipment: 1.0 - 1.5 (sangat sensitif)
📊 Database Schema
vibration_readings table:
- id (bigint, primary key)
- device_id (foreign key to devices)
- x_axis (float) - Getaran sumbu X
- y_axis (float) - Getaran sumbu Y
- z_axis (float) - Getaran sumbu Z
- magnitude (float) - Total magnitude
- is_abnormal (boolean) - Status abnormal
- threshold (float) - Batas normal
- status (enum: normal, warning, critical)
- metadata (json) - Data tambahan
- recorded_at (timestamp) - Waktu pembacaan
- created_at, updated_at
🔌 Integrasi IoT Device
Arduino/ESP32 Example:
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
void sendVibrationData(float x, float y, float z) {
HTTPClient http;
http.begin("http://your-server.com/api/vibration/data");
http.addHeader("Content-Type", "application/json");
StaticJsonDocument<200> doc;
doc["device_id"] = 1;
doc["x_axis"] = x;
doc["y_axis"] = y;
doc["z_axis"] = z;
doc["threshold"] = 2.0;
String jsonString;
serializeJson(doc, jsonString);
int httpResponseCode = http.POST(jsonString);
if (httpResponseCode > 0) {
String response = http.getString();
Serial.println("Response: " + response);
}
http.end();
}
Python Example:
import requests
import json
from datetime import datetime
def send_vibration_data(device_id, x, y, z, threshold=2.0):
url = "http://your-server.com/api/vibration/data"
data = {
"device_id": device_id,
"x_axis": x,
"y_axis": y,
"z_axis": z,
"threshold": threshold,
"metadata": {
"timestamp": datetime.now().isoformat(),
"sensor_type": "MPU6050"
}
}
response = requests.post(url, json=data)
return response.json()
# Contoh penggunaan
result = send_vibration_data(1, 0.5, 1.2, 0.8)
print(f"Status: {result['data']['status']}")
print(f"Alert sent: {result['data']['alert_sent']}")
🧪 Testing API
Test dengan cURL:
# Test normal vibration
curl -X POST http://localhost:8000/api/vibration/data \
-H "Content-Type: application/json" \
-d '{
"device_id": 1,
"x_axis": 0.5,
"y_axis": 0.8,
"z_axis": 0.6,
"threshold": 2.0
}'
# Test abnormal vibration (akan trigger alert)
curl -X POST http://localhost:8000/api/vibration/data \
-H "Content-Type: application/json" \
-d '{
"device_id": 1,
"x_axis": 2.5,
"y_axis": 3.2,
"z_axis": 2.8,
"threshold": 2.0
}'
# Get statistics
curl "http://localhost:8000/api/vibration/statistics?device_id=1&hours=24"
# Test notification
curl -X POST http://localhost:8000/api/test-notification
📈 Monitoring Dashboard
Real-time Metrics:
- Current vibration level
- Alert count (24h)
- Device status
- Threshold violations
- Historical trends
Alert Management:
- View active alerts
- Mark alerts as resolved
- Configure notification settings
- Export alert reports
🔒 Security & Best Practices
API Security:
- Rate limiting per device
- API key authentication
- Input validation & sanitization
- HTTPS only in production
Data Retention:
- Keep raw data: 30 days
- Keep aggregated data: 1 year
- Auto-cleanup old records
Performance:
- Batch insert for high-frequency data
- Database indexing on device_id + timestamp
- Caching for statistics queries
🚀 Deployment
Environment Variables:
# Notification settings
VIBRATION_WEBHOOK_URL=https://your-webhook.com/alerts
NOTIFICATION_EMAIL=admin@yourcompany.com
SMS_API_KEY=your-sms-api-key
# Alert thresholds
DEFAULT_VIBRATION_THRESHOLD=2.0
CRITICAL_MULTIPLIER=1.5
Cron Jobs:
# Cleanup old data (daily)
0 2 * * * php artisan vibration:cleanup
# Generate daily reports
0 8 * * * php artisan vibration:daily-report
📞 Support
Jika ada pertanyaan atau masalah:
- Check log files:
storage/logs/laravel.log - Verify database connection
- Test API endpoints dengan Postman
- Check notification service logs
Backend Smart Rack Vibration Monitoring siap digunakan! 🎉
Sistem akan otomatis:
- ✅ Menerima data sensor getar
- ✅ Menghitung magnitude getaran
- ✅ Mendeteksi getaran abnormal
- ✅ Mengirim notifikasi real-time
- ✅ Menyimpan data untuk analisis
- ✅ Menyediakan statistik dan laporan