Pular para o conteúdo

Transferir dados históricos

Os dados históricos de cada dispositivo estão em ficheiros de texto (datalogs) no servidor do dispositivo. Cada ficheiro cobre um dia, um mês ou o histórico completo. Precisa de permissão de leitura no dispositivo.

Para uma exportação sem código, utilize os relatórios da aplicação. Consulte os seus dados.

  1. Encontre o servidor do dispositivo. Chame get_device_info.php e leia o campo device_server. Consulte a API REST.
  2. Encontre a ordem das colunas. Chame get_device_definitions.php?family_id=<família> e leia readings e output_names.
  3. Calcule o nível e o número do ficheiro (bin) para o período que quer.
  4. Transfira cada ficheiro do servidor do dispositivo.
  5. Junte as linhas, ordene-as pelo timestamp e preencha os campos vazios.
Janela do terminal
curl --compressed \
-H "Authorization: Bearer-API YOUR_API_KEY" \
"https://DEVICE_SERVER/datalogs.php?serialno=e11:123&id=0.20740&ver=2"

Substitua DEVICE_SERVER pelo valor do campo device_server do dispositivo.

Parâmetro Valor
serialno O número de série do dispositivo
id <nível>.<bin>, por exemplo 0.20740
ver 2

Para a autenticação, envie o cabeçalho Authorization: Bearer-API YOUR_API_KEY ou Authorization: Bearer YOUR_ACCESS_TOKEN.

O servidor pode enviar o ficheiro comprimido (gzip ou br). A opção --compressed do curl descomprime-o.

Código HTTP Significado
200 O ficheiro, como text/plain
400 serialno ou id errado
403 Não tem permissão de leitura no dispositivo
404 Não existem dados para este ficheiro

Todos os cálculos utilizam UTC.

Nível Um ficheiro por Cálculo do bin Exemplo
0 Dia floor(unix_seconds / 86400) 14 de outubro de 2026 = 0.20740
1 Mês (ano - 1970) * 12 + (mês - 1) Outubro de 2026 = 1.681
2 Histórico completo Sempre m 2.m

O nível 0 tem todas as linhas do dia. O nível 1 tem cerca de uma linha por dia. O nível 2 tem cerca de uma linha por mês.

A aplicação utiliza o nível 0 para períodos até 7 dias e o nível 1 para períodos até 5 meses. Para períodos mais longos, utiliza 2.m.

Cada linha é uma medição. Os campos são separados por ;.

timestamp;reading1;reading2;...;readingN;output1;...;outputM
  • O timestamp é em segundos unix (UTC). Pode ter decimais.
  • Depois vêm as leituras, pela ordem de readings da família.
  • Depois vêm as saídas, pela ordem de output_names.
  • Um campo vazio significa que o valor não mudou. Utilize o último valor de uma linha anterior.
  • O valor 2147483648 significa que a leitura está em falta.
  • As linhas nem sempre estão ordenadas. Ordene-as pelo timestamp.

Um dispositivo da família e11 tem readings = ["T", "GI", "GIC", "GI2", "GI2C"] e não tem saídas.

1791936198.977;2120;1;0;1;0
Campo Valor Significado
timestamp 1791936198.977 Hora da medição
T 2120 21.20 °C, porque a conversão de T é divide_by_100
GI 1 Estado da primeira entrada
GIC 0 Contador da primeira entrada
GI2 1 Estado da segunda entrada
GI2C 0 Contador da segunda entrada

Encontra as conversões e as unidades no dicionário readings das definições. Consulte a API REST.

Este exemplo transfere os últimos 3 dias de um dispositivo.

Janela do terminal
SERVER=DEVICE_SERVER
SN=e11:123
TODAY=$(( $(date -u +%s) / 86400 ))
for BIN in $(seq $((TODAY - 2)) $TODAY); do
curl -s --compressed \
-H "Authorization: Bearer-API YOUR_API_KEY" \
"https://$SERVER/datalogs.php?serialno=$SN&id=0.$BIN&ver=2"
done | sort -t';' -k1,1n

O servidor MCP tem a ferramenta get_device_history. Ela aceita os mesmos níveis e bins.

Chat com o suporte