Setpoints via Dashboard
Neste artigo vamos ver um exemplo de aplicação para configurações de setpoints internos da linha Keeper via MHO Cloud.
Podemos utilizar variáveis definidas no MHO Cloud para definir variáveis ou setpoints internos locais do programa do equipamento. Isso permite a configuração remota dos parâmetros do programa mhoJS. Sempre que uma variável é atualizada no servidor, o equipamento recebe uma mensagem e ajusta os setpoints conforme necessário para executar a função desejada.
0. Estrutura
Essa funcionalidade compartilha a mesma estrutura para comunicação M2M via MHO Cloud. Caso utilize a funcionalidade M2M
e essa em conjunto, lembre-se que no programa teremos apenas uma função sa_callback
definida, bem como devemos setar os atributos utilizados apenas uma vez utilizando cloud.setAtt
.
Toda vez que o valor do atributo é atualizado o servidor envia uma mensagem para o equipamento via mhoJS na função sa_callback
, sendo a mensagem um objeto com todos os atributos compartilhados que variaram ou que foram solicitados pelo equipamento utilizando as funções cloud.getAtt
e cloud.setAtt
.
let sa_callback = function(obj){
//... tratar atributos compartilhados recebidos
};
O objeto obj
recebido pode ter vários atributos (com sua respectiva key
e value
).
{key1: value1, key2: value2, ...}
Para isso podemos utilizar a função haskey
para verificar se a key
de interesse está presente no objeto.
haskey(obj, 'exemplo1');
Por exemplo, caso os atributos compartilhados de interesse fossem exemplo1
e exemplo2
o objeto seria passado para a função da seguinte forma:
{"exemplo1": true, "exemplo2": 1000}
Também precisamos setar os atributos compartilhados de interesse, para que em eventos de conexão eles sejam sincronizados, garantindo que os valores sejam sincronizados corretamente caso uma mudança de atributo tenha ocorrido enquanto o equipamento esteve desconectado.
cloud.setAtt('exemplo1,exemplo2');
Com isso temos a função final que trata os valores recebidos e atribui a uma variável local:
cloud.setAtt('exemplo1,exemplo2');
let mc_exemplo1;
let mc_exemplo2;
let sa_callback = function(obj) {
//log("sa_callback => ", obj);
if(haskey(obj, 'exemplo1')) mc_exemplo1 = obj.exemplo1;
if(haskey(obj, 'exemplo2')) mc_exemplo2 = obj.exemplo2;
};
Explicação do programa:
- Utilizamos
cloud.setAtt
para definir os atributos compartilhados de interesse, para sincronizar esses valores sempre que o dispositivo se conectar na plataforma; mc_exemplo1
emc_exemplo2
são variáveis globais que podem ser utilizadas em outras partes do programa e salvam o valor recebido da plataforma;- a função
sa_callback
é chamada toda vez que os atributos compartilhados são enviados pelo servidor; - Só atualizamos as variáveis globais
mc_exemplo1
emc_exemplo2
se o objeto possui o atributo relacionado, verificamos isso com a funçãohaskey
.
Existem várias maneiras de programar os atributos remotos, permitindo que o desenvolvedor escolha a abordagem que melhor atenda às suas necessidades. Também é possível definir eventos que ocorram diretamente dentro da função sa_callback
, para situações que não necessite utilizar variáveis globais.
Abaixo temos exemplos completos utilizando as funções fjson, que manipula valores salvos na memória retentiva. Essa é forma indicada para utilização final.
1. Exemplo
Neste exemplo temos os seguintes atributos que serão configurados na dashboard:
- ex_bool: um valor binário;
- ex_number: um número;
- ex_string: uma string.
1.1. Dashboard
Na plataforma MHO Cloud
, navegue até a dashboard desejada com o equipamento desejado e adicione o widget para enviar as configurações para o equipamento.
- Navegue até a pasta
input widgets
e adicione o widgetUpdate Multiple Attributes
na dashboard; - Adicione as datakeys que serão utilizadas (neste exemplo
ex_bool
,ex_string
eex_number
); - Defina cada datakey como um atributo compartilhado;
- Defina a forma que o dado deve ser exibido na dashboard.
1.2. Arquivo de Setpoints
No webserver do MHO Keeper
, definimos o arquivo de setpoint com os valores iniciais, nesse arquivo que o programa mhoJS irá interagir. Como nas funções fjson
não vamos especificar nenhum caminho para o arquivo, significa que adotamos o caminho padrão /js/setpoints.json
.
{"ex_bool":true,"ex_string":"Isso eh um string","ex_number":1000}
1.3. Programa mhoJS
No webserver do MHO Keeper
, definimos o programa mhoJS. Esse é o programa que roda no equipamento, manipulando os valores recebidos e salvando em um objeto global que pode ser utilizado no restante do programa. Esse objeto também é salvo na memória retentiva utilizando a função fjson
, bem como o objeto é inicializado através do arquivo definido.
//copyright MHO LTDA:
version(1);//01/07/2024
cloud.setAtt('ex_bool,ex_number,ex_string'); //definicao de mensagens de interesse
let sp = fjson.open(); //carrega arquivo JSON da memoria quando o equip. eh inicializado.
//funcao chamada quando chega uma mensagem
let sa_callback = function(obj) {
//log("sa_callback => ", obj);
if(haskey(obj, 'ex_bool')) sp.ex_bool = obj.ex_bool;
if(haskey(obj, 'ex_number')) sp.ex_number = obj.ex_number;
if(haskey(obj, 'ex_string')) sp.ex_string = obj.ex_string;
fjson.create(sp, true); //sobrescreve arquivo de setpoints
};
let loop = function() {
log(sp);
delay(1000);
};