unit-code
1

Situação da stage

—

A stage guarda os pontos em formato longo (unit × tag × granularidade × data/hora → valor) na tabela stage_pontos — pronta para Excel e Power BI (aba Ajuda).

2

Batch diário

—

O batch entende sozinho o último dado buscado e roda dali até o momento atual — hora e dia refazem o dia anterior (fechado, valor final) e o dia em andamento; o mês refaz o mês anterior e o corrente. Nada além disso é varrido e nada duplica. Consolida as tags marcadas como ativas na lista abaixo; a execução manual (inclusive de tags específicas) fica na aba Execução.

3

Conexão e credenciais

——

Dois pares independentes: um para consultar a Intelup (usado pelo batch e pelas exportações) e outro que o cliente envia para este extrator em /public/data_export/points. Trocar um não afeta o outro. Os valores ficam guardados no banco e são exibidos nesta tela (ambiente de teste).

API da Intelup — consulta à plataforma

API do extrator — o que o cliente usa para consultar este servidor

Enquanto este par não for cadastrado, a API do extrator aceita as credenciais da Intelup (comportamento anterior). Depois de cadastrado, só ele autentica — o unit-code continua sendo o da unidade.

4

Tags da unidade

—

A coluna ativa define o que o batch diário consolida. As demais colunas mostram a consolidação no banco: quantos pontos e qual período cada tag cobre, por granularidade.

Substituir a lista de tags (avançado)

Uma tag por linha, formato tagCode;Nome. Substitui a lista inteira; a marcação de ativas é preservada para os códigos que continuarem.

5

Usuários do portal

—

Perfil admin acessa tudo; perfil operação vê apenas Execução, Consulta, Exportação e Ajuda — ideal para o cliente acompanhar e consultar sem tocar nas configurações. As senhas são guardadas com hash no banco.

1

Executar batch agora

O batch parte do último dado no banco e reprocessa o período em andamento — pode rodar quantas vezes quiser, nada duplica. Cada tag parte da sua própria marca: uma tag cadastrada depois é preenchida desde o início do histórico da unidade. O campo "Início" força o reprocessamento de todas as tags a partir da data escolhida. Falha em uma tag não interrompe as demais (status "parcial" lista os erros).

2

Execuções

—
1

Consultar a stage

→
1

Tags a exportar

0 tags
2

Período e formato

→

O arquivo é gerado a partir da stage — sem chamadas à API, em segundos. Período vazio exporta tudo o que está consolidado. Se precisar do dado mais recente, rode antes o batch na aba Execução.

?

Como consumir os dados da stage

O modelo

A tabela stage_pontos guarda os pontos em formato longo — uma linha por medição:

unit | tag_code | granularidade | ts | valor | company | atualizado_em
002  | ENERGIA_BRUTA | hora | 13-08-2026 14:00:00 | 3.42 | BIOSUL | 14-08-2026 02:07:11
  • granularidade: janela de agregação — hora (um valor por hora), dia (por dia) ou mes (por mês — ts no dia 1º).
  • ts: rótulo do período, exibido como dd-mm-aaaa hh:mm:ss — os dados já vêm tratados da plataforma, sem nenhuma conversão (batem 1:1 com o Postman). No banco a coluna é datetime; filtros SQL usam a forma padrão, ex.: '2026-08-01'.
  • stage_tags: nome amigável, ordem e flag "ativa" de cada tag; batch_execucoes: histórico das cargas.
  • O batch diário atualiza a partir do último valor — o mesmo ponto rebuscado é sobrescrito, nunca duplicado.

Power BI (conexão direta ao banco)

  1. Obter Dados → Banco de dados PostgreSQL.
  2. Servidor: <host-deste-servidor>:5433 · Banco: intelup.
  3. Usuário somente-leitura: leitura · senha: leitura.
  4. Selecione stage_pontos (e stage_tags, se quiser os nomes) — ou use um dos modelos de consulta SQL abaixo.

Modelo por hora — um valor por hora dentro do período (ex.: um dia):

SELECT p.tag_code, t.nome_tag, p.ts, p.valor
FROM stage_pontos p
LEFT JOIN stage_tags t ON t.unit = p.unit AND t.tag_code = p.tag_code
WHERE p.unit = '002' AND p.granularidade = 'hora'
  AND p.ts >= '2026-08-13' AND p.ts < '2026-08-14'
ORDER BY p.ts, p.tag_code;

Modelo por dia — um valor consolidado por dia (ex.: um mês):

SELECT p.tag_code, t.nome_tag, p.ts, p.valor
FROM stage_pontos p
LEFT JOIN stage_tags t ON t.unit = p.unit AND t.tag_code = p.tag_code
WHERE p.unit = '002' AND p.granularidade = 'dia'
  AND p.ts >= '2026-08-01' AND p.ts < '2026-09-01'
ORDER BY p.ts, p.tag_code;

Modelo por mês — um valor por mês, com ts no dia 1º (ex.: o ano):

SELECT p.tag_code, t.nome_tag, p.ts, p.valor
FROM stage_pontos p
LEFT JOIN stage_tags t ON t.unit = p.unit AND t.tag_code = p.tag_code
WHERE p.unit = '002' AND p.granularidade = 'mes'
  AND p.ts >= '2026-01-01' AND p.ts < '2027-01-01'
ORDER BY p.ts, p.tag_code;

Para filtrar tags específicas, acrescente ao WHERE: AND p.tag_code IN ('AT-2001-CH4', 'AIT-4001-CH4'). O fim do período é sempre exclusivo (<).

