Пустой ответ от wb-db

Добрый вечер!

От wb-mqtt-db иногда приходит пустой ответ. Это бывает когда значение долго не меняется, при этом устройство подключено и работает исправно.
Поведение, как я считаю, странное, потому что я указываю min_unchanged_interval меньше, чем запрашиваемый промежуток.

Здравствуйте!
Вы через wb-mqtt-db-cli опрашиваете базу данных?

Не совсем, я использую свое ПО для опроса, но запрос в wb-mqtt-db идентичный. По сути, я генерирую тоже, что и wb-mqtt-db-cli.

Если для такого случая предусмотрены параметры к wb-mqtt-db-cli, можете написать их?

Приведите здесь пожалуйста целиком JSON запроса и ответа

{
  "id": 20111,
  "params": {
    "channels": [
      [
        "wb-map12h_5",
        "Ch 2 AP energy L1"
      ]
    ],
    "limit": 1,
    "min_interval": 600,
    "timestamp": {
      "gt": 1544106691,
      "lt": 1544107291
    },
    "ver": 0
  }
}

{"error":null,"id":20111,"result":{"values":[]}}

/etc/wb-mqtt-db.conf
{
  "database": "/var/lib/wirenboard/db/data.db",
  "debug": false,
  "groups": [
    {
      "channels": [
        "wb-map12h_5/Ch 1 AP energy L1",
        "wb-map12h_5/Ch 1 Ipeak L1",
        "wb-map12h_5/Ch 1 Irms L1",
        "wb-map12h_5/Ch 1 P L1",
        "wb-map12h_5/Ch 1 PF L1",
        "wb-map12h_5/Ch 1 Phase angle L1",
        "wb-map12h_5/Ch 1 Q L1",
        "wb-map12h_5/Ch 1 S energy L1",
        "wb-map12h_5/Ch 1 THDN I L1",
        "wb-map12h_5/Ch 1 THDN U L1",
        "wb-map12h_5/Ch 1 Upeak L1",
        "wb-map12h_5/Ch 1 Voltage angle L1",
        "wb-map12h_5/Frequency",
        "wb-map12h_5/Urms L1",
        "wb-map12h_5/Ch 2 AP energy L1",
        "wb-map12h_5/Ch 2 AP energy L2",
        "wb-map12h_5/Ch 2 AP energy L3",
        "wb-map12h_5/Ch 2 Ipeak L1",
        "wb-map12h_5/Ch 2 Ipeak L2",
        "wb-map12h_5/Ch 2 Ipeak L3",
        "wb-map12h_5/Ch 2 Irms L1",
        "wb-map12h_5/Ch 2 Irms L2",
        "wb-map12h_5/Ch 2 Irms L3",
        "wb-map12h_5/Ch 2 P L1",
        "wb-map12h_5/Ch 2 P L2",
        "wb-map12h_5/Ch 2 P L3",
        "wb-map12h_5/Ch 2 PF L1",
        "wb-map12h_5/Ch 2 PF L2",
        "wb-map12h_5/Ch 2 PF L3",
        "wb-map12h_5/Ch 2 Phase angle L1",
        "wb-map12h_5/Ch 2 Phase angle L2",
        "wb-map12h_5/Ch 2 Phase angle L3",
        "wb-map12h_5/Ch 2 Q L1",
        "wb-map12h_5/Ch 2 Q L2",
        "wb-map12h_5/Ch 2 Q L3",
        "wb-map12h_5/Ch 2 S energy L1",
        "wb-map12h_5/Ch 2 S energy L2",
        "wb-map12h_5/Ch 2 S energy L3",
        "wb-map12h_5/Ch 2 THDN I L1",
        "wb-map12h_5/Ch 2 THDN I L2",
        "wb-map12h_5/Ch 2 THDN I L3",
        "wb-map12h_5/Ch 2 THDN U L1",
        "wb-map12h_5/Ch 2 THDN U L2",
        "wb-map12h_5/Ch 2 THDN U L3",
        "wb-map12h_5/Ch 2 Upeak L1",
        "wb-map12h_5/Ch 2 Upeak L2",
        "wb-map12h_5/Ch 2 Upeak L3",
        "wb-map12h_5/Ch 2 Voltage angle L1",
        "wb-map12h_5/Ch 2 Voltage angle L2",
        "wb-map12h_5/Ch 2 Voltage angle L3",
        "wb-map12h_5/Frequency",
        "wb-map12h_5/Urms L1",
        "wb-map12h_5/Urms L2",
        "wb-map12h_5/Urms L3",
        "wb-map12h_5/Ch 1 AP energy L3",
        "wb-map12h_5/Ch 1 Ipeak L3",
        "wb-map12h_5/Ch 1 Irms L3",
        "wb-map12h_5/Ch 1 P L3",
        "wb-map12h_5/Ch 1 PF L3",
        "wb-map12h_5/Ch 1 Phase angle L3",
        "wb-map12h_5/Ch 1 Q L3",
        "wb-map12h_5/Ch 1 S energy L3",
        "wb-map12h_5/Ch 1 THDN I L3",
        "wb-map12h_5/Ch 1 THDN U L3",
        "wb-map12h_5/Ch 1 Upeak L3",
        "wb-map12h_5/Ch 1 Voltage angle L3",
        "wb-map12h_5/Frequency",
        "wb-map12h_5/Urms L3",
        "wb-map12h_5/Ch 3 AP energy L1",
        "wb-map12h_5/Ch 3 AP energy L2",
        "wb-map12h_5/Ch 3 AP energy L3",
        "wb-map12h_5/Ch 3 Ipeak L1",
        "wb-map12h_5/Ch 3 Ipeak L2",
        "wb-map12h_5/Ch 3 Ipeak L3",
        "wb-map12h_5/Ch 3 Irms L1",
        "wb-map12h_5/Ch 3 Irms L2",
        "wb-map12h_5/Ch 3 Irms L3",
        "wb-map12h_5/Ch 3 P L1",
        "wb-map12h_5/Ch 3 P L2",
        "wb-map12h_5/Ch 3 P L3",
        "wb-map12h_5/Ch 3 PF L1",
        "wb-map12h_5/Ch 3 PF L2",
        "wb-map12h_5/Ch 3 PF L3",
        "wb-map12h_5/Ch 3 Phase angle L1",
        "wb-map12h_5/Ch 3 Phase angle L2",
        "wb-map12h_5/Ch 3 Phase angle L3",
        "wb-map12h_5/Ch 3 Q L1",
        "wb-map12h_5/Ch 3 Q L2",
        "wb-map12h_5/Ch 3 Q L3",
        "wb-map12h_5/Ch 3 S energy L1",
        "wb-map12h_5/Ch 3 S energy L2",
        "wb-map12h_5/Ch 3 S energy L3",
        "wb-map12h_5/Ch 3 THDN I L1",
        "wb-map12h_5/Ch 3 THDN I L2",
        "wb-map12h_5/Ch 3 THDN I L3",
        "wb-map12h_5/Ch 3 THDN U L1",
        "wb-map12h_5/Ch 3 THDN U L2",
        "wb-map12h_5/Ch 3 THDN U L3",
        "wb-map12h_5/Ch 3 Upeak L1",
        "wb-map12h_5/Ch 3 Upeak L2",
        "wb-map12h_5/Ch 3 Upeak L3",
        "wb-map12h_5/Ch 3 Voltage angle L1",
        "wb-map12h_5/Ch 3 Voltage angle L2",
        "wb-map12h_5/Ch 3 Voltage angle L3",
        "wb-map12h_5/Frequency",
        "wb-map12h_5/Urms L1",
        "wb-map12h_5/Urms L2",
        "wb-map12h_5/Urms L3"
      ],
      "min_interval": 120,
      "min_unchanged_interval": 180,
      "name": "all",
      "values": 10000,
      "values_total": 100000
    }
  ]
}

