diff --git a/ESP8266_DHT11_FIREBASE/Wemos_RFID_Servo.ino b/ESP8266_DHT11_FIREBASE/Wemos_RFID_Servo.ino index 7713df1..af58869 100644 --- a/ESP8266_DHT11_FIREBASE/Wemos_RFID_Servo.ino +++ b/ESP8266_DHT11_FIREBASE/Wemos_RFID_Servo.ino @@ -135,3 +135,227 @@ void calibrateSensor() { Serial.println("Kalibrasi selesai!"); } + + +v2 +#include +#include +#include +#include +#include + +// WiFi Credentials +#define WIFI_SSID "KONTRAKAN OYI" +#define WIFI_PASSWORD "warkopoyi" + +// Firebase Configuration +#define FIREBASE_HOST "smartcab-8bb42-default-rtdb.firebaseio.com" +#define FIREBASE_AUTH "kiiQoFa6Ckp7bL2oRLbaTSGQth9z0PgN64Ybv8dw" + +FirebaseConfig config; +FirebaseAuth auth; +FirebaseData firebaseData; + +// RFID Configuration +#define SS_PIN D4 // Pin SDA RFID +#define RST_PIN D3 // Pin RST RFID +MFRC522 mfrc522(SS_PIN, RST_PIN); + +// Servo Configuration +Servo myServo; +#define SERVO_PIN D2 // Pin servo + +// **ID kartu yang diizinkan** +String kartuTerdaftar = "53ed8434"; +bool servoTerbuka = false; // Status awal servo (tertutup) + +void setup() { + Serial.begin(115200); + + // Koneksi ke WiFi + WiFi.begin(WIFI_SSID, WIFI_PASSWORD); + Serial.print("Menghubungkan ke WiFi"); + while (WiFi.status() != WL_CONNECTED) { + Serial.print("."); + delay(500); + } + Serial.println("\nWiFi Terhubung!"); + + // Konfigurasi Firebase + config.host = FIREBASE_HOST; + config.signer.tokens.legacy_token = FIREBASE_AUTH; + Firebase.begin(&config, &auth); + Firebase.reconnectWiFi(true); + + // Inisialisasi RFID + SPI.begin(); + mfrc522.PCD_Init(); + + // Inisialisasi Servo + myServo.attach(SERVO_PIN); + myServo.write(0); // Posisi awal servo terkunci +} + +void loop() { + // Cek apakah kartu RFID terdeteksi + if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) { + Serial.println("Kartu Terdeteksi!"); + + // Membaca UID kartu + String rfidUID = ""; + for (byte i = 0; i < mfrc522.uid.size; i++) { + rfidUID += String(mfrc522.uid.uidByte[i], HEX); + } + + Serial.print("UID: "); + Serial.println(rfidUID); + + // **Cek apakah kartu terdaftar** + if (rfidUID == kartuTerdaftar) { + Serial.println("Kartu Terdaftar!"); + + if (!servoTerbuka) { + Serial.println("Membuka kunci..."); + myServo.write(90); + servoTerbuka = true; + Firebase.setString(firebaseData, "/smartcab/servo_status", "Terbuka"); + } else { + Serial.println("Mengunci kunci..."); + myServo.write(0); + servoTerbuka = false; + Firebase.setString(firebaseData, "/smartcab/servo_status", "Terkunci"); + } + + // Kirim status ke Firebase + Firebase.setString(firebaseData, "/smartcab/last_access", "Terdaftar"); + Firebase.setString(firebaseData, "/smartcab/status_device", rfidUID); + } + else { + Serial.println("Kartu Tidak Terdaftar! Mengunci servo..."); + + // Paksa servo terkunci jika kartu tidak dikenal + myServo.write(0); + servoTerbuka = false; + Firebase.setString(firebaseData, "/smartcab/servo_status", "Terkunci"); + Firebase.setString(firebaseData, "/smartcab/last_access", "Tidak Terdaftar"); + Firebase.setString(firebaseData, "/smartcab/status_device", rfidUID); + } + + mfrc522.PICC_HaltA(); // Hentikan komunikasi RFID + mfrc522.PCD_StopCrypto1(); + } + + delay(500); +} + + +v3 +#include +#include +#include +#include +#include + +// WiFi Credentials +#define WIFI_SSID "KONTRAKAN OYI" +#define WIFI_PASSWORD "warkopoyi" + +// Firebase Configuration +#define FIREBASE_HOST "smartcab-8bb42-default-rtdb.firebaseio.com" +#define FIREBASE_AUTH "kiiQoFa6Ckp7bL2oRLbaTSGQth9z0PgN64Ybv8dw" + +FirebaseConfig config; +FirebaseAuth auth; +FirebaseData firebaseData; + +// RFID Configuration +#define SS_PIN D4 // Pin SDA RFID +#define RST_PIN D3 // Pin RST RFID +MFRC522 mfrc522(SS_PIN, RST_PIN); + +// Servo Configuration +Servo myServo; +#define SERVO_PIN D2 // Pin servo + +// **ID kartu yang diizinkan** +String kartuTerdaftar = "53ed8434"; +bool servoTerbuka = false; // Status awal servo (tertutup) + +void setup() { + Serial.begin(115200); + + // Koneksi ke WiFi + WiFi.begin(WIFI_SSID, WIFI_PASSWORD); + Serial.print("Menghubungkan ke WiFi"); + while (WiFi.status() != WL_CONNECTED) { + Serial.print("."); + delay(500); + } + Serial.println("\nWiFi Terhubung!"); + + // Konfigurasi Firebase + config.host = FIREBASE_HOST; + config.signer.tokens.legacy_token = FIREBASE_AUTH; + Firebase.begin(&config, &auth); + Firebase.reconnectWiFi(true); + + // Inisialisasi RFID + SPI.begin(); + mfrc522.PCD_Init(); + + // Inisialisasi Servo + myServo.attach(SERVO_PIN, 500, 2500); // Min pulse width = 500µs, Max pulse width = 2500µs + myServo.write(0); +} + +void loop() { + // Cek apakah kartu RFID terdeteksi + if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) { + Serial.println("Kartu Terdeteksi!"); + + // Membaca UID kartu + String rfidUID = ""; + for (byte i = 0; i < mfrc522.uid.size; i++) { + rfidUID += String(mfrc522.uid.uidByte[i], HEX); + } + + Serial.print("UID: "); + Serial.println(rfidUID); + + // **Cek apakah kartu terdaftar** + if (rfidUID == kartuTerdaftar) { + Serial.println("Kartu Terdaftar!"); + + if (!servoTerbuka) { + Serial.println("Membuka kunci..."); + myServo.write(180); + servoTerbuka = true; + Firebase.setString(firebaseData, "/smartcab/servo_status", "Terbuka"); + } else { + Serial.println("Mengunci kunci..."); + myServo.write(0); + servoTerbuka = false; + Firebase.setString(firebaseData, "/smartcab/servo_status", "Terkunci"); + } + + // Kirim status ke Firebase + Firebase.setString(firebaseData, "/smartcab/last_access", "Terdaftar"); + Firebase.setString(firebaseData, "/smartcab/status_device", rfidUID); + } + else { + Serial.println("Kartu Tidak Terdaftar! Mengunci servo..."); + + // Paksa servo terkunci jika kartu tidak dikenal + myServo.write(0); + servoTerbuka = false; + Firebase.setString(firebaseData, "/smartcab/servo_status", "Terkunci"); + Firebase.setString(firebaseData, "/smartcab/last_access", "Tidak Terdaftar"); + Firebase.setString(firebaseData, "/smartcab/status_device", rfidUID); + } + + mfrc522.PICC_HaltA(); // Hentikan komunikasi RFID + mfrc522.PCD_StopCrypto1(); + } + + delay(500); +} diff --git a/app/Console/Commands/FetchFirebaseData.php b/app/Console/Commands/FetchFirebaseData.php index 66bb9de..5eca23c 100644 --- a/app/Console/Commands/FetchFirebaseData.php +++ b/app/Console/Commands/FetchFirebaseData.php @@ -2,11 +2,11 @@ namespace App\Console\Commands; -use Google\Cloud\Firestore\Admin\V1\CreateDatabaseRequest; -use GuzzleHttp\Promise\Create; use Illuminate\Console\Command; use Kreait\Firebase\Factory; use Illuminate\Support\Facades\Storage; +use Illuminate\Support\Str; + class FetchFirebaseData extends Command { protected $signature = 'firebase:fetch'; @@ -17,78 +17,74 @@ public function handle() try { // Inisialisasi Firebase $firebase = (new Factory) - ->withServiceAccount(storage_path('app/smartcab-8bb42-firebase-adminsdk-fbsvc-de33a8e45b.json')) - ->withDatabaseUri(env('FIREBASE_DATABASE_URL')) - ->createDatabase(); - // Ambil data terbaru dari Firebase - $securityData = $firebase->getReference('security')->getValue() ?? []; - $smartcabData = $firebase->getReference('smartcab')->getValue() ?? []; - $dht11Data = $firebase->getReference('dht11')->getValue() ?? []; + ->withServiceAccount(storage_path('app/smartcab-8bb42-firebase-adminsdk-fbsvc-de33a8e45b.json')) + ->withDatabaseUri(env('FIREBASE_DATABASE_URL')) + ->createDatabase(); - // Baca history data yang sudah ada - $historyData = []; - if (Storage::exists('reports.json')) { - $historyData = json_decode(Storage::get('reports.json'), true) ?: []; - // Pastikan $historyData adalah array - if (!is_array($historyData)) { - $historyData = []; - } - } + // Ambil data terbaru dari Firebase + $securityData = $firebase->getReference('security')->getValue() ?? []; + $smartcabData = $firebase->getReference('smartcab')->getValue() ?? []; + $dht11Data = $firebase->getReference('dht11')->getValue() ?? []; - // Ambil data terakhir jika ada - $lastEntry = !empty($historyData) ? end($historyData) : null; + // Baca history data yang sudah ada + $historyData = []; + if (Storage::exists('reports.json')) { + $historyData = json_decode(Storage::get('reports.json'), true) ?: []; + if (!is_array($historyData)) { + $historyData = []; + } + } - // Cek apakah ada perubahan pada security atau smartcab - $hasChanges = false; - if ($lastEntry === null) { - // Jika belum ada data sama sekali, simpan data pertama - $hasChanges = true; - } else { - // Bandingkan security dan smartcab dengan data terakhir - $securityChanged = $this->hasDataChanged($lastEntry['security'] ?? [], $securityData); - $smartcabChanged = $this->hasDataChanged($lastEntry['smartcab'] ?? [], $smartcabData); - $hasChanges = $securityChanged || $smartcabChanged; - } + // Ambil data terakhir jika ada + $lastEntry = !empty($historyData) ? end($historyData) : null; - // Hanya simpan jika ada perubahan - if ($hasChanges) { - $newData = [ - 'timestamp' => now()->toIso8601String(), - 'security' => $securityData, - 'smartcab' => $smartcabData - ]; + // Cek apakah ada perubahan pada security atau smartcab + $hasChanges = false; + if ($lastEntry === null) { + $hasChanges = true; + } else { + $securityChanged = $this->hasDataChanged($lastEntry['security'] ?? [], $securityData); + $smartcabChanged = $this->hasDataChanged($lastEntry['smartcab'] ?? [], $smartcabData); + $hasChanges = $securityChanged || $smartcabChanged; + } - if (!empty($dht11Data)) { - $newData['dht11'] = $dht11Data; - } + // Hanya simpan jika ada perubahan + if ($hasChanges) { + $newData = [ + 'id' => Str::uuid()->toString(), // Generate ID unik + 'timestamp' => now()->toIso8601String(), + 'security' => $securityData, + 'smartcab' => $smartcabData + ]; - $historyData[] = $newData; - Storage::put('reports.json', json_encode($historyData, JSON_PRETTY_PRINT)); - $this->info('Data baru tersimpan karena ada perubahan pada security atau smartcab'); - - // Debug info - if (isset($securityChanged) && $securityChanged) { - $this->info('Perubahan terdeteksi pada security'); - } - if (isset($smartcabChanged) && $smartcabChanged) { - $this->info('Perubahan terdeteksi pada smartcab'); - } - } else { - $this->info('Tidak ada perubahan pada security atau smartcab, data tidak disimpan'); - } + if (!empty($dht11Data)) { + $newData['dht11'] = $dht11Data; + } -} catch (\Exception $e) { - $this->error('Error: ' . $e->getMessage()); -} -} + $historyData[] = $newData; + Storage::put('reports.json', json_encode($historyData, JSON_PRETTY_PRINT)); + $this->info('Data baru tersimpan dengan ID: ' . $newData['id']); -private function hasDataChanged($oldData, $newData) -{ -$flags = defined('JSON_SORT_KEYS') ? JSON_SORT_KEYS : 0; -$oldJson = json_encode($oldData, $flags); -$newJson = json_encode($newData, $flags); - + if (isset($securityChanged) && $securityChanged) { + $this->info('Perubahan terdeteksi pada security'); + } + if (isset($smartcabChanged) && $smartcabChanged) { + $this->info('Perubahan terdeteksi pada smartcab'); + } + } else { + $this->info('Tidak ada perubahan pada security atau smartcab, data tidak disimpan'); + } -return $oldJson !== $newJson; -} + } catch (\Exception $e) { + $this->error('Error: ' . $e->getMessage()); + } + } + + private function hasDataChanged($oldData, $newData) + { + $oldJson = json_encode($oldData); + $newJson = json_encode($newData); + + return $oldJson !== $newJson; + } } \ No newline at end of file diff --git a/resources/views/reports.blade.php b/resources/views/reports.blade.php index 36e226f..77ccb08 100644 --- a/resources/views/reports.blade.php +++ b/resources/views/reports.blade.php @@ -7,7 +7,6 @@