Simplificando a leitura de valores via script no ScadaBR

Olá, pessoal!

Como muitas pessoas têm dificuldades em utilizar os recursos de programação via scripts no ScadaBR, hoje eu irei apresentar um código que facilita muito a criação e desenvolvimento desses scripts.

Trata-se de uma “classe” que possibilita a leitura das informações de qualquer data point com grande facilidade. Eis aí o código:

Código da classe:

function dataPointInfo(identifier) {
	var dpDAO = new com.serotonin.mango.db.dao.DataPointDao();
	var pvDAO = new com.serotonin.mango.db.dao.PointValueDao();
	var dpVO = dpDAO.getDataPoint(identifier);
	var sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	
	var tipos = {
		0: "Desconhecido",
		1: "Binário",
		2: "Multiestados",
		3: "Numérico",
		4: "Alfanumérico",
		5: "Imagem"
	};
	
	// Propriedades do data point
	this.id = parseInt(dpVO.getId());
	this.xid = String(dpVO.getXid());
	this.nome = String(dpVO.getName());
	this.codigoTipo = parseInt(dpVO.getPointLocator().getDataTypeId());
	this.tipo = tipos[this.codigoTipo];
	this.setavel = String(dpVO.getPointLocator().isSettable()) == "true" ? true : false;
	
	// Converte objetos Java para Javascript
	this.formataValor = function(valor) {
		switch (this.codigoTipo) {
			case 1:
				return String(valor) == "true" ? true : false;
			break;
			
			case 3:
				return Number(valor);
			break;
			
			case 2:
			case 4:
				return String(valor);
			break;
			
			case 0:
			case 5:
				throw new "Erro: Tipo inválido";
			break;
		}
	};
	
	// Último valor do data point
	this.valor = function() {
		return this.formataValor(pvDAO.getLatestPointValue(this.id).value);
	};
	this.ultimoValor = this.valor;
	
	// Último tempo do data point (humanamente legível)
	this.tempo = function() {
		return String(sdf.format(pvDAO.getLatestPointValue(this.id).time));
	};
	this.ultimoTempo = this.tempo;
	
	// Último tempo do data point (timestamp)
	this.tempoBruto = function() {
		return parseInt(pvDAO.getLatestPointValue(this.id).time)
	};
	this.ultimoTempoBruto = this.tempoBruto;
	
	// Últimos X valores do data point
	this.ultimosValores = function(maxValues) {
		var valoresJava = pvDAO.getLatestPointValues(this.id, maxValues);
		var valoresJS = new Array();
		for (var i = 0; i < valoresJava.size(); i++) {
			valoresJS.push(this.formataValor(valoresJava.get(i).value));
		}
		
		return valoresJS;
	};
	
	// Tempo das últimas X mudanças de valor do data point (humanamente legível)
	this.ultimosTempos = function(maxValues) {
		var temposJava = pvDAO.getLatestPointValues(this.id, maxValues);
		var temposJS = new Array();
		for (var i = 0; i < temposJava.size(); i++) {
			temposJS.push(String(sdf.format(temposJava.get(i).time)));
		}
		
		return temposJS;
	};
	
	// Tempo das últimas X mudanças de valor do data point (timestamp)
	this.ultimosTemposBrutos = function(maxValues) {
		var temposJava = pvDAO.getLatestPointValues(this.id, maxValues);
		var temposJS = new Array();
		for (var i = 0; i < temposJava.size(); i++) {
			temposJS.push(parseInt(temposJava.get(i).time));
		}
		
		return temposJS;
	};
	
	this.valoresEntre = function(startTime, endTime) {
		var valoresJava = pvDAO.getPointValuesBetween(this.id, startTime, endTime);
		var valoresJS = new Array();
		for (var i = 0; i < valoresJava.size(); i++) {
			valoresJS.push(this.formataValor(valoresJava.get(i).value));
		}
		
		return valoresJS.reverse();
	};
	
	this.temposEntre = function(startTime, endTime) {
		var temposJava = pvDAO.getPointValuesBetween(this.id, startTime, endTime);
		var temposJS = new Array();
		for (var i = 0; i < temposJava.size(); i++) {
			temposJS.push(String(sdf.format(temposJava.get(i).time)));
		}
		
		return temposJS.reverse();
	};
	
	this.temposBrutosEntre = function(startTime, endTime) {
		var temposJava = pvDAO.getPointValuesBetween(this.id, startTime, endTime);
		var temposJS = new Array();
		for (var i = 0; i < temposJava.size(); i++) {
			temposJS.push(parseInt(temposJava.get(i).time));
		}
		
		return temposJS.reverse();
	};
	
	this.valorEm = function(time) {
		var pointValue = pvDAO.getPointValueAt(this.id, time);
		if (!pointValue)
			pointValue = pvDAO.getPointValueBefore(this.id, time);
		
		return this.formataValor(pointValue.value);
	};
}

Como utilizar esse código?

Para utilizar essa classe em seus scripts, você precisa:

  1. Copiar o código da classe acima e colocá-lo nas linhas finais do seu script.
  2. Instanciar a classe utilizando a palavra especial new e passando como argumento o ID ou o XID do data point que você deseja ler. Ao instanciar a classe você criará um novo objeto, então, não esqueça de salvar este objeto em uma variável.
  3. Chamar as propriedades e métodos do objeto utilizando o ponto (.) seguido do nome da propriedade/método.

Vamos mostrar um exemplo prático do que foi dito acima?

// Instanciando a classe usando o ID:
var ponto1 = new dataPointInfo(12);
// Instanciando a classe usando o XID
var ponto2 = new dataPointInfo("DP_201122");

// Lendo uma propriedade
ponto1.setavel; // retornará true ou false

// Chamando um método
ponto2.ultimoValor(); // retornará o útimo valor daquele data point

// Nas últimas linhas você deve colocar o código COMPLETO
// da classe (aqui omitimos para simplificação do exemplo)
function dataPointInfo(identifier) {
    /* Código da classe ... */
}

Como é possível supor, esta classe pode ser instanciada quantas vezes você quiser, o que permite criar objetos para ler informações de praticamente qualquer data point nos seus scripts.

Métodos e propriedades implementados

Vamos agora ver todos os métodos e propriedades que essa classe implementa:

Resumo dos métodos e propriedades

Propriedades:

  • id
  • xid
  • nome
  • tipo
  • codigoTipo
  • setavel

Métodos:

  • valor()
  • ultimoValor()
  • tempo()
  • ultimoTempo()
  • tempoBruto()
  • ultimoTempoBruto()
  • ultimosValores(maxValue)
  • ultimosTempos(maxValue)
  • ultimosTemposBrutos(maxValue)
  • valoresEntre(startTime, endTime)
  • temposEntre(startTime, endTime)
  • temposBrutosEntre(startTime, endTime)
  • valorEm(time)

Propriedades

.id

Descrição: Esta propriedade retorna o valor numérico do ID do seu data point.
Tipo de dado: Número inteiro


.xid

Descrição: Esta propriedade retorna o valor do XID do seu data point.
Tipo de dado: String


.nome

Descrição: Esta propriedade retorna o nome do seu data point.
Tipo de dado: String


.tipo

Descrição: Esta propriedade retorna o tipo do seu data point (binário, numérico, multiestados, alfanumérico, imagem…).
Tipo de dado: String


.codigoTipo

Descrição: Esta propriedade retorna um código que corresponde ao tipo de dado do seu data point (binário, numérico, multiestados, alfanumérico, imagem…). Esses códigos são definidos como constantes, conforme a tabela a seguir:
Tipo de dado: Número inteiro

Código Tipo de dado
0 Desconhecido
1 Binário
2 Multiestados
3 Numérico
4 Alfanumérico
5 Imagem

