History

Добрый день
WB 6.7.2 release wb-2104 (as stable)
df

Сводка

Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 999320 482532 447976 52% /
devtmpfs 245856 0 245856 0% /dev
tmpfs 254560 0 254560 0% /dev/shm
tmpfs 254560 540 254020 1% /run
tmpfs 5120 0 5120 0% /run/lock
tmpfs 254560 0 254560 0% /sys/fs/cgroup
/dev/mmcblk0p6 4914580 189520 4455700 5% /mnt/data
tmpfs 50912 0 50912 0% /run/user/0

В history глубина записи 2-4 суток. Началось все с появления plotly (в версиях ПО до него было все нормально). 28 июня сделал сброс к заводским установкам, на текущий момент 06 июля. В history если выбрать диапазон 2021-06-28 2021-07-07, то показывает данные со 2 июля. При этом таблица под графиком со значениями показывает только сегодняшние.

Не нашел никакой инструкции как пользоваться history в текущем исполнении. Есть ли у вас она на сайте?

Как можно вытащить данные без plotly?

Как настроить history? Указать какие данные сохранять а какие нет? Как регулировать глубину записи для каждого топика отдельно?

Настройки все стандарнтые. К WB подключено 5 шт ds18b20 и wb-map6s fw2. data.db занимает 10МБ.

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

Не нашел никакой инструкции как пользоваться history в текущем исполнении. Есть ли у вас она на сайте?

Почитать про History можно здесь:
https://wirenboard.com/wiki/Wiren_Board_Web_Interface#History_.28.D0.98.D1.81.D1.82.D0.BE.D1.80.D0.B8.D1.8F_.D0.BF.D0.BE.D0.BA.D0.B0.D0.B7.D0.B0.D0.BD.D0.B8.D0.B9.29

Как можно вытащить данные без plotly?

Можно воспользоваться специальной утилитой:
https://wirenboard.com/wiki/Wb-mqtt-db-cli
Или работать напрямую с базой данной, например, из bash:

Как настроить history? Указать какие данные сохранять а какие нет? Как регулировать глубину записи для каждого топика отдельно?

History настраивается на вкладке Settings → Configs → MQTT History Configuration

На странице можно создавать группы топиков для архивирования: задать имя группы, топики для архивирования, задать максимальное количество записей для топика, для группы, интервал архивирования. По умолчанию выбраны все топики (+/+) , группа называется all.

2 Likes

Это я видел, спасибо. Но это только для вывода данных.

А вот это скорее всего то, что меня интересует. Не совсем понял как пользоваться, вы можете привести примеры?

  1. Как исключить топик из логгирования.
  2. Как сделать группу с глубиной в неделю.
  3. Как сделать группу с глубиной в полгода.

Ну и соответственно как добавлять нужные данные в группы.

Если честно, то я воспринял все эти параметры к галке Enable debug logging. Предлагаю как-то ее иначе расположить.

  1. Как исключить топик из логгирования.

Тут идея в том, что указываются те топики, для которых нужно хранить историю. По умолчанию архивируются все топики (+/+). Если для всех подряд не нужно, то группу удобнее переименовать (“all” → в понятное название) и добавить только те топики, которые нужны по отдельности или по маске. Поле MQTT topic pattern пустым не оставляйте: или заполните или удалите. Можно создавать несколько групп, в группе можно добавлять сколько нужно топиков.

Вот пример страницы Settings → Configs → MQTT History Configuration. Тут я для примера выбрал все топики, которые начинаются с buzzer, и один топик напряжения hwmon/Vin. Остальные топики не будут архивироваться. Список доступных топиков можно посмотреть на странице Settings → MQTT Channels (из полного имени нужно убрать /devices/ и /controls/).

  1. Как сделать группу с глубиной в неделю.
  2. Как сделать группу с глубиной в полгода.

Глубина архивирования задается количеством точек архивирования для топика и для группы. При превышении заданного количества точек самые старые будут автоматически удаляться.

Во вкладке History получим следующие графики:

При отображении на графике и в виде csv при разном масштабе может отображаться разное количество точен. Поэтому выбирайте самый крупный масштаб по возможности. Также внимательно указывайте дату начала и конца для просмотра истории (легко ошибиться). Для простомтра страницы History рекомендуем использовать браузер Chrome.

2 Likes

Спасибо, буду пробовать. Вот это бы в вики еще)
Для начала изменил Number of values to store, per group, посмотрю увеличиться ли глубина записи.

У меня только 2 вопроса осталось:

  1. Галка debug logging - относится к установкам групп и топиков или это просто расширенное логгирование всего?
  2. Почему “+”? Простите не могу не докопаться, это же не логично, везде в таких случаях используются “*”.

Вам спасибо за замечания, постараемся дополнить документацию.

  1. Галка debug logging - относится к установкам групп и топиков или это просто расширенное логгирование всего?

Установка этой галочки означает вывод дополнительной информации о работе сервиса архивирования в лог. Просмотр лога командой journalctl в командной стоке Линукса (опции добавьте как нужно из описания).

    1. Почему “+”? Простите не могу не докопаться, это же не логично, везде в таких случаях используются “*”.

Это обозначение, принятое для описания MQTT топиков. То есть “+” обозначает любое имя в одном уровне топика MQTT. Подробнее можете почитать, например, тут: MQTT Topics & Best Practices - MQTT Essentials: Part 5

