Pular para o conteúdo principal

fjson (arquivos de setup)

fjson

Função global utilizada para tratar arquivos json salvos na memória interna para serem utilizados dentro do contexto mhoJS. Normalmente utilizado para parametrizações e setpoints do código desenvolvido no mhoJS.

Atenção!

Os métodos descritos são operação de leitura e escrita na memória flash. Utilize somente para dados de setpoints ou situações em que leituras ou escritas não ocorram frequentemente. Para alta frequência de operações de dados com a memória, utilize a memória retentiva, pois esta tem sua vida útil projetada para esse tipo de operação.


fjson.create

Salva um objeto como arquivo json na memória flash.

fjson.create(object, path = "/js/setpoints.json", rewrite = false);

Dados:

  • object: Objeto que será salvo no arquivo;
  • path: Caminho do arquivo a ser salvo;
  • rewrite: Informa se o arquivo deve ser reescrito caso já exista um arquivo nesse path (false não é reescrito, true é reescrito);

*path e rewrite são parâmetros opcionais. Caso não informados seguirão o valor default.

Resposta: true se o arquivo foi salvo com sucesso ou false se o arquivo não foi salvo.

Exemplo

Salvar um objeto como arquivo json no endereço na memória flash.

let myobject = {mybool: true, mystr: "this is a string", myint: 10, mydouble: 5.2};
fjson.create(myobject);

Resposta: true se o arquivo foi salvo com sucesso ou false se não foi salvo.


fjson.open

Abre um arquivo json da memória flash e retorna como um objeto no contexto mhoJS.

fjson.open(path = "/js/setpoints.json");

Argumentos:

  • path: Caminho do arquivo a ser salvo;

*path é um argumento opcional. Caso não informado seguira o valor default.

Resposta: obj se o arquivo foi aberto com sucesso ou error se o arquivo não puder ser aberto.

Exemplo

Abrir arquivo json no endereço na memória flash e usar como objeto no mhoJS.

let myobject = fjson.open();
log(myobject); //prints => {mybool: true, mystr: "this is a string", myint: 10, mydouble: 5.2}

fjson.delete

Deleta um arquivo json da memória flash.

fjson.delete(path = "/js/setpoints.json");

Argumentos:

  • path: Caminho do arquivo a ser deletado;

*path é um argumento opcional. Caso não informado seguira o valor default.

Resposta: true se o arquivo foi deletado com sucesso ou false se o arquivo não foi encontrado.

Exemplo

Deletar o arquivo json no endereço na memória flash.

fjson.delete();

fjson.write

Escreve um valor em um atributo do objeto salvo no arquivo json.

fjson.write(path = "/js/setpoints.json", key, value);

Argumentos:

  • path: Caminho do arquivo a ser salvo;
  • key: Nome/chave do atributo;
  • value: valor a ser escrito no atributo;

*path é um argumento opcional. Caso não informado seguira o valor default.

Resposta: true se for escrito com sucesso ou erro se não puder ser escrito.

Exemplo

Alterar o atributo myint que está salvo no arquivo json.

fjson.write('myint', 10);

Resposta: true se for escrito com sucesso ou erro se não puder ser escrito.


fjson.read

Le um valor de um atributo do objeto salvo no arquivo json.

fjson.read(path = "/js/setpoints.json", key);

Argumentos:

  • path: Caminho do arquivo a ser salvo;
  • key: Nome/chave do atributo;

*path é um argumento opcional. Caso não informado seguira o valor default.

Resposta: value se for lido com sucesso ou erro se não puder ser lido.

Exemplo

Ler o atributo myint que está salvo no arquivo json.

fjson.read('myint');

Resposta: value se for lido com sucesso ou erro se não puder ser lido.


Aplicações

Setpoints de variáveis configuráveis

Podemos utilizar em uma situação em que precisamos definir setpoints que podem ser alterados via configuração, como por exemplo um range de um sensor, modo de operação ou qualquer outra variável.

Exemplo 1 - Criar um arquivo uma única vez e carregar para a memória.

let myobject = {mybool: true, mystr: "this is a string", myint: 10, mydouble: 5.2};
fjson.create(myobject); //cria arquivo com o objeto inicial, nesse caso cria apenas uma vez!
myobject = fjson.open(); //carrega arquivo da memoria com parametros que podem ter sido alterados

let loop = function() {
log(myobject);
delay(1000);
};

Exemplo 2 - Alterar um setpoint de sensor 4-20 mA

Podemos criar o código mhoJS de forma genérica, onde o valor de um range do sensor é definido como um valor de um atributo de um objeto. No código abaixo temos um exemplo simples onde um sensor de 4-20 mA é utilizado, onde o range desse sensor e os setpoints de atuação são definidos via arquivo json. Isso nos traz uma vantagem pois podemos alterar remotamente esses parâmetros sem necessariamente precisar alterar o código.

No exemplo abaixo temos um código simples que controla uma saída digital com base no nível lido pelo sensor.

let tanque1 = {ioAI: 1, min: 0, max: 5, on: 2.5, off: 3.5, ioDO:1}; //cria objeto inicial
fjson.create(tanque1, '/js/setpoints_tanque1.json'); //cria arquivo com o objeto inicial, nesse caso cria apenas uma vez!
tanque1 = fjson.open('/js/setpoints_tanque1.json'); //carrega arquivo da memoria.

let logicaTanque = function() {
do.lastchange(tanque1.ioDO) < 30 ? return 0 : ; //retorna a função caso a DO tenha variado nos ultimos 30 segundos, para evitar flicker
if(io.readAI(tanque1.ioAI, 'i', tanque1.min, tanque1.max) > (tanque1.max + 0.2) || io.readAI(tanque1.ioAI, 'i', tanque1.min, tanque1.max) < (tanque1.min - 0.2))
{
cloud.insight("Possível falha no sensor."); //envia telemetria para o servidor
return;
}

if(io.readAI(tanque1.ioAI, 'i', tanque1.min, tanque1.max) < tanque1.on)
{
io.setDO(1, true);
}
else if(io.readAI(tanque1.ioAI, 'i', tanque1.min, tanque1.max) > tanque1.off)
{
io.setDO(tanque1.ioDO, false);
}
else
{
log('flutuando...');
}
};


let loop = function() {
logicaTanque();
delay(1000);
};