.setavel

Descrição: Esta propriedade retorna se o data point é setável (configurável) ou não. Quando um data point é setável, você pode utilizar o ScadaBR para escrever novos valores no data point. Caso contrário, o data point só pode ser lido no ScadaBR, não sendo permitida a escrita de valores.
Tipo de dado: Booleano


Métodos

.valor()

Descrição: retorna o valor mais atual do data point.
Parâmetros: nenhum.
Tipo de retorno: conforme o tipo do data point (binário, numérico, etc.).

Exemplo:

var ponto = new dataPointInfo("DP_039209");

ponto.valor();

.ultimoValor()

Este método é um alias para .valor(), comportando-se de forma idêntica. Veja o método .valor() para mais informações.


.tempo()

Descrição: retorna o tempo (data e hora) da última mudança de valor do data point registrada no banco de dados. O tempo é exibido no formato aaaa-mm-dd hh:mm:ss
Parâmetros: nenhum.
Tipo de retorno: String

Exemplo:

var ponto = new dataPointInfo("DP_039209");

ponto.tempo();

.ultimoTempo()

Este método é um alias para .tempo(), comportando-se de forma idêntica. Veja o método .tempo() para mais informações.


.tempoBruto()

Descrição: retorna o tempo (data e hora) da última mudança de valor do data point registrada no banco de dados. O tempo é exibido no formato de timestamp (número de milissegundos desde 1970-01-01 00:00:00 UTC +0)
Parâmetros: nenhum.
Tipo de retorno: Long (timestamp)

Exemplo:

var ponto = new dataPointInfo("DP_039209");

ponto.tempoBruto();

.ultimoTempoBruto()

Este método é um alias para .tempoBruto(), comportando-se de forma idêntica. Veja o método .tempoBruto() para mais informações.


.ultimosValores(maxValues)

Descrição: retorna os últimos n valores do data point salvos no banco de dados.

Parâmetros:

  • maxValues: (Inteiro) o número máximo de valores a ser retornado. Por exemplo: especificar maxValues como 5 retornará os últimos 5 valores do data point.

Tipo de retorno: um array Javascript contendo os n últimos valores. O índice 0 do array representa o valor mais recente, o índice 1 representa o segundo mais recente e assim sucessivamente.

Exemplo:

var ponto = new dataPointInfo("DP_039209");

// Lê os 3 valores mais recentes
var valoresArray = ponto.ultimosValores(3);

valoresArray[0]; // Valor mais recente dos 3
valoresArray[1];
valoresArray[2]; // Valor mais antigo dos 3

.ultimosTempos(maxValues)

Descrição: retorna os tempos (data e hora) das útlimas n mudanças de valor do data point salvas no banco de dados.

Parâmetros:

  • maxValues: (Inteiro) o número máximo a ser retornado. Por exemplo: especificar maxValues como 5 retornará os tempos das últimas 5 mudanças de valor do data point.

Tipo de retorno: um array Javascript contendo os n últimos tempos. O índice 0 do array representa o tempo da mudança mais recente, o índice 1 representa o tempo da segunda mudança mais recente e assim sucessivamente. Os tempos são exibidos no formato aaaa-mm-dd hh:mm:ss.

Exemplo:

var ponto = new dataPointInfo("DP_039209");

// Lê os tempos das últimas 3 mudanças de valor
var temposArray = ponto.ultimosTempos(3);

temposArray[0]; // Data e hora da mudança mais recente de valor

// Data e hora das outras mudanças de valor:
temposArray[1];
temposArray[2];

.ultimosTemposBrutos(maxValues)

Descrição: retorna os tempos (data e hora) das útlimas n mudanças de valor do data point salvas no banco de dados.

Parâmetros:

  • maxValues: (Inteiro) o número máximo a ser retornado. Por exemplo: especificar maxValues como 5 retornará os tempos das últimas 5 mudanças de valor do data point.

