first(); if (!$vehiculo) { return [ 'success' => false, 'message' => 'No hay vehículos disponibles para simular' ]; } $epc = $this->generarEPC($vehiculo->vin); Detection::create([ 'epc' => $epc, 'vin' => $vehiculo->vin, 'placa' => $vehiculo->placa, 'marca' => $vehiculo->marca, 'modelo' => $vehiculo->modelo, 'color' => $vehiculo->color, 'fecha_deteccion' => now() ]); return [ 'success' => true, 'vehiculo' => [ 'placa' => $vehiculo->placa, 'vin' => $vehiculo->vin, 'marca' => $vehiculo->marca, 'modelo' => $vehiculo->modelo, 'color' => $vehiculo->color, 'epc' => $epc ], 'mensaje' => 'Detección registrada localmente' ]; } public function iniciarSimulacionContinua(int $minSegundos = 5, int $maxSegundos = 30): void { while (true) { $this->simularPasoVehiculo(); $espera = rand($minSegundos, $maxSegundos); Log::info("Esperando {$espera} segundos para próxima simulación..."); sleep($espera); } } private function generarEPC(string $vin): string { $prefijo = 'E280117000000'; $sufijo = substr(strtoupper($vin), -8); $relleno = str_pad($sufijo, 11, '0', STR_PAD_LEFT); return $prefijo . $relleno; } public function obtenerTiempoAleatorio(int $min = 5, int $max = 30): int { return rand($min, $max); } }