Preciso extrair somente o valor da chave “payload” (o valor para essa chave vai mudar conforme recebo novos pacotes de dados) e converter a informação (alfanumérica) que está em base64 para apresentar na watch list, não tenho conhecimento em programação, alguém poderia me indicar se é possível ser feito e o que eu devo estudar para conseguir executar?
Você pode usar um point link para converter a informação via script. Como os scripts do ScadaBR/-LTS usam Javascript, é possível chamar um JSON.parse().
Exemplo hipotético de point link:
// Analisa o código JSON
var objeto = JSON.parse(source.value);
// Payload em Base64
var payloadB64 = objeto.params.payload;
// Pseudocódigo de conversão base64
var payload = converteParaString(payloadB64);
// Fim do pseudocódigo
// Retorna o valor convertido (obrigatório)
return payload;
O código apresentou o objeto separando o valor da chave “payload” com sucesso, porem na conversão apresenta a mensagem “ReferenceError: “converteParaString” is not defined. (#7)”
Na linha 7 tentei substituir o método por outros como ** atob() sem sucesso **, base64Decode() sem sucesso ou .toString(); sem sucesso, mas esse ultimo o script mostra corretamente o valor da chave payload que no momento recebe MjcuMjksMzI1 = 27.29,325
A função “converteParaString()” do meu exemplo na verdade não existe, é só um pseudocódigo para exemplificar como seria a utilização. Quanto a atob(), infelizmente ela não faz parte do “núcleo” da linguagem Javascript mas sim ao DOM, que é um conjunto de recursos separado que não existe nos point links do ScadaBR.
Com base nisso, você poderia implementar uma função de decodificação de Base64 usando classes Java. Exemplo:
// Implementação da função de decodificação de Base64
function converteParaString(textoB64) {
var decoder = java.util.Base64.getDecoder();
return String(new java.lang.String(decoder.decode(textoB64)));
}
EDIT: corrigido o código da função. Por alguma razão você precisa forçar uma conversão para String Java com new java.lang.String().
// Analisa o código JSON
var objeto = JSON.parse(source.value);
// Payload em Base64
var payloadB64 = objeto.params.payload;
// Implementação da função de decodificação de Base64
function converteParaString(payloadB64) {
var decoder = java.util.Base64.getDecoder();
return String(new java.lang.String(decoder.decode(payloadB64)));
}
Que apresentou a mensagem:
Resultado do script: org.mozilla.javascript.Undefined@0
Atualmente o valor para a chave payload é o seguinte: MjcuMTAsOTQzNDguODMsLTIzLjIwOTYwNCwtNDUuOTAwNTY2MjcuMTAsOTQzNDguODMsLTIzLjIwOTYwNCwtNDUuOTAwNTY2
Representado quatro números decimais com ponto e separados por vírgula: 27.10,94348.83,-23.209604,-45.900566
Você adicionou a implementação da função no código, está retornando undefined porque você esqueceu de invocar a função implementada e fazer o script retornar um valor final. Adicione isto aqui na última linha do seu script e vai funcionar: