117 lines
2.9 KiB
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';
|
|
}
|
|
}
|
|
}
|