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.