Tipo de retorno: um array Javascript contendo os n últimos tempos. O índice 0 do array representa o tempo da mudança mais recente, o índice 1 representa o tempo da segunda mudança mais recente e assim sucessivamente. Os tempos são exibidos no formato de timestamp (número de milissegundos desde 1970-01-01 00:00:00 UTC +0).

Exemplo:

var ponto = new dataPointInfo("DP_039209");

// Lê os tempos das últimas 3 mudanças de valor
var temposArray = ponto.ultimosTemposBrutos(3);

temposArray[0]; // Timestamp da mudança mais recente de valor

// Timestamp das outras mudanças de valor:
temposArray[1];
temposArray[2];

.valoresEntre(startTime, endTime)

Descrição: retorna os valores do data point salvos no banco de dados entre os dois timestamps informados.

Parâmetros:

  • startTime: (Long) timestamp inicial da pesquisa (data mais antiga)
  • endTime: (Long) timestamp final da pesquisa (data mais recente)

Tipo de retorno: um array Javascript contendo os valores registrados no banco de dados entre as datas especificadas. O índice 0 do array representa o valor mais recente, o índice 1 representa o segundo mais recente e assim sucessivamente.

Observações: Um timestamp é o número de milissegundos transcorridos desde 1970-01-01 00:00:00 UTC +0. O intervalo da pesquisa inclui a data inicial (startTime) mas não inclui a data final (endTime).

Exemplo:

var ponto = new dataPointInfo("DP_039209");

// Timestamp da data atual
var dataAtual = new Date().getTime();
// Timestamp da data há 20 segundos atrás (20 segundos = 20.000 milissegundos)
var vinteSegundosAtras = dataAtual - 20000;

// Lê os valores entre as datas especificadas
var valoresArray = ponto.valoresEntre(vinteSegundosAtras, dataAtual);

valoresArray.length; // Retorna a quantidade de valores encontrados (tamanho do array)
valoresArray[0]; // O primeiro valor é sempre o mais recente

.temposEntre(startTime, endTime)

Descrição: retorna os tempos (data e hora) em que ocorreram mudanças no valor do data point. Os valores retornados ficam restritos ao período entre os dois timestamps informados como parâmetros.

Parâmetros:

  • startTime: (Long) timestamp inicial da pesquisa (data mais antiga)
  • endTime: (Long) timestamp final da pesquisa (data mais recente)

Tipo de retorno: um array Javascript contendo os tempos em que ocorreram mudanças no valor do data point, registrados no banco de dados entre as datas especificadas. O índice 0 do array representa o tempo mais recente, o índice 1 representa o segundo mais recente e assim sucessivamente. Os tempos retornados são exibidos no formato aaaa-mm-dd hh:mm:ss.

Observações: Um timestamp é o número de milissegundos transcorridos desde 1970-01-01 00:00:00 UTC +0. O intervalo da pesquisa inclui a data inicial (startTime) mas não inclui a data final (endTime).

Exemplo:

var ponto = new dataPointInfo("DP_039209");

// Timestamp da data atual
var dataAtual = new Date().getTime();
// Timestamp da data há 20 segundos atrás (20 segundos = 20.000 milissegundos)
var vinteSegundosAtras = dataAtual - 20000;

// Lê os tempos das mudança de valor entre as datas especificadas
var temposArray = ponto.temposEntre(vinteSegundosAtras, dataAtual);

temposArray.length; // Retorna a quantidade de tempos encontrados (tamanho do array)
temposArray[0]; // A data e hora da mudança mais recente de valor do data point

.temposBrutosEntre(startTime, endTime)

Descrição: retorna os tempos (em formato de timestamp) em que ocorreram mudanças no valor do data point. Os valores retornados ficam restritos ao período entre os dois timestamps informados como parâmetros.

Parâmetros:

  • startTime: (Long) timestamp inicial da pesquisa (data mais antiga)
  • endTime: (Long) timestamp final da pesquisa (data mais recente)

