|
<< Clique para Mostrar o Sumário >>
Tags de Caminho JSON |
Utilize um Tag de Comunicação ou um Tag Bloco para ler um valor diretamente pelo caminho no formato JSON da resposta de uma requisição, sem declarar um template. Este caminho é informado no parâmetro Item com o prefixo $ (cifrão), conforme a tabela a seguir.
Item |
<Route Alias>;$<Caminho>[@<Caminho da estampa de tempo>[:<Formato>]] |
N1 ou B1 |
Não utilizado, deixe em 0 (zero) |
N2 ou B2 |
Não utilizado, deixe em 0 (zero) |
N3 ou B3 |
Não utilizado, deixe em 0 (zero) |
N4 ou B4 |
Não utilizado, deixe em 0 (zero) |
Os Tags de Caminho JSON convivem com os Tags que usam template na mesma rota e na mesma requisição. São indicados para leituras pontuais em respostas grandes e para respostas com chaves dinâmicas, como por exemplo datas ou identificadores que não podem ser mapeados por um template. Não deve haver espaços ao redor do caractere ; (ponto e vírgula) no parâmetro Item.
Uma requisição continua sendo disparada por uma escrita no Tag PLC configurado com o parâmetro N1 igual a 1 (um). Ao receber uma resposta, este Driver navega até o caminho informado e entrega o valor a este Tag. Utilize um Tag de Comunicação para um valor único e um Tag Bloco para listas e objetos.
Elementos de um caminho
Elemento |
Sintaxe |
Exemplo |
Descrição |
|---|---|---|---|
Chave de objeto |
chave |
total_30d |
Acessa a chave de um objeto |
Chaves aninhadas |
a.b.c |
dados.config.max |
Navega em objetos dentro de objetos |
Índice de array |
[n] ou [-n] |
dados[0], dados[-1] |
n-ésimo elemento de um array. Um índice negativo conta a partir do fim de um array |
Índice posicional em objeto |
[n] ou [-n] |
chuva_diaria[-1] |
n-ésima chave de um objeto, na ordem de um documento |
Wildcard |
[*] |
dados[*].nivel |
Todos os elementos de um array. Este Tag recebe uma lista com o restante do caminho aplicado a cada elemento |
Macro de data |
{TODAY}, {TODAY-n} ou {TODAY+n} |
chuva_diaria.{TODAY-1} |
Data local atual, menos ou mais n dias, usada como chave. O formato padrão é %Y-%m-%d. Esta macro é expandida a cada requisição |
Macro de data com formato |
{TODAY-n:formato} |
{TODAY-1:%d/%m/%Y} |
Formato da data com as mesmas opções da palavra-chave TS_TEXT |
Chave com aspas |
'chave' ou "chave" |
'config.v2' |
Endereça chaves que contêm ponto, colchetes ou chaves |
Estampa de tempo de um dado |
@caminho[:formato] |
nivel@datetime |
Carimba um valor com a estampa de tempo lida do próprio formato JSON, conforme descrito a seguir |
O caminho após o caractere @ (arroba) é resolvido a partir da raiz de uma resposta e aceita a mesma sintaxe do caminho de um valor, exceto o caractere de * (asterisco ou wildcard). Quando o caminho de um valor aponta para um array de objetos, ou modo de repetição, o caminho da estampa de tempo é resolvido em relação a cada elemento, carimbando cada leitura com o tempo da própria amostra.
Se o valor apontado é um número, este é interpretado como uma estampa de tempo no formato UNIX, em segundos. Se este valor é um texto, este é convertido com o formato informado após o caractere de dois pontos, cujo padrão é %Y-%m-%dT%H:%M:%S, com as mesmas opções da palavra-chave TS_TEXT, incluindo o padrão %f para milissegundos e %+ para o fuso horário.
Uma falha em uma estampa de tempo não impede a entrega de um valor. Este erro é registrado no arquivo de log deste Driver e o valor é entregue com a estampa de tempo padrão, que é a hora da leitura.
Conversão de um valor para um Tag
Valor no Formato JSON |
Resultado em um Tag |
|---|---|
Número ou texto |
Valor de um Tag. Textos que representam números seguem a regra descrita na seção Conversão de Valores Recebidos como Texto |
Objeto |
Tag Bloco com os valores das chaves, na ordem de um documento. Objetos aninhados são convertidos em sub-listas |
Array de números ou textos |
Tag Bloco com a lista de valores |
Array de objetos |
Uma leitura por elemento, cada leitura com os valores das chaves de um objeto, de forma equivalente à palavra-chave Repeat_E3VAL |
null |
Valor vazio com qualidade ruim |
Os exemplos a seguir usam a rota demanda, cuja resposta, em resumo, é a seguinte.
{
"chuva_diaria": {
"2026-06-12": 0.4,
...
"2026-07-22": 15.4
},
"dados": [
{
"chuva_15min": 70.0,
"nivel": 2.64,
"datetime_brt": "2026-07-12T14:30:00-03:00"
},
...
{
"chuva_15min": 0.0,
"nivel": 2.57,
"datetime_brt": "2026-07-22T13:15:00-03:00"
}
],
"estacao": "BE70C78A",
"total_30d": 9359.4
}
Exemplos de Itens e resultados
Item |
Resultado |
|---|---|
demanda;$total_30d |
9359.4 |
demanda;$estacao |
BE70C78A |
demanda;$dados[-1].nivel |
2.57 (nível da última amostra) |
demanda;$dados[0].nivel |
2.64 (nível da primeira amostra) |
demanda;$chuva_diaria.{TODAY} |
15.4 (chave 2026-07-22, considerando a data atual como 22/07/2026) |
demanda;$chuva_diaria[-1] |
15.4 (valor da última chave de um objeto) |
demanda;$dados[-1].nivel@dados[-1].datetime_brt:%Y-%m-%dT%H:%M:%S%+ |
2.57 com estampa de tempo 22/07/2026 13:15:00, lida da própria amostra |
demanda;$dados[*].nivel |
Tag Bloco com a lista de todos os níveis |
demanda;$chuva_diaria |
Tag Bloco com os valores diários, na ordem deste documento |
demanda;$dados[0] |
Tag Bloco com os campos do primeiro registro, na ordem deste documento |
demanda;$dados |
Uma leitura por registro, cada leitura com os campos de um objeto, como na palavra-chave Repeat_E3VAL |
demanda;$dados@datetime_brt:%Y-%m-%dT%H:%M:%S%+ |
Mesmo do item anterior, com cada leitura carimbada com a estampa de tempo da própria amostra |
demanda;$ |
A resposta inteira como um Tag Bloco aninhado, ou seja, chuva_diaria, dados, estacao e total_30d |
NOTA |
Os Tags de Caminho JSON são somente de leitura. A escrita nestes Tags é rejeitada e o envio de dados continua exigindo um template. Um caminho que não existe em uma resposta é registrado no arquivo de log e não impede a atualização dos demais Tags de uma mesma requisição. Com o caractere de * (asterisco ou wildcard), os elementos em que o restante do caminho não existe são ignorados. Um parâmetro Item mal formado é rejeitado na criação deste Tag. A macro de data usa o relógio local do computador onde este Driver é executado. |