{% set graph_math_ids = each_graph.math_ids.split(';') %}
{% set graph_output_ids = each_graph.relay_ids.split(';') %}
{% set graph_pid_ids = each_graph.pid_ids.split(';') %}
chart_graph[{{chart_number}}] = new Highcharts.StockChart({
chart : {
renderTo: 'container-graph-{{each_graph.id}}',
zoomType: 'x',
alignTicks: {% if each_graph.enable_align_ticks %}true{% else %}false{% endif %},
resetZoomButton: {
theme: {
display: 'none'
}
},
events: {
load: function () {
{% set count_series = [] -%}
{% for each_input in input -%}
{%- for each_id_and_measure in graph_input_ids if each_input.unique_id == each_id_and_measure.split(',')[0] %}
getPastData({{chart_number}}, {{count_series|count}}, '{{each_id_and_measure.split(',')[1]}}', '{{each_input.unique_id}}', {{each_graph.x_axis_duration*60}});
{% if each_graph.enable_auto_refresh %}
getLiveData({{chart_number}}, {{count_series|count}}, '{{each_id_and_measure.split(',')[1]}}', '{{each_input.unique_id}}', {{each_graph.x_axis_duration}}, {{each_graph.enable_xaxis_reset|int}}, {{each_graph.refresh_duration}}, {% if each_graph.enable_graph_shift %}true{% else %}false{% endif %});
{% endif %}
{%- do count_series.append(1) %}
{%- endfor -%}
{%- endfor -%}
{% for each_math in math -%}
{%- for each_id_and_measure in graph_math_ids if each_math.unique_id == each_id_and_measure.split(',')[0] %}
getPastData({{chart_number}}, {{count_series|count}}, '{{each_id_and_measure.split(',')[1]}}', '{{each_math.unique_id}}', {{each_graph.x_axis_duration*60}});
{% if each_graph.enable_auto_refresh %}
getLiveData({{chart_number}}, {{count_series|count}}, '{{each_id_and_measure.split(',')[1]}}', '{{each_math.unique_id}}', {{each_graph.x_axis_duration}}, {{each_graph.enable_xaxis_reset|int}}, {{each_graph.refresh_duration}}, {% if each_graph.enable_graph_shift %}true{% else %}false{% endif %});
{% endif %}
{%- do count_series.append(1) %}
{%- endfor -%}
{%- endfor -%}
{%- for each_output in output -%}
{%- for each_graph_relay_id in graph_output_ids if each_output.unique_id == each_graph_relay_id.split(',')[0] %}
getPastData({{chart_number}}, {{count_series|count}}, '{{each_graph_relay_id.split(',')[1]}}', '{{each_output.unique_id}}', {{each_graph.x_axis_duration*60}});
{% if each_graph.enable_auto_refresh %}
getLiveData({{chart_number}}, {{count_series|count}}, '{{each_graph_relay_id.split(',')[1]}}', '{{each_output.unique_id}}', {{each_graph.x_axis_duration}}, {{each_graph.enable_xaxis_reset|int}}, {{each_graph.refresh_duration}}, {% if each_graph.enable_graph_shift %}true{% else %}false{% endif %});
{% endif %}
{%- do count_series.append(1) %}
{%- endfor -%}
{%- endfor -%}
{%- for each_pid in pid -%}
{%- for each_id_and_measure in graph_pid_ids if each_pid.unique_id == each_id_and_measure.split(',')[0] %}
getPastData({{chart_number}}, {{count_series|count}}, '{{each_id_and_measure.split(',')[1]}}', '{{each_id_and_measure.split(',')[0]}}', {{each_graph.x_axis_duration*60}});
{% if each_graph.enable_auto_refresh %}
getLiveData({{chart_number}}, {{count_series|count}}, '{{each_id_and_measure.split(',')[1]}}', '{{each_id_and_measure.split(',')[0]}}', {{each_graph.x_axis_duration}}, {{each_graph.enable_xaxis_reset|int}}, {{each_graph.refresh_duration}}, {% if each_graph.enable_graph_shift %}true{% else %}false{% endif %});
{% endif %}
{%- do count_series.append(1) %}
{%- endfor -%}
{%- endfor -%}
}
}
},
{% if each_graph.use_custom_colors and each_graph.custom_colors -%}
{% set color_list = each_graph.custom_colors.split(',') %}
colors: [{%- for each_color in color_list -%}
"{{each_color}}",
{%- endfor -%}],
{%- endif -%}
title: {
text: '{% if each_graph.enable_title %}{{each_graph.name}}{% endif %}'
},
legend: {
enabled: true
},
xAxis: {
type: 'datetime',
ordinal: false
},
yAxis: [
{% for each_axis_meas in y_axes[each_graph.id] %}
{
{% if each_graph.enable_manual_y_axis and
not (custom_yaxes[each_graph.id][dict_measurements[each_axis_meas]['meas']]['minimum'] == '0' and
custom_yaxes[each_graph.id][dict_measurements[each_axis_meas]['meas']]['maximum'] == '0') %}
min: {{custom_yaxes[each_graph.id][dict_measurements[each_axis_meas]['meas']]['minimum']}},
max: {{custom_yaxes[each_graph.id][dict_measurements[each_axis_meas]['meas']]['maximum']}},
startOnTick: {% if each_graph.enable_start_on_tick %}true{% else %}false{% endif %},
endOnTick: {% if each_graph.enable_end_on_tick %}true{% else %}false{% endif %},
{% endif %}
title: {
text: '{{dict_measurements[each_axis_meas]['name']}}{% if dict_measurements[each_axis_meas]['unit'] != '' %} ({{dict_measurements[each_axis_meas]['unit']}}){% endif %}'
},
labels: {
format: '{value}'
},
opposite: false,
id: '{{dict_measurements[each_axis_meas]['meas']}}'
},
{% endfor %}
],
exporting: {
enabled: {% if each_graph.enable_export %}true{% else %}false{% endif %},
fallbackToExportServer: false,
},
navigator: {
enabled: {% if each_graph.enable_navbar %}true{% else %}false{% endif %}
},
scrollbar: {
enabled: false
},
rangeSelector: {
enabled: {% if each_graph.enable_rangeselect %}true{% else %}false{% endif %},
buttons: [{
count: 1,
type: 'minute',
text: '1m'
}, {
count: 5,
type: 'minute',
text: '5m'
}, {
count: 15,
type: 'minute',
text: '15m'
}, {
count: 30,
type: 'minute',
text: '30m'
}, {
type: 'hour',
count: 1,
text: '1h'
}, {
type: 'hour',
count: 6,
text: '6h'
}, {
type: 'day',
count: 1,
text: '1d'
}, {
type: 'week',
count: 1,
text: '1w'
}, {
type: 'month',
count: 1,
text: '1m'
}, {
type: 'month',
count: 3,
text: '3m'
}, {
type: 'all',
text: 'Full'
}],
selected: 15
},
credits: {
enabled: false,
href: "https://github.com/kizniche/Mycodo",
text: "Mycodo"
},
series: [
{% for each_input in input -%}
{%- for each_id_and_measure in graph_input_ids if each_input.unique_id == each_id_and_measure.split(',')[0] -%}
{% if each_input.device == 'LinuxCommand' %}
{
name: '{{each_input.name}} {{each_input.cmd_measurement}} ({{each_input.cmd_measurement_units}})',
type: 'line',
tooltip: {
{% if each_input.cmd_measurement == 'temperature' %}
pointFormatter: function () {
return '\u25CF ' + this.series.name + ': ' + Highcharts.numberFormat(this.y, 2) + '°C (' + Highcharts.numberFormat(((this.y*9/5)+32), 2) + '°F)
';
},
{% else %}
valueSuffix: ' {{each_input.cmd_measurement_units}}',
valueDecimals: 2
{% endif %}
},
yAxis: '{{each_input.cmd_measurement}}',
data: []
},
{% endif %}
{%- for each_measurement in each_input.measurements.split(',') -%}
{%- if each_measurement == each_id_and_measure.split(',')[1] -%}
{
name: '{{each_input.name}} {{measurement_units[each_measurement]['name']}}{% if dict_measurements[each_measurement]['unit'] != '' %} ({{measurement_units[each_measurement]['unit']}}){% endif %}',
{% if measurement_units[each_measurement]['meas'] == 'edge' %}
type: 'column',
{% else %}
type: 'line',
{% endif %}
tooltip: {
{% if measurement_units[each_measurement]['meas'] == 'temperature' %}
pointFormatter: function () {
return '\u25CF ' + this.series.name + ': ' + Highcharts.numberFormat(this.y, 2) + '°C (' + Highcharts.numberFormat(((this.y*9/5)+32), 2) + '°F)
';
},
{% else %}
valueSuffix: ' {{measurement_units[each_measurement]['unit']}}',
valueDecimals: 2
{% endif %}
},
yAxis: '{{measurement_units[each_measurement]['meas']}}',
data: []
},
{%- elif each_input.adc_measure == each_id_and_measure.split(',')[1] -%}
{
name: '{{each_input.name}} {{each_input.adc_measure}}',
type: 'line',
tooltip: {
valueSuffix: ' {{each_input.adc_measure_units}}',
valueDecimals: 3
},
yAxis: '{{each_input.adc_measure}}',
data: []
},
{%- endif -%}
{%- endfor -%}
{%- endfor -%}
{% endfor %}
{% for each_math in math -%}
{%- for each_id_and_measure in graph_math_ids if each_math.unique_id == each_id_and_measure.split(',')[0] -%}
{
name: '{{each_math.name}} {% if each_id_and_measure.split(',')[1] in measurement_units %}{{measurement_units[each_id_and_measure.split(',')[1]]['name']}} ({{measurement_units[each_id_and_measure.split(',')[1]]['unit']}}){% else %}{{each_id_and_measure.split(',')[1]}}{% endif %}',
type: 'line',
tooltip: {
{% if each_id_and_measure.split(',')[1] in measurement_units and measurement_units[each_id_and_measure.split(',')[1]]['meas'] == 'temperature' %}
pointFormatter: function () {
return '\u25CF ' + this.series.name + ': ' + Highcharts.numberFormat(this.y, 2) + '°C (' + Highcharts.numberFormat(((this.y*9/5)+32), 2) + '°F)
';
},
{% else %}
valueSuffix: ' {% if each_id_and_measure.split(',')[1] in measurement_units %}{{measurement_units[each_id_and_measure.split(',')[1]]['unit']}}{% else %}{{each_math.measure_units}}{% endif %}',
valueDecimals: 3
{% endif %}
},
yAxis: '{{each_id_and_measure.split(',')[1]}}',
data: []
},
{%- endfor -%}
{% endfor %}
{%- for each_output in output -%}
{%- for each_graph_relay_id in graph_output_ids if each_output.unique_id == each_graph_relay_id.split(',')[0] -%}
{% if each_graph_relay_id.split(',')[1] == 'duration_sec' %}
{
name: '{{each_output.name}} (sec)',
type: 'column',
dataGrouping: {
approximation: 'low',
groupPixelWidth: 3
},
tooltip: {
valueSuffix: ' sec',
valueDecimals: 2
},
yAxis: 'duration_sec',
data: []
},
{% elif each_graph_relay_id.split(',')[1] == 'duty_cycle' %}
{
name: '{{each_output.name}} (%)',
type: 'column',
dataGrouping: {
approximation: 'low',
groupPixelWidth: 3
},
tooltip: {
valueSuffix: ' %',
valueDecimals: 2
},
yAxis: 'duty_cycle',
data: []
},
{% endif %}
{%- endfor -%}
{%- endfor -%}
{%- for each_pid in pid -%}
{%- for each_graph_pid_id in graph_pid_ids if each_pid.unique_id == each_graph_pid_id.split(',')[0] -%}
{% if each_graph_pid_id.split(',')[1] == 'setpoint' and each_pid.measurement %}
{
name: '{{each_pid.name}} {{_('Setpoint')}}',
type: 'line',
tooltip: {
valueSuffix: '
{%- if each_pid.measurement.split(',')[1] in measurement_units -%}
{{' ' + measurement_units[each_pid.measurement.split(',')[1]]['unit']|safe}}
{%- else -%}
{%- for each_input in input if each_pid.measurement.split(',')[0] == each_input.unique_id and each_input.device == 'LinuxCommand' -%}
{{' ' + each_input.cmd_measurement_units}}
{%- endfor -%}
{%- endif -%}',
valueDecimals: 2
},
yAxis: '{{each_pid.measurement.split(',')[1]}}',
data: []
},
{% elif each_graph_pid_id.split(',')[1] == 'setpoint_band_min' and each_pid.measurement %}
{
name: '{{each_pid.name}} {{_('Band Min')}}',
type: 'line',
tooltip: {
valueSuffix: '{%- if each_pid.measurement.split(',')[1] in measurement_units -%}
{{' ' + measurement_units[each_pid.measurement.split(',')[1]]['unit']|safe}}
{%- else -%}
{%- for each_input in input if each_pid.measurement.split(',')[0] == each_input.unique_id and each_input.device == 'LinuxCommand' -%}
{{' ' + each_input.cmd_measurement_units}}
{%- endfor -%}
{%- endif -%}',
valueDecimals: 2
},
yAxis: '{{each_pid.measurement.split(',')[1]}}',
data: []
},
{% elif each_graph_pid_id.split(',')[1] == 'setpoint_band_max' and each_pid.measurement %}
{
name: '{{each_pid.name}} {{_('Band Max')}}',
type: 'line',
tooltip: {
valueSuffix: '{%- if each_pid.measurement.split(',')[1] in measurement_units -%}
{{' ' + measurement_units[each_pid.measurement.split(',')[1]]['unit']|safe}}
{%- else -%}
{%- for each_input in input if each_pid.measurement.split(',')[0] == each_input.unique_id and each_input.device == 'LinuxCommand' -%}
{{' ' + each_input.cmd_measurement_units}}
{%- endfor -%}
{%- endif -%}',
valueDecimals: 2
},
yAxis: '{{each_pid.measurement.split(',')[1]}}',
data: []
},
{% elif each_graph_pid_id.split(',')[1] == 'pid_p_value' %}
{
name: '{{each_pid.name}} P-Value',
type: 'line',
tooltip: {
valueSuffix: '',
valueDecimals: 2
},
yAxis: 'pid_value',
data: []
},
{% elif each_graph_pid_id.split(',')[1] == 'pid_i_value' %}
{
name: '{{each_pid.name}} I-Value',
type: 'line',
tooltip: {
valueSuffix: '',
valueDecimals: 2
},
yAxis: 'pid_value',
data: []
},
{% elif each_graph_pid_id.split(',')[1] == 'pid_d_value' %}
{
name: '{{each_pid.name}} D-Value',
type: 'line',
tooltip: {
valueSuffix: '',
valueDecimals: 2
},
yAxis: 'pid_value',
data: []
},
{% elif each_graph_pid_id.split(',')[1] == 'pid_output' %}
{
name: '{{each_pid.name}} {{_('Output')}} {{_('Duration')}}',
type: 'line',
tooltip: {
valueSuffix: ' sec',
valueDecimals: 2
},
yAxis: 'duration_sec',
data: []
},
{% elif each_graph_pid_id.split(',')[1] == 'duty_cycle' %}
{
name: '{{each_pid.name}} {{_('Output')}} {{_('Duty Cycle')}}',
type: 'line',
tooltip: {
valueSuffix: ' %',
valueDecimals: 2
},
yAxis: 'duty_cycle',
data: []
},
{% endif %}
{%- endfor -%}
{%- endfor -%}
]
});
$('#updateData{{chart_number}}').click(function() {
{% set count_series = [] -%}
{% for each_input in input -%}
{%- for each_id_and_measure in graph_input_ids if each_input.unique_id == each_id_and_measure.split(',')[0] %}
retrieveLiveData({{chart_number}}, {{count_series|count}}, '{{each_id_and_measure.split(',')[1]}}', '{{each_input.unique_id}}', {{each_graph.x_axis_duration}}, {{each_graph.enable_xaxis_reset|int}}, {{each_graph.refresh_duration}}, {% if each_graph.enable_graph_shift %}true{% else %}false{% endif %});
{%- do count_series.append(1) %}
{%- endfor -%}
{%- endfor -%}
{% for each_math in math -%}
{%- for each_id_and_measure in graph_math_ids if each_math.unique_id == each_id_and_measure.split(',')[0] %}
retrieveLiveData({{chart_number}}, {{count_series|count}}, '{{each_id_and_measure.split(',')[1]}}', '{{each_math.unique_id}}', {{each_graph.x_axis_duration}}, {{each_graph.enable_xaxis_reset|int}}, {{each_graph.refresh_duration}}, {% if each_graph.enable_graph_shift %}true{% else %}false{% endif %});
{%- do count_series.append(1) %}
{%- endfor -%}
{%- endfor -%}
{%- for each_output in output -%}
{%- for each_graph_relay_id in graph_output_ids if each_output.unique_id == each_graph_relay_id.split(',')[0] %}
retrieveLiveData({{chart_number}}, {{count_series|count}}, '{{each_graph_relay_id.split(',')[1]}}', '{{each_output.unique_id}}', {{each_graph.x_axis_duration}}, {{each_graph.enable_xaxis_reset|int}}, {{each_graph.refresh_duration}}, {% if each_graph.enable_graph_shift %}true{% else %}false{% endif %});
{%- do count_series.append(1) %}
{%- endfor -%}
{%- endfor -%}
{%- for each_pid in pid -%}
{%- for each_id_and_measure in graph_pid_ids if each_pid.unique_id == each_id_and_measure.split(',')[0] %}
retrieveLiveData({{chart_number}}, {{count_series|count}}, '{{each_id_and_measure.split(',')[1]}}', '{{each_id_and_measure.split(',')[0]}}', {{each_graph.x_axis_duration}}, {{each_graph.enable_xaxis_reset|int}}, {{each_graph.refresh_duration}}, {% if each_graph.enable_graph_shift %}true{% else %}false{% endif %});
{%- do count_series.append(1) %}
{%- endfor -%}
{%- endfor -%}
});
$('#resetZoom{{chart_number}}').click(function() {
var chart = $('#container-graph-{{each_graph.id}}').highcharts();
chart.zoomOut();
});
$('#showhidebutton{{chart_number}}').click(function() {
var chart = $('#container-graph-{{each_graph.id}}').highcharts();
var series = chart.series[0];
if (series.visible) {
$(chart.series).each(function(){
this.setVisible(false, false);
});
chart.redraw();
} else {
$(chart.series).each(function(){
this.setVisible(true, false);
});
chart.redraw();
}
});