Metric Export API
La Metric Export API fornisce qualsiasi metrica dei tuoi impianti come serie temporale, in CSV o JSON, con una sola richiesta GET. Legge la stessa raccolta di metriche dei report, comprese le metriche che la tua organizzazione ha definito.
Ogni link mostrato dalla pagina Esportazione dati è una chiamata a questa API, quindi il modo più semplice per arrivare a una richiesta funzionante è costruirla lì e copiarla.
Apri in Mirox
Esportazione dati ▸ Metriche per una selezione libera, Esportazione dati ▸ Costruttore API per un modello. Entrambe mostrano il link di ciò che hai selezionato.
I link dell'esportazione precedente continuano a funzionare senza modifiche. Sono descritti nell'API di esportazione legacy; come passare dall'una all'altra è spiegato nella guida alla migrazione.
Route
Tutti i percorsi seguono https://service.mirox.io/api.
| Route | Risposta | Scopo |
|---|---|---|
GET /v1/export/series | CSV, oppure JSON con format=json | Esportare metriche come serie temporale |
GET /v1/export/series/estimate | JSON | Dimensione e durata di un'esportazione, senza leggere dati |
GET /v1/export/series/catalog | JSON, oppure un glossario CSV con format=csv | Le metriche che puoi esportare |
GET /v1/export/series/lanes | JSON | I componenti di un impianto |
GET /v1/export/series/template/{template_uid} | CSV, oppure JSON con format=json | Esportare un modello |
POST /v1/export/template/{template_uid}/convert | JSON | Convertire un modello legacy |
Autenticazione
Invia un token API del gruppo Metric Export nell'header Authorization:
Authorization: Bearer YOUR_API_TOKEN
Il token legge ogni route di esportazione di questa pagina e le route legacy. Non può creare, modificare o eliminare nulla. In un browser in cui hai effettuato l'accesso a Mirox, i link funzionano senza token.
Ricevi solo i dati degli impianti di cui puoi leggere le misure. Le metriche della tua organizzazione vengono esportate da ogni ruolo organizzativo tranne Esterno. Vedi Chi può esportare che cosa.
Le metriche si scelgono per ID; una query è limitata all'impianto
Un'esportazione nomina le metriche con il loro ID. Mirox risolve ogni ID nella propria query, limitata all'impianto. Le metriche della tua organizzazione sono voci convalidate della raccolta, limitate all'impianto allo stesso modo. L'unico testo di query che un chiamante può inviare è un'espressione MetricsQL in expr: viene eseguita solo sugli impianti della richiesta, con l'impianto aggiunto a ogni selettore, e viene rifiutata quando nomina essa stessa un impianto, un parco o un'organizzazione.
Esportare una serie temporale
GET /v1/export/series
Immissione in rete di un impianto nel mese precedente, per giorno:
curl --compressed "https://service.mirox.io/api/v1/export/series?park=ABC123DEF456&metrics=plant.grid_feedin&window=previous_month&step=day" \
-H "Authorization: Bearer YOUR_API_TOKEN" -o feedin.csv
Date;Grid feed-in (kWh)
2026-08-01;5321,4
2026-08-02;4980,2
...
Parametri
| Parametro | Valori | Predefinito | Significato |
|---|---|---|---|
metrics | da 1 a 20 ID di metrica, separati da virgola | obbligatorio salvo che sia indicato expr | Le colonne, in questo ordine. Vedi Metriche e valori. |
expr | un'espressione MetricsQL, ripetibile fino a 5 volte | — | Query grezze del database delle serie temporali, un gruppo di colonne ciascuna, dopo le metriche. Vedi Query MetricsQL grezze. |
park | UID di impianto, separati da virgola | — | Gli impianti. È obbligatorio park oppure portfolio. |
portfolio | UID di portfolio, separati da virgola | — | Tutti gli impianti di questi portfolio, in aggiunta a park. Al massimo 50 impianti in totale. |
start, end | data oppure data con ora | — | Un periodo libero. Vedi Periodo. |
year, quarter, month, week, day | numeri | — | Un periodo di calendario. |
window | periodo predefinito | previous_month | Un periodo con nome. |
step | auto, 1min, 5min, 15min, 1h, day, week, month, quarter, year | auto | La durata di una riga. Vedi Passi. |
mismatch | refuse, sparse | refuse | Che cosa succede a una metrica che non offre il passo: rifiutare la richiesta oppure esportarla al suo passo. Vedi Metriche con passi diversi. |
values | auto, delta, cumulative, native | auto | La modalità dei valori di tutte le metriche. |
tz | local, utc | local | Il calendario delle righe. Vedi Griglia temporale. |
multi_park_agg | merge, split | merge | Più impianti riuniti, oppure una colonna per impianto. Vedi Più impianti. |
components | fino a 100 riferimenti di componente, separati da virgola | tutti | Limita le metriche dei componenti a questi componenti. Vedi Componenti. |
lane_limit | da 1 a 100 | 50 | Componenti per metrica e pagina. |
lane_page | da 1 in su | 1 | La pagina dei componenti. |
format | csv, json | csv | Il formato della risposta. |
language | en, de, es, fr, it, pt | en | La lingua dei nomi delle colonne. |
separator_csv | , ; tab | | ; | Il separatore di colonna. |
separator_decimal | . , | , | Il separatore decimale. Deve essere diverso da separator_csv. |
datetime_format | modello strftime, fino a 64 caratteri | secondo il passo | Il formato della colonna temporale. |
header | name, id | name | Intestazioni di colonna come nomi o come ID. Vedi Risposta CSV. |
empty | blank, zero | blank | Un valore mancante come cella vuota o come 0. |
offset_column | true, false | true | La colonna Scostamento UTC. Compare solo con passi più brevi di un giorno nell'ora locale dell'impianto. |
precision | display, full | display | Valori arrotondati alle cifre della metrica, oppure non arrotondati. |
lane_limit e lane_page fuori dai loro limiti vengono portati al limite più vicino. Un parametro che la route non conosce viene ignorato.
Metriche e valori
Un ID di metrica ha la forma <prefisso>.<nome>, ad esempio plant.grid_feedin, inverter.ac_power o sensor.irradiance. Una metrica della tua organizzazione è organization.<ID della metrica>. Il catalogo le elenca tutte.
Ogni metrica ha una grandezza, che decide le modalità dei valori offerte:
values | Una riga mostra | Si applica a |
|---|---|---|
delta | la quantità all'interno dell'intervallo | solo energia |
cumulative | il totale progressivo dall'inizio del periodo | energia e altre grandezze conteggiate |
native | il valore così come la metrica lo fornisce | ogni metrica |
auto | delta per l'energia, native per tutto il resto |
Un suffisso imposta la modalità di una singola metrica e prevale su values:
metrics=plant.grid_feedin:cumulative,plant.grid_power
Una modalità che non si applica a una metrica non è mai un errore. La metrica viene esportata come native e la nota value_mode_ignored lo segnala. delta non viene mai applicato a una potenza.
La stessa metrica in due modalità dà due colonne. La stessa metrica due volte nella stessa modalità ne dà una.
Energia per intervallo sotto i 15 minuti
Un contatore conta l'energia a scatti interi. A 1min o 5min, un'energia in modalità delta salta quindi tra zero e uno scatto. L'esportazione la fornisce e aggiunge la nota energy_delta_fine_step, che nomina la metrica di potenza corrispondente dove la raccolta ne ha una. Per una curva usa la metrica di potenza; per l'energia usa 15min o più.
Periodo
Indica il periodo in uno solo di tre modi. Due modi nella stessa richiesta rispondono 400 window_conflict.
| Modo | Parametri | Esempio |
|---|---|---|
| Periodo libero | start, end | start=2026-07-01&end=2026-07-31 |
| Calendario | year con quarter, month, week o day | year=2026&quarter=2 |
| Periodo predefinito | window | window=previous_week |
Periodo libero. start ed end sono una data (2026-07-01) oppure una data con ora (2026-07-01T06:00, 2026-07-01T06:00:00Z, 2026-07-01T06:00:00+02:00). Un valore senza fuso orario viene letto nel fuso orario delle righe. Un end che è una data include quel giorno; un end con ora è il momento in cui il periodo finisce. Senza end, il periodo finisce adesso. end da solo, senza start, viene rifiutato.
Calendario. year dal 2020 al 2100, quarter da 1 a 4, month da 1 a 12, week da 1 a 53 (settimana ISO), day da 1 a 31. day richiede month. Senza year si intende l'anno corrente. day prevale su week, week su month, month su quarter.
Periodi predefiniti. today, yesterday, last_7_days, last_30_days, this_week, previous_week, this_month, previous_month, this_quarter, previous_quarter, this_year, previous_year. I periodi this_ arrivano fino ad adesso; last_7_days e last_30_days scorrono fino ad adesso con passi inferiori a un giorno (stessa ora 7 o 30 giorni prima); da day in su sono gli ultimi 7 o 30 giorni locali, oggi compreso. Da day in su ogni finestra viene estesa a giorni interi (settimane, mesi …) nel fuso orario dell'impianto e la risposta riporta la finestra effettiva.
Un periodo inizia al più presto nel 2020 e copre al massimo 1827 giorni (cinque anni). Un periodo che arriva nel futuro finisce adesso, con la nota end_clamped.
Passi
step=auto sceglie un passo che ogni metrica richiesta offre e che rispetta i limiti: 15min fino a due giorni, 1h fino a 62 giorni, day fino a tre anni, month oltre. Se quel passo non va bene, viene provato quello più grossolano successivo, poi quelli più fini. La nota step_auto e l'header X-Mirox-Step nominano il passo scelto.
Ogni metrica offre i propri passi. Il catalogo li elenca come export_steps:
| Tipo di metrica | Passi |
|---|---|
| Energia da un contatore che conta ogni minuto | da 1min a year |
| Energia conteggiata meno spesso — turbine eoliche, limitazione liquidata | da 15min a year |
| Potenza (W, var, VA, W/m²), tensione, corrente, frequenza | 1min, 5min, 15min |
| Temperatura, stato di carica e altri livelli misurati | dall'intervallo di misura a year |
| Stati di funzionamento e codici di stato | 15min |
| Performance ratio | day, week, month, quarter, year |
| Disponibilità | 15min, 1h, day, week, month, quarter, year |
| Metriche della tua organizzazione | dalla loro risoluzione più fine a year, mai più fini di 15min |
La potenza è offerta solo a 15 minuti o più fine. Una potenza giornaliera o mensile è una media che nasconde ciò che è accaduto; la metrica di energia dà il valore che si intende.
Un passo non viene mai cambiato in silenzio. Con mismatch=refuse, il valore predefinito, un passo che una delle metriche non offre risponde 400 step_not_served con i passi di ogni metrica, e con step=auto le metriche che non hanno alcun passo in comune rispondono 400 no_common_step. Con mismatch=sparse, una richiesta del genere viene invece fornita — vedi Metriche con passi diversi.
I passi di un giorno o più coprono intervalli interi. Un periodo che inizia o finisce all'interno di uno di essi viene esteso verso l'esterno, con la nota window_aligned. Le settimane iniziano di lunedì.
Metriche con passi diversi
mismatch=sparse fornisce una richiesta le cui metriche non offrono tutte il passo, purché ciascuna offra un passo qualsiasi. La griglia del file è il passo richiesto; con step=auto è il passo che più metriche offrono così com'è, scelto in base al periodo e ai limiti come di consueto. Le posizioni delle colonne e la forma della risposta CSV e JSON non cambiano.
| La metrica offre | Che cosa fa l'esportazione | Nota |
|---|---|---|
| solo passi più fini | La legge al più grossolano di essi e la riunisce alla griglia secondo la regola della sua grandezza: un'energia si somma, una lettura si media, un rapporto si ricalcola dalle sue due metà, uno stato mantiene l'ultimo codice. | step_folded con lo step letto |
| solo passi più grossolani | La legge al più fine di essi e scrive ogni valore nella riga in cui inizia il suo intervallo — il valore di un giorno nella riga della sua mezzanotte locale, quello di un mese nella riga del suo primo giorno. Le righe intermedie restano vuote. | step_sparse con quello step |
| un passo più grossolano, ma nessuno dei suoi intervalli inizia su una riga | La colonna è vuota, ad esempio un valore giornaliero in un file che inizia alle 06:00. | metric_unavailable con reason off_grid |
Due casi vengono rifiutati in entrambe le modalità, con 400 step_not_served: un valore per mese, trimestre o anno in un file per week, perché il suo primo giorno non è quasi mai un lunedì; e un valore mensile come il Marktwert in un file per quarter o year, perché una somma o una media di mesi non è quel valore. In un file per month viene letto così com'è; in uno più fine è sparso.
La stima elenca le stesse note, conta le letture al passo proprio di ogni metrica e segna un passo in per_step come entro i limiti anche quando non tutte le metriche lo offrono. La pagina Esportazione dati chiede sempre con mismatch=sparse; un modello porta il proprio mismatch nella sua spec.
Griglia temporale
Con tz=local, le righe seguono l'ora locale dell'impianto, ora legale compresa: un giorno è un giorno locale di 23, 24 o 25 ore, un mese è un mese locale. Con tz=utc, le righe seguono il calendario UTC.
- Con passi più brevi di un giorno nell'ora locale, la colonna Scostamento UTC segue la colonna temporale (
+02:00). Nel giorno in cui l'orologio torna indietro, un'ora compare due volte; lo scostamento le distingue.offset_column=falseomette la colonna. - Impianti in fusi orari diversi condividono una sola colonna temporale. Una richiesta di questo tipo riceve risposta sul calendario UTC, con la nota
merged_on_utc, sia che gli impianti siano riuniti sia che siano divisi. - Con
tz=utce un passo di un giorno o più, una metrica che esiste solo per giorno locale non ha un valore UTC. La sua colonna resta vuota, con la notautc_calendar_unsupported.
L'header X-Mirox-Grid nomina il calendario usato: local:Europe/Berlin oppure utc.
Più impianti
Con multi_park_agg=merge, ogni metrica è una colonna per tutti gli impianti, riunita secondo la regola della metrica. Il catalogo elenca la regola come merge:
merge | Valore riunito | Metriche |
|---|---|---|
sum | sommato sugli impianti | energia, grandezze conteggiate, potenza |
mean | mediato sugli impianti | irraggiamento, temperatura, stato di carica e altri livelli |
pair_ratio | ricalcolato dai totali degli impianti | performance ratio, disponibilità e altri rapporti |
first | il valore comune | prezzi, quando tutti gli impianti si trovano in una sola zona di mercato |
split_only | non si può riunire | stati e codici di stato |
Una metrica che non si può riunire viene esportata per impianto, con la nota merge_not_meaningful. Questo vale anche per un rapporto a un passo in cui le sue due metà non sono disponibili, e per i prezzi di impianti in zone di mercato diverse.
Con multi_park_agg=split, ogni metrica è una colonna per impianto. Con un solo impianto, entrambe danno lo stesso file.
Le metriche dei componenti sono sempre per impianto (nota components_split_by_park).
Componenti
Una metrica di un livello di componente dà una colonna per componente. I livelli sono inverter, gak (quadro di campo), string, turbine, sensor, meter, battery_box (container), battery_storage (rack), battery_module, battery_cell e battery_pcs (convertitore).
Senza components, l'esportazione contiene tutti i componenti visibili degli impianti, lane_limit per metrica e pagina. Se ce ne sono di più, la nota lanes_truncated ne indica il totale; richiedi la pagina successiva con lane_page.
components limita l'esportazione ai componenti che nomini. Un riferimento ha la forma <livello>:<id>, ad esempio inverter:1043. Un sensore o un contatore che Mirox misura ma che non ha una voce nei componenti dell'impianto ha un riferimento della forma sensor:h3f9c2a71b04e6d5. La route dei componenti elenca i riferimenti di un impianto. Un riferimento che non appartiene a nessuno degli impianti scelti risponde 400 unknown_lane.
metrics=inverter.ac_power&components=inverter:1043,inverter:1044
Query MetricsQL grezze
expr aggiunge a un'esportazione una query grezza in MetricsQL, il linguaggio di interrogazione del database delle serie temporali della piattaforma — per una serie per cui la raccolta non ha una metrica. Il parametro può essere ripetuto fino a cinque volte; ogni espressione può avere fino a 4 000 caratteri. Una richiesta può portare solo expr, oppure metrics ed expr insieme; le colonne delle metriche vengono prima.
expr=sum by (inverter_id) (powerplant_inverter_power_ac)&park=ABC123DEF456&window=yesterday&step=15min
Un'espressione viene valutata per impianto, come la valuta una dashboard: sui dati dell'impianto stesso, al passo richiesto, come campioni grezzi — ogni passo è ammesso, values e le regole di aggregazione delle metriche non si applicano. Mirox aggiunge l'impianto a ogni selettore dell'espressione; un'espressione che nomina essa stessa un'etichetta park, organization o plant viene rifiutata con 400 expr_forbidden_label.
| Caso | header=name | header=id |
|---|---|---|
| Una serie per impianto | MetricsQL sum by (inverter_id) (powerplant_inverter_power_ac) | expr1 |
| Più serie su un impianto qualsiasi | l'intestazione seguita dal name{labels} proprio di ogni serie | expr1{inverter_id="INV1"} |
| Più impianti | il nome dell'impianto davanti, come per ogni colonna | ABC123DEF456/expr1 |
Quando un'espressione restituisce più serie su uno qualsiasi dei suoi impianti, le colonne di quell'espressione su ogni impianto portano le etichette delle serie, così un file ha una sola nomenclatura per espressione. Un'intestazione più lunga di 1 000 caratteri viene tagliata con … dentro l'espressione, mai nel testo della serie. Nella risposta JSON, columns[].key è il testo di header=id e columns[].metric è l'ID dell'espressione, expr.e1, expr.e2, …, che note e rifiuti usano. Un impianto su cui l'espressione non restituisce nulla mantiene una colonna vuota, con la nota expr_no_series; con più impianti, ogni impianto riceve le proprie colonne, con la nota expr_split_by_park.
Un'espressione può restituire al massimo 500 serie su un impianto (400 expr_too_many_series); aggregala, ad esempio con sum by (…). Le serie contano nelle stesse 400 colonne e 1 800 000 valori di ogni esportazione: la prima lettura di ogni espressione su ogni impianto è una breve sonda, le larghezze vengono sommate sull'intera richiesta, e una richiesta che supera i limiti viene rifiutata con 400 over_budget e params.series prima di qualsiasi lettura completa di qualsiasi espressione. Un'espressione che non si può analizzare, è vuota, è troppo lunga o che il database rifiuta risponde 400 expr_invalid con il reason.
La stima conta un'espressione come una colonna per impianto, perché le sue serie si conoscono solo alla lettura. Le espressioni non vengono salvate nei modelli.
Risposta CSV
La risposta è in UTF-8, con il nome di file series_export_<primo giorno>_<ultimo giorno>_<passo>.csv. Una risposta più grande di circa 1 MB viene compressa quando la richiesta contiene Accept-Encoding: gzip (curl: --compressed).
Le colonne sono, in questo ordine: il tempo, lo Scostamento UTC dove si applica, poi le metriche nell'ordine di metrics.
| Caso | header=name | header=id |
|---|---|---|
| Tempo | Date | timestamp |
| Scostamento UTC | UTC offset | utc_offset |
| Un impianto, oppure impianti riuniti | Grid feed-in (kWh) | plant.grid_feedin |
| Impianti divisi | Sunnyside - Grid feed-in (kWh) | ABC123DEF456/plant.grid_feedin |
| Componente | WR 01.01 - AC power per inverter (W) | ABC123DEF456/inverter:1043/inverter.ac_power |
| Componente, più impianti | Sunnyside - WR 01.01 - AC power per inverter (W) | ABC123DEF456/inverter:1043/inverter.ac_power |
| Metrica con varianti, come le tre fasi | il nome seguito dalla variante | l'ID seguito da #<variante> |
| Una metrica in due modalità dei valori | lo stesso nome due volte | plant.grid_feedin:delta, plant.grid_feedin:cumulative |
| Query MetricsQL grezza | MetricsQL <espressione>, seguito dalle etichette delle serie quando sono più di una | expr1, expr1{inverter_id="INV1"} — vedi Query MetricsQL grezze |
Usa header=id negli script e nelle cartelle di lavoro
I nomi sono fatti per le persone: seguono language e cambiano quando una metrica viene rinominata. Gli ID sono stabili. Uno script o una cartella di lavoro che trova le sue colonne dall'intestazione dovrebbe richiedere header=id. In un modello puoi anche dare a ogni colonna un testo di intestazione tuo.
La colonna temporale è formattata secondo il passo, a meno che non sia indicato datetime_format:
| Passo | Formato | Esempio |
|---|---|---|
1min, 5min, 15min, 1h | %Y-%m-%d %H:%M | 2026-08-01 06:15 |
day, week | %Y-%m-%d | 2026-08-01 |
month, quarter, year | %Y-%m | 2026-08 |
Ogni riga porta l'inizio del suo intervallo. Un valore mancante è una cella vuota, così «nessun dato» e «zero» si possono distinguere; empty=zero scrive invece 0.
Quattro header della risposta ripetono ciò che è stato risolto:
| Header | Contenuto | Esempio |
|---|---|---|
X-Mirox-Step | il passo | day |
X-Mirox-Grid | il calendario | local:Europe/Berlin |
X-Mirox-Window | inizio e fine del periodo esportato | 2026-08-01T00:00:00+02:00/2026-09-01T00:00:00+02:00 |
X-Mirox-Notes | le note, separate da ; | step_auto:step=day |
Risposta JSON
format=json restituisce la stessa tabella come dati strutturati:
| Campo | Contenuto |
|---|---|
window | start, end, grid, tz_name, step, e aligned quando il periodo è stato esteso |
parks | gli impianti esportati con uid, name e timezone |
buckets | le righe: start come ora con scostamento, ts come secondi Unix |
columns | una voce per colonna: key (il testo di header=id), metric, name, unit, digits, quantity, values_mode, merge, park_uid, lane (ref, level, title), variant, e values nell'ordine di buckets; un valore mancante è null |
notes | le note con code, metric e params |
lanes_total | componenti per metrica di componente, prima della paginazione |
lane_page, lane_limit | la pagina fornita |
totals | values, queries e duration_ms dell'esportazione |
Note
Una nota ti dice che cosa Mirox ha fatto di propria iniziativa. Non fa mai fallire un'esportazione. Le note fanno parte della risposta JSON e dell'header X-Mirox-Notes. L'header contiene fino a 1 KB di note, scritte come code:key=value,key=value e separate da ;. Se non ci stanno tutte, l'header termina con notes_omitted:count=<n>; la risposta JSON le contiene tutte.
| Nota | Significato |
|---|---|
parks_dropped | Gli impianti che hai nominato ma che non puoi leggere sono stati esclusi. uids li nomina. |
grant_required | Una metrica monetaria resta vuota per un impianto su cui ti manca il permesso di contabilità. |
value_mode_ignored | La modalità dei valori richiesta non si applica alla metrica; è stata esportata come native. |
energy_delta_fine_step | Un'energia per intervallo con un passo sotto i 15 minuti mostra gli scatti del contatore. twin nomina la metrica di potenza corrispondente. |
legacy_id_mapped | Un ID dell'esportazione precedente è stato tradotto. from, to ed exactness dicono come. |
merge_not_meaningful | La metrica non si può riunire tra impianti ed è mostrata per impianto. |
components_split_by_park | Le metriche dei componenti sono mostrate per impianto. |
merged_on_utc | Gli impianti si trovano in fusi orari diversi; le righe sono in UTC. |
utc_calendar_unsupported | La metrica non ha valori sul calendario UTC; la sua colonna è vuota. |
window_aligned | Il periodo è stato esteso a intervalli interi. start ed end danno il risultato. |
end_clamped | Il periodo arrivava nel futuro e finisce adesso. |
step_auto | Il passo scelto da auto. |
step_folded | Con mismatch=sparse: la metrica è stata letta a uno step più fine e riunita alla griglia. |
step_sparse | Con mismatch=sparse: la metrica ha un valore per step, nella prima riga di ciascuno dei suoi intervalli. |
lanes_truncated | La metrica ha più componenti di quanti ne contenga la pagina. total, page e limit dicono dove ti trovi. |
lanes_unpaged | Le serie misurate senza una voce nei componenti dell'impianto sono state esportate come misurate. |
metric_unavailable | La metrica non ha valori per un impianto; la colonna è vuota. reason è planned, not_applicable, no_data_source, draft, deleted, unknown_lane, off_grid oppure, in un modello, not_permitted. |
expr_no_series | Una query grezza non ha restituito alcuna serie su un impianto; la sua colonna è vuota. |
expr_split_by_park | Le query grezze vengono lette per impianto e ricevono un gruppo di colonne per impianto. |
provider_note | Un'osservazione della metrica stessa, ad esempio quale fonte ha risposto. |
Una colonna vuota viene sempre mantenuta. Una metrica che non si applica a uno degli impianti, o una metrica monetaria senza il permesso di contabilità, lascia la sua colonna al suo posto, così le posizioni delle altre colonne non si spostano mai.
Stimare prima di esportare
GET /v1/export/series/estimate
La route accetta i parametri dell'esportazione, senza il formato del file, e risponde che cosa sarebbe l'esportazione — senza leggere dati e senza incidere sul limite orario.
| Campo | Contenuto |
|---|---|
step, grid, window | in che cosa si risolve la richiesta |
parks, columns, rows, values, queries | la dimensione |
bytes_csv, seconds_estimate | dimensione approssimativa del file e durata |
within_budget | se l'esportazione verrebbe fornita |
preview_ok | se è abbastanza piccola per l'anteprima nell'app (200 000 valori) |
limits | i limiti in vigore |
per_step | per ogni passo: served_by_all, values, within_budget, e il reason in caso contrario |
refusals | ogni errore con cui l'esportazione risponderebbe, con code, params e hint |
notes | le note che l'esportazione porterebbe |
Un rifiuto non fa mai fallire la stima: risponde 200 ed elenca il rifiuto. La stima conta, non genera nulla: le etichette delle righe e le intestazioni sono quelle dell'esportazione. Una query grezza conta come una colonna per impianto, e con mismatch=sparse le note nominano le colonne riunite e sparse.
Il catalogo delle metriche
GET /v1/export/series/catalog
| Parametro | Valori | Predefinito | Significato |
|---|---|---|---|
park, portfolio | UID | — | Gli impianti rispetto ai quali le metriche vengono valutate. Senza impianti viene elencata l'intera raccolta. |
language | en, de, es, fr, it, pt | en | La lingua di nomi e descrizioni. |
level | un livello | tutti | Un solo livello. |
quantity | energy, amount, rate, level, ratio, state, price | tutte | Una sola grandezza. |
search | testo, fino a 100 caratteri | — | Cerca in nome, descrizione, unità, ID e negli ID dell'esportazione precedente. |
include_unavailable | true, false | true | Elenca anche le metriche che non si possono esportare per gli impianti scelti. |
page, limit | numeri, limit fino a 100 | 1, 100 | Paginazione. |
sort | order, name, id, level, con - davanti per l'ordine decrescente | order | L'ordine dell'elenco. |
format | json, csv | json | csv restituisce il glossario. |
Ogni metrica porta, accanto a ID, nome, descrizione, unità e livello:
| Campo | Contenuto |
|---|---|
quantity | che cos'è il numero: energy, amount (un'altra grandezza conteggiata), rate (potenza), level, ratio, state o price |
value_modes, default_value_mode | le modalità dei valori offerte e quella scelta da auto |
export_steps | i passi offerti |
native_step_seconds | quanto spesso viene misurata |
merge | come vengono riuniti più impianti |
twin_item_id | per una metrica di energia, la sua metrica di potenza |
lane_level | per una metrica di componente, il livello dei suoi componenti |
legacy_ids | gli ID dell'esportazione precedente per cui risponde |
applies_parks | su quanti degli impianti scelti si applica |
exportable, export_reason | se si può esportare e, in caso contrario, perché: draft, planned, grant_required, not_applicable o no_source |
Fino a 10 impianti, per ogni impianto viene verificata l'apparecchiatura di cui una metrica ha bisogno. Oltre, gli impianti vengono valutati solo in base al loro tipo; ciò che manca a un singolo impianto compare al momento dell'esportazione come nota metric_unavailable.
Glossario. format=csv restituisce l'intero elenco filtrato come file, metric_catalog_<language>.csv, con le colonne ID, livello, nome, unità, descrizione, grandezza, modalità dei valori, passi, intervallo di misura, combinazione tra impianti, nota e ID precedenti. page e limit non si applicano.
curl "https://service.mirox.io/api/v1/export/series/catalog?format=csv&language=en" \
-H "Authorization: Bearer YOUR_API_TOKEN" -o metric_catalog_en.csv
Metriche disponibili
La raccolta è ordinata per livello. Il prefisso di un ID dice a che cosa appartiene una metrica.
| Livello | level | Prefisso dell'ID | Che cosa contiene |
|---|---|---|---|
| Impianto · misure | plant | plant. | Ciò che l'impianto stesso misura: il contatore di rete, le somme degli inverter, i sensori del sito, i limiti di potenza che gli sono stati imposti. |
| Impianto · riferimento | plant_reference | plant. | Ciò che l'impianto avrebbe dovuto fare: irraggiamento nel piano dei moduli, produzione attesa, performance ratio, resa specifica, perdite. |
| Impianto · compensazione | plant_compensation | plant. | Perdite per limitazione e spegnimento come energia e potenza, per destinatario e metodo. |
| Metriche | metrics | availability., organization. | Valori di disponibilità, ore di sole e le metriche della tua organizzazione. |
| Inverter | inverter | inverter. | Una colonna per inverter. |
| Quadro di campo | gak | gak. | Una colonna per quadro di campo. |
| Stringa | string | string. | Una colonna per stringa. |
| Batteria | battery | battery. | L'accumulo nel suo insieme: energia, potenza, stato di carica, setpoint. |
| Container batteria | battery_box | battery_box. | Una colonna per container. |
| Rack batteria | battery_storage | battery_storage. | Una colonna per rack. |
| Modulo batteria | battery_module | battery_module. | Una colonna per modulo. |
| Cella batteria | battery_cell | battery_cell. | Una colonna per cella o punto di misura. |
| Convertitore batteria (PCS) | battery_pcs | battery_pcs. | Una colonna per convertitore. |
| Aerogeneratore | turbine | turbine. | Una colonna per turbina eolica. |
| Sensore | sensor | sensor. | Una colonna per sensore: irraggiamento, irradiazione, temperatura, umidità, vento. |
| Contatore | meter | meter. | Una colonna per contatore di energia. |
| Infrastruttura | infrastructure | infrastructure. | Il percorso dei dati e il sito: completezza, stato dei logger, rete, allarmi, connessioni di controllo. |
| Meteo | weather | weather. | Il meteo sul sito, compresi vento e temperatura a 80, 120 e 180 m. |
| Mercato | market | market. | Prezzi e valori di mercato. |
| Finanze dell'impianto | financial | financial. | Valori monetari dell'impianto. Richiedono il permesso di contabilità. |
L'elenco completo con nomi, unità e descrizioni nella tua lingua è il catalogo, il file del glossario, oppure Spiegazioni nella scheda Metriche. I valori delle previsioni meteo dell'esportazione precedente non fanno parte della raccolta; vedi la guida alla migrazione.
Componenti di un impianto
GET /v1/export/series/lanes
| Parametro | Valori | Predefinito | Significato |
|---|---|---|---|
park | un UID di impianto | obbligatorio | L'impianto. |
level | un livello di componente | obbligatorio | Vedi Componenti. |
metric | un ID di metrica | — | Per sensori e contatori: elenca quelli che hanno fornito questa metrica negli ultimi 30 giorni. |
search | testo | — | Cerca nei nomi. |
include_hidden | true, false | false | Elenca anche i componenti nascosti. |
page, limit | numeri, limit fino a 100 | 1, 50 | Paginazione. |
sort | order, name, con - davanti per l'ordine decrescente | order | order è l'ordine delle colonne nell'esportazione. |
Ogni voce ha il riferimento ref per il parametro components, il name, il level, il componente superiore (parent_ref, parent_name — l'inverter di una stringa, ad esempio), attributes (role di un contatore, position di un sensore di irraggiamento, vendor), hidden, e source: db per una voce dei componenti dell'impianto, store per una serie misurata che non ha una voce di questo tipo.
Un impianto che non esiste e un impianto che non puoi leggere rispondono entrambi 404 park_not_found.
Sistema dei modelli
Un modello è un elenco salvato di metriche con impostazioni predefinite per passo, periodo, valori, fuso orario, combinazione degli impianti, dimensione della pagina dei componenti e intestazioni di colonna. A che cosa servono i modelli e come gestirli nell'app è descritto nella guida al Metric Export.
Esportare un modello
GET /v1/export/series/template/{template_uid}
La route accetta i parametri dell'esportazione tranne metrics, components e values, che sono fissati dal modello. Ogni parametro che ometti assume il valore predefinito del modello; ogni parametro che indichi prevale su di esso.
curl --compressed "https://service.mirox.io/api/v1/export/series/template/CAFE1000CAFE?park=ABC123DEF456&window=previous_month&header=id" \
-H "Authorization: Bearer YOUR_API_TOKEN" -o standard.csv
- Un modello di un'altra organizzazione risponde
404 template_not_found. - Un modello legacy risponde
400 template_is_legacy;params.legacy_urlè il link che lo esporta. - Una colonna la cui metrica non è più disponibile viene esportata vuota sotto la sua intestazione, con la nota
metric_unavailable. Lo stesso vale per una metrica della tua organizzazione quando esporti come Esterno (reasonnot_permitted).
Modelli di sistema
| Modello | UID | Passo | Periodo |
|---|---|---|---|
| Esportazione standard | CAFE1000CAFE | day | previous_month |
| Esportazione estesa | CAFE1001CAFE | day | previous_month |
| Esportazione estesa (disponibilità inverter) | CAFE1002CAFE | day | previous_month |
| Esportazione disponibilità energetica | CAFE1003CAFE | day | previous_month |
| Report tecnico | ABCD12340002 | day | previous_month |
| Turbine eoliche | CAFE1010CAFE | day | previous_month |
| Accumulo a batteria | CAFE1020CAFE | day | previous_month |
| Sensori di irraggiamento | CAFE1030CAFE | 15min | yesterday |
I primi cinque succedono a CAFE0000CAFE, CAFE0001CAFE, CAFE0002CAFE, CAFE0003CAFE e ABCD12340001, che continuano a funzionare sulla route legacy. Le loro colonne sono elencate nella guida alla migrazione. Offrono i passi day, week, month, quarter e year; i quattro modelli di esportazione anche 15min e 1h.
Gestire i modelli
I modelli vengono elencati, letti, creati, modificati ed eliminati sotto /v1/export/template. La lettura funziona con un token Metric Export. La scrittura richiede il ruolo organizzativo Admin, Moderatore, Asset Manager (tecnico) o Asset Manager (commerciale) e un accesso oppure un token Full Access.
| Richiesta | Scopo |
|---|---|
GET /v1/export/template | Elenca i modelli. view=current elenca i modelli di sistema di questa pagina e i modelli della tua organizzazione; view=legacy, il valore predefinito, elenca i modelli memorizzati come prima; view=all elenca entrambi. kind=series oppure kind=legacy filtra. |
GET /v1/export/template/{template_uid} | Legge un modello. |
POST /v1/export/template | Crea un modello con kind=series e il contenuto in spec. Senza kind, la richiesta crea un modello legacy da metric_ids, come prima. |
PUT /v1/export/template/{template_uid} | Modifica nome, descrizione o spec. Il tipo non può cambiare. |
DELETE /v1/export/template/{template_uid} | Elimina un modello. I modelli di sistema non possono essere modificati né eliminati. |
Lo spec di un modello:
| Campo | Valori | Predefinito |
|---|---|---|
items | da 1 a 40 voci, ciascuna con metric, facoltativamente values e label | obbligatorio |
step | un passo | auto |
values | una modalità dei valori | auto |
tz | local, utc | local |
window | un periodo predefinito | previous_month |
multi_park_agg | merge, split | merge |
lane_limit | da 1 a 100 | 50 |
header | name, id | name |
mismatch | refuse, sparse | refuse |
label è il testo di intestazione della colonna con header=name. Una metrica può comparire una sola volta, e un modello non contiene query grezze. Quando un modello viene salvato, ogni metrica deve essere esportabile e le metriche devono avere un passo in comune — con mismatch=sparse, ciascuna deve offrire un passo qualsiasi; altrimenti la risposta è 422 spec_invalid e params.problems nomina la metrica e il motivo. Un modello viene eseguito con il proprio mismatch (l'app lo mostra come Metriche con un altro passo: Rigoroso o Tollerante); il parametro nel link di esportazione prevale.
Convertire un modello legacy
POST /v1/export/template/{template_uid}/convert
| Campo | Valori | Significato |
|---|---|---|
name | fino a 100 caratteri | Il nome del nuovo modello. Predefinito: il nome del modello legacy seguito da "(new)". |
dry_run | true, false | true restituisce la mappatura senza creare nulla. |
La risposta elenca mapped (legacy_id, metric, values, exactness: exact o approximate) e unmapped (legacy_id, reason: formula, no_equivalent, report_value o instant, e fino a tre suggestions), e, a meno che non fosse una prova, il nuovo template. Una prova risponde 200, una conversione 201.
Il nuovo modello esporta giorni sul mese precedente. Il modello legacy non viene mai modificato. Due colonne legacy che leggono lo stesso contatore diventano una sola colonna. 422 nothing_to_convert significa che nessuna colonna ha un equivalente, oppure che il modello non è un modello legacy.
Limiti
Un'esportazione riceve risposta all'interno di una sola richiesta, quindi la sua dimensione è limitata. Ogni limite viene controllato prima di leggere i dati; una richiesta troppo grande viene rifiutata subito e ti dice che cosa ci starebbe.
| Limite | Valore |
|---|---|
| Metriche per richiesta | 20; in un modello 40 |
| Query MetricsQL grezze per richiesta | 5, di 4 000 caratteri ciascuna, con al massimo 500 serie per impianto |
| Impianti per richiesta | 50 |
| Componenti per metrica e pagina | 50 per impostazione predefinita, al massimo 100 |
| Colonne | 400 |
| Valori per colonna | 180 000 — 125 giorni a 1min, 625 giorni a 5min, cinque anni a 15min |
| Valori in totale | 1 800 000 (righe × colonne) |
| Periodo | 1827 giorni |
| Letture dell'archivio delle misure per richiesta | 1 500 |
| Durata | 50 secondi |
| Esportazioni per utente e ora | 240 |
| Esportazioni in corso contemporaneamente | 3 per organizzazione |
Dividere un'esportazione grande
400 over_budget indica in params che cosa serviva e che cosa è consentito, e in hint la via d'uscita: step, il passo più grossolano successivo che ci sta, e max_days, il periodo più lungo che ci sta con il passo richiesto. Se costruisci le richieste in uno script, interroga prima la stima; il suo per_step elenca la dimensione per ogni passo.
Se non vuoi né un passo più grossolano né un periodo più breve, dividi l'esportazione:
| Dividi per | Come |
|---|---|
| Tempo | Una richiesta per mese o per trimestre. Usa i parametri di calendario (year=2026&month=7) e unisci i file. |
| Impianto | Una richiesta per impianto o per portfolio. |
| Metrica | Le metriche dei componenti in richieste a parte. Una metrica di componente su un impianto con 200 inverter sono 200 colonne. |
| Pagina | lane_page=1, 2, … per i componenti di una metrica. |
Alcune metriche vengono ricavate da più fonti per ogni giorno, prima fra tutte plant.production_reported (Produzione, risolta). Richiedono molte più letture dell'archivio delle misure rispetto a una lettura del contatore, a ogni passo. Una richiesta o un modello che contiene una metrica di questo tipo raggiunge attualmente circa nove mesi-impianto: un impianto su nove mesi, oppure nove impianti su un mese. Un passo di una settimana o più lungo estende il periodo a intervalli interi, e conta il periodo esteso. Dividi queste esportazioni per tempo o per impianto, oppure esporta la metrica in una richiesta a parte.
429 busy e 429 rate_limited portano l'header Retry-After con i secondi da attendere.
Errori
Un errore delle route di questa pagina ha questa forma:
{
"detail": {
"code": "step_not_served",
"message": "The step is not served by every requested metric.",
"params": {"step": "1h", "metrics": {"plant.grid_power": ["1min", "5min", "15min"]}},
"hint": {"offered_common": ["1min", "5min", "15min"]}
}
}
code è stabile e pensato per i programmi. message è un testo in inglese per le persone. params dice che cosa non andava, hint che cosa funzionerebbe.
| Stato | code | Significato | params e hint |
|---|---|---|---|
| 400 | scope_required | Non è stato indicato né park né portfolio. | hint.example |
| 400 | unknown_metric | Un ID di metrica non esiste. | params.ids; hint.suggestions con ID simili |
| 400 | legacy_metric_id | Un ID dell'esportazione precedente non ha un equivalente nella raccolta. | params.id, params.legacy_url; hint.reason, hint.closest, hint.pending, hint.legacy_url |
| 400 | metric_not_exportable | La metrica esiste ma non è una serie temporale che puoi esportare. | params.id, params.reason: draft, planned, no_source, events o master |
| 400 | window_conflict | Il periodo è stato indicato in più di un modo. | params.families |
| 400 | window_invalid | Il periodo non è valido. | params.reason: end_before_start, start_in_future, before_2020, too_long, day_requires_month, start_required o invalid_date |
| 400 | step_not_served | Una metrica non offre il passo richiesto. | params.metrics con i passi di ogni metrica; hint.offered_common |
| 400 | no_common_step | Le metriche non hanno alcun passo in comune. | params.metrics; hint.split |
| 400 | over_budget | L'esportazione è più grande di un limite. | params.values, limit, queries, query_limit, columns, column_limit, parks; con più di 50 impianti params.parks e park_limit; per una query grezza params.series; hint.step, hint.max_days, hint.lane_limit, hint.reduce |
| 400 | unknown_lane | Un riferimento di componente non appartiene a nessuno degli impianti. | params.refs |
| 400 | expr_invalid | Una query grezza non può essere eseguita. | params.expr, params.reason: empty, syntax (con detail), too_long, too_large, store (con il detail del database) oppure parser_unavailable |
| 400 | expr_forbidden_label | Una query grezza nomina essa stessa un impianto, un parco o un'organizzazione. | params.expr, params.labels |
| 400 | expr_too_many_series | Una query grezza restituisce più di 500 serie su un impianto. | params.expr, params.park, params.series, params.limit; hint.reduce |
| 400 | separator_conflict | Il separatore di colonna e il separatore decimale sono uguali. | — |
| 400 | invalid_datetime_format | datetime_format non è un modello valido. | hint.example |
| 400 | template_is_legacy | Il modello è un modello legacy. | params.legacy_url |
| 403 | no_accessible_parks | Non puoi leggere nessuno degli impianti scelti. | — |
| 403 | metric_forbidden | È stata richiesta una metrica della tua organizzazione con il ruolo organizzativo Esterno. | params.ids |
| 404 | template_not_found, park_not_found | Il modello o l'impianto non esiste, oppure non puoi leggerlo. | — |
| 409 | name_conflict | Esiste già un modello con questo nome. | params.name |
| 422 | — | Un parametro ha un valore fuori dal suo elenco, oppure metrics contiene più di 20 ID. | il campo e il motivo |
| 422 | spec_invalid, use_spec, nothing_to_convert | Un modello non può essere salvato o convertito così come è stato inviato. | params.problems |
| 429 | busy | Ci sono troppe esportazioni in corso. | header Retry-After |
| 429 | rate_limited | Il limite orario è esaurito. | header Retry-After |
| 502 | store_error | L'archivio delle misure ha risposto con un errore. Non è stato esportato nulla; un valore non viene mai sostituito da zero. | params.metric |
| 503 | store_timeout | L'archivio delle misure non ha risposto in tempo. | hint.step con un passo più grossolano |
401 significa che il token manca, è scaduto o è stato revocato.
ID dell'esportazione precedente
Il parametro metrics accetta anche gli ID dell'esportazione precedente, come energy_grid_daily o raw_grid_power. Un ID con un equivalente viene tradotto nella sua metrica, nella modalità dei valori che più si avvicina al numero precedente, e la nota legacy_id_mapped dice quale metrica ha risposto e se il numero è lo stesso (exact) o la stessa grandezza letta in modo migliore (approximate).
Un ID senza equivalente risponde 400 legacy_metric_id. hint.reason dice perché, hint.closest nomina la metrica più vicina dove ce n'è una, hint.pending nomina la metrica prevista per fornirlo, e legacy_url è il link dell'esportazione precedente che fornisce ancora l'ID. Con più impianti di quanti un link possa nominarne, legacy_url nomina il primo impianto e params.legacy_url_scope è first. Un ID di componente di un livello di batteria non ha un link dell'esportazione precedente; in tal caso hint.legacy_route è none. La guida alla migrazione elenca ogni ID.
Excel e script
- Metric Export per Excel — ricette e la connessione Power Query con l'header
Authorization - Generatore di report esterni — un esempio completo in Python
Funzionalità correlate
- Metric Export — la pagina Esportazione dati
- Migrare al Metric Export — vecchi ID, nuove metriche e che cosa cambia
- API di esportazione legacy — i link di esportazione precedenti
- Metriche — definisci metriche tue ed esportale
- Token API — crea il token Metric Export
- Panoramica delle API — il riferimento interattivo di tutte le route