Tipo de retorno: um array Javascript contendo os tempos em que ocorreram mudanças no valor do data point, registrados no banco de dados entre as datas especificadas. O índice 0 do array representa o tempo mais recente, o índice 1 representa o segundo mais recente e assim sucessivamente. Os tempos retornados são exibidos no formato de timestamp (número de milissegundos desde 1970-01-01 00:00:00 UTC +0).

Observações: O intervalo da pesquisa inclui a data inicial (startTime) mas não inclui a data final (endTime).

Exemplo:

var ponto = new dataPointInfo("DP_039209");

// Timestamp da data atual
var dataAtual = new Date().getTime();
// Timestamp da data há 20 segundos atrás (20 segundos = 20.000 milissegundos)
var vinteSegundosAtras = dataAtual - 20000;

// Lê os tempos das mudança de valor entre as datas especificadas
var temposArray = ponto.temposEntre(vinteSegundosAtras, dataAtual);

temposArray.length; // Retorna a quantidade de tempos encontrados (tamanho do array)
temposArray[0]; // O timestamp da mudança mais recente de valor do data point

.valorEm(time)

Descrição: retorna o valor que o data point possuía na data e hora informadas (informar a data/hora como um timestamp). Se não houver um valor salvo no banco de dados para este momento exato, retorna o valor na data anterior mais próxima.

Parâmetros:

  • time: (Long) timestamp do momento a ser pesquisado

Tipo de retorno: conforme o tipo do data point (binário, numérico, etc.).

Observações: Um timestamp é o número de milissegundos transcorridos desde 1970-01-01 00:00:00 UTC +0.

Exemplo:

var ponto = new dataPointInfo("DP_039209");

// Definindo as partes da data
var ano = 2020;
var mes = 10;
var dia = 25;
var hora = 20;
var minuto = 15;
var segundo = 30;
// Criando uma data Javascript
var data = new Date(ano, mes, dia, hora, minuto, segundo);
var dataTimestamp = data.getTime();

// Lê o valor que o data point tinha na data especificada
// (no caso, em 25 de outubro de 2020 às 20h15min30s)
var valor = ponto.valorEm(dataTimestamp);
4 curtidas

Parabéns Celso, este código é fenomenal e deverá ajudar muita gente!

Celso, muito obrigado pelo seu conteúdo. Gostei demais eu tô precisando disso, porém no meu caso eu gostaria de implementar dentro de um custom jsp como eu poderia fazer isso? Se puder me dar um insight agradeço muito.

JSP no ScadaBR não é exatamente o meu forte, quem conhece mais sobre isso é o @WagnerdeQueiroz

@Celso

