56 lines
1.5 KiB
Dart
56 lines
1.5 KiB
Dart
import 'dart:convert';
|
|
import 'package:get/get.dart';
|
|
import 'package:http/http.dart' as http;
|
|
import 'package:firebase_database/firebase_database.dart';
|
|
import '../../../routes/app_pages.dart';
|
|
|
|
class HomeController extends GetxController {
|
|
var temperature = ''.obs;
|
|
var description = ''.obs;
|
|
var relay = false.obs;
|
|
var buzzer = false.obs;
|
|
|
|
final dbRef = FirebaseDatabase.instance.ref('kontrol_alat');
|
|
|
|
final apiKey = '3ab888af4e26ebe53ffb6257633a460e';
|
|
|
|
@override
|
|
void onInit() {
|
|
fetchWeather();
|
|
super.onInit();
|
|
listenRealtime();
|
|
}
|
|
|
|
void fetchWeather() async {
|
|
final url = Uri.parse('https://api.openweathermap.org/data/2.5/forecast?q=Jember&appid=$apiKey&units=metric');
|
|
final response = await http.get(url);
|
|
|
|
if (response.statusCode == 200) {
|
|
final data = json.decode(response.body);
|
|
temperature.value = '${data['list'][0]['main']['temp'].round()}°';
|
|
description.value = data['list'][0]['weather'][0]['description'];
|
|
}
|
|
}
|
|
void listenRealtime() {
|
|
dbRef.onValue.listen((event) {
|
|
final data = event.snapshot.value as Map;
|
|
relay.value = data['relay'] ?? false;
|
|
buzzer.value = data['buzzer'] ?? false;
|
|
});
|
|
}
|
|
|
|
void toggleRelay() {
|
|
dbRef.update({'relay': !relay.value});
|
|
}
|
|
|
|
void toggleBuzzer() {
|
|
dbRef.update({'buzzer': !buzzer.value});
|
|
}
|
|
|
|
void keNotifikasi() => Get.toNamed(Routes.NOTIFIKASI);
|
|
|
|
void keHistory() => Get.toNamed(Routes.HISTORY);
|
|
|
|
void keMaps() => Get.toNamed(Routes.MAPS);
|
|
}
|