# ๐Ÿ”” 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** ```http 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:** ```json { "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):** ```json { "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** ```http GET /api/vibration/readings?device_id=1&limit=50&status=critical ``` **Response:** ```json { "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** ```http GET /api/vibration/statistics?device_id=1&hours=24 ``` **Response:** ```json { "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** ```http 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:** 1. **๐Ÿ“ง Email** - Ke admin sistem 2. **๐Ÿ“ฑ SMS** - Untuk alert critical 3. **๐Ÿ”” Push Notification** - Real-time ke mobile app 4. **๐Ÿ”— Webhook** - Ke sistem monitoring eksternal 5. **๐Ÿ“ 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:** ```json { "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:** ```sql - 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:** ```cpp #include #include #include 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:** ```python 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:** ```bash # 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:** ```env # 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:** ```bash # 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: 1. Check log files: `storage/logs/laravel.log` 2. Verify database connection 3. Test API endpoints dengan Postman 4. 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