Конфиг автогенерированный, некоторые поля повторяются.

делайте лучше ver: 1, ноль - это старая. Рекомендую посмотреть на запросы, которые шлёт веб-интерфейс или wb-mqtt-db-cli

Как веб-интерфейсом сгенерировать запрос в wb-mqtt-db?

Через движок правил можете, вызвав wb-mqtt-db-cli. НО для отладки лучше в командной строке разобираться.

{
  "id": 20113,
  "params": {
    "channels": [
      [
        "wb-map12h_5",
        "Ch 3 AP energy L3"
      ]
    ],
    "limit": 1,
    "min_interval": 600,
    "timestamp": {
      "gt": 1544172098,
      "lt": 1544172698
    },
    "ver": 1
  }
}

Аналогично пустой ответ

{
  "error": null,
  "id": 20113,
  "result": {
    "values": []
  }
}

Есть какое-то решение?

Добрый день! Буду воспроизводить проблему у нас.

Пришлите, пожалуйста, вывод dpkg -s wb-mqtt-db и ваш конфиг /etc/wb-mqtt-db.conf

root@wirenboard-ANMSNLVK:~# dpkg -s wb-mqtt-db
Package: wb-mqtt-db
Status: install ok installed
Priority: optional
Section: misc
Installed-Size: 130
Maintainer: Evgeny Boger <boger@contactless.ru>
Architecture: armel
Version: 1.7.3
Depends: libc6 (>= 2.4), libgcc1 (>= 1:3.5), libjsoncpp1 (>= 1.7.4), liblog4cpp5v5, libmosquitto1 (>= 1.0), libmosquittopp1 (>= 1.0), libsqlite3-0 (>= 3.7.3), libstdc++6 (>= 5.2), libwbmqtt0 (>= 1.7.1), liblog4cpp5 (>= 1.0) | liblog4cpp5v5 (>= 1.0)
Breaks: wb-mqtt-confed (<< 1.0.2)
Conffiles:
 /etc/default/wb-mqtt-db 60dc3eee70eeb300550391124e472cf8
 /etc/init.d/wb-mqtt-db 649a0707da245dc43a4f0f96b1e827e8
 /etc/wb-configs.d/16wb-mqtt-db fa614e95a7413bba7615b0944bd95aff
 /etc/wb-mqtt-db.conf ea4515a7a4954b32c8e3f8daa1dd72cd
