Суммировать массив javascript на основе отметки времени

У меня 6 JSON с: отметка времени значение от измерителя мощности

Мне нужно агрегировать значения за 15-минутные отметки времени.

{
  "data": [
    [
      [
        1616968800000,
        3159.1404000000007
      ],
      [
        1616968886400,
        1288.7799999999997
      ],
      [
        1616968972800,
        522.8924999999999
      ],
      [
        1616969059200,
        446.1015
      ],
      [
        1616969145600,
        2340.1559999999995
      ]

и так далее...

Когда я собираюсь, я начинаю с отметки времени: 1616968800000

Поэтому мне нужно зациклить все остальные массивы JSON, чтобы получить значения: От 1616968800000 до 1616969700000

Но когда метка времени находится посередине двух меток времени, он должен вычислить значение на основе промежутка времени.

Это для расчета измерителя мощности.

Спасибо!

Пожалуйста, покажите нам, какие усилия вы приложили для решения возникшей проблемы.

Harshith Rai 30.03.2021 09:51

Я не уверен, что это так, что мне нужно: github.com/djsauble/timeseries-aggregate кажется, нужен node.js, который я не установил

fohnbit 30.03.2021 17:57
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
2
26
1

Ответы 1

пока у меня нет агрегации, потому что не знаю, как я могу это сделать.

Я рисую диаграмму 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кВт

Но мне нужно перейти от метки времени к метке времени ... и вычислить в прошлом и будущем, потому что метку времени я нашел.

Другие вопросы по теме