WB-MSW v3: Провал показаний температуры (остальные показания не пропадают)

Вовсе не издеваемся. Вот накидал пример: правило считает производную (скорость изменения) значения температуры процессора контроллера и усредняет её по трём последним значениям. В процессе выводит много отладки.

var der_previous_values = [];
var prev_event_time = null;
var prev_event_temperature = null;

defineRule({
  whenChanged: "hwmon/CPU Temperature",
  then: function(temperature) { 
    var current_time = new Date();

    // отладка
    log("В {} пришла новая температура: {}".format(current_time, temperature));
    
    if (prev_event_time != null ) {
      // первую точку выкинули
      // смотрим, куда идёт тренд - считаем производную
      
      // прошло секунд с прошлого раза
      var delta_time = (current_time.getTime() - prev_event_time.getTime()) / 1000;

      // температура поменялась на 
      var delta_temperature = temperature - prev_event_temperature;
      
      // производная:
      var temperature_derivative = delta_temperature / delta_time;
      
      // отладка
      log("Текущая скорость изменения температуры {} градусов в секунду".format(temperature_derivative));
      
      // Задачка со звёздочкой: будем считать среднюю производную
      // добавим текущую производную в список
      der_previous_values.unshift(temperature_derivative);
      // слишком старое удаляем, оставляем не больше трёх значений
      if (der_previous_values.length > 3) {
        der_previous_values.pop();
      }
      // отладка: выведем список значений производной
      log("значения в списке:", der_previous_values);
      // теперь посчитаем среднее по этим значениям
      var sum = 0.0;
      for (var i=0; i<der_previous_values.length; i++) {
        sum += der_previous_values[i];
      }
      
      average_derivative = sum / der_previous_values.length;
      
      log("Cредняя скорость изменения температуры {} градусов в секунду".format(average_derivative));
      
      // тут мы бы в реальной задаче что-нибудь сделали бы с average_derivative -
      //   вывели бы её в какое-нибудь устройство,например
    }
    
    // эти значения нам будут нужны при следующем событии - считать скорость изменения
    prev_event_time = current_time;
    prev_event_temperature = temperature;
  }
});

В логе будет такое:

