Chart.js com o ScadaBR

Olá,estou utilizando o chart.js para aprensentar gráficos no ScadaBR, mas preciso colocar a legenda das variáveis na direita e limitar os valores desse gráfico de entre 0 e 100, mas não estou conseguindo fazer-los.
Já tentei atualizar o Chart.js para a versão mais recente (A versão que vem com ele é a 2.9.5 e a atual e a 4.2.0) Substituindo o arquivo local do chartjs para a mais recente.
Também coloquei o codigo para serguir o padrão que o chart js trabalha.

Segue o Código do chartjs:
{
type: ‘line’,
data: data,
options: {
responsive: true,
plugins: {
legend: {
position: ‘right’,
}
},
scales: {
y: {
min: 0,
max: 100
}
}
}
}
Esse é o padrão que tem que ser utlizado para ele gerar o gráfico do jeito que eu quero.
Fica Assim:


Isso foi feito direto em HTML.

E eu adaptei um pouco o server sideScript para conseguir fazer isso:
/* @license MIT */

// Points to be included in chart (ID or XID)
var reading_points = [ 1, 2 ];

// Color of each series in the graph
// (the position of each color corresponds
// to a point in “reading_array” variable)
var series_colors = [ ‘#FF9421ff’, ‘#000000ff’ ];

// Description of each series in the graph
// (each description corresponds to a point
// in “reading_array” variable)
var descriptions = [ ‘Sucção’, ‘Recalque’ ];

// Time unit adopted in chart:
// 0 → Seconds
// 1 → Minutes
// 2 → Hours
// 3 → Dias
var time_unit = 3;

// Time period adopted in chart (in the unit
// specified by “time_unit” variable)
var time_value = 1;

// Customize chart size (in pixels)
var height = 300;
var width = 400;

// Configure chart title
var show_title = false;
var title = ‘’;

// Start Y-axis always at 0
var begin_Y_at_zero = true;
var max = 100;
var min = 0;

var enable_animations = true;
var enable_fill = false;
var tension = 0.3;
var borderwidth = 1;

//
// DON’T CHANGE THE CODE BELOW
//

var invalid_message = “is not a numeric, multistate or binary datapoint”;
var invalid_html = “”;

// Get datapoint identifiers (ID/XID)
function getDataPointIds(identifier) {
var dpDAO = new com.serotonin.mango.db.dao.DataPointDao();
var dp = dpDAO.getDataPoint(identifier);

var point_id = dp.getId();
var point_xid = String(dp.getXid());
return { id: point_id, xid: point_xid };

}

// Get data point type
function getDataPointType(identifier) {
var types = {
0: “UNKNOWN”,
1: “BINARY”,
2: “MULTISTATE”,
3: “NUMERIC”,
4: “ALPHANUMERIC”,
5: “IMAGE”
}

var dpDAO = new com.serotonin.mango.db.dao.DataPointDao();
var dp = dpDAO.getDataPoint(identifier);
var locator = dp.getPointLocator();
return types[locator.getDataTypeId()];

}

// Get data points’ values and times
function readPoints(id) {
// Units: Second, minute, hour
var unit_values = [ 1000, 60000, 360000, 8640000];
var index = time_unit;
var since = new Date().getTime() - (time_value * unit_values[index]);

var val = new com.serotonin.mango.db.dao.PointValueDao();
return val.getPointValues(id, since);

}

// Create a JSON array with a point value history
function createDataArray(obj, is_binary) {
var foo = ‘[’;
var size = obj.size() - 1;

for (var i = size; i >= 0; i--) {
	var time = obj.get(i).time;
	var value = obj.get(i).value;
	if (is_binary)
		value = String(value) == "true" ? 1 : 0;

	foo += '{"x":' + time + ',';
	foo += '"y":"' + value + '"}';
	
	if (i != 0) {
		foo += ',';
	}
}

foo += ']';
return foo;

}

// Create a JSON object compatible with Chart.js “datasets”
function createJSONDatasets() {
var size = reading_points.length;
var foo = ‘[’;

for (var i = 0; i < size; i++) {
	var is_binary = false;
	var dp_id = getDataPointIds(reading_points[i]).id;
	var dp_type = getDataPointType(dp_id);
	var point_values = readPoints(dp_id);
	
	// Don't include non numeric datapoints in array
	if (dp_type == "BINARY") {
		is_binary = true;
	} else if (dp_type != "NUMERIC" && dp_type != "MULTISTATE") {
		invalid_html += descriptions[i] + ": " + invalid_message + "<br>";
		continue;
	}

	if (foo != '[')
		foo += ',';

	var reading_array = createDataArray(point_values, is_binary);
	foo +=	'{';
	foo +=		'"label":"' + descriptions[i] + '",';
	foo +=		'"data":' + reading_array + ',';
	foo +=		'"fill":"' + enable_fill + '",';
	foo +=		'"backgroundColor":"' + series_colors[i] + '",';
	foo +=		'"borderColor":"' + series_colors[i] + '",';
    foo +=		'"tension":"' + tension + '",';
	foo +=		'"borderWidth":"' + borderwidth + '"';
	foo +=	'}';
}

foo += ']';
return foo;

}

//creating a variable that will recieve the datasets
var datasets = ‘{’
datasets += ‘“datasets”:’ + createJSONDatasets();
datasets += ‘},’;

// Create a JSON string that can be interpreted
// by FUScaBR library
function createFinalJSON() {
var foo = ‘’;

foo +=	'{';
// Specific FUScaBR options
foo +=		'"height":"' + height + '",';
foo +=		'"width":"' + width + '",';
foo +=		'"beginAtZero":' + begin_Y_at_zero + ',';
foo +=		'"timeBased":true,';
foo +=		'"animations":' + enable_animations + ',';
foo +=		'"showTitle":' + show_title + ',';
foo +=		'"title":"' + title + '",';
// Chart.js options
foo +=		'"type":"line",';
foo +=		'"data":' + datasets;
foo +=		'"options":';
foo +=	        '{';
foo +=		    '"scales":';
foo +=	            '{';
foo +=		        '"y":';
foo +=	                '{';
foo +=		    '"suggestedMin":' + min + ',';
foo +=		    '"suggestedMax":' + max;
foo +=	                '}'
foo +=	            '},';
foo +=		        '"plugins":';
foo +=	                '{';
foo +=		            '"legend":';
foo +=	                    '{';
foo +=		                '"position":"right"';
foo +=	                    '}'
foo +=	                '}'
foo +=	        '}';
foo +=	'}';


return foo;

}

var s = “”;
if (invalid_html.length)
s += invalid_html;

/* Uncomment the line below to show the generated JSON code */
//s += “

” + createFinalJSON() + “
”;

return s;

Essa é a parte final onde ele está criando o Jason final.
Obs:
data, min, max são variaveis que fora declaradas acima.

Utilizando esse código eu coloquei rodar e ele gerou o gráfico certinho, mas sem o min e max e a legenda na direita.

Print do gráfico gerado
image
A Legenda continua em cima e não limita os valores que eu desejo.

Descomentei e esse é o início do codigo gerado:
Esta parte é o Inicio do Jason gerado:

Este é o final:

O meio dele é so apresentando valores, de x e y sendo x o timeStamp e o y o valor

Isso pode ajudar:

Muito obrigado, vou dar uma olhada.
Você saberia me responder qual a versão do FUScaBR que ja vem instalada com o ScadaBR?
A Versão 2.1 é a mais atualizada ne?
E se eu alterar o arquivo “Chart.bundle.min” para o da versão mais atual, vai funcionar ou nao surtirá efeito?

A versão que vem pré-instalada no ScadaBR 1.2 é a FUScaBR 2.0.

A versão 2.1 é mais recente, mas não trouxe nenhuma mudança nesse arquivo específico que você mencionou (Chart.bundle.min), usando o mesmo arquivo da versão 2.0.

Estou querendo fazer configurável a posição em que a legenda fica, adicionei naquele arquivo a seguinte linha:
chart.options.plugins.legend.position = ‘right’;

Mas aparentemente ele não reconhece e continua em cima, sabes como eu poderia fazer isso?

Você deve estar procurando na documentação da última versão do Chart.js. A FUScaBR usa a versão v2.9.4 da biblioteca, e não a versão mais recente.

Talvez você encontre o que procura aqui: https://www.chartjs.org/docs/2.9.4/configuration/legend.html

Para acessar a documentação completa da versão 2.9.4: https://www.chartjs.org/docs/2.9.4/

Na documentação está escrito nessa configuração:
chart.defaults.global.legend.position = ‘right’;
chart.defaults.global.legend.position = “right”;

Testei com ambas, mas a Legenda continua fixa em cima, tbm dei Control + F5 para deletar o cache do navegador e continua.
Acredito que em algum lugar ele está fixando essa legenda, mas não estou conseguindo achar.

Consegui resolver esse problema, o correto é:

chart.options.legend.position = “right”

Também estou tentado colocar um valor maximo no grafico configurável,
image
Quando uso esse comando ele funciona, mas quando coloco como uma variavel no script ele da erro e não gera o gráfico.
image

image