Celso,obrigado pela ajuda.
Sem querer abusar, já abusando.
Testei o script e o valorEm(, nao consegui fazer funcionar.
Estou usando Java jre Temurin 8 e scadabr 1.2 windows 10 21H2

O script sai sempre por aqui:

if (!pointValue)
			pointValue = pvDAO.getPointValueBefore(this.id, time);

Segue meu codigo:

//////////////////////////////////////////////////////////////
// NAO FUNCIONA, O valor muda toda hora e deveria ser fixo.


var ponto = new dataPointInfo(12);

// Definindo as partes da data
var ano = 2022;
var mes = 09;
var dia = 25;
var hora = 20;
var minuto = 15;
var segundo = 30;
// Criando uma data Javascript
var data = new Date(ano, mes, dia, hora, minuto, segundo);
var dataTimestamp = data.getTime();

// Lê o valor que o data point tinha na data especificada
// (no caso, em 25 de setembro de 2022 às 20h15min30s)
var valor = ponto.valorEm(dataTimestamp);

return(valor)

//////////////////////////////////////////////////////////////

@Celso
Achei o problema.
Como minha base tem poucos dados e o mes do javascript é igual ao mes -1, acrescentei a seguinte linha:

mes = mes-1;

lembrando para quem for utilizar que consultas sem sucesso, que nao existe o dado anterior ao consultado a rotina vai alterar a data para a data atual e realizar a consulta.
Caso exista a data mas nao seja exatamente igual a rotina pegará o valor anterior.
Parece estar tudo ok agora.

Antecipadamente agradeço.

1 curtida

Novidades! Criei uma segunda classe no mesmo estilo, mas agora para puxar as informações de eventos/alarmes associados ao data point.

Código da classe:

function dataPointEvents(identifier) {
	var dpDAO = new com.serotonin.mango.db.dao.DataPointDao();
	var dpVO = dpDAO.getDataPoint(identifier);
	var eventDao = new com.serotonin.mango.db.dao.EventDao();
	var bundle = new com.serotonin.mango.Common().getBundle();
	var user = new com.serotonin.mango.Common().getUser();
			
	this.parseComments = function(userComments) {
	    var comments = [];
	    
	    for (var i = 0; i < userComments.size(); i++) {
	        var uc = userComments.get(i);
	        var x = {};
	        x.comment = String(uc.getComment());
	        x.username = String(uc.getUsername());
	        x.timestamp = uc.getTs();
	        x.prettyTime = String(uc.getPrettyTime());
	      
	        comments.push(x);
	    }
	    
	    return comments;
	};
	
	this.parseEvents = function(events) {
		var eventArray = [];
		
		for (var i = 0; i < events.size(); i++) {			
			var event = events.get(i);
			var e = {};
			
			e.id = event.getId();
			e.isAlarm = event.isAlarm();
			e.alarmLevel = event.getAlarmLevel();
			e.isAcknowledged = event.isAcknowledged();
			e.isActive = event.isActive();
			e.activeTime = String(event.getPrettyActiveTimestamp());
			e.hasReturn = event.isRtnApplicable();
			e.message = String(event.getMessage().getLocalizedMessage(bundle));
			
			if (event.isRtnApplicable() && !event.isActive()) {
				e.returnTime = String(event.getPrettyRtnTimestamp());				
			}
			
			if (event.isAlarm()) {
				e.isSilenced = event.isSilenced();
			}
			
			e.comments = this.parseComments(event.getEventComments());
			eventArray.push(e);
		}
		
		return eventArray;
	};
	
	this.getEvents = function() {
		var dpEvents = eventDao.getEventsForDataPoint(dpVO.getId(), user.getId());
		return this.parseEvents(dpEvents);
	};
	
	this.getPendingEvents = function() {
		var eventArray = this.getEvents();
		return eventArray.filter(function(e) { return !e.isAcknowledged });
	};
	
	this.getAlarms = function() {
		var eventArray = this.getEvents(); 
		return eventArray.filter(function(e) { return e.isAlarm; } );
	};	
	
	this.getPendingAlarms = function() {
		var eventArray = this.getPendingEvents();
		return eventArray.filter(function(e) { return e.isAlarm; } );
	};
	
	this.getLoudAlarms = function() {
		return this.getPendingAlarms().filter(function(a) { return !a.isSilenced; });
	};
	
	this.getSilencedAlarms = function() {
		return this.getPendingAlarms().filter(function(a) { return a.isSilenced; });			
	};
	
	this.eventsCount = this.getEvents().length;
	this.alarmsCount = this.getAlarms().length;
	
	this.pendingEventsCount = this.getPendingEvents().length;
	this.pendingAlarmsCount = this.getPendingAlarms().length;
	
	this.hasPendingEvents = this.pendingEventsCount > 0;
	this.hasPendingAlarms = this.pendingAlarmsCount > 0;
}

Como utilizar este código?

Para utilizar essa classe em seus scripts, você precisa:

  1. Copiar o código da classe acima e colocá-lo nas linhas finais do seu script.
  2. Instanciar a classe utilizando a palavra especial new e passando como argumento o ID ou o XID do data point que você deseja ler. Ao instanciar a classe você criará um novo objeto, então, não esqueça de salvar este objeto em uma variável.
  3. Chamar as propriedades e métodos do objeto utilizando o ponto (.) seguido do nome da propriedade/método.

Vamos mostrar um exemplo prático do que foi dito acima?

// Instanciando a classe usando o ID:
var eventosPonto1 = new dataPointEvents(12);
// Instanciando a classe usando o XID
var eventosPonto2 = new dataPointEvents("DP_201122");

// Lendo uma propriedade
eventosPonto1.hasPendingAlarms; // retorna true se o data point tiver alarmes pendentes
eventosPonto1.pendingAlarmsCount; // retorna o número de alarmes pendentes p/ o data point

// Chamando um método
eventosPonto2.getPendingAlarms(); // retornará um array com informações dos alarmes pendentes do data point

// Nas últimas linhas você deve colocar o código COMPLETO
// da classe (aqui omitimos para simplificação do exemplo)
function dataPointEvents(identifier) {
    /* Código da classe ... */
}

Como é possível supor, esta classe pode ser instanciada quantas vezes você quiser , o que permite criar objetos para ler informações dos eventos associados a praticamente qualquer data point nos seus scripts.

Métodos e propriedades implementados

Vamos agora ver todos os métodos e propriedades que essa classe implementa:

Resumo dos métodos e propriedades

Propriedades:

  • eventsCount
  • pendingEventsCount
  • alarmsCount
  • pendingAlarmsCount
  • hasPendingEvents
  • hasPendingAlarms

Métodos:

  • getEvents()
  • getAlarms()
  • getPendingEvents()
  • getPendingAlarms()
  • getLoudAlarms()
  • getSilencedAlarms()


Propriedades (detalhadas)

.eventsCount

Descrição: Esta propriedade retorna o número total de eventos associados ao data point (sejam ativos ou inativos, pendentes ou reconhecidos, alarmes ou não)
Tipo de dado: Número inteiro


.alarmsCount

Descrição: Esta propriedade retorna o número total de alarmes associados ao data point (sejam ativos ou inativos, pendentes ou reconhecidos)
Tipo de dado: Número inteiro


.pendingEventsCount

Descrição: Esta propriedade retorna o número de eventos pendentes associados ao data point (ou seja, aqueles que o usuário ainda não reconheceu)
Tipo de dado: Número inteiro


.pendingAlarmsCount

Descrição: Esta propriedade retorna o número de alarmes pendentes associados ao data point (ou seja, aqueles que o usuário ainda não reconheceu)
Tipo de dado: Número inteiro


.hasPendingEvents

Descrição: Esta propriedade retorna se o data point possui eventos pendentes (não reconhecidos)
Tipo de dado: Booleano


.hasPendingAlarms

Descrição: Esta propriedade retorna se o data point possui alarmes pendentes (não reconhecidos)
Tipo de dado: Booleano


Métodos (detalhados)

.getEvents()

Descrição: Este método retorna um array com objetos de evento associados a todos os eventos do data point (sejam ativos ou inativos, pendentes ou reconhecidos, alarmes ou não)
Tipo de dado: Array de objetos de evento (detalhes abaixo)


.getAlarms()

Descrição: Este método retorna um array com objetos de evento associados a todos os alarmes do data point (sejam ativos ou inativos, pendentes ou reconhecidos)
Tipo de dado: Array de objetos de evento (detalhes abaixo)


.getPendingEvents()

Descrição: Este método retorna um array com objetos de evento associados apenas aos eventos do data point ainda não reconhecidos (pendentes)
Tipo de dado: Array de objetos de evento (detalhes abaixo)


.getPendingAlarms()

Descrição: Este método retorna um array com objetos de evento associados apenas aos alarmes do data point ainda não reconhecidos (pendentes)
Tipo de dado: Array de objetos de evento (detalhes abaixo)


.getLoudAlarms()

Descrição: Este método retorna um array com objetos de evento associados apenas aos alarmes pendentes não silenciados do data point. Equivale a usar getPendingAlarms() e filtrar a propriedade isSilenced == false nos eventos retornados
Tipo de dado: Array de objetos de evento (detalhes abaixo)


.getSilencedAlarms()

Descrição: Este método retorna um array com objetos de evento associados apenas aos alarmes pendentes silenciados do data point. Equivale a usar getPendingAlarms() e filtrar a propriedade isSilenced == true nos eventos retornados
Tipo de dado: Array de objetos de evento (detalhes abaixo)


Objetos de evento

Objetos de evento são objetos Javascript que eu criei nesta classe para armazenar as informações sobre eventos associados ao data point. Estes objetos têm as seguintes propriedades:

Propriedade Tipo de dado Descrição
id Numérico O id do evento
isAlarm Booleano Retorna se o evento em questão é um alarme
isActive Booleano Retorna se o evento em questão está ativo
isAcknowledged Booleano Retorna se o evento em questão já foi reconhecido
isSilenced Booleano Retorna se o evento em questão está silenciado. Só existirá esta propriedade se isAlarm for true
alarmLevel Numérico Retorna o nível de alarme do evento: 0 - Nenhum alarme | 1 - Informação | 2 - Urgente | 3 - Crítico | 4 - Risco de vida
activeTime String Retorna o tempo em que o evento se tornou ativo no sistema
hasReturn Booleano Retorna se o evento possui retorno
returnTime String Retorna o tempo em que o evento retornou ao normal (tornou-se) inativo. Só existirá esta propriedade se hasReturn for true
message String Retorna a mensagem de descrição associada ao evento
comments Array de objetos Retorna um array com objetos de comentário

Objetos de comentário

Objetos de comentário são objetos Javascript que eu criei nesta classe para armazenar as informações sobre os comentários de usuário de cada evento. Estes objetos têm as seguintes propriedades:

Propriedade Tipo de dado Descrição
comment String O texto do comentário do usuário
username String O nome do usuário que adicionou o comentário
timestamp Numérico O timestamp (milissegundos) com a data/hora em que o comentário foi adicionado
prettyTime String A data/hora em que o comentário foi adicionado, porém formatada de forma mais “visualmente agradável” pelo ScadaBR

P.S.: Obrigado ao @Pedrolm pela sugestão de adicionar uma propriedade .message à classe.

3 curtidas

Eu estava fazendo teste com isso hoje rsrsrsr. Veio em time perfeito, mais uma vez muito Obrigado Pelo Script.

Boa tarde, estou tentando efetuar login e gerar uma session, e não estou conseguindo, sou novo em programação e preciso fazer esse acesso, alguém poderia me dar um caminho, ou tem uma documentação, pois não estou encontrando nada pela web, ou estou efetuando a pergunta errada.

Excelente contribuição @Celso, estava lendo aqui com o interesse de fazer um script para retornar o número de eventos ativos (e não os eventos relacionado a algum datapoint específico), para mostrar no menu de navegação que estou construindo em um balão do lado do ícone de alarmes, consegui fazer lendo a classe java EventDao. Só um detalhe, fiz para o Scada-LTS e nele a classe:
new com.serotonin.mango.db.dao.EventDao();
foi substituída por:
org.scada_lts.mango.service.EventService()

Na prática, pelo que vi somente a classe EventDao foi retirada, as outras ainda funcionam, mas já existe a substituta no endereço org.scada_lts.mango.service. trocando o final “Dao” por “Service”.

// Instanciar o serviço de eventos
var eventService = new org.scada_lts.mango.service.EventService();

// Obter todos os eventos ativos
var activeEvents = eventService.getActiveEvents();

// Contar o número de eventos ativos
var numberOfActiveEvents = activeEvents.size();

// Retornar o número de eventos ativos
var s = "Número de eventos ativos: " + numberOfActiveEvents;
return s;