TKK_Nisa_E32221364/lib/services/realtime_database_service.dart

117 lines
2.9 KiB
Dart

import 'package:firebase_database/firebase_database.dart';
import 'package:flutter/foundation.dart';
import '../models/sensor_data_model.dart';
class RealtimeDatabaseService {
final FirebaseDatabase _database = FirebaseDatabase.instance;
// Get database reference
DatabaseReference get _sensorRef => _database.ref().child('sensor_data');
// Stream untuk mendapatkan data sensor secara real-time
Stream<SensorData> get sensorDataStream {
return _sensorRef.onValue.map((event) {
if (event.snapshot.value != null) {
final data = Map<String, dynamic>.from(event.snapshot.value as Map);
return SensorData.fromJson(data);
}
return SensorData(
apiTerdeteksi: false,
buzzerActive: false,
exhaustActive: false,
gasValue: 0,
kelembapan: 0,
pumpActive: false,
suhu: 0.0,
);
});
}
// Get data sensor satu kali
Future<SensorData> getSensorData() async {
try {
final snapshot = await _sensorRef.get();
if (snapshot.value != null) {
final data = Map<String, dynamic>.from(snapshot.value as Map);
return SensorData.fromJson(data);
}
return SensorData(
apiTerdeteksi: false,
buzzerActive: false,
exhaustActive: false,
gasValue: 0,
kelembapan: 0,
pumpActive: false,
suhu: 0.0,
);
} catch (e) {
if (kDebugMode) {
print('Error getting sensor data: $e');
}
throw 'Gagal mengambil data sensor';
}
}
// Update kontrol sistem (buzzer, exhaust, pump)
Future<void> updateControl({
bool? buzzerActive,
bool? exhaustActive,
bool? pumpActive,
}) async {
try {
Map<String, dynamic> updates = {};
if (buzzerActive != null) {
updates['buzzer_active'] = buzzerActive;
}
if (exhaustActive != null) {
updates['exhaust_active'] = exhaustActive;
}
if (pumpActive != null) {
updates['pump_active'] = pumpActive;
}
if (updates.isNotEmpty) {
await _sensorRef.update(updates);
}
} catch (e) {
if (kDebugMode) {
print('Error updating control: $e');
}
throw 'Gagal mengupdate kontrol sistem';
}
}
// Reset all controls
Future<void> resetAllControls() async {
try {
await _sensorRef.update({
'buzzer_active': false,
'exhaust_active': false,
'pump_active': false,
});
} catch (e) {
if (kDebugMode) {
print('Error resetting controls: $e');
}
throw 'Gagal mereset kontrol sistem';
}
}
// Activate emergency mode
Future<void> activateEmergencyMode() async {
try {
await _sensorRef.update({
'buzzer_active': true,
'exhaust_active': true,
'pump_active': true,
});
} catch (e) {
if (kDebugMode) {
print('Error activating emergency mode: $e');
}
throw 'Gagal mengaktifkan mode darurat';
}
}
}