Чтение истории значения топика

Я бы считал онлайн, не по архивным данным - сделал бы правило, которое подписывается на топик тока, и при значении выше порога 1 включало виртуальный свитч, ниже порога 2 - выключало. И второе, которое подписано на свитч, считает переходы и пишет в виртуальный счетчик. Этот виртуальный счетчик уже можно анализировать в истории, если интересен, например, темп работы.

спасибо за рекомендацию, но все равно не понятно почему он не пишет раз в 2 секунды как указано, а пишет раз в 2 минуты как было указано может влияет условия которые указаны для всех


здесь указано 2 минуты может у этих настроек приоритет?

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

а как в этом скрипте ввести гистерезис или каким другим способом, т.к. ток прыгает через LIMIT и может быть несколько срабатываний?

// Пороговое значение
var LIMIT = 1;

// Флаг: текущее состояние "выше порога"
var wasAbove = false;

// Создаём виртуальное устройство-счётчик
defineVirtualDevice("counter_dev", {
  title: "Счётчик превышений",
  cells: {
    count: {
      type: "value",
      value: 0
    }
  }
});

// Подписываемся на исходный топик
defineRule("count_if_limit", {
  whenChanged: "wb-adc/V3_3",   // замените на свой топик
  then: function (newValue) {
    var val = parseFloat(newValue);

    if (val > LIMIT && !wasAbove) {
      // Сработал переход снизу вверх через порог
      dev["counter_dev/count"] = dev["counter_dev/count"] + 1;
      wasAbove = true;
    }

    if (val <= LIMIT && wasAbove) {
      // Вернулись обратно — сброс флага
      wasAbove = false;
    }
  }
});`Текст «как есть» (без применения форматирования)`

Добрый день!

Технически дважды сработки быть не должно, пока сигнал не пересечёт линию сработки.
Да, для более корректной работы можно добавить гистерезис. Код будет выглядеть примерно так:

if (val > LIMIT_UP && !wasAbove) {
  // Сработал переход снизу вверх через верхний порог
  dev["counter_dev/count"] = dev["counter_dev/count"] + 1;
  wasAbove = true;
}

if (val < LIMIT_DOWN && wasAbove) {
  // Вернулись обратно — сброс флага
  wasAbove = false;
}

Добрый день,
Удалось ли решить вопрос?

Пока нет

ср, 3 сент. 2025 г., 08:17 Aleksandr Khlebnikov через Wiren Board Support <info@wirenboard.com>:

Добрый день!

Могу ли я чем-то помочь в решении вашего вопроса?

Здравствуйте, вопрос по аналоговому сигналу.

  1. Я в скрипте читаю значение аналогового входа мгновенное или какое то усредненное?
  2. В базу данных (архив) попадает среднее значение за “Минимальный интервал записи значений (с)” в моем случае 20 секунд

    или же в архив пишется текущее (мгновенное) значение раз в 20 секунд?

Добрый день!

В базе данных сохраняется среднее значение за определённый интервал. При подписке на MQTT-топик приходит текущее измерение, соответствующее моменту времени.

А можно ли получить доступ к тому значению которое пишется в БД,

по графику у меня подсчет идет хорошо, а по скрипту ток часто переходит через LIMIT за один подъем и получается в итоге очень много ковшей из за ложных срабатываний, Ток прыгает от 0 до 90 или от 45 до 100 и это за один цикл происходит несколько раз.

Добрый день!

Доступ в базу только через утилиту wb-mqtt-db-cli
По этому у вас есть три варианта реения вопроса

  1. использовать утилиту wb-mqtt-db-cli
  2. доработать скрипт с обработкой положений и ручным округлением данных до нужных значений
  3. более трудоёмкий путь — организовать запись в отдельную БД и обрабатывать оперативные данные оттуда, БД при этом желательно держать отделльно от контроллера.

А можно ли как нибудь в настройках аналогового входа усреднять его значение за 10 секунд? Или в скрипте создать глобальную переменную и в ней хранить среднее значение за 10 секунд, а в другом скрипте отслеживать эту переменную и привязать функцию к изменению этой переменной?

пн, 15 сент. 2025 г., 11:44 Aleksandr Khlebnikov через Wiren Board Support <info@wirenboard.com>:

Добрый день!

Можно:

  • создать виртуальное устройство и обрабатывать значения через него, но потребуется экспериментировать, чтобы убедиться, что данные будут корректно приходить и коррелировать с реальной работой ковша
  • сделать отсечку, чтобы в течение, например, 3 секунд счётчик не поднимался, так как ковш не может срабатывать каждую секунду

А по какому алгоритму данные усредняются для базы данных?

вт, 16 сент. 2025 г., 09:18 Aleksandr Khlebnikov через Wiren Board Support <info@wirenboard.com>:

А по какому алгоритму данные усредняются для базы данных?

wb-mqtt-db работает так:

  • каждое новое значение из MQTT попадает в буфер;
  • если значения приходят чаще, чем раз в min_interval, то они не пишутся все подряд, а агрегируются;
  • в конце интервала в базу записывается одна строка: min, max и среднее за этот промежуток;
    Подробнее описано на гитхабе

А график строится по min, max или среднему?

вт, 16 сент. 2025 г., 10:45 Aleksandr Khlebnikov через Wiren Board Support <info@wirenboard.com>:

По умолчанию график строится по среднему значению (value), которое wb-mqtt-db вычисляет за каждый интервал

Если у меня настроено писать в БД каждую минуту и последняя запись была 20 секунд назад, то если я обращусь к БД сейчас, я получу значение которое было записано 20 секунд назад или какое-то другое?

вт, 16 сент. 2025 г., 13:30 Aleksandr Khlebnikov через Wiren Board Support <info@wirenboard.com>:

Добрый день!

Тут я бы порекомендовал проверить эмпирически, точного ответа у меня нет.