Уточните по параметру max_burst и другие уточнения по history

добрый день
Пытаюсь сделать рассчет и тонкую настройку History для параметров электросчетчика и появилось несколько вопросов.

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

  2. Внеочередное значение пишется ТОЛЬКО в случае, когда за min_interval ничего не поступило или дополнительно к очередной записи?

  3. при записи внеочередного значения время отсчета для min_interval не меняется? т.е. следующее очередное значение запишется через интервал менее, чем min_interval или оно меняется на текущее и следующая запись произойдет через время не менее min_interval?

  4. За какой промежуток времени или интервалов считается max_burst? когда счетчик обнуляется? т.е. при max_burst=5 запишется 5 внеочередных значений до следующего min_interval или это общее количество внеочередных значений для всех записанных values?

  5. max_burst общий для всех контролов в группе или для кажого контрола считается независимо?

Очень хотелось бы видеть в документации более подробное описание параметров, с графическими примерами на шкале времени

Спасибо

Добрый день!

  1. min_interval начинает отсчитывается с последней записи этого контрола в историю.
  2. Внеочередные записи будут записываться сразу по получению, без учёта минимального периода записи.

В процессе работы wb-mqtt-db подсчитывает число записей, если в течение min_interval не было сделано ни одной записи, разрешается сделать одну внеочередную.

  1. Поведение таймера min_interval при внеочередной записи в документации явно не описано. Уточню этот момент у коллег.
  2. Максимальное число внеочередных записей ограничено параметром max_burst. При получении нового сообщения по MQTT, будет сделана внеочередая запись, число доступных записей уменьшится на 1. Так будет происходить пока оно не станет равным нулю. Последующие записи будут делаться согласно настройкам, раз в min_interval, будут записаны минимальное, максимальное и среднее значение за интервал.
  3. max_burst задаётся на уровне группы в конфиге /etc/wb-mqtt-db.conf.

По вашей просьбе добавлю в пожелания

Уточнил – min_interval не меняется. Внеочередные записи на него не влияют.

  1. вопрос больше был не про “когда”, а “при каких обстоятельствах”.
    т.е. внеочередное значение пишется ТОЛЬКО в случае, когда за min_interval ничего не поступило. Так?
  2. это я читал в документации, не понятно…
    вопросы на скрине, файл для редактирования прилагаю
Вопросы тут

  1. где задается я знаю, вопрос был о другом.
    Подсчет совершенных внеочередных записей идет для каждого контрола в группе независимо или он “тратится” при внеочередной записи любого контрола из группы?

History_time_burst.drawio (14.8 KB)

Добрый день!

Выясню ответы на ваши вопросы и вернусь.

с момента последней записи этого конкретного контрола.

Дополнительно.

Нет, не меняется.

Burst records НАКАПЛИВАЮТСЯ во время тишины (пока нет несохранённых сообщений)
Burst records РАСХОДУЮТСЯ немедленно при поступлении нового сообщения

Код SaveMessage в dblogger.cpp:

channelData.HasUnsavedMessages = true;
// ...
if (channelData.BurstRecords) {
    WriteChannel(msg.Channel, group, currentTime, msg.Time, channelData);
    --channelData.BurstRecords;
    return;  // ← пишем сразу, не ждём min_interval
}

Накопление (UpdateBurstRecordsCount) срабатывает только когда !channel.HasUnsavedMessages:

if (!channel.HasUnsavedMessages && group.MaxBurstRecords > 0) {
    int newBurstRecords = duration_cast<seconds>(currentTime - channel.LastSaved) / group.ChangedInterval;
    channel.BurstRecords = std::max(channel.BurstRecords, newBurstRecords);
}

Итог: тишина → копятся “кредиты” → пришло сообщение → если есть кредит, пишем мгновенно.

max_burst — это параметр группы (лимит), но счётчик BurstRecords — отдельный для каждого контрола.
То есть он задается для всех элементов группы, но считается для каждого индивидуально.

В TLoggingGroup:

int MaxBurstRecords = 0;  // ← настройка группы (один лимит для всех)

В TChannel:

int BurstRecords = 0;  // ← счётчик каждого контрола независимо

Каждый контрол накапливает и расходует свои кредиты независимо — они не делятся между контролами группы.

Здравствуйте!

Постараюсь ответить на вашем графике:

History_time_burst — копия.drawio (20,3 КБ)

Добрый день! Вам еще нужна помощь техподдержки?

Дополнили раздел Как работает история.

Спасибо за подроюные ответы.

есть еще вопрос по вот таким настройкам, как во вложении
wb-mqtt-db.conf (5.0 KB)
с ними получается так, что сейчас данные в базе присутствуют только за последний ~1 час.

Скриншоты с разной степенью увеличения:

Summary



Если при максимальном увеличении нажать “Загрузить данные”

Summary

Я ожидал, что секундные данные (средняя за 1 сек) будут хранится 1 час, минутные данные - неделю, часовые данные - 3мес, 8ми часовые данные - 1год

если это вопрос для отдельной темы, то перенесите пжст

приложен диагностический архив, доступен только сотрудникам поддержки
(357.5 KB)

Добрый день!

Контрол пишется только в первую подходящую
группу, в несколько групп сразу значение не дублируется, усреднения по
уровням нет. Все ваши электроканалы попадают в первую
группу «1сек-1час» (min_interval=1, values=3600 → 3600×1с = ровно 1 час),
а группы «1мин-7дн / 1час-3мес / 8час-1год» для них уже не наполняются.
Отсюда и 1 час. Один канал в 4 группы одновременно не попадёт.

вот это сюрприз (
т.е. сейчас штатными средствами мне это не реализовать?

и в документации про это не написано (

Вполне можно, например написать скрипт который будет публиковать в (разные) топики виртуальеного устройства.
Но, обычно проще отдать данные во внешнюю базу для временных рядов, например influx.

Вполне можно, например написать скрипт который будет публиковать в (разные) топики виртуальеного устройства

это костыль, особенно с учетом нашей с вами относительно недавней дискуссии про корректное клонирование устройств/топиков.

Но, обычно проще отдать данные во внешнюю базу для временных рядов, например influx.

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

добавьте во future request пжст:

  • возможность записи и отображения данных в history по нескольким критериям для одного и того же топика.

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

Спасибо

Добрый день!

Добавил в книгу пожеланий, благодарю за то, что поделились идеей.