Description: Wiren Board database logger

wb-mqtt-db.conf (5,8 КБ)

Здравствуйте! Пока не удалось воспроизвести ошибку.
Я попрошу вас выслать базу data.db (заархивируйте и отправьте нам по почте на info@contactless.ru с пометкой “для Kilpio”.
Спасибо!

Отправил базу данных письмом.
Сейчас экспериментирую и пытаюсь выявить проблему.
Обнаружил странную ситуацию, в БД перестают появляться записи на 10 минут, если остановить wb-mqtt-serial. Поидее это правильно, но у меня в конфигурации БД указано 180 секунд для min_unchanged_interval (также экспериментировал с 90 и 15). Причем после 10-ти минут появляется retained топик. Как это работает?

UPD:
retained появляются при рестарте wb-mqtt-db

Есть ли разница в сохранении данных в БД:

  1. отслеживаемые значения не меняются
  2. датчик не отвечает
  3. выключен драйвер шины (wb-mqtt-db)

Да, 2 и 3 пункты, по сути, одно и тоже.

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

Семен спасибо, получил базу, разбираемся. Вопросы ваши передал разработчикам.

Пока разбираемся, хотел обратить ваше внимание на проект в Github, где можно найти актуальный код wb-mqtt-db

И возможность запуска с выводом отладочной информации:
service wb-mqtt-db stop
/usr/bin/wb-mqtt-db -v -v -v -c /etc/wb-mqtt-db.conf

1 лайк

Довольно просто воспроизвести на реле. т.к. там или 0 или 1.
Когда шина работает и устройство подключено (то есть система работает в штатном режиме и исправно), но состояние реле не изменяется, новые записи в БД не появляются.

Kilpio, есть какие то продвижения?

Пока информацией, к сожалению, не располагаю, запросил, есть ли подвижки.

Как вариант, в wb-mqtt-serial дописать следующую логику:
Если прошло времени больше интервала опорных значений с отправки значения в mqtt И устройство доступно (нет ошибки в …/meta/error), отправить в MQTT текущее значение повторно.
Так в БД будут хранится актуальные данные.

Я думаю, человеку кто разбирается в коде wb-mqtt-serial, на разработку уйдет пару часов.

Сейчас, сохранение состояния, например, реле, если оно не изменяется - не работает.