Información API Simulador fotovoltaico

API para usar el motor de cálculo del Simulador fotovoltaico.

1. Para usar la API es necesario un token de autentificación.
2. La API recibe un JSON de entrada, y devuelve un JSON de respuesta.

El JSON de entrada

Los datos de entrada son los mismos que los que se piden en el formulario de cálculo. Para conocer los campos de este JSON, basta con lanzar el ejemplo de llamada a la API que hay más abajo (ver el JSON de respuesta).

Para ver los ids posibles de cada enum, hay que escribir la siguiente url en el navegador, y luego desplegar cada input select del formulario: https://www.simuladorfacturaluz.es/simulador-fotovoltaico/?show_ids_select

El JSON de respuesta

En el JSON de respuesta hay que mirar primero los campos "status" y "code".

"status": "ERROR" = Hay un error grave y no se ha podido calcular.
"code": 403 = El token de autorización no es válido.
"code": 400 = Hay un error grave en los datos de entrada.
"message_error": proporciona información detallada del error detectado.
"status": "OK" = Todo correcto.
"code": 200
"message_warning": proporciona información detallada de avisos de cálculo, si los hubiese. Lo ideal es que no hubiese.
"entrada": contiene los mismos datos de entrada que has proporcionado, pero también incluye los que no hayas proporcionado, autocompletados con los valores por defecto usados en el cálculo. De esta manera podrás ver todos los campos que se usan en el motor de cálculo.
"salida": contiene los resultados del estudio fotovoltaico. Son los mismos datos que uso para generar la tabla de amortización que muestro en el apartado "Estudio de amortización FV" de la web.

Ejemplo de llamada a la API usando CURL en PHP function simuladorfacturaluz_ejemplo_llamada_api_estudio_fotovoltaico() : void { //Url servidor... $url = 'www.simuladorfacturaluz.es/api/?func=estudio_fotovoltaico'; //Header and authorization... $authorization_token = 'Aquí va el token de autentificación'; $user_agent = 'SimuladorFacturaLuz Client/1.0'; //El servidor obliga a pasar un user_agent, porque si no devuelve 'Forbiden 403'. $header = [ 'Authorization: ' . $authorization_token, 'User-Agent: ' . $user_agent, 'Content-Type: application/json', 'Accept: application/json', ]; //Ejemplo de JSON de entrada... $arr_json_entrada = [ 'datos_estudio_fotovoltaico' => [ 'index_provincia' => 31, //Lugo 'con_latitud_longitud_usuario' => false, 'latitud_usuario' => 0, 'longitud_usuario' => 0, 'datos_placas' => [ [ 'con_paneles_solares' => true, 'orientacion_placas' => -15, 'inclinacion_placas' => 20, 'potencia_W_placas' => 3000, 'multiplicador_placas' => 1, 'porc_perdida_adicional_placas' => 0., ], ], 'con_baterias' => false, 'bateria_numero' => 1, 'bateria_capacidad_nominal_W' => 2400, 'bateria_capacidad_util_W' => 2200, 'con_coste_instalacion_usr' => true, 'coste_instalacion_usr' => 4500., 'es_autoconsumo_compartido' => false, 'porc_autoconsumo_compartido' => 0, ], 'datos_tarifa' => [ 'zona_geografica' => 0, //Península 'potencia_contratada_6PP' => [ 3.3, 5.5, ], 'tipo_tarifa' => 101, //PVPC 2.0TD 'fv_con_compesancion_excedentes' => true, ], 'datos_habitos_consumo' => [ 'tipo_especificacion_habito_consumo' => 2, //Consumo anual 'habc_consumo_medio_habito_consumo' => 3500, 'habc_tipo_habito_consumo_anual' => 2, // Consumo más en verano e invierno 'habc_tipo_habito_consumo_diario' => 3, // Aprovecho el horario valle ], 'datos_csvs' => [ 'csvfiles_consumo_red' => [ [ 'name' => 'Un fichero CSV de consumos', 'lineas_csv' => [ 'CUPS;Fecha;Hora;Consumo_kWh;Metodo_obtencion', 'ES000000000000000000;01/01/2021;1;0,143;R', 'ES000000000000000000;01/01/2021;2;0,168;R', 'ES000000000000000000;01/01/2021;3;0,138;R', 'ES000000000000000000;01/01/2021;4;0,076;R', 'ES000000000000000000;01/01/2021;5;0,995;R', 'ES000000000000000000;01/01/2021;6;0,069;R', 'ES000000000000000000;01/01/2021;7;0,067;R', 'ES000000000000000000;01/01/2021;8;0,065;R', 'ES000000000000000000;01/01/2021;9;0,062;R', 'ES000000000000000000;01/01/2021;10;0,065;R', 'ES000000000000000000;01/01/2021;11;0,058;R', 'ES000000000000000000;01/01/2021;12;0,131;R', 'ES000000000000000000;01/01/2021;13;0,156;R', 'ES000000000000000000;01/01/2021;14;0,164;R', 'ES000000000000000000;01/01/2021;15;0,148;R', 'ES000000000000000000;01/01/2021;16;0,328;R', 'ES000000000000000000;01/01/2021;17;0,227;R', 'ES000000000000000000;01/01/2021;18;0,166;R', 'ES000000000000000000;01/01/2021;19;0,179;R', 'ES000000000000000000;01/01/2021;20;0,182;R', 'ES000000000000000000;01/01/2021;21;0,216;R', 'ES000000000000000000;01/01/2021;22;0,186;R', 'ES000000000000000000;01/01/2021;23;0,079;R', 'ES000000000000000000;01/01/2021;24;0,101;R', ] ], ] ] ]; $json_entrada = json_encode($arr_json_entrada); //Realizar la petición a la API... $ch = curl_init($url); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_POSTFIELDS, $json_entrada); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $str_json_respuesta = curl_exec($ch); $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); //Analizar la respuesta... echo '<b>Respuesta API</b><br>'; if ($httpcode == 200) { if ($str_json_respuesta != NULL) { $json_respuesta = json_decode($str_json_respuesta); if ($json_respuesta != NULL) { //Aquí irá el código que analiza el JSON de respuesta, como por ejemplo el siguiente: $str_json_readable = json_encode($json_respuesta, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); echo '<pre>' . $str_json_readable . '</pre>'; } else { echo 'ERROR: JSON incorrecto.'; echo '<br>'; echo $str_json_respuesta; } } else { echo 'ERROR: Respuesta nula.'; //Esto no debería pasar, pero hay que comprobarlo todo. } } else { echo 'ERROR HTTP: ' . $httpcode; echo '<br>'; echo $str_json_respuesta; } }
1,731 s