Excel (Power Query, sem instalar driver)

Dados → Obter Dados → De Outras Fontes → Da Web, com a URL de consulta em CSV:

http://<host-deste-servidor>:8990/api/stage/consulta?unit=002&gran=hora&ini=2026-08-01&fim=2026-09-01&formato=csv&limite=200000

Ou cole no Editor Avançado (a atualização passa a ser 1 requisição — segundos, não minutos):

let
  F = Web.Contents("http://<host>:8990/api/stage/consulta",
        [Query=[unit="002", gran="hora", ini="2026-08-01", fim="2026-09-01",
                formato="csv", limite="200000"]]),
  T = Csv.Document(F, [Delimiter=";", Encoding=65001]),
  P = Table.PromoteHeaders(T)
in
  P

Para visão pivotada (horas nas colunas), use Transformar → Coluna Dinâmica sobre valor — ou simplesmente baixe o arquivo pronto na aba Exportação XLSX/CSV. Quem preferir conexão direta ao banco no Excel: instale o driver ODBC do PostgreSQL (psqlODBC) e use Dados → Obter Dados → ODBC.

Parâmetros da consulta web (/api/stage/consulta)

  • unit (obrigatório) · gran: hora | dia | mes.
  • tags: lista separada por vírgula (vazio = todas) · ini/fim: datas — na URL o fim é exclusivo; nas telas os campos "Até"/"Fim" já são inclusivos.
  • formato: json (padrão) ou csv (separador ";", decimal vírgula) · limite: máx. 200000 linhas.

API compatível com a Intelup

Quem já integra com a API da plataforma pode apontar para este servidor trocando só a URL base — mesmo caminho, mesmos headers e mesma resposta JSON, servida da stage (sem novas chamadas à plataforma):

GET http://<host-deste-servidor>:8990/public/data_export/points
  • Headers: token, code e unit-code — mesmos nomes da plataforma, mas validados contra as credenciais próprias do extrator (Configurações › Conexão e credenciais): são independentes das usadas para consultar a Intelup, então o cliente recebe um par só dele. Enquanto a unidade não tiver par próprio, o da Intelup segue valendo.
  • Parâmetros: tag-code (lista separada por ;; vazio = todas as tags), start-time/end-time (ISO, ex.: 2026-08-01T00:00:00Z — fim exclusivo) e group-by: hour, day ou month (obrigatório — a stage não guarda dados brutos/raw).
  • Resposta: {"data": [{"unit", "company", "tagCode", "nomeTag", "time", "value"}]} — rótulos de tempo idênticos aos da plataforma. nomeTag é extensão deste servidor (nome amigável do cadastro de tags; a API da Intelup devolve só o tagCode, e clientes existentes simplesmente ignoram o campo extra).

Método de consulta Power Query (Excel/Power BI) — Dados → Obter Dados → De Outras Fontes → Consulta Nula → Editor Avançado, cole o M abaixo; para mudar a granularidade, troque só group-by e o período:

let
  F = Web.Contents("http://<host>:8990/public/data_export/points",
        [Headers=[token="SEU_TOKEN", code="SEU_CODE", #"unit-code"="002"],
         Query=[#"tag-code"="AT-2001-CH4;AIT-4001-CH4", #"group-by"="hour",
                #"start-time"="2026-08-13T00:00:00Z", #"end-time"="2026-08-14T00:00:00Z"]]),
  J = Json.Document(F),
  T = Table.FromRecords(J[data])
in
  T
  • Hora: #"group-by"="hour" — um valor por hora; período típico de um dia (2026-08-13 → 2026-08-14).
  • Dia: #"group-by"="day" — um valor por dia; período típico de um mês (2026-08-01 → 2026-09-01).
  • Mês: #"group-by"="month" — um valor por mês, time no dia 1º; período típico do ano (2026-01-01 → 2027-01-01).

Na primeira atualização o Excel pergunta o modo de acesso à fonte web: escolha Anônimo — a autenticação vai nos headers do próprio M. Alternativa sem credenciais na consulta: a conexão direta ao PostgreSQL (seção Power BI acima), usada na planilha de exemplo com abas Hora, Dia e Mês.

Datas e horários

  • Datas no formato dd-mm-aaaa e horas hh:mm:ss (24h) em todas as telas e arquivos.
  • Os rótulos de data/hora são os fornecidos pela plataforma — os dados já vêm tratados na origem; nenhuma conversão é aplicada.
  • Apenas o horário do batch diário (Configurações) é informado no relógio de Brasília.

Batch diário

  • Roda uma vez por dia, no horário de Brasília configurado, partindo automaticamente do último dado buscado: hora e dia refazem o dia anterior (que fechou com valor final) e o dia em andamento; o mês refaz o mês anterior e o corrente até o momento.
  • Consolida as tags marcadas como ativas em Configurações. Administradores podem, na aba Execução, rodar manualmente todas ou só um subconjunto — e fazer a primeira carga de uma unidade nova informando o "início do histórico"; o perfil operação acompanha as execuções.
  • Usa as credenciais da API da Intelup guardadas no banco (Configurações › Conexão e credenciais) — o par do extrator serve só para autenticar quem consulta este servidor.
Datas em dd-mm-aaaa e horas com segundos (24h); rótulos como a plataforma fornece, sem conversões. A stage é a fonte única: o batch diário alimenta o banco, e consultas/exportações leem dele — sem novas chamadas à API.