POST /plants/graficas
Permite realizar una solicitud para obtener gráficos basados en datos de plantas solares según el proveedor seleccionado.
Parámetros de Consulta
- proveedor (requerido): ID único del proveedor de la planta.
Parámetros de JSON
/* GoodWe */ { "id": "b5e7ad84-679f-4b99-a238-912631598450", "date": "2024-11-11", // fecha en la que sacas el gráfico "range": "dia", // 2 dia 3 mes y 4 año "chartIndexId": "generación de energía y ingresos" // Depende del gráfico cambian los datos que se le pasan } /* GoodWe */ { "id": "b5e7ad84-679f-4b99-a238-912631598450", "date": "2024-11-21", // fecha en la que sacas el gráfico "chartIndexId": "potencia" // Depende del gráfico cambian los datos que se le pasan } /* SolarEdge */ { "id": "1851069", "dia": "DAY", // dia mes o año que quieres que te saque "fechaFin": "2024-11-19", // parametro opcional si no se le manda se le pasara la fecha de hoy a las 23:59:59 "fechaInicio": "2024-11-18" // parametro opcional si no se envia se recogera en DAY principio del dia actual Month dia 1 del mes actual o YEAR primer dia del año actual } /* Grafica de Victron Energy */ { "id": "98081", "interval": "15mins", // 15mins hours 2hours days weeks months years "type": "venus", // venus live_feed consumption solar_yield kwh generator generator-runtime custom forecast "fechaFin": "2024-11-25", // parametro opcional si no se le manda se le pasara la fecha de hoy a las 23:59:59 "fechaInicio": "2024-11-24" // parametro opcional si no se le manda se le pasara la fecha de hoy a las 00:00:00 } /* Grafica de Victron Energy overallstats */ { "id": "98081", "type": "venus", // venus live_feed consumption solar_yield kwh generator generator-runtime custom forecast "overallstats": true, // true or false } /* Sungrow Day/Custom (intradia por minuto) --- id = ps_id NUMERICO */ { "id": "1234567", // ps_id NUMERICO (no el systemId VSSKC.../EUEEH..., eso es Sigenergy) "level": "Day", // Day | Custom | Week | Month | Year. Por defecto Day "points": "p24,p18,p21", // una o varias medidas (csv o array). Por defecto p24 "interval": 5, // solo intradia. 5 | 15 | 30 | 60 min. Por defecto 5 "fechaInicio": "20260722000000", // solo Custom, formato YmdHis. La ventana se capa a 24h (bloques de 2h) "fechaFin": "20260722235959" // solo Custom, formato YmdHis. Por defecto ahora } /* Sungrow Week/Month/Year (agregado dia/mes) */ { "id": "1234567", "level": "Week", // Week/Month -> un punto por dia; Year -> un punto por mes "points": "p24,p14", "date": "2026-07-22" // opcional, fecha de referencia (yyyy-mm-dd). Por defecto hoy } /* Puntos (points) mas usados: p24=potencia activa(W) [confirmado], p14=potencia DC(W), p18/p19/p20=voltaje fase A/B/C(V), p21/p22/p23=corriente fase A/B/C(A), p44=voltaje MPPT(V). OJO: los inversores HIBRIDOS (con bateria) devuelven serie VACIA por el plan de API de Sungrow; hoy solo dan datos los inversores normales (tipo 1). */ /* Sigenergy --- el id es el systemId (VSSKC.../EUEEH...), NO numerico */ { "id": "VSSKC1768221900", // systemId de la planta Sigenergy (empieza por VSSKC.../EUEEH...) "level": "Lifetime" // opcional. Day | Week | Month | Year | Lifetime. Por defecto Day. Lifetime ignora la fecha y casi siempre responde } /* Sigenergy con fecha (Day/Week/Month/Year) */ { "id": "VSSKC1768221900", "level": "Day", // Day | Week | Month | Year | Lifetime "date": "2026-07-22" // opcional, yyyy-MM-dd. Por defecto hoy. LIMITE: 1 consulta por estacion cada 5 min }
Respuesta de Ejemplo
{
"status": true,
"code": 200,
"message": "200 - Solicitud exitosa",
"data": {
"consumption": [
{
"date": "2024-11-18 00:00:00",
"value": 117869
},
{
"date": "2024-11-19 00:00:00",
"value": 127128
}
],
"totalConsumption": 244997,
"solarProduction": [
{
"date": "2024-11-18 00:00:00",
"value": 60023
},
{
"date": "2024-11-19 00:00:00",
"value": 64201
}
],
"totalProduction": 124224,
"storagePower": [
{
"nameplate": 9800,
"serialNumber": "7E043EDB",
"modelNumber": "LGC RESU 10",
"telemetryCount": 1149,
"telemetries": [
{
"timeStamp": "2024-11-18 00:00:51",
"power": 0,
"batteryState": 10,
"lifeTimeEnergyDischarged": 13491068,
"lifeTimeEnergyCharged": 9357134,
"batteryPercentageState": 11,
"fullPackEnergyAvailable": 7920,
"internalTemp": 27.4,
"ACGridCharging": 0
}
]
}
],
"totalExport": 16259,
"porcentajeExport": 13.088453116950024,
"overview": {
"lastUpdateTime": "2024-12-04 10:21:38",
"lifeTimeData": {
"energy": 94705520
},
"lastYearData": {
"energy": 27781930
},
"lastDayData": {
"energy": 16459
}
}
}
}
Forma de la respuesta por proveedor
El ejemplo de arriba es de Victron/SolarEdge. El envoltorio siempre es {status, code, message, data}, pero el contenido de "data" cambia según el proveedor:
/* Sungrow — serie de puntos del inversor */ { "status": true, "code": 200, "data": { "ps_id": "1234567", "ps_key": "1234567_14_1_1", // inversor localizado (tipo 1 o 14) "level": "day", "series": { // UNA serie por punto pedido (multipunto) "p24": [ { "time": "20260722080000", "value": 1523.0 }, { "time": "20260722080500", "value": 1710.5 } ], "p18": [ { "time": "20260722080000", "value": 225.6 } ] } } } // Compat: si pides un solo "point" (en vez de "points"), data trae {point, series:[...]} plano. /* Sigenergy — totales del periodo + itemList */ { "status": true, "code": 200, "data": { "powerGeneration": 42.7, // totales del periodo (kWh) "powerToGrid": 18.3, "powerSelfConsumption": 24.4, "itemList": [ // cada punto (Day = 288 de 5 min) { "dataTime": "2026-07-22 08:00:00", "pvTotalPower": 1523.0, "loadPower": 640.0, "toGridPower": 880.0, "batSoc": 73 } ], "_cache": { "hit": false, "esperar_seg": 0 } // límite 1/5min por estación } }
Respuestas de error habituales
Se mantiene el envoltorio: status=false y el mismo código va también en el HTTP. Los de Sigenergy llegan traducidos al castellano con la causa y si conviene reintentar.
/* Sungrow: id cruzado o planta sin inversor (HTTP 400) */ { "status": false, "code": 400, "message": "No se han encontrado graficas de Sungrow", "data": { "error": "no_inversor", "proveedor": "Sungrow", "ps_id": "EUEEH1768404593" } } /* Sigenergy: planta sin datos servibles, code 13001 (HTTP 404) */ { "status": false, "code": 404, "message": "La planta no tiene datos disponibles", "data": { "proveedor": "Sigenergy", "codigo_sigenergy": 13001, "reintentable": false, // se cachea: no gasta el cupo de 5 min "documentado": false } } /* Sigenergy: llamaste antes de los 5 min, code 1201 (HTTP 429) */ { "status": false, "code": 429, "message": "Demasiado pronto: espera unos minutos", "data": { "proveedor": "Sigenergy", "codigo_sigenergy": 1201, "reintentable": true, "_cache": { "esperar_seg": 315 } // cuánto falta para reintentar } } /* Sigenergy: id inexistente o de otra cuenta, code 1111 (HTTP 404) */ { "status": false, "code": 404, "message": "Planta no encontrada o sin acceso", "data": { "proveedor": "Sigenergy", "codigo_sigenergy": 1111 } }
⚠️ Acceso y límites
Requiere un JWT válido y que el usuario tenga la planta asociada (si no, no aparece o responde 403). Sigenergy limita a 1 consulta por estación cada 5 min: si repites antes, la caché devuelve el último dato bueno (o el último error) y "_cache.esperar_seg" indica cuánto falta.
Respuesta de Ejemplo
curl -X POST "https://app-backend.energiasolarcanarias.com/plants/graficas?proveedor=solaredge" \
-H "Authorization: Bearer tu_token_de_acceso" \
-H "Content-Type: application/json" \
-d '{
"id": "1851069",
"proveedor": "SolarEdge",
"dia": "DAY",
"fechaInicio": "2024-11-18",
"fechaFin": "2024-11-19"
}'
Parámetros de JSON
- id: Identificador único de la planta (e.g., "1851069").
- proveedor: Nombre del proveedor (e.g., "SolarEdge").
- dia: Tipo de rango de tiempo ("QUARTER_OF_AN_HOUR","HOUR","DAY","WEEK", "MONTH", or "YEAR") por defecto DAY.
- fechaInicio: Fecha de inicio para los datos solicitados (formato: "YYYY-MM-DD").
- fechaFin: Fecha de finalización para los datos solicitados (formato: "YYYY-MM-DD").
- chartIndexId: Opcional, especifica el tipo de datos del gráfico (e.g., "generación de energía").
- range: Opcional, rango para proveedores específicos (e.g., "dia", "mes", "año").
- interval: Opcional, intervalo de tiempo para Victron Energy (e.g., "15mins", "hours", "2hours", "days", "weeks", "months", "years").
- type: Opcional, tipo de datos para Victron Energy (e.g., "venus", "live_feed", "consumption", "solar_yield", "kwh", "generator", "generator-runtime", "custom", "forecast").
- overallstats: true o false para mostrar el gráfico con las estadísticas generales
- point: Solo Sungrow. Opcional, un punto del inversor (e.g., "p24" = potencia activa en W). Por defecto p24.
- points: Solo Sungrow. Opcional, varias medidas a la vez (csv o array, e.g., "p24,p18,p21"). p24=potencia activa, p14=potencia DC, p18/p19/p20=voltaje fase A/B/C, p21/p22/p23=corriente fase A/B/C, p44=voltaje MPPT. Los inversores híbridos devuelven vacío (limitación del plan de Sungrow).
- level: Sigenergy y Sungrow. Opcional, agregación temporal. Sigenergy: Day/Week/Month/Year/Lifetime. Sungrow: Day/Custom (intradía por minuto) o Week/Month/Year (agregado). Por defecto Day.
- date: Solo Sigenergy. Opcional, fecha del periodo (formato: "YYYY-MM-DD"). Por defecto hoy. Límite: 1 consulta por estación cada 5 min.
- ⚠️ OJO con los ids: El id de Sungrow es el ps_id NUMÉRICO; el de Sigenergy es el systemId (VSSKC.../EUEEH...). Cruzarlos da "no_inversor" en Sungrow o "planta no encontrada" en Sigenergy.