API de exportação de métricas
A API de exportação de métricas fornece qualquer métrica das suas centrais como série temporal, em CSV ou JSON, com um único pedido GET. Lê a mesma coleção de métricas que os relatórios, incluindo as métricas que a sua organização definiu.
Cada ligação que a página Exportação de dados mostra é uma chamada desta API, pelo que a forma mais fácil de chegar a um pedido que funciona é construí-lo aí e copiá-lo.
Abrir no Mirox
Exportação de dados ▸ Métricas para uma seleção livre, Exportação de dados ▸ Construtor de API para um modelo. Ambos mostram a ligação daquilo que selecionou.
As ligações de exportação da exportação anterior continuam a funcionar sem alterações. Estão descritas na API de exportação legada; como passar de uma para a outra está no guia de migração.
Rotas
Todos os caminhos são relativos a https://service.mirox.io/api.
| Rota | Resposta | Finalidade |
|---|---|---|
GET /v1/export/series | CSV, ou JSON com format=json | Exportar métricas como série temporal |
GET /v1/export/series/estimate | JSON | Tamanho e duração de uma exportação, sem ler dados |
GET /v1/export/series/catalog | JSON, ou um glossário CSV com format=csv | As métricas que pode exportar |
GET /v1/export/series/lanes | JSON | Os componentes de uma central |
GET /v1/export/series/template/{template_uid} | CSV, ou JSON com format=json | Exportar um modelo |
POST /v1/export/template/{template_uid}/convert | JSON | Converter um modelo legado |
Autenticação
Envie um token de API do grupo Metric Export no cabeçalho Authorization:
Authorization: Bearer YOUR_API_TOKEN
O token lê todas as rotas de exportação desta página e as rotas legadas. Não pode criar, alterar nem eliminar nada. Num navegador em que tenha sessão iniciada no Mirox, as ligações funcionam sem token.
Só recebe dados das centrais cujas medições pode ler. As métricas da sua organização são exportadas por todas as funções de organização, exceto Externo. Consulte Quem pode exportar o quê.
As métricas são selecionadas por ID; uma consulta é limitada à central
Uma exportação indica as métricas pelo seu ID. O Mirox resolve cada ID para a sua própria consulta, limitada à central. As métricas da sua organização são entradas validadas da coleção, limitadas à central da mesma forma. O único texto de consulta que quem faz o pedido pode enviar é uma expressão MetricsQL em expr: corre apenas nas centrais do pedido, com a central acrescentada a cada seletor, e é recusada quando ela própria nomeia uma central, um parque ou uma organização.
Exportar uma série temporal
GET /v1/export/series
Injeção na rede de uma central ao longo do mês anterior, por dia:
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
...
Parâmetros
| Parâmetro | Valores | Predefinição | Significado |
|---|---|---|---|
metrics | 1 a 20 IDs de métricas, separados por vírgulas | obrigatório, salvo se expr for indicado | As colunas, por esta ordem. Consulte Métricas e valores. |
expr | uma expressão MetricsQL, repetível até 5 vezes | — | Consultas em bruto da base de dados de séries temporais, um conjunto de colunas cada, depois das métricas. Consulte Consultas MetricsQL em bruto. |
park | UIDs de centrais, separados por vírgulas | — | As centrais. É obrigatório park ou portfolio. |
portfolio | UIDs de carteiras, separados por vírgulas | — | Todas as centrais destas carteiras, além de park. No máximo 50 centrais no total. |
start, end | data ou data com hora | — | Um período livre. Consulte Período. |
year, quarter, month, week, day | números | — | Um período de calendário. |
window | predefinição | previous_month | Um período com nome. |
step | auto, 1min, 5min, 15min, 1h, day, week, month, quarter, year | auto | A duração de uma linha. Consulte Passos. |
mismatch | refuse, sparse | refuse | O que acontece a uma métrica que não serve o passo: recusar o pedido ou exportá-la no seu próprio passo. Consulte Métricas com passos diferentes. |
values | auto, delta, cumulative, native | auto | O modo de valores de todas as métricas. |
tz | local, utc | local | O calendário das linhas. Consulte Grelha temporal. |
multi_park_agg | merge, split | merge | Várias centrais combinadas, ou uma coluna por central. Consulte Várias centrais. |
components | até 100 referências de componentes, separadas por vírgulas | todos | Restringe as métricas de componentes a estes componentes. Consulte Componentes. |
lane_limit | 1 a 100 | 50 | Componentes por métrica e página. |
lane_page | 1 ou mais | 1 | A página de componentes. |
format | csv, json | csv | O formato da resposta. |
language | en, de, es, fr, it, pt | en | O idioma dos nomes das colunas. |
separator_csv | , ; tabulação | | ; | O separador de colunas. |
separator_decimal | . , | , | O separador decimal. Tem de ser diferente de separator_csv. |
datetime_format | padrão strftime, até 64 caracteres | por passo | O formato da coluna de tempo. |
header | name, id | name | Cabeçalhos das colunas como nomes ou como IDs. Consulte Resposta CSV. |
empty | blank, zero | blank | Um valor em falta como célula vazia ou como 0. |
offset_column | true, false | true | A coluna Desvio UTC. Só aparece em passos mais curtos do que um dia na hora local da central. |
precision | display, full | display | Valores arredondados às casas decimais da métrica, ou sem arredondamento. |
lane_limit e lane_page fora dos seus limites são ajustados ao limite mais próximo. Um parâmetro que a rota não conhece é ignorado.
Métricas e valores
Um ID de métrica tem a forma <prefixo>.<nome>, por exemplo plant.grid_feedin, inverter.ac_power ou sensor.irradiance. Uma métrica da sua organização é organization.<id da métrica>. O catálogo lista-as todas.
Cada métrica tem uma grandeza, que decide os modos de valores que oferece:
values | Uma linha mostra | Aplica-se a |
|---|---|---|
delta | a quantidade dentro do intervalo | apenas energia |
cumulative | o total acumulado desde o início do período | energia e outras grandezas contadas |
native | o valor tal como a métrica o fornece | todas as métricas |
auto | delta para energia, native para tudo o resto |
Um sufixo define o modo de uma métrica e prevalece sobre values:
metrics=plant.grid_feedin:cumulative,plant.grid_power
Um modo que não se aplica a uma métrica nunca é um erro. A métrica é exportada como native, e a nota value_mode_ignored indica-o. delta nunca é aplicado a uma potência.
A mesma métrica em dois modos dá duas colunas. A mesma métrica duas vezes no mesmo modo dá uma.
Energia por intervalo abaixo de 15 minutos
Um contador conta a energia em degraus inteiros. A 1min ou 5min, uma energia no modo delta salta, por isso, entre zero e um degrau. A exportação fornece-a e acrescenta a nota energy_delta_fine_step, que indica a métrica de potência correspondente quando a coleção tem uma. Para uma curva, use a métrica de potência; para energia, use 15min ou mais.
Período
Indique o período de uma de três formas. Duas formas num mesmo pedido respondem 400 window_conflict.
| Forma | Parâmetros | Exemplo |
|---|---|---|
| Período livre | start, end | start=2026-07-01&end=2026-07-31 |
| Calendário | year com quarter, month, week ou day | year=2026&quarter=2 |
| Predefinição | window | window=previous_week |
Período livre. start e end são uma data (2026-07-01) ou uma data com hora (2026-07-01T06:00, 2026-07-01T06:00:00Z, 2026-07-01T06:00:00+02:00). Um valor sem fuso horário é lido no fuso horário das linhas. Um end que é uma data inclui esse dia; um end com hora é o momento em que o período termina. Sem end, o período termina agora. end sozinho, sem start, é recusado.
Calendário. year de 2020 a 2100, quarter de 1 a 4, month de 1 a 12, week de 1 a 53 (semana ISO), day de 1 a 31. day requer month. Sem year, entende-se o ano em curso. day prevalece sobre week, week sobre month, month sobre quarter.
Predefinições. today, yesterday, last_7_days, last_30_days, this_week, previous_week, this_month, previous_month, this_quarter, previous_quarter, this_year, previous_year. As predefinições this_ vão até agora; last_7_days e last_30_days são móveis até agora com passos inferiores a um dia (a mesma hora 7 ou 30 dias antes); a partir de day são os últimos 7 ou 30 dias locais, incluindo hoje. A partir de day, cada janela é alargada a dias inteiros (semanas, meses …) no fuso horário da central, e a resposta devolve a janela efetiva.
Um período começa, no mínimo, em 2020 e abrange no máximo 1827 dias (cinco anos). Um período que entra no futuro termina agora, com a nota end_clamped.
Passos
step=auto escolhe um passo que todas as métricas pedidas servem e que cabe nos limites: 15min até dois dias, 1h até 62 dias, day até três anos, month para além disso. Se esse passo não couber, é tentado o passo mais grosso seguinte, depois os mais finos. A nota step_auto e o cabeçalho X-Mirox-Step indicam o passo que foi escolhido.
Cada métrica oferece os seus próprios passos. O catálogo lista-os como export_steps:
| Tipo de métrica | Passos |
|---|---|
| Energia de um contador que conta a cada minuto | 1min a year |
| Energia contada com menos frequência — turbinas eólicas, curtailment liquidado | 15min a year |
| Potência (W, var, VA, W/m²), tensão, corrente, frequência | 1min, 5min, 15min |
| Temperatura, estado de carga e outros níveis medidos | do intervalo de medição a year |
| Estados de funcionamento e códigos de estado | 15min |
| Performance ratio | day, week, month, quarter, year |
| Disponibilidade | 15min, 1h, day, week, month, quarter, year |
| Métricas da sua organização | da sua resolução mais fina a year, nunca mais fino do que 15min |
A potência é oferecida apenas a 15 minutos ou mais fino. Uma potência diária ou mensal é uma média que esconde o que aconteceu; a métrica de energia dá o valor que se pretende.
Um passo nunca é alterado em silêncio. Com mismatch=refuse, a predefinição, um passo que uma das métricas não serve responde 400 step_not_served com os passos de cada métrica, e com step=auto as métricas que não partilham nenhum passo respondem 400 no_common_step. Com mismatch=sparse, esse pedido é entregue na mesma — consulte Métricas com passos diferentes.
Os passos de um dia ou mais cobrem intervalos completos. Um período que começa ou termina dentro de um deles é alargado para fora, com a nota window_aligned. As semanas começam à segunda-feira.
Métricas com passos diferentes
mismatch=sparse entrega um pedido cujas métricas não servem todas o passo, desde que cada uma sirva algum passo. A grelha do ficheiro é o passo pedido; com step=auto é o passo que mais métricas servem tal como está, escolhido pelo período e pelos limites como habitualmente. As posições das colunas e a forma da resposta CSV e JSON não mudam.
| A métrica serve | O que a exportação faz | Nota |
|---|---|---|
| só passos mais finos | Lê-a no mais grosso deles e agrega-a à grelha pela regra da sua grandeza: uma energia soma-se, uma leitura é a média, um rácio é recalculado a partir das suas duas metades, um estado mantém o seu último código. | step_folded com o step lido |
| só passos mais grossos | Lê-a no mais fino deles e escreve cada valor na linha em que o seu próprio intervalo começa — o valor de um dia na linha da sua meia-noite local, o de um mês na linha do seu primeiro dia. As linhas intermédias ficam vazias. | step_sparse com esse step |
| um passo mais grosso, mas nenhum dos seus intervalos começa numa linha | A coluna fica vazia, por exemplo um valor diário num ficheiro que começa às 06:00. | metric_unavailable com reason off_grid |
Dois casos são recusados em ambos os modos, com 400 step_not_served: um valor por mês, trimestre ou ano num ficheiro por week, porque o seu primeiro dia quase nunca é uma segunda-feira; e um valor mensal como o Marktwert num ficheiro por quarter ou year, porque uma soma ou uma média de meses não é esse valor. Num ficheiro por month é lido tal como está; num mais fino fica esparso.
A estimativa lista as mesmas notas, conta as leituras no passo próprio de cada métrica e marca um passo em per_step como dentro do limite mesmo quando nem todas as métricas o servem. A página Exportação de dados pede sempre com mismatch=sparse; um modelo traz o seu próprio mismatch na sua spec.
Grelha temporal
Com tz=local, as linhas seguem a hora local da central, incluindo a hora de verão: um dia é um dia local de 23, 24 ou 25 horas, um mês é um mês local. Com tz=utc, as linhas seguem o calendário UTC.
- Em passos mais curtos do que um dia na hora local, a coluna Desvio UTC segue-se à coluna de tempo (
+02:00). No dia em que os relógios atrasam, uma hora aparece duas vezes; o desvio distingue as duas.offset_column=falseomite a coluna. - As centrais em fusos horários diferentes partilham uma só coluna de tempo. Um pedido destes é respondido no calendário UTC, com a nota
merged_on_utc, quer as centrais estejam combinadas, quer separadas. - Com
tz=utce um passo de um dia ou mais, uma métrica que só existe por dia local não tem valor UTC. A sua coluna fica vazia, com a notautc_calendar_unsupported.
O cabeçalho X-Mirox-Grid indica o calendário que foi usado: local:Europe/Berlin ou utc.
Várias centrais
Com multi_park_agg=merge, cada métrica é uma coluna para todas as centrais, combinada pela regra da métrica. O catálogo lista a regra como merge:
merge | Valor combinado | Métricas |
|---|---|---|
sum | somado entre as centrais | energia, grandezas contadas, potência |
mean | média entre as centrais | irradiância, temperatura, estado de carga e outros níveis |
pair_ratio | recalculado a partir dos totais das centrais | performance ratio, disponibilidade e outros rácios |
first | o valor comum | preços, quando todas as centrais estão numa só zona de mercado |
split_only | não pode ser combinado | estados e códigos de estado |
Uma métrica que não pode ser combinada é exportada por central, com a nota merge_not_meaningful. O mesmo vale para um rácio num passo em que as suas duas metades não estão disponíveis, e para preços de centrais em zonas de mercado diferentes.
Com multi_park_agg=split, cada métrica é uma coluna por central. Com uma única central, ambos dão o mesmo ficheiro.
As métricas de componentes são sempre por central (nota components_split_by_park).
Componentes
Uma métrica de um nível de componente dá uma coluna por componente. Os níveis são inverter, gak (caixa de junção), string, turbine, sensor, meter, battery_box (contentor), battery_storage (rack), battery_module, battery_cell e battery_pcs (conversor).
Sem components, a exportação contém todos os componentes visíveis das centrais, lane_limit por métrica e página. Se houver mais, a nota lanes_truncated indica o total; peça a página seguinte com lane_page.
components restringe a exportação aos componentes que indicar. Uma referência tem a forma <nível>:<id>, por exemplo inverter:1043. Um sensor ou contador que o Mirox mede, mas que não tem entrada nos componentes da central, tem uma referência da forma sensor:h3f9c2a71b04e6d5. A rota de componentes lista as referências de uma central. Uma referência que não pertence a nenhuma das centrais selecionadas responde 400 unknown_lane.
metrics=inverter.ac_power&components=inverter:1043,inverter:1044
Consultas MetricsQL em bruto
expr acrescenta a uma exportação uma consulta em bruto em MetricsQL, a linguagem de consulta da base de dados de séries temporais da plataforma — para uma série para a qual a coleção não tem métrica. O parâmetro pode repetir-se até cinco vezes; cada expressão pode ter até 4 000 caracteres. Um pedido pode levar só expr, ou metrics e expr em conjunto; as colunas das métricas vêm primeiro.
expr=sum by (inverter_id) (powerplant_inverter_power_ac)&park=ABC123DEF456&window=yesterday&step=15min
Uma expressão é avaliada por central, como um painel a avalia: sobre os dados da própria central, no passo pedido, como amostras brutas — qualquer passo é permitido, e values e as regras de agregação das métricas não se aplicam. O Mirox acrescenta a central a cada seletor da expressão; uma expressão que nomeia ela própria uma etiqueta park, organization ou plant é recusada com 400 expr_forbidden_label.
| Caso | header=name | header=id |
|---|---|---|
| Uma série por central | MetricsQL sum by (inverter_id) (powerplant_inverter_power_ac) | expr1 |
| Várias séries em alguma central | o cabeçalho seguido do name{labels} próprio de cada série | expr1{inverter_id="INV1"} |
| Várias centrais | o nome da central à frente, como em qualquer coluna | ABC123DEF456/expr1 |
Quando uma expressão devolve várias séries em alguma das suas centrais, as colunas dessa expressão em todas as centrais levam as etiquetas das séries, para que um ficheiro tenha uma só nomenclatura por expressão. Um cabeçalho com mais de 1 000 caracteres é cortado com … dentro da expressão, nunca no texto da série. Na resposta JSON, columns[].key é o texto de header=id e columns[].metric é o ID da expressão, expr.e1, expr.e2, …, que as notas e as recusas usam. Uma central em que a expressão não devolve nada mantém uma coluna vazia, com a nota expr_no_series; com várias centrais, cada central recebe as suas próprias colunas, com a nota expr_split_by_park.
Uma expressão pode devolver no máximo 500 séries numa central (400 expr_too_many_series); agregue-a, por exemplo com sum by (…). As séries contam para as mesmas 400 colunas e 1 800 000 valores de qualquer exportação: a primeira leitura de cada expressão em cada central é uma sonda curta, as larguras são somadas em todo o pedido, e um pedido que ultrapassa os limites é recusado com 400 over_budget e params.series antes de qualquer leitura completa de qualquer expressão. Uma expressão que não se consegue analisar, está vazia, é demasiado longa ou que a base de dados recusa responde 400 expr_invalid com o reason.
A estimativa conta uma expressão como uma coluna por central, porque as suas séries só se conhecem depois de lida. As expressões não são guardadas em modelos.
Resposta CSV
A resposta está em UTF-8, com o nome de ficheiro series_export_<primeiro dia>_<último dia>_<passo>.csv. Uma resposta maior do que cerca de 1 MB é comprimida quando o pedido contém Accept-Encoding: gzip (curl: --compressed).
As colunas são, por esta ordem: o tempo, o Desvio UTC quando se aplica, e depois as métricas pela ordem de metrics.
| Caso | header=name | header=id |
|---|---|---|
| Tempo | Date | timestamp |
| Desvio UTC | UTC offset | utc_offset |
| Uma central, ou centrais combinadas | Grid feed-in (kWh) | plant.grid_feedin |
| Centrais separadas | 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, várias centrais | Sunnyside - WR 01.01 - AC power per inverter (W) | ABC123DEF456/inverter:1043/inverter.ac_power |
| Métrica com variantes, como três fases | o nome seguido da variante | o ID seguido de #<variante> |
| Uma métrica em dois modos de valores | o mesmo nome duas vezes | plant.grid_feedin:delta, plant.grid_feedin:cumulative |
| Consulta MetricsQL em bruto | MetricsQL <expressão>, seguido das etiquetas das séries quando há várias | expr1, expr1{inverter_id="INV1"} — consulte Consultas MetricsQL em bruto |
Use header=id em scripts e livros
Os nomes são feitos para pessoas: seguem language e mudam quando uma métrica muda de nome. Os IDs são estáveis. Um script ou um livro que encontra as suas colunas pelo cabeçalho deve pedir header=id. Num modelo pode também dar a cada coluna um texto de cabeçalho seu.
A coluna de tempo é formatada por passo, salvo se datetime_format for indicado:
| Passo | Formato | Exemplo |
|---|---|---|
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 |
Cada linha é marcada com o início do seu intervalo. Um valor em falta é uma célula vazia, pelo que «sem dados» e «zero» se distinguem; empty=zero escreve 0 em vez disso.
Quatro cabeçalhos da resposta repetem o que foi resolvido:
| Cabeçalho | Conteúdo | Exemplo |
|---|---|---|
X-Mirox-Step | o passo | day |
X-Mirox-Grid | o calendário | local:Europe/Berlin |
X-Mirox-Window | início e fim do período exportado | 2026-08-01T00:00:00+02:00/2026-09-01T00:00:00+02:00 |
X-Mirox-Notes | as notas, separadas por ; | step_auto:step=day |
Resposta JSON
format=json responde com a mesma tabela em dados estruturados:
| Campo | Conteúdo |
|---|---|
window | start, end, grid, tz_name, step, e aligned quando o período foi alargado |
parks | as centrais exportadas com uid, name e timezone |
buckets | as linhas: start como hora com desvio, ts como segundos Unix |
columns | uma entrada por coluna: key (o texto de header=id), metric, name, unit, digits, quantity, values_mode, merge, park_uid, lane (ref, level, title), variant, e values pela ordem de buckets; um valor em falta é null |
notes | as notas com code, metric e params |
lanes_total | componentes por métrica de componente, antes da paginação |
lane_page, lane_limit | a página que foi entregue |
totals | values, queries e duration_ms da exportação |
Notas
Uma nota diz-lhe o que o Mirox fez por iniciativa própria. Nunca faz falhar uma exportação. As notas fazem parte da resposta JSON e do cabeçalho X-Mirox-Notes. O cabeçalho contém até 1 KB de notas, escritas como code:key=value,key=value e separadas por ;. Se não couberem todas, o cabeçalho termina com notes_omitted:count=<n>; a resposta JSON contém-nas todas.
| Nota | Significado |
|---|---|
parks_dropped | As centrais que indicou mas não pode ler ficaram de fora. uids indica-as. |
grant_required | Uma métrica monetária fica vazia numa central em que lhe falta a permissão de contabilidade. |
value_mode_ignored | O modo de valores pedido não se aplica à métrica; foi exportada como native. |
energy_delta_fine_step | Uma energia por intervalo num passo inferior a 15 minutos mostra degraus do contador. twin indica a métrica de potência correspondente. |
legacy_id_mapped | Um ID da exportação anterior foi traduzido. from, to e exactness dizem como. |
merge_not_meaningful | A métrica não pode ser combinada entre centrais e é mostrada por central. |
components_split_by_park | As métricas de componentes são mostradas por central. |
merged_on_utc | As centrais estão em fusos horários diferentes; as linhas estão em UTC. |
utc_calendar_unsupported | A métrica não tem valor no calendário UTC; a sua coluna está vazia. |
window_aligned | O período foi alargado a intervalos completos. start e end dão o resultado. |
end_clamped | O período entrava no futuro e termina agora. |
step_auto | O passo que auto escolheu. |
step_folded | Com mismatch=sparse: a métrica foi lida num step mais fino e agregada à grelha. |
step_sparse | Com mismatch=sparse: a métrica tem um valor por step, na primeira linha de cada um dos seus intervalos. |
lanes_truncated | A métrica tem mais componentes do que a página comporta. total, page e limit dizem onde está. |
lanes_unpaged | As séries medidas sem entrada nos componentes da central foram exportadas tal como medidas. |
metric_unavailable | A métrica não tem valores para uma central; a coluna está vazia. reason é planned, not_applicable, no_data_source, draft, deleted, unknown_lane, off_grid ou, num modelo, not_permitted. |
expr_no_series | Uma consulta em bruto não devolveu nenhuma série numa central; a sua coluna está vazia. |
expr_split_by_park | As consultas em bruto são lidas por central e recebem um conjunto de colunas por central. |
provider_note | Uma observação da própria métrica, por exemplo que fonte respondeu. |
Uma coluna vazia é sempre mantida. Uma métrica que não se aplica a uma das centrais, ou uma métrica monetária sem a permissão de contabilidade, deixa a sua coluna no lugar, pelo que as posições das outras colunas nunca se alteram.
Estimar antes de exportar
GET /v1/export/series/estimate
A rota aceita os parâmetros da exportação, sem o formato do ficheiro, e responde com o que a exportação seria — sem ler dados e sem contar para o limite horário.
| Campo | Conteúdo |
|---|---|
step, grid, window | aquilo em que o pedido se resolve |
parks, columns, rows, values, queries | o tamanho |
bytes_csv, seconds_estimate | tamanho aproximado do ficheiro e duração |
within_budget | se a exportação seria entregue |
preview_ok | se é suficientemente pequena para a pré-visualização na aplicação (200 000 valores) |
limits | os limites em vigor |
per_step | para cada passo: served_by_all, values, within_budget, e o reason se não |
refusals | cada erro com que a exportação responderia, com code, params e hint |
notes | as notas que a exportação teria |
Uma recusa nunca faz falhar a estimativa: responde 200 e lista a recusa. A estimativa conta, não gera nada: os rótulos das linhas e os cabeçalhos são os da exportação. Uma consulta em bruto conta como uma coluna por central, e com mismatch=sparse as notas indicam as colunas agregadas e esparsas.
O catálogo de métricas
GET /v1/export/series/catalog
| Parâmetro | Valores | Predefinição | Significado |
|---|---|---|---|
park, portfolio | UIDs | — | As centrais em relação às quais as métricas são avaliadas. Sem centrais, é listada a coleção inteira. |
language | en, de, es, fr, it, pt | en | O idioma dos nomes e das descrições. |
level | um nível | todos | Apenas um nível. |
quantity | energy, amount, rate, level, ratio, state, price | todas | Apenas uma grandeza. |
search | texto, até 100 caracteres | — | Pesquisa no nome, na descrição, na unidade, no ID e nos IDs da exportação anterior. |
include_unavailable | true, false | true | Lista também as métricas que não podem ser exportadas para as centrais selecionadas. |
page, limit | números, limit até 100 | 1, 100 | Paginação. |
sort | order, name, id, level, com - à frente para ordem descendente | order | A ordem da lista. |
format | json, csv | json | csv responde com o glossário. |
Cada métrica tem, além do seu ID, nome, descrição, unidade e nível:
| Campo | Conteúdo |
|---|---|
quantity | o que o número é: energy, amount (outra grandeza contada), rate (potência), level, ratio, state ou price |
value_modes, default_value_mode | os modos de valores que oferece, e o que auto escolhe |
export_steps | os passos que oferece |
native_step_seconds | com que frequência é medida |
merge | como várias centrais são combinadas |
twin_item_id | para uma métrica de energia, a sua métrica de potência |
lane_level | para uma métrica de componente, o nível dos seus componentes |
legacy_ids | os IDs da exportação anterior pelos quais responde |
applies_parks | em quantas das centrais selecionadas se aplica |
exportable, export_reason | se pode ser exportada e, se não, porquê: draft, planned, grant_required, not_applicable ou no_source |
Até 10 centrais, cada central é verificada quanto ao equipamento de que uma métrica precisa. Acima disso, as centrais são avaliadas apenas pelo seu tipo; o que falta a uma central em particular aparece no momento da exportação como nota metric_unavailable.
Glossário. format=csv responde com a lista filtrada inteira num ficheiro, metric_catalog_<language>.csv, com as colunas ID, nível, nome, unidade, descrição, grandeza, modos de valores, passos, intervalo de medição, combinação entre centrais, nota e IDs anteriores. page e limit não se aplicam.
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
Métricas disponíveis
A coleção está ordenada por nível. O prefixo de um ID diz onde uma métrica pertence.
| Nível | level | Prefixo do ID | O que contém |
|---|---|---|---|
| Central · medições | plant | plant. | O que a própria central mede: o contador de rede, as somas dos inversores, os sensores do local, os limites de potência que lhe foram impostos. |
| Central · referência | plant_reference | plant. | O que a central deveria ter produzido: irradiação no plano dos módulos, produção esperada, performance ratio, produção específica, perdas. |
| Central · compensação | plant_compensation | plant. | Curtailment e perdas por limitação como energia e potência, por destinatário e método. |
| Métricas | metrics | availability., organization. | Valores de disponibilidade, horas de sol e as métricas da sua organização. |
| Inversor | inverter | inverter. | Uma coluna por inversor. |
| Caixa de junção | gak | gak. | Uma coluna por caixa de junção. |
| String | string | string. | Uma coluna por string. |
| Bateria | battery | battery. | O armazenamento no seu conjunto: energia, potência, estado de carga, setpoints. |
| Contentor de baterias | battery_box | battery_box. | Uma coluna por contentor. |
| Rack de baterias | battery_storage | battery_storage. | Uma coluna por rack. |
| Módulo de bateria | battery_module | battery_module. | Uma coluna por módulo. |
| Célula de bateria | battery_cell | battery_cell. | Uma coluna por célula ou ponto de medição. |
| Conversor de bateria (PCS) | battery_pcs | battery_pcs. | Uma coluna por conversor. |
| Aerogerador | turbine | turbine. | Uma coluna por turbina. |
| Sensor | sensor | sensor. | Uma coluna por sensor: irradiância, irradiação, temperatura, humidade, vento. |
| Contador | meter | meter. | Uma coluna por contador de energia. |
| Infraestrutura | infrastructure | infrastructure. | O caminho dos dados e o local: completude, estado dos registadores, rede, alarmes, ligações de controlo. |
| Meteorologia | weather | weather. | A meteorologia no local, incluindo vento e temperatura a 80, 120 e 180 m. |
| Mercado | market | market. | Preços e valores de mercado. |
| Finanças da central | financial | financial. | Valores monetários da central. Requerem a permissão de contabilidade. |
A lista completa com nomes, unidades e descrições no seu idioma é o catálogo, o ficheiro de glossário, ou Explicações no separador Métricas. Os valores de previsão meteorológica da exportação anterior não fazem parte da coleção; consulte o guia de migração.
Componentes de uma central
GET /v1/export/series/lanes
| Parâmetro | Valores | Predefinição | Significado |
|---|---|---|---|
park | um UID de central | obrigatório | A central. |
level | um nível de componente | obrigatório | Consulte Componentes. |
metric | um ID de métrica | — | Para sensores e contadores: lista os que forneceram esta métrica nos últimos 30 dias. |
search | texto | — | Pesquisa nos nomes. |
include_hidden | true, false | false | Lista também os componentes ocultos. |
page, limit | números, limit até 100 | 1, 50 | Paginação. |
sort | order, name, com - à frente para ordem descendente | order | order é a ordem das colunas na exportação. |
Cada entrada tem a referência ref para o parâmetro components, o name, o level, o elemento superior (parent_ref, parent_name — o inversor de uma string, por exemplo), attributes (role de um contador, position de um sensor de irradiância, vendor), hidden, e source: db para uma entrada dos componentes da central, store para uma série que é medida mas não tem essa entrada.
Uma central que não existe e uma central que não pode ler respondem ambas 404 park_not_found.
Sistema de modelos
Um modelo é uma lista guardada de métricas com predefinições para passo, período, valores, fuso horário, combinação de centrais, tamanho da página de componentes e cabeçalhos das colunas. Para que servem os modelos e como geri-los na aplicação está no guia da exportação de métricas.
Exportar um modelo
GET /v1/export/series/template/{template_uid}
A rota aceita os parâmetros da exportação, exceto metrics, components e values, que o modelo fixa. Cada parâmetro que omitir assume a predefinição do modelo; cada parâmetro que indicar prevalece sobre ela.
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
- Um modelo de outra organização responde
404 template_not_found. - Um modelo legado responde
400 template_is_legacy;params.legacy_urlé a ligação que o exporta. - Uma coluna cuja métrica já não está disponível é exportada vazia sob o seu cabeçalho, com a nota
metric_unavailable. O mesmo se aplica a uma métrica da sua organização quando exporta como Externo (reasonnot_permitted).
Modelos do sistema
| Modelo | UID | Passo | Período |
|---|---|---|---|
| Exportação padrão | CAFE1000CAFE | day | previous_month |
| Exportação alargada | CAFE1001CAFE | day | previous_month |
| Exportação alargada (disponibilidade dos inversores) | CAFE1002CAFE | day | previous_month |
| Exportação de disponibilidade energética | CAFE1003CAFE | day | previous_month |
| Relatório técnico | ABCD12340002 | day | previous_month |
| Turbinas eólicas | CAFE1010CAFE | day | previous_month |
| Armazenamento em baterias | CAFE1020CAFE | day | previous_month |
| Sensores de irradiância | CAFE1030CAFE | 15min | yesterday |
Os primeiros cinco sucedem a CAFE0000CAFE, CAFE0001CAFE, CAFE0002CAFE, CAFE0003CAFE e ABCD12340001, que continuam a funcionar na rota legada. As suas colunas estão listadas no guia de migração. Oferecem os passos day, week, month, quarter e year; os quatro primeiros oferecem também 15min e 1h.
Gerir modelos
Os modelos são listados, lidos, criados, alterados e eliminados em /v1/export/template. A leitura funciona com um token Metric Export. A escrita requer a função de organização Administrador, Moderador, Gestor de ativos (técnico) ou Gestor de ativos (comercial) e uma sessão iniciada ou um token Acesso total.
| Pedido | Finalidade |
|---|---|
GET /v1/export/template | Listar modelos. view=current lista os modelos do sistema desta página e os modelos da sua organização; view=legacy, a predefinição, lista os modelos guardados como antes; view=all lista ambos. kind=series ou kind=legacy filtra. |
GET /v1/export/template/{template_uid} | Ler um modelo. |
POST /v1/export/template | Criar um modelo com kind=series e o conteúdo em spec. Sem kind, o pedido cria um modelo legado a partir de metric_ids, como antes. |
PUT /v1/export/template/{template_uid} | Alterar o nome, a descrição ou spec. O tipo não pode mudar. |
DELETE /v1/export/template/{template_uid} | Eliminar um modelo. Os modelos do sistema não podem ser alterados nem eliminados. |
O spec de um modelo:
| Campo | Valores | Predefinição |
|---|---|---|
items | 1 a 40 entradas, cada uma com metric e, opcionalmente, values e label | obrigatório |
step | um passo | auto |
values | um modo de valores | auto |
tz | local, utc | local |
window | uma predefinição | previous_month |
multi_park_agg | merge, split | merge |
lane_limit | 1 a 100 | 50 |
header | name, id | name |
mismatch | refuse, sparse | refuse |
label é o texto de cabeçalho da coluna com header=name. Uma métrica só pode aparecer uma vez, e um modelo não contém consultas em bruto. Quando um modelo é guardado, todas as métricas têm de ser exportáveis, e as métricas têm de partilhar um passo — com mismatch=sparse, cada uma tem de servir algum passo; caso contrário, a resposta é 422 spec_invalid e params.problems indica a métrica e o motivo. Um modelo corre com o seu próprio mismatch (a aplicação mostra-o como Métricas de outro passo: Estrito ou Flexível); o parâmetro na ligação de exportação prevalece.
Converter um modelo legado
POST /v1/export/template/{template_uid}/convert
| Campo | Valores | Significado |
|---|---|---|
name | até 100 caracteres | O nome do novo modelo. Predefinição: o nome do modelo legado seguido de «(new)». |
dry_run | true, false | true responde com a correspondência sem criar nada. |
A resposta lista mapped (legacy_id, metric, values, exactness: exact ou approximate) e unmapped (legacy_id, reason: formula, no_equivalent, report_value ou instant, e até três suggestions), e, salvo se tiver sido um ensaio, o novo template. Um ensaio responde 200, uma conversão 201.
O novo modelo exporta dias ao longo do mês anterior. O modelo legado nunca é alterado. Duas colunas legadas que leem o mesmo contador tornam-se uma só coluna. 422 nothing_to_convert significa que nenhuma coluna tem equivalente, ou que o modelo não é um modelo legado.
Limites
Uma exportação é respondida dentro de um único pedido, pelo que o seu tamanho é limitado. Cada limite é verificado antes de os dados serem lidos; um pedido demasiado grande é recusado de imediato e diz-lhe o que caberia.
| Limite | Valor |
|---|---|
| Métricas por pedido | 20; num modelo 40 |
| Consultas MetricsQL em bruto por pedido | 5, de 4 000 caracteres cada, com no máximo 500 séries por central |
| Centrais por pedido | 50 |
| Componentes por métrica e página | 50 por predefinição, no máximo 100 |
| Colunas | 400 |
| Valores por coluna | 180 000 — 125 dias a 1min, 625 dias a 5min, cinco anos a 15min |
| Valores no total | 1 800 000 (linhas × colunas) |
| Período | 1827 dias |
| Leituras do armazenamento de medições por pedido | 1 500 |
| Duração | 50 segundos |
| Exportações por utilizador e hora | 240 |
| Exportações em curso ao mesmo tempo | 3 por organização |
Dividir uma exportação grande
400 over_budget indica em params o que era necessário e o que é permitido, e em hint a saída: step, o passo mais grosso seguinte que cabe, e max_days, o período mais longo que cabe no passo pedido. Se construir pedidos num script, consulte primeiro a estimativa; o seu per_step lista o tamanho para cada passo.
Se não quiser nem um passo mais grosso nem um período mais curto, divida a exportação:
| Dividir por | Como |
|---|---|
| Tempo | Um pedido por mês ou trimestre. Use os parâmetros de calendário (year=2026&month=7) e junte os ficheiros. |
| Central | Um pedido por central ou carteira. |
| Métrica | As métricas de componentes em pedidos próprios. Uma métrica de componente numa central com 200 inversores são 200 colunas. |
| Página | lane_page=1, 2, … para os componentes de uma métrica. |
Algumas métricas são apuradas a partir de várias fontes para cada dia, sobretudo plant.production_reported (Produção, resolvida). Precisam de muito mais leituras do armazenamento de medições do que uma leitura de contador, em todos os passos. Um pedido ou um modelo que contém uma métrica destas abrange atualmente cerca de nove meses-central: uma central ao longo de nove meses, ou nove centrais ao longo de um mês. Um passo de uma semana ou mais alarga o período a intervalos completos, e é o período alargado que conta. Divida essas exportações por tempo ou por central, ou exporte a métrica num pedido próprio.
429 busy e 429 rate_limited têm o cabeçalho Retry-After com os segundos a aguardar.
Erros
Um erro das rotas desta página tem esta 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 é estável e destina-se a programas. message é um texto em inglês para pessoas. params diz o que estava errado, hint o que funcionaria.
| Estado | code | Significado | params e hint |
|---|---|---|---|
| 400 | scope_required | Não foi indicado nem park nem portfolio. | hint.example |
| 400 | unknown_metric | Um ID de métrica não existe. | params.ids; hint.suggestions com IDs semelhantes |
| 400 | legacy_metric_id | Um ID da exportação anterior não tem equivalente na coleção. | params.id, params.legacy_url; hint.reason, hint.closest, hint.pending, hint.legacy_url |
| 400 | metric_not_exportable | A métrica existe, mas não é uma série temporal que possa exportar. | params.id, params.reason: draft, planned, no_source, events ou master |
| 400 | window_conflict | O período foi indicado de mais de uma forma. | params.families |
| 400 | window_invalid | O período não é válido. | params.reason: end_before_start, start_in_future, before_2020, too_long, day_requires_month, start_required ou invalid_date |
| 400 | step_not_served | Uma métrica não oferece o passo pedido. | params.metrics com os passos de cada métrica; hint.offered_common |
| 400 | no_common_step | As métricas não partilham nenhum passo. | params.metrics; hint.split |
| 400 | over_budget | A exportação é maior do que um limite. | params.values, limit, queries, query_limit, columns, column_limit, parks; com mais de 50 centrais, params.parks e park_limit; com uma consulta em bruto, params.series; hint.step, hint.max_days, hint.lane_limit, hint.reduce |
| 400 | unknown_lane | Uma referência de componente não pertence a nenhuma das centrais. | params.refs |
| 400 | expr_invalid | Uma consulta em bruto não pode ser executada. | params.expr, params.reason: empty, syntax (com detail), too_long, too_large, store (com o detail da base de dados) ou parser_unavailable |
| 400 | expr_forbidden_label | Uma consulta em bruto nomeia ela própria uma central, um parque ou uma organização. | params.expr, params.labels |
| 400 | expr_too_many_series | Uma consulta em bruto devolve mais de 500 séries numa central. | params.expr, params.park, params.series, params.limit; hint.reduce |
| 400 | separator_conflict | O separador de colunas e o separador decimal são iguais. | — |
| 400 | invalid_datetime_format | datetime_format não é um padrão válido. | hint.example |
| 400 | template_is_legacy | O modelo é um modelo legado. | params.legacy_url |
| 403 | no_accessible_parks | Não pode ler nenhuma das centrais selecionadas. | — |
| 403 | metric_forbidden | Foi pedida uma métrica da sua organização com a função de organização Externo. | params.ids |
| 404 | template_not_found, park_not_found | O modelo ou a central não existe, ou não o pode ler. | — |
| 409 | name_conflict | Já existe um modelo com este nome. | params.name |
| 422 | — | Um parâmetro tem um valor fora da sua lista, ou metrics contém mais de 20 IDs. | o campo e o motivo |
| 422 | spec_invalid, use_spec, nothing_to_convert | Um modelo não pode ser guardado ou convertido tal como foi enviado. | params.problems |
| 429 | busy | Há demasiadas exportações em curso. | cabeçalho Retry-After |
| 429 | rate_limited | O limite horário está esgotado. | cabeçalho Retry-After |
| 502 | store_error | O armazenamento de medições respondeu com um erro. Nada foi exportado; um valor nunca é substituído por zero. | params.metric |
| 503 | store_timeout | O armazenamento de medições não respondeu a tempo. | hint.step com um passo mais grosso |
401 significa que o token está em falta, expirou ou foi revogado.
IDs da exportação anterior
O parâmetro metrics também aceita os IDs da exportação anterior, como energy_grid_daily ou raw_grid_power. Um ID com equivalente é traduzido para a sua métrica, no modo de valores que mais se aproxima do número anterior, e a nota legacy_id_mapped diz que métrica respondeu e se o número é o mesmo (exact) ou a mesma grandeza lida de uma forma melhor (approximate).
Um ID sem equivalente responde 400 legacy_metric_id. hint.reason diz porquê, hint.closest indica a métrica mais próxima quando existe, hint.pending indica a métrica que está previsto vir a fornecê-lo, e legacy_url é a ligação da exportação anterior que continua a fornecer o ID. Com mais centrais do que uma ligação pode indicar, legacy_url indica a primeira central e params.legacy_url_scope é first. Um ID de componente de um nível de bateria não tem ligação da exportação anterior; hint.legacy_route é então none. O guia de migração lista todos os IDs.
Excel e scripts
- Exportação de métricas para Excel — receitas, e a ligação Power Query com o cabeçalho
Authorization - Gerador de relatórios externo — um exemplo completo em Python
Funcionalidades relacionadas
- Exportação de métricas — a página Exportação de dados
- Migrar para a exportação de métricas — IDs antigos, novas métricas e o que muda
- API de exportação legada — as ligações de exportação anteriores
- Métricas — definir métricas próprias e exportá-las
- Tokens de API — criar o token Metric Export
- Visão geral da API — a referência interativa de todas as rotas