TIF_E41201726/FuzzyWater/app/Http/Controllers/FuzzyController.php

203 lines
8.8 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Services\FuzzyLogicService;
use App\Models\Calculation;
use Illuminate\Support\Facades\Http;
class FuzzyController extends Controller
{
public static function round_float2($value) {
return round((float)$value);
}
// Definisi fungsi round_float di dalam kelas FuzzyLogicService
public static function round_float($value) {
return number_format((float)$value, 2, '.', '');
}
public function index() {
// Ambil nilai tinggi air dari ThingSpeak
$api_key_thingspeak = 'ZU8Y7353QGPEE7HA'; // Ganti dengan API Key ThingSpeak Anda
$channel_id = '2462195'; // Ganti dengan ID saluran ThingSpeak Anda
$response = Http::get("https://api.thingspeak.com/channels/$channel_id/feeds.json", [
'api_key' => $api_key_thingspeak,
'results' => 1, // Ambil 1 hasil terbaru
]);
$tinggi_air_thingspeak = null;
if ($response->ok()) {
$data = $response->json();
if (!empty($data['feeds'])) {
$tinggi_air_thingspeak = $data['feeds'][0]['field5']; // Mengambil nilai tinggi air dari 'field5'
}
}
// Gunakan nilai tinggi air dari ThingSpeak sebagai input
if ($tinggi_air_thingspeak !== null) {
$tinggi_air = $tinggi_air_thingspeak;
}
// $tinggi_air = self::round_float($tinggi_air);
$tinggi_air = self::round_float2($tinggi_air);
return view('pages.fuzzy', [
'tinggi_air' => $tinggi_air, // Kirim nilai tinggi air ke view
]);
}
public function calculateFuzzyLogic(Request $request)
{
// Salin seluruh kode dari fungsi-fungsi dan logika yang ingin Anda pindahkan ke sini
// Pastikan untuk mengubah variabel-variabel yang digunakan dalam fungsi-fungsi Anda menjadi input dari request
// Contoh:
$usia_tanaman = $request->input('usia_tanaman');
$tinggi_air = $request->input('tinggi_air');
$luas_lahan = $request->input('luas_lahan');
$tinggi_air_rounded = self::round_float($tinggi_air);
// Fuzzifikasi
$usia_tanaman_membership = FuzzyLogicService::fuzzifikasi_usia_tanaman($usia_tanaman);
$tinggi_air_membership = FuzzyLogicService::fuzzifikasi_tinggi_air($tinggi_air_rounded);
$luas_lahan_membership = FuzzyLogicService::fuzzifikasi_luas_lahan($luas_lahan);
// Rule Evaluation
$rule_activations = FuzzyLogicService::rule_evaluation($usia_tanaman_membership, $tinggi_air_membership, $luas_lahan_membership);
// Aggregation
$aggregated_output = FuzzyLogicService::aggregation($rule_activations);
// Ambil nilai agregasi maksimum
$max_activations = $aggregated_output['max_activations'];
// Ambil aturan dengan nilai aktivasi maksimum
$max_activation_rules = $aggregated_output['max_activation_rules'];
$data = [
'rule_activations' => $rule_activations,
'max_activations' => $max_activations,
'aggregated_output' => $aggregated_output['aggregated_output'],
'max_activation_rules' => $max_activation_rules // Pastikan ini ditambahkan
];
$intersection_points = FuzzyLogicService::calculate_intersection_points($aggregated_output);
// Hitung integral
$integral_result = FuzzyLogicService::integrate($rule_activations);
$integral_result2 = FuzzyLogicService::integrate2($rule_activations);
$integral_result3 = FuzzyLogicService::integrate3($rule_activations);
$integral_result4 = FuzzyLogicService::integrate4($rule_activations);
$integral_result5 = FuzzyLogicService::integrate5($rule_activations);
$integral_result6 = FuzzyLogicService::integrate6($rule_activations);
// Menambahkan hasil integral ke dalam array data
$dataFiks['integral_result'] = $integral_result;
$dataFiks2['integral_result2'] = $integral_result2;
$dataFiks3['integral_result3'] = $integral_result3;
$dataFiks4['integral_result4'] = $integral_result4;
$dataFiks5['integral_result5'] = $integral_result5;
$dataFiks6['integral_result6'] = $integral_result6;
// Cara menggunakan display dan menampilkan hasilnya
// Hitung total M dan total A
$total_M = $dataFiks + $dataFiks2 + $dataFiks3;
$total_A = $dataFiks4 + $dataFiks5 + $dataFiks6;
$total_M_sum = array_sum($total_M);
$total_A_sum = array_sum($total_A);
// Check if $total_A_sum is not zero to avoid division by zero error
if ($total_A_sum != 0) {
// Calculate the final result
$result = $total_M_sum / $total_A_sum;
$result = self::round_float($result);
} else {
// Handle division by zero error
$result = "Division by zero error!";
}
// $max_activation_rules_json = json_encode($max_activation_rules);
// Simpan data ke database menggunakan model Calculation
$calculation = new Calculation();
$calculation->usia_tanaman = $usia_tanaman;
$calculation->tinggi_air = $tinggi_air;
$calculation->luas_lahan = $luas_lahan;
$calculation->usia_tanaman_muda = $usia_tanaman_membership['muda'];
$calculation->usia_tanaman_dewasa = $usia_tanaman_membership['dewasa'];
$calculation->usia_tanaman_tua = $usia_tanaman_membership['tua'];
$calculation->luas_lahan_kecil = $luas_lahan_membership['kecil'];
$calculation->luas_lahan_sedang = $luas_lahan_membership['sedang'];
$calculation->luas_lahan_besar = $luas_lahan_membership['besar'];
$calculation->tinggi_air_rendah = $tinggi_air_membership['rendah'];
$calculation->tinggi_air_sedang = $tinggi_air_membership['sedang'];
$calculation->tinggi_air_tinggi = $tinggi_air_membership['tinggi'];
$calculation->rule_rendah = $max_activation_rules['rendah']['rule'];
$calculation->value_rule_rendah = $max_activation_rules['rendah']['activation'];
$calculation->rule_tinggi = $max_activation_rules['tinggi']['rule'];
$calculation->value_rule_tinggi = $max_activation_rules['tinggi']['activation'];
$calculation->titik_perpotongan1 = $intersection_points['t1'];
$calculation->titik_perpotongan2 = $intersection_points['t2'];
$calculation->momen_1 = $dataFiks['integral_result'];
$calculation->momen_2 = $dataFiks2['integral_result2'];
$calculation->momen_3 = $dataFiks3['integral_result3'];
$calculation->luas_1 = $dataFiks4['integral_result4'];
$calculation->luas_2 = $dataFiks5['integral_result5'];
$calculation->luas_3 = $dataFiks6['integral_result6'];
$calculation->jumlah_momen = $total_M_sum;
$calculation->jumlah_luas = $total_A_sum;
$calculation->hasil_perhitungan = $result;
$calculation->save();
// Data yang ingin Anda kirim ke ThingSpeak
$hasil_perhitungan = $result; // Ganti dengan nilai hasil perhitungan Anda
$api_key = '84DPP86EQWKYKI1X'; // Ganti dengan API Key ThingSpeak Anda
// URL untuk mengirim data ke ThingSpeak
$url = 'https://api.thingspeak.com/update?api_key=' . $api_key . '&field1=' . $hasil_perhitungan;
// Buat permintaan HTTP POST
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
// // Periksa respon
// if ($response === false) {
// echo 'Gagal mengirim data ke ThingSpeak';
// } else {
// echo 'Data berhasil dikirim ke ThingSpeak';
// }
// Display results
return view('pages.result', [
'usia_tanaman_membership' => $usia_tanaman_membership,
'tinggi_air_membership' => $tinggi_air_membership,
'luas_lahan_membership' => $luas_lahan_membership,
'rule_activations' => $rule_activations,
'aggregated_output' => $aggregated_output,
'usia_tanaman' => $usia_tanaman,
'tinggi_air' => $tinggi_air,
'luas_lahan' => $luas_lahan,
'max_activations' => $max_activations,
'max_activation_rules' => $max_activation_rules,
'data' => $data,
'intersection_points' => $intersection_points,
'dataFiks' => $dataFiks,
'dataFiks2' => $dataFiks2,
'dataFiks3' => $dataFiks3,
'dataFiks4' => $dataFiks4,
'dataFiks5' => $dataFiks5,
'dataFiks6' => $dataFiks6,
'total_M' => $total_M,
'total_A' => $total_A,
'total_M_sum' => $total_M_sum, // Pass the sum of $total_M to the view
'total_A_sum' => $total_A_sum, // Pass the sum of $total_A to the view
'result' => $result,
]);
}
}