123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329 |
- <!-- apexcharts -->
- <script src="https://cdn.jsdelivr.net/npm/apexcharts"></script>
- <script>
- // charts stacked column template
- var chartData = function(series, stacked, colors) {
- return {
- chart: {
- width:'100%',
- height: 350,
- type: 'bar',
- stacked: stacked,
- toolbar: {
- show: true
- },
- zoom: {
- enabled: true
- }
- },
- colors: colors,
- dataLabels: {
- enabled: false
- },
- legend: {
- position: 'top',
- offsetY: 0
- },
- fill: {
- opacity: 1
- },
- series: series,
- tooltip: {
- x: {
- format: 'yyyy MMM dd HH:mm',
- }
- },
- xaxis: {
- format: 'yyyy-MM-dd HH:mm',
- type: 'datetime'
- }
- };
- };
-
- // DOM elements declaration
- var chart1;
- var chart2;
- var chart3;
- var chart4;
- var colorSelfConsumption = '#25bc39';
- var colorPurchased = '#d32626';
- var colorSold = '#4177d3';
- var meterSelect;
- var pickerElement;
-
- $(document).ready(function() {
- // meterSelect element and event listener
- meterSelect = $('#meterSelect');
- meterSelect.change( function() {
- drawCharts();
- });
-
- // pickerSelect element and event listener
- pickerElement = document.getElementById('pickerSelect');
- if(pickerElement != null) {
- let date = getDate();
- var today = getDateString(date);
- date.setDate(date.getDate() - 1);
- var yesterday = getDateString(date);
- pickerElement.setAttribute("data-from", yesterday);
- pickerElement.setAttribute("data-to", today);
- var picker = flatpickr(pickerElement, {
- enableTime: true,
- defaultDate: [ yesterday, today ],
- maxDate: today,
- mode: 'range',
- time_24hr: true,
- onClose: function(selectedDates) {
- let dates = selectedDates.map(d => getDate(d));
- dates[0] == null && dates.push(today);
- dates[1] == null && dates.push(dates[0]);
- pickerElement.setAttribute("data-from", getDateString(dates[0]));
- pickerElement.setAttribute("data-to", getDateString(dates[1]));
- drawCharts();
- }
- });
- $('#meterReset').click( function() {
- meterSelect.find("option:selected").prop("selected", false);
- meterSelect.find("option:first").prop("selected", "selected");
- meterSelect.val(meterSelect.find("option:first").val()).change();
- clearCharts();
- });
- $('#pickerReset').click( function() {
- picker.clear();
- pickerElement.setAttribute("data-from", "");
- pickerElement.setAttribute("data-to", "");
- clearCharts();
- });
- }
-
- });
-
- function clearCharts() {
- }
-
- function initCharts() {
- chart1 = new ApexCharts(
- document.querySelector("#chart1"),
- chartData(
- [
- {
- name: 'Purchased',
- data: []
- },
- {
- name: 'Self-consumption',
- data: []
- }
- ], // series
- true,
- [colorPurchased, colorSelfConsumption]
- )
- );
- chart2 = new ApexCharts(
- document.querySelector("#chart2"),
- chartData(
- [
- {
- name: 'Sold',
- data: []
- },
- {
- name: 'Self-consumption',
- data: []
- }
- ], // series
- true,
- [colorSold, colorSelfConsumption]
- )
- );
- chart3 = new ApexCharts(
- document.querySelector("#chart3"),
- chartData(
- [
- {
- name: 'Purchased',
- data: []
- },
- {
- name: 'Sold',
- data: []
- }
- ], // series
- false,
- [colorPurchased, colorSold]
- )
- );
- chart4 = new ApexCharts(
- document.querySelector("#chart4"),
- chartData(
- [
- {
- name: 'TFT',
- data: []
- },
- {
- name: 'PRS',
- data: []
- }
- ], // series
- false,
- [colorPurchased, colorSold]
- )
- );
- chart1.render();
- chart2.render();
- chart3.render();
- //chart4.render();
- }
-
- function drawCharts() {
- var input = {};
- input.meter = meterSelect.val();
- input.from = pickerElement.getAttribute("data-from");
- input.to = pickerElement.getAttribute("data-to");
- input.asset = "TFT";
- var qs = jQuery.param(input);
- var settings = {
- type: "GET",
- contentType: "application/json",
- headers: {
- "X-CSRF-Token": <?= json_encode($this->request->getParam('_csrfToken')) ?>
- },
- dataType : "json"
- }
- var blocks;
- var promise = $.ajax(
- '/xhr/blocks?'+qs,
- settings
- ).then(function(data) {
- blocks = data;
- return $.ajax(
- '/xhr/balances?'+qs,
- settings
- );
- });
-
- promise.then(function(balances) {
- var autoConsEnergy = [];
- var purchasedEnergy = [];
- var soldEnergy = [];
- var PRS = [];
- var TFT = [];
- for(var i=0;i<blocks.length;i++) {
- var _autoConsEnergy = parseInt((blocks[i].memo.autoConsEnergy || 0));
- if(_autoConsEnergy) {
- autoConsEnergy.push(
- [
- blocks[i].timestamp,
- _autoConsEnergy
- ]
- );
- }
- var _purchasedEnergy = Math.abs(((blocks[i].memo.energyDiff > 0 ? blocks[i].memo.energyDiff : 0) || 0));
- if(purchasedEnergy) {
- purchasedEnergy.push(
- [
- blocks[i].timestamp,
- _purchasedEnergy
- ]
- );
- }
- var _soldEnergy = Math.abs(((blocks[i].memo.energyDiff < 0 ? blocks[i].memo.energyDiff : 0) || 0));
- if(_soldEnergy) {
- soldEnergy.push(
- [
- blocks[i].timestamp,
- _soldEnergy
- ]
- );
- }
- }
- for(var i=0;i<balances.length;i++) {
- PRS.push(
- [
- balances[i].timestamp,
- (parseInt(balances[i].PRS) || 0)
-
- ]
- );
- TFT.push(
- [
- balances[i].timestamp,
- (parseInt(balances[i].TFT) || 0)
-
- ]
- );
- }
- chart1.updateOptions(
- chartData(
- [
- {
- name: 'Purchased',
- data: purchasedEnergy
- },
- {
- name: 'Self-consumption',
- data: autoConsEnergy
- }
- ],
- true,
- [colorPurchased, colorSelfConsumption]
- )
- );
- chart2.updateOptions(
- chartData(
- [
- {
- name: 'Sold',
- data: soldEnergy
- },
- {
- name: 'Self-consumption',
- data: autoConsEnergy
- }
- ],
- true,
- [colorSold, colorSelfConsumption]
- )
- );
- chart3.updateOptions(
- chartData(
- [
- {
- name: 'Purchased',
- data: purchasedEnergy
- },
- {
- name: 'Sold',
- data: soldEnergy
- }
- ], // series
- false,
- [colorPurchased, colorSold]
- )
- );
- /*
- chart4.updateOptions(
- chartData(
- [
- {
- name: 'TFT',
- data: TFT
- },
- {
- name: 'PRS',
- data: PRS
- }
- ], // series
- false,
- [colorPurchased, colorSold]
- )
- );
- */
-
- });
- }
-
- initCharts();
-
- </script>
|