// cuando no se pasa por el router (no existe $route). if (!isset($route)) { // Cargar bootstrap para CORS/headers JSON si está disponible $bootstrap = __DIR__ . '/bootstrap.php'; if (file_exists($bootstrap)) { require_once $bootstrap; } else { // En caso extremo, asegurar Content-Type JSON if (!headers_sent()) { header('Content-Type: application/json; charset=utf-8'); } } $puertos = file_exists($archivoPuertos) ? json_decode(file_get_contents($archivoPuertos), true) : []; if (!isset($_GET['chipid'])) { echo json_encode(['error' => "Debe especificar el parámetro 'chipid'"]); exit; } $chipid = $_GET['chipid']; if (is_array($puertos) && array_key_exists($chipid, $puertos)) { echo json_encode($puertos[$chipid]); } else { echo json_encode(['error' => 'ChipID no encontrado']); } exit; } switch ($route) { case 'get_puertos': { $puertos = file_exists($archivoPuertos) ? json_decode(file_get_contents($archivoPuertos), true) : []; if (!isset($_GET['chipid'])) { echo json_encode(['error' => "Debe especificar el parámetro 'chipid'"]); break; } $chipid = $_GET['chipid']; if (array_key_exists($chipid, $puertos)) { echo json_encode($puertos[$chipid]); } else { echo json_encode(['error' => 'ChipID no encontrado']); } break; } case 'asignar_puertos': { if ($_SERVER['REQUEST_METHOD'] !== 'POST') { echo json_encode(['success' => false, 'message' => 'Método no permitido']); break; } $data = json_decode(file_get_contents('php://input'), true); if (!is_array($data) || empty($data)) { echo json_encode(['success' => false, 'message' => 'Datos inválidos']); break; } $puertos = file_exists($archivoPuertos) ? json_decode(file_get_contents($archivoPuertos), true) : []; if (!is_array($puertos)) { echo json_encode(['success' => false, 'message' => 'Error al leer el archivo de puertos']); break; } foreach ($data as $chipid => $config) { if (!isset($puertos[$chipid])) { $puertos[$chipid] = []; } foreach ($config as $puerto => $valores) { if (!is_array($valores)) continue; $puertos[$chipid][$puerto] = [ 'gpio' => $valores['gpio'], 'disp' => $valores['disp'] ?? null, 'modo' => $valores['modo'] ?? 'INPUT_PULLUP', 'notas' => $valores['notas'] ?? '', ]; } $date = new DateTime('now', new DateTimeZone('America/Argentina/Buenos_Aires')); $puertos[$chipid]['update'] = $date->format('Y-m-d H:i:s'); } if (file_put_contents($archivoPuertos, json_encode($puertos, JSON_PRETTY_PRINT))) { echo json_encode(['success' => true, 'message' => 'Dispositivo actualizado con éxito']); } else { echo json_encode(['success' => false, 'message' => 'Error al guardar el archivo']); } break; } case 'update_puertos': { if ($_SERVER['REQUEST_METHOD'] !== 'POST') { echo json_encode(['success' => false, 'message' => 'Método no permitido']); break; } $data = json_decode(file_get_contents('php://input'), true); if (!is_array($data) || empty($data)) { echo json_encode(['success' => false, 'message' => 'Datos inválidos']); break; } $puertos = file_exists($archivoPuertos) ? json_decode(file_get_contents($archivoPuertos), true) : []; foreach ($data as $chipid => $puertosRecibidos) { if (!isset($puertos[$chipid])) { continue; } foreach ($puertosRecibidos as $puerto => $valores) { if ($puerto === 'update') continue; if (isset($puertos[$chipid][$puerto])) { if (!is_array($valores)) { continue; } if (array_key_exists('disp', $valores)) { $puertos[$chipid][$puerto]['disp'] = $valores['disp']; } if (array_key_exists('notas', $valores)) { $puertos[$chipid][$puerto]['notas'] = $valores['notas']; } if (array_key_exists('modo', $valores)) { $puertos[$chipid][$puerto]['modo'] = $valores['modo']; } } } $puertos[$chipid]['update'] = date('Y-m-d H:i:s'); } if (file_put_contents($archivoPuertos, json_encode($puertos, JSON_PRETTY_PRINT))) { echo json_encode(['success' => true, 'message' => 'Puertos actualizados con éxito']); } else { echo json_encode(['success' => false, 'message' => 'Error al guardar el archivo']); } break; } default: json_error('Ruta no soportada en api_puertos', 404); }