Прошло несколько дней, данные теперь сохраняются, спасибо. Появилась еще пара вопросов. Подскажите пожалуйста.

  1. Я убрал группу +/+ но размер базы не изменился, подозреваю, что старые данные там остались. Они сами со временем сотрутся или мне теперь вручную надо стирать? Я про те данные на которые в текущий момент у меня каких-либо настроек в history не стоит.

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

  3. Если я хочу обнулить базу, как это правильно сделать? теоретически я понимаю, что могу просто файл БД в настройках поменять, но если хочу по правильному.

  4. Подключил к А1 геркон на дверь. Работает, дверь открываешь - состояние меняется. В history для него делаю:
    topic: wb-gpio/A1_IN - дискретный, мне надо только открыто/закрыто
    Number of values to store, per topic: 20000
    Number of values to store, per group: 20000
    Minimum time interval between two data points (s): 1 сек.
    Minimum time interval between two data points with the same value (s): 1

Открываю/закрываю дверь. Получаю:
2021-07-14 10:24:13 1
2021-07-14 10:26:21 1
2021-07-14 10:29:50 0.75
2021-07-14 10:55:31 0.75

Дверь открывалась дольше, чем на 1 сек. Топик бинарный. Откуда взялись 0,75? Почему при установке Minimum time interval between two data points with the same value (s): 1 Так мало записей? Я же правильно понимаю, что этот параметр должен писать в базу состояние топика в моем случае каждую секунду?

Прошивка 202106250954_stable_webupd_wb67 заливалась как сброс к заводским. Плюс обновление с неделю назад.

Они сами со временем сотрутся или мне теперь вручную надо стирать?

Да, они должны перезаписаться. Но можно и вручную: Как правильно удалить историю?

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

Должны затираться сами.

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

В этой же теме: Как правильно удалить историю?

Откуда взялись 0,75?
При отображении на графике часто изменяющихся значений происходит усреднение:
Почему такая странная разница между графиком в истории и полученными данными.
WB6. GPIO Скачет значение

Попробуйте увеличить масштаб для просмотра (график динамически изменяет количество точек для отображения при разном масштабе).

Так мало записей? Я же правильно понимаю, что этот параметр должен писать в базу состояние топика в моем случае каждую секунду?

В базу должны записываться все точки. Но в зависимости от выбранного масштаба на экране и в виде CSV отображаться может разное количество точек и еще усреднение. Попробуйте укрупнить масштаб отображения. Уже разговаривали с программистами, что это не очень удобно и понятно, они обещали подумать над улучшениями.

Поставил интервал 10 минут. 4 записи. Картинку прикрепляю.

Было бы очень полезно иметь возможность отключать это усреднение. При скачивании csv меня интересуют точные данные, а не усредненные.

А еще лучше вариант просмотра необработанных данных в web интерфейсе, а не только через консоль.

Также пожелание - возможность округлять значения. Например, тот же ds18b20 показывает в history, порой, 15 знаков после запятой. Он у меня воду горячую меряет в стояке, мне максимум точность до 0,1 надо. А реально вопще только целые.

Кажется разобрался.
У вас в БД пишется макс, мин значения и их среднее. За какой-то промежуток (пока не понял какой). В history выдает только вот это вот среднее. devices/wb-gpio/controls/A1_OUT может принимать 0 или 1, зато среднее арифметическое может быть любым. Чтобы корректно показывало, надо выводить либо медианное значение, либо как-то учитывать формат. В конкретном случае с дверью, нужны данные когда она реально была открыта и закрыта, а не среднее. Учесть еще защиту от дребезга.

Сводка
wb-gpio/A1_IN 2021-07-14 07:24:13.000000 1 1 1
wb-gpio/A1_IN 2021-07-14 07:24:14.000000 1
wb-gpio/A1_IN 2021-07-14 07:26:21.000000 1 1 1
wb-gpio/A1_IN 2021-07-14 07:26:22.000000 1
wb-gpio/A1_IN 2021-07-14 07:29:50.000000 0.5 0 1
wb-gpio/A1_IN 2021-07-14 07:29:51.000000 1
wb-gpio/A1_IN 2021-07-14 07:55:31.000000 0.5 0 1
wb-gpio/A1_IN 2021-07-14 07:55:32.000000 1

Чуть поправлю коллегу:

Нет, если место на разделе закончится, например из-за того что будет занято другими файлами - данные в БД удаляться не будет. Удаляются только при превышении установленного количества записей.

А как тогда решить эту задачку? Нельзя же за ранее рассчитать ни размер БД ни как будет меняться место на разделе.

Допустим, можно как мониторить свободное место как таковое и при определенном пороге давать уведомление пользователю. Но сокращать размер записей придется уже “на ощупь”.

Можно сохранять базу данных на внешний накопитель, например (путь прописывается на странице настроек).
Также можно мониторить размер свободного места, пример здесь: Ошибка Error getting history: MQTT RPC request timed out - #14 от пользователя poglazov

Хорошо, как тогда вам оформить запрос на изменение работы этого модуля? Тут или отдельной темой?

В текущей реализации крайне неудобно пользоваться history.

  1. Бинарные значения. Пример геркон/клапан и тд. Он должен быть либо 0 либо 1. History выдает среднее значение 0,75, 0,66666 и тд. При чем не совсем понятно еще и за какой промежуток времени. В итоге невозможно ни построить график, ни вытащить значения для экспорта в csv, через web интерфейс. В саму БД тоже пишутся зачастую средние значения за какое-то время. Т.е. геркон мог сработать 3-4 раза, а запись в БД будет одна.

  2. Из-за тех же средних значений показания датчиков температуры принимают значения с диким количеством знаков после запятой (10+), что тоже крайне неудобно, предлагаю добавить такой параметр как округление для средних значений. До целых, десятых, сотых… При этом min/max значения не трогать.

  3. Добавить возможность выгрузки сырых значений не только через cli специальной утилитой, но и через web интерфейс.

Да, можно здесь. Пожелания передам разработчикам на совещании, впишу в перечень запросов. Уже был по этому поводу разговор. Но обещать что-то пока, наверное, не получится.

1 Like