latest()->first(); // Kembalikan respons JSON dengan data suhu dan updated_at return response()->json([ 'suhu' => $nilaisensor->suhu ?? 0, 'updated_at' => $nilaisensor->updated_at ?? null ]); } public function bacakelembabansatu() { // Baca data kelembaban terbaru dari database $nilaisensor = MSensor::orderBy('updated_at', 'desc')->latest()->first(); // Kembalikan respons JSON dengan data kelembaban dan updated_at return response()->json([ 'kelembaban' => $nilaisensor->kelembaban ?? 0, 'updated_at' => $nilaisensor->updated_at ?? null ]); } public function simpansensorsatu(Request $request) { // Simpan data suhu dan kelembaban yang diterima dari permintaan MSensor::create([ 'suhu' => $request->nilaisuhu, 'kelembaban' => $request->nilaikelembaban ]); return response()->json(['message' => 'Data sensor berhasil disimpan.']); } public function bacasuhudua() { // Baca data suhu terbaru dari database $nilaisensor = MSensordua::orderBy('updated_at', 'desc')->latest()->first(); // Kembalikan respons JSON dengan data suhu dan updated_at return response()->json([ 'suhu2' => $nilaisensor->suhu ?? 0, 'updated_at' => $nilaisensor->updated_at ?? null ]); } public function bacakelembabandua() { // Baca data kelembaban terbaru dari database $nilaisensor = MSensordua::orderBy('updated_at', 'desc')->latest()->first(); // Kembalikan respons JSON dengan data kelembaban dan updated_at return response()->json([ 'kelembaban2' => $nilaisensor->kelembaban ?? 0, 'updated_at' => $nilaisensor->updated_at ?? null ]); } public function simpansensordua(Request $request) { // Simpan data suhu dan kelembaban yang diterima dari permintaan MSensordua::create([ 'suhu' => $request->nilaisuhu, 'kelembaban' => $request->nilaikelembaban ]); return response()->json(['message' => 'Data sensor berhasil disimpan.']); } public function bacasuhutiga() { // Baca data suhu terbaru dari database $nilaisensor =MSensortiga::orderBy('updated_at', 'desc')->latest()->first(); // Kembalikan respons JSON dengan data suhu dan updated_at return response()->json([ 'suhu3' => $nilaisensor->suhu ?? 0, 'updated_at' => $nilaisensor->updated_at ?? null ]); } public function bacakelembabantiga() { // Baca data kelembaban terbaru dari database $nilaisensor =MSensortiga::orderBy('updated_at', 'desc')->latest()->first(); // Kembalikan respons JSON dengan data kelembaban dan updated_at return response()->json([ 'kelembaban3' => $nilaisensor->kelembaban ?? 0, 'updated_at' => $nilaisensor->updated_at ?? null ]); } public function simpansensortiga(Request $request) { // Simpan data suhu dan kelembaban yang diterima dari permintaan MSensortiga::create([ 'suhu' => $request->nilaisuhu, 'kelembaban' => $request->nilaikelembaban ]); return response()->json(['message' => 'Data sensor berhasil disimpan.']); } public function cekdata() { // Ambil data terbaru dari tabel sensor (sisi barat) $latestDataSatu = MSensor::latest()->first(); // Periksa apakah nilai suhu melebihi 32 atau nilai kelembaban melebihi 70, atau jika suhu kurang dari 25 dan kelembaban kurang dari 50 if ($latestDataSatu->suhu >= 32 || $latestDataSatu->kelembaban >= 70 || $latestDataSatu->suhu < 25 || $latestDataSatu->kelembaban < 50) { // Periksa waktu terakhir notifikasi dikirim $lastNotificationTime = Cache::get('last_notification_time'); // Jika waktu terakhir notifikasi belum diset atau sudah lebih dari 1 menit if (!$lastNotificationTime || now()->diffInMinutes($lastNotificationTime) >= 1) { // Panggil metode untuk mengirim notifikasi WhatsApp $this->kirimNotifikasiWhatsApp($latestDataSatu->suhu, $latestDataSatu->kelembaban, 'Sisi Depan'); // Simpan waktu terakhir notifikasi dikirim Cache::put('last_notification_time', now()); } } } public function cekdatadua() { // Ambil data terbaru dari tabel sensor (sisi utara) $latestDataDua = MSensordua::latest()->first(); // Periksa apakah nilai suhu melebihi 32 atau nilai kelembaban melebihi 70, atau jika suhu kurang dari 25 dan kelembaban kurang dari 50 if ($latestDataDua->suhu >= 32 || $latestDataDua->kelembaban >= 70 || $latestDataDua->suhu < 25 || $latestDataDua->kelembaban < 50) { // Periksa waktu terakhir notifikasi dikirim $lastNotificationTime = Cache::get('last_notification_time_dua'); // Jika waktu terakhir notifikasi belum diset atau sudah lebih dari 1 menit if (!$lastNotificationTime || now()->diffInMinutes($lastNotificationTime) >= 1) { // Panggil metode untuk mengirim notifikasi WhatsApp $this->kirimNotifikasiWhatsApp($latestDataDua->suhu, $latestDataDua->kelembaban, 'Sisi Belakang'); // Simpan waktu terakhir notifikasi dikirim Cache::put('last_notification_time_dua', now()); } } } private function kirimNotifikasiWhatsApp($suhu, $kelembaban, $sisi) { // Konfigurasi API Twilio $sid = "AC998e7144f7a4bf43b06e5ffc94b72ae2"; $token = "d2f0e597a1075b667fb7ea86c6646151"; // Inisialisasi Client Twilio $twilio = new Client($sid, $token); // Nomor pengirim dan penerima $from = "whatsapp:+14155238886"; $to = "whatsapp:+6282329551945"; // Isi pesan $body = "Kondisi Lingkungan Gudang Sedang Tidak Optimal dari {$sisi}. \nSuhu: {$suhu}°C \nKelembaban: {$kelembaban}%"; // Kirim pesan menggunakan API Twilio try { $message = $twilio->messages->create($to, [ "from" => $from, "body" => $body ]); return response()->json(['message' => 'Whatsapp message sent successfully', 'sid' => $message->sid]); } catch (\Exception $e) { return response()->json(['error' => $e->getMessage()], 500); } } public function riwayatData(Request $request) { $region = $request->input('region', 'Depan'); // Default to 'Barat' if no region is selected $start_date = $request->input('start_date'); $end_date = $request->input('end_date'); // Determine which model to use based on the region switch ($region) { case 'Depan': $model = new MSensor(); break; case 'Belakang': $model = new MSensordua(); break; } // Build the query $query = $model::selectRaw(' DATE(created_at) as tanggal, AVG(suhu) as rata_suhu, AVG(kelembaban) as rata_kelembaban, MAX(suhu) as tertinggi_suhu, MAX(kelembaban) as tertinggi_kelembaban, MIN(suhu) as terendah_suhu, MIN(kelembaban) as terendah_kelembaban ') ->whereNotNull('created_at'); // Apply date filter if provided if ($start_date && $end_date) { $query->whereDate('created_at', '>=', $start_date) ->whereDate('created_at', '<=', $end_date); } // Group and order the results by date $riwayatData = $query->groupByRaw('DATE(created_at)') ->orderByRaw('DATE(created_at) DESC') ->get(); // Fetch the corresponding timestamps for each data point foreach ($riwayatData as $data) { $data->waktu_tertinggi_suhu = $model::whereDate('created_at', $data->tanggal) ->where('suhu', $data->tertinggi_suhu) ->value('created_at'); $data->waktu_tertinggi_kelembaban = $model::whereDate('created_at', $data->tanggal) ->where('kelembaban', $data->tertinggi_kelembaban) ->value('created_at'); $data->waktu_terendah_suhu = $model::whereDate('created_at', $data->tanggal) ->where('suhu', $data->terendah_suhu) ->value('created_at'); $data->waktu_terendah_kelembaban = $model::whereDate('created_at', $data->tanggal) ->where('kelembaban', $data->terendah_kelembaban) ->value('created_at'); } // Return view and pass the data and selected region return view('riwayat_data', compact('riwayatData', 'region', 'start_date', 'end_date')); } public function riwayatDataDua(Request $request) { $region = $request->input('region', 'Depan'); $date = $request->input('date'); switch ($region) { case 'Depan': $model = new MSensor(); break; case 'Belakang': $model = new MSensordua(); break; } $data = $model::select('created_at', 'suhu', 'kelembaban') ->whereDate('created_at', $date) ->orderBy('created_at') ->get(); $filteredData = collect(); // Pastikan ini adalah koleksi if ($data->isNotEmpty()) { $start = strtotime($data->first()->created_at); $end = strtotime($data->last()->created_at); $interval = 5 * 60; $nextTime = $start + $interval; while ($start <= $end) { $nearest = $data->firstWhere('created_at', '>=', date('Y-m-d H:i:s', $start)); if ($nearest) { $filteredData->push($nearest); } $start = $nextTime; $nextTime += $interval; } } return view('riwayat_datadua', compact('filteredData', 'region', 'date')); } }