Уточните по параметру 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 КБ)

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