2020-09-15 22:43:15 В 2020-09-15 19:43:15.065+00:00 пришла новая температура: 60.872
2020-09-15 22:43:25 В 2020-09-15 19:43:25.089+00:00 пришла новая температура: 54.792
2020-09-15 22:43:25 Текущая скорость изменения температуры -0.6065442936951315 градусов в секунду
2020-09-15 22:43:25 значения в списке: -0.6065442936951315
2020-09-15 22:43:25 Cредняя скорость изменения температуры -0.6065442936951315 градусов в секунду
2020-09-15 22:43:35 В 2020-09-15 19:43:35.061+00:00 пришла новая температура: 55.4
2020-09-15 22:43:35 Текущая скорость изменения температуры 0.0609707180104289 градусов в секунду
2020-09-15 22:43:35 значения в списке: 0.0609707180104289,-0.6065442936951315
2020-09-15 22:43:35 Cредняя скорость изменения температуры -0.27278678784235133 градусов в секунду
2020-09-15 22:43:45 В 2020-09-15 19:43:45.046+00:00 пришла новая температура: 52.36
2020-09-15 22:43:45 Текущая скорость изменения температуры -0.30445668502754125 градусов в секунду
2020-09-15 22:43:45 значения в списке: -0.30445668502754125,0.0609707180104289,-0.6065442936951315
2020-09-15 22:43:45 Cредняя скорость изменения температуры -0.2833434202374146 градусов в секунду
2020-09-15 22:43:55 В 2020-09-15 19:43:55.096+00:00 пришла новая температура: 53.576
2020-09-15 22:43:55 Текущая скорость изменения температуры 0.12099502487562198 градусов в секунду
2020-09-15 22:43:55 значения в списке: 0.12099502487562198,-0.30445668502754125,0.0609707180104289
2020-09-15 22:43:55 Cредняя скорость изменения температуры -0.04083031404716346 градусов в секунду
2020-09-15 22:44:05 В 2020-09-15 19:44:05.062+00:00 пришла новая температура: 58.44
2020-09-15 22:44:05 Текущая скорость изменения температуры 0.4880594019666865 градусов в секунду
2020-09-15 22:44:05 значения в списке: 0.4880594019666865,0.12099502487562198,-0.30445668502754125
2020-09-15 22:44:05 Cредняя скорость изменения температуры 0.10153258060492241 градусов в секунду
2020-09-15 22:44:15 В 2020-09-15 19:44:15.079+00:00 пришла новая температура: 59.048
2020-09-15 22:44:15 Текущая скорость изменения температуры 0.060696815413796956 градусов в секунду
2020-09-15 22:44:15 значения в списке: 0.060696815413796956,0.4880594019666865,0.12099502487562198
2020-09-15 22:44:15 Cредняя скорость изменения температуры 0.22325041408536847 градусов в секунду
2020-09-15 22:44:25 В 2020-09-15 19:44:25.067+00:00 пришла новая температура: 59.656
2020-09-15 22:44:25 Текущая скорость изменения температуры 0.060873047657188324 градусов в секунду
2020-09-15 22:44:25 значения в списке: 0.060873047657188324,0.060696815413796956,0.4880594019666865
2020-09-15 22:44:25 Cредняя скорость изменения температуры 0.20320975501255725 градусов в секунду
2020-09-15 22:44:45 В 2020-09-15 19:44:45.059+00:00 пришла новая температура: 60.264
2020-09-15 22:44:45 Текущая скорость изменения температуры 0.03041216486594658 градусов в секунду
2020-09-15 22:44:45 значения в списке: 0.03041216486594658,0.060873047657188324,0.060696815413796956
2020-09-15 22:44:45 Cредняя скорость изменения температуры 0.05066067597897728 градусов в секунду
2020-09-15 22:45:25 В 2020-09-15 19:45:25.077+00:00 пришла новая температура: 60.872
2020-09-15 22:45:25 Текущая скорость изменения температуры 0.015193163076615447 градусов в секунду
2020-09-15 22:45:25 значения в списке: 0.015193163076615447,0.03041216486594658,0.060873047657188324
2020-09-15 22:45:25 Cредняя скорость изменения температуры 0.03549279186658345 градусов в секунду
2020-09-15 22:45:35 В 2020-09-15 19:45:35.119+00:00 пришла новая температура: 60.264
2020-09-15 22:45:35 Текущая скорость изменения температуры -0.06054570802628929 градусов в секунду
2020-09-15 22:45:35 значения в списке: -0.06054570802628929,0.015193163076615447,0.03041216486594658
2020-09-15 22:45:35 Cредняя скорость изменения температуры -0.004980126694575753 градусов в секунду
2020-09-15 22:45:55 В 2020-09-15 19:45:55.063+00:00 пришла новая температура: 60.872
2020-09-15 22:45:55 Текущая скорость изменения температуры 0.03048535900521445 градусов в секунду
2020-09-15 22:45:55 значения в списке: 0.03048535900521445,-0.06054570802628929,0.015193163076615447
2020-09-15 22:45:55 Cредняя скорость изменения температуры -0.00495572864815313 градусов в секунду
2020-09-15 22:46:15 В 2020-09-15 19:46:15.100+00:00 пришла новая температура: 60.264
2020-09-15 22:46:15 Текущая скорость изменения температуры -0.030343863851873883 градусов в секунду
2020-09-15 22:46:15 значения в списке: -0.030343863851873883,0.03048535900521445,-0.06054570802628929
2020-09-15 22:46:15 Cредняя скорость изменения температуры -0.02013473762431624 градусов в секунду

Лог можно посмотреть прямо рядом с редактором скриптов. Как отладите, отключить.

1 Like