Добрый день,
Есть потребность работать со усредненным значением за период - напр, середняя Т за последние N минут. Не могу сходу сообразить, как это реализовать на wb-rules, если кто-то сталкивался поделитесь примером скрипта плз
Добрый день.
В качестве примера:
/*
Функция для расчета скользящей средней, где аргументы:
data — массив значений
windowSize — размер окна (количество элементов для усреднения)
*/
function calculateMovingAverage(data, windowSize) {
var movingAverage = [];
for (var i = 0; i < data.length; i++) {
var sum = 0;
var count = 0;
for (var j = Math.max(0, i - windowSize + 1); j <= i; j++) {
sum += data[j];
count++;
}
movingAverage.push(sum/count);
}
return movingAverage;
}
var control = "wb-msw-v4_222/Temperature"; // Контрол, значения которого необходимо усреднять
var data = []; // Массив, куда будут добавляться значения контрола
var time = 5000; // Время, в течение которого будут добавляться значения в массив (мс)
var tickerTime = 1000; // Интервал периодического таймера (мс)
startTicker("ticker", tickerTime);
defineRule({
when: function () {
return timers.ticker.firing;
},
then: function () {
if (time > 0) {
time -= tickerTime;
data.push(dev[control]);
} else {
data.shift();
data.push(dev[control]);
}
var movingAverage = calculateMovingAverage(data, data.length); // Рассчет скользящего среднего при размере окна равному количеству элементов массива
log(movingAverage[data.length - 1]); // Вывод в лог последнего значения
}
});
1 лайк
Александр, большое спасибо за понятный пример
1 лайк