Я бы считал онлайн, не по архивным данным - сделал бы правило, которое подписывается на топик тока, и при значении выше порога 1 включало виртуальный свитч, ниже порога 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>:
Добрый день!
Могу ли я чем-то помочь в решении вашего вопроса?
Здравствуйте, вопрос по аналоговому сигналу.
- Я в скрипте читаю значение аналогового входа мгновенное или какое то усредненное?
- В базу данных (архив) попадает среднее значение за “Минимальный интервал записи значений (с)” в моем случае 20 секунд
или же в архив пишется текущее (мгновенное) значение раз в 20 секунд?
Добрый день!
В базе данных сохраняется среднее значение за определённый интервал. При подписке на MQTT-топик приходит текущее измерение, соответствующее моменту времени.
А можно ли получить доступ к тому значению которое пишется в БД,
по графику у меня подсчет идет хорошо, а по скрипту ток часто переходит через LIMIT за один подъем и получается в итоге очень много ковшей из за ложных срабатываний, Ток прыгает от 0 до 90 или от 45 до 100 и это за один цикл происходит несколько раз.
Добрый день!
Доступ в базу только через утилиту wb-mqtt-db-cli
По этому у вас есть три варианта реения вопроса
- использовать утилиту
wb-mqtt-db-cli - доработать скрипт с обработкой положений и ручным округлением данных до нужных значений
- более трудоёмкий путь — организовать запись в отдельную БД и обрабатывать оперативные данные оттуда, БД при этом желательно держать отделльно от контроллера.
А можно ли как нибудь в настройках аналогового входа усреднять его значение за 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>:
Добрый день!
Тут я бы порекомендовал проверить эмпирически, точного ответа у меня нет.


