<?php
// Este script debe ejecutarse en el router Teltonika o en un servidor local
// que tenga acceso al UPS a través de SNMP

// Configuración
$ups_ip = "192.168.1.100"; // IP del UPS (o del router si el UPS está conectado a él)
$snmp_community = "public";
$snmp_version = SNMP::VERSION_2c;
$router_id = "RUT200_001"; // Identificador único del router
$remote_server = "https://tu-hosting-publico.com/forza_m/router_data_collector.php"; // URL del servidor remoto

// Función para obtener datos SNMP
function getSNMPData($ip, $community, $oid, $version) {
    try {
        $session = new SNMP($version, $ip, $community, 1000000, 3);
        $session->valueretrieval = SNMP_VALUE_PLAIN;
        $session->exceptions_enabled = TRUE;
        
        $value = $session->get($oid);
        $session->close();
        
        // Limpiar el valor
        $value = str_replace('INTEGER: ', '', $value);
        $value = str_replace('STRING: ', '', $value);
        $value = str_replace('Gauge32: ', '', $value);
        $value = str_replace('Counter32: ', '', $value);
        
        return $value;
    } catch (Exception $e) {
        error_log("SNMP Error: " . $e->getMessage());
        return null;
    }
}

// OIDs para datos del UPS
$oids = [
    'ups_status' => '.1.3.6.1.2.1.33.1.2.1',           // Estado de la batería
    'battery_time' => '.1.3.6.1.2.1.33.1.2.3',         // Tiempo estimado restante
    'battery_charge' => '.1.3.6.1.2.1.33.1.2.4',       // Carga restante estimada (%)
    'input_voltage' => '.1.3.6.1.2.1.33.1.3.3.1.2.1',  // Voltaje de entrada
    'output_voltage' => '.1.3.6.1.2.1.33.1.4.4.1.2.1', // Voltaje de salida
    'temperature' => '.1.3.6.1.2.1.33.1.2.7',          // Temperatura de la batería
    'output_load' => '.1.3.6.1.2.1.33.1.4.4.1.5.1'     // Carga de salida (%)
];

// Obtener datos SNMP
$result = [];
foreach ($oids as $key => $oid) {
    $value = getSNMPData($ups_ip, $snmp_community, $oid, $snmp_version);
    if ($value !== null) {
        // Convertir al tipo apropiado
        if (is_numeric($value)) {
            $value = (float) $value;
        }
        $result[$key] = $value;
    }
}

// Preparar datos para enviar
$data = [
    'router_id' => $router_id,
    'ups_data' => $result,
    'timestamp' => date('Y-m-d H:i:s')
];

// Enviar datos al servidor remoto
$ch = curl_init($remote_server);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

// Verificar respuesta
if ($httpCode >= 200 && $httpCode < 300) {
    echo "Datos enviados correctamente al servidor remoto.\n";
    echo "Respuesta: $response\n";
} else {
    echo "Error al enviar datos. Código HTTP: $httpCode\n";
    echo "Respuesta: $response\n";
}