Pular para o conteúdo principal

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

dica

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 keye 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 e mc_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 e mc_exemplo2 se o objeto possui o atributo relacionado, verificamos isso com a função haskey.

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 widget Update Multiple Attributes na dashboard;
  • Adicione as datakeys que serão utilizadas (neste exemplo ex_bool, ex_string e ex_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.

/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.

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

1.4. Confirmando alterações

Podemos verificar no programa se o setpoint foi atualizado utilizando o RPC via callSJ, utilizando a variável local utilizada no programa.

keeper {"callJS": "var;"}

Por exemplo, para sabermos qual o valor do atributo ex_number do objeto sp que utilizamos no exemplo podemos mandar o seguinte comando via RPC:

keeper {"callJS": "sp.ex_number;"}

2. Conclusão

Neste artigo, vimos como configurar setpoints internos do equipamento Keeper de forma remota usando o MHO Cloud. Através da função sa_callback, o programa mhoJS recebe e atualiza os valores dos setpoints definidos no servidor, garantindo que o equipamento esteja sempre sincronizado com as configurações mais recentes. Além disso, exploramos a integração desses setpoints utilizando arquivos JSON para armazenamento persistente. Essa abordagem proporciona flexibilidade e eficiência na gestão e atualização de parâmetros do sistema, facilitando o controle e a manutenção remotos dos dispositivos Keeper.