У меня 6 JSON с: отметка времени значение от измерителя мощности
Мне нужно агрегировать значения за 15-минутные отметки времени.
{
"data": [
[
[
1616968800000,
3159.1404000000007
],
[
1616968886400,
1288.7799999999997
],
[
1616968972800,
522.8924999999999
],
[
1616969059200,
446.1015
],
[
1616969145600,
2340.1559999999995
]
и так далее...
Когда я собираюсь, я начинаю с отметки времени: 1616968800000
Поэтому мне нужно зациклить все остальные массивы JSON, чтобы получить значения: От 1616968800000 до 1616969700000
Но когда метка времени находится посередине двух меток времени, он должен вычислить значение на основе промежутка времени.
Это для расчета измерителя мощности.
Спасибо!
Я не уверен, что это так, что мне нужно: github.com/djsauble/timeseries-aggregate кажется, нужен node.js, который я не установил



пока у меня нет агрегации, потому что не знаю, как я могу это сделать.
Я рисую диаграмму Google и добавляю значения следующим образом:
function drawChart() {
// 487 = Bezug
// 486 = Lieferung
// 504 = PV
// 214 = Verbrauch
var json_day = 'http://192.168.0.202:8080/db/getdata?id=dlc&eid=487,486,504,214&range=yesterday';
var http_request_day = new XMLHttpRequest();
try {
// Opera 8.0+, Firefox, Chrome, Safari
http_request_day = new XMLHttpRequest();
} catch (e) {
// Internet Explorer Browsers
try {
http_request_day = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request_day = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
http_request_day.onreadystatechange = function() {
if (http_request_day.readyState == 4) {
var data_line = new google.visualization.DataTable();
data_line.addColumn('date', 'Date');
data_line.addColumn('number', 'Verbrauch');
data_line.addColumn('number', 'PV');
data_line.addColumn('number', 'Bezug');
data_line.addColumn('number', 'Lieferung');
var jsonObj = JSON.parse(http_request_day.responseText);
var rows = [];
// Verbrauch
for (var i = 0; i < jsonObj.data[3].length; i++) {
// console.info(i);
var date = new Date(jsonObj.data[3][i][0]);
var consumption = parseFloat(jsonObj.data[3][i][1]);
date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());
dateNew = new Date(date.getFullYear(), date.getMonth(), date.getDate());
var pv = 0;
// search PV
for (var ii = 0; ii < jsonObj.data[2].length; ii++) {
var date = new Date(jsonObj.data[2][ii][0]);
if ( jsonObj.data[2][ii][0] >= jsonObj.data[3][i][0]) {
// console.info(i + "/" + ii);
pv = parseFloat(jsonObj.data[2][ii][1]);
break;
}
}
var bezug = 0;
// search Bezug
for (var ii = 0; ii < jsonObj.data[0].length; ii++) {
var date = new Date(jsonObj.data[0][ii][0]);
if ( jsonObj.data[0][ii][0] >= jsonObj.data[3][i][0]) {
// console.info(i + "/" + ii);
bezug = parseFloat(jsonObj.data[0][ii][1]);
break;
}
}
var lieferung = 0;
// search Lieferung
for (var ii = 0; ii < jsonObj.data[1].length; ii++) {
var date = new Date(jsonObj.data[1][ii][0]);
if ( jsonObj.data[1][ii][0] >= jsonObj.data[3][i][0]) {
// console.info(i + "/" + ii);
lieferung = parseFloat(jsonObj.data[1][ii][1]) * -1;
break;
}
}
data_line.addRow([date, consumption, pv, bezug, lieferung]);
}
var optionsLine = {
title: 'Energieverbrauch',
animation: {
duration: 1000,
easing: 'out',
startup: true
},
hAxis: {
gridlines: {
color: 'none'
},
gridThickness: 4,
format: 'HH:MM',
color: '#AAA',
fontName: 'Arial',
fontSize: '1'
},
interpolateNulls: true,
backgroundColor: {
fillOpacity: 0
},
legendTextStyle: {
color: '#AAA'
},
titleTextStyle: {
color: '#AAA'
},
series: {
0: {
color: '#0699fa',
lineWidth: 1
},
1: {
color: '#edd409',
lineWidth: 1
},
2: {
color: '#f1ca3a'
},
3: {
color: '#6f9654'
},
4: {
color: '#1c91c0'
},
5: {
color: '#43459d'
},
},
vAxis: {
gridlines: {
count: -1,
color: 'none'
},
gridThickness: 4,
format: '#,###W',
color: '#AAA',
fontName: 'Arial',
fontSize: '5',
minValue: 0
},
explorer: {
actions: ['dragToZoom', 'rightClickToReset'],
axis: 'horizontal',
keepInBounds: true,
maxZoomIn: 4.0
},
};
var container = document.getElementById('current');
var chartArea = new google.visualization.AreaChart(container);
Но здесь я ищу следующую временную метку и добавляю к первой ... это неточно или правильно.
Мне нужно рассчитать мощность за 15 минут. Я хочу это на 15-минутный интервал
Пример 2: 00:00, 5кВт
00:15, 12кВт
00:30, 12кВт
Вот для первых 15мин 5кВт, для вторых 12кВт
00:00, 5кВт
00:07, 10кВт
00:15, 12кВт
00:30, 12кВт
Вот за первые 15 минут 7,7кВт,
(5 * (760) + 10 (860)) / (1560)
(2100 + 4800) / 900 = 7,7 кВт
для второго 12кВт
Но мне нужно перейти от метки времени к метке времени ... и вычислить в прошлом и будущем, потому что метку времени я нашел.
Пожалуйста, покажите нам, какие усилия вы приложили для решения возникшей проблемы.