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.
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);
};