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

Как объяснить такое поведение поля Status?
WEB UI показывает 03.05.2020 14:50:02

defineVirtualDevice(‘nw_tools’, {
title: ‘Interfaces’,
cells: {
‘Router IP’: {
type: ‘text’,
value: ‘’
},
‘Status’: {
type: ‘text’,
value: ‘’
}

});
Изменяется поле такой строчкой в правиле - dev[‘nw_tools’][‘Status’] = status
wb-rules 2.3.1

Уточните, пожалуйста:

  1. Что именно здесь не так, как должно быть?
  2. Как нам это воспроизвести?

Ещё меня смущает readonly 1

Status содержит два разных значения. Как это происходит если изменяется одной командой? Я ожидаю что оно всегда должно перезаписываться новым значением. Очень часто новое значение появляется только после перезагрузки контролера.

Меня тоже, но этот виртуальное устройство создано движком правил. Как пофиксить?

Создать с правильным значением параметра, как здесь: Примеры правил — Wiren Board

Так у вас разные топики содержат разные значения. Чем отличаются топики c /on и без /on на конце: MQTT в контроллерах Wiren Board — Wiren Board

Я выложил немного выше кусок кода которым создается это виртуальное устройство. Там есть ошибки? Все так же как по ссылке. Попробовал еще раз - удалил все и создал снова - все осталось как было.

Я это понимаю. Чего я не понимаю - почему текстовое поле содержит топик on, как одна и та же функция пишет в разные топики или почему они не синхронизируются.

Не вижу куска вашего кода, где было бы прописано значение readonly. Ссылку я давал именно на пример, где задано значение readonly.

@changer подскажите ещё пожалуйста, топик с /on у вас retain или нет? Т.е. значение там показывается сразу, как только вы запускаете mosquitto_sub или спустя какое-то время?

Был retain. После того как я еще все раз удалил / пересоздал, он пропал. Но проблемы не закончились :frowning:
Как я писал выше, это поле изменяется в одном месте и следующей строчкой идет логирование. И по логу - все идеально. Но веб интерфейс и mqtt возвращаются к старому значению спустя несколько минут (уже без /он). Есть идеи почему это происходит?

/devices/nw_tools/controls/Status 14.05.2020 18:55:12
/devices/nw_tools/controls/Balance 37.76
/devices/nw_tools/controls/Balance/meta/type text
/devices/nw_tools/controls/Balance/meta/order 1

/devices/nw_tools/controls/Status 03.05.2020 14:50:02
/devices/nw_tools/controls/Status/meta/type text
/devices/nw_tools/controls/Status/meta/order 7
/devices/nw_tools/controls/Status/meta/readonly 1
/devices/nw_tools/controls/Status 14.05.2020 19:00:02
/devices/nw_tools/controls/Balance 37.76
/devices/nw_tools/controls/Balance/meta/type text
/devices/nw_tools/controls/Balance/meta/order 1
/devices/nw_tools/controls/Balance/meta/readonly 1

/devices/nw_tools/controls/Status 03.05.2020 14:50:02
/devices/nw_tools/controls/Status/meta/type text
/devices/nw_tools/controls/Status/meta/order 7
/devices/nw_tools/controls/Status/meta/readonly 1
После перезагрузки движка правил - отображается правильное, последнее значение.

я не понимаю, что именно за лог вы привели, что это за многоточия, что за жирный текст и т.п.

Прошу

  1. сделать минимальный пример, воспроизводящий проблему. Т.е. это значит сделать одно отдельное правило и уменьшать его до тех пор, пока проблема ещё будет воспроизводиться. Выложить его сюда.
  2. В этом примере оставить вывод log(), выложить сюда весь вывод этого лога с временем у каждой строчки
  3. выложить вывод параллельно запущенного mosquitto_sub -v -t "тот единственный топик, на который надо смотреть" | ts. Без редактирования.

и пункт

  1. попробовать сделать то же самое, убедившись, что нигде не открыт веб-интерфейс.

Вывод `mosquitto_sub -v -t “виртуального устройства”. Точки - вырезано изменения других топиков не относящихся к делу. Жирным выделено изменения интересующего топика. Выдержка из лога:
May 14 18:55:12 wirenboard-AHZ2TA3P daemon.info wb-rules[27644]: INFO: [rule info] Status is changed to: 14.05.2020 18:55:12
May 14 19:00:02 wirenboard-AHZ2TA3P daemon.info wb-rules[27644]: INFO: [rule info] Status is changed to: 14.05.2020 19:00:02
В логе никаких других записей относящихся к этому устройству нет.

Точно не влияет - много раз обнаруживал постфактум несоответствие веб-интерфейса и логов.
У меня есть два таких контрола с которыми долго и пока безуспешно борюсь и 5-6 которые работают нормально. Поэтому как сделать минимальный пример, воспроизводящий проблему незнаю.

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

  1. Пояснение, как заставить этот код привести к проблеме (если нужно что-то нажимать, например).
  2. Чтобы вы сами этим же способом привели к проблеме, и показали, в чём именно она состоит. Для этого нужны пункты:

(с закрытым интерфейсом), и

Не относящиеся к делу строчки тоже оставьте, мы сами сможем отфильтровать.

На этот раз немного по другому - небыло возврата после первого изменения.

mqtt log rules.txt (10.5 КБ)

Например, у нас нет файла connection-check.

Я хочу воспроизвести вашу проблему на своём контроллере. Расскажите, пожалуйста, что мне скачать, и как запускать.

#!/bin/sh
HOST="4.2.2.2"
MAIN_GW="192.168.15.1"
MAIN_DEV=eth0
RESER_DEV=ppp0

LOCKFILE="/tmp/check_internet.lock"

LOGFILE="/var/log/check_internet.log"

EXIST=`ip route show ${HOST} | wc -l`
if [ ${EXIST} -eq 0 ]
then
   route add ${HOST} gw ${MAIN_GW} dev ${MAIN_DEV} 2>&1
fi


ping -I ${MAIN_DEV} -c 3 -n -q ${HOST} > /dev/null 2>&1


if [ $? -ne 0 ]; then
  if [ ! -f ${LOCKFILE} ]; then
    pon mobile
    ip route del default
    ip route add default dev ${RESER_DEV} metric 10
    touch ${LOCKFILE}
    MSG=`date +'%d.%m.%Y %H:%M:%S'`
    echo "${MSG} Internet connection changed to GSM" >> ${LOGFILE}
    echo "GSM ${MSG}"
  fi
else
  if [ -f ${LOCKFILE} ]; then
    poff mobile
    ip route del default
    ip route add default via ${MAIN_GW} metric 10
    rm -f ${LOCKFILE}
    MSG1=`date +'%d.%m.%Y %H:%M:%S'`
    echo "${MSG1} Internet connection changed to LAN" >> ${LOGFILE}
    echo "LAN ${MSG1}"
  fi
fi

Этот скрипт поднимает и глушит интернет соединение на встроенном модеме. Результат выдает в консоль который затем передается в правила и логируется в отдельный лог. Скрипт работает нормально и я почти уверен что не имеет отношения к проблеме.

  1. Пожалуйста убедитесь, что интерфейс был закрыт.
  2. Вывод mosquitto_sub | ts вы так и не показали.
  1. Делал с закрытым интерфейсом.
  2. В приатаченном файле первым блоком идет вывод mosquitto_sub -v -t “/devices/nw_tools/controls/Status/”#, вторым лог, третьим - правила.

таймстампов там нет

root@WB:~# mosquitto_sub -v -t “/devices/nw_tools/controls/Status/”# |ts
May 17 22:14:03 /devices/nw_tools/controls/Status/meta/type text
May 17 22:14:03 /devices/nw_tools/controls/Status/meta/order 7
May 17 22:14:03 /devices/nw_tools/controls/Status/meta/readonly 1
May 17 22:14:03 /devices/nw_tools/controls/Status LAN 15.05.2020 14:10:02
May 17 22:20:12 /devices/nw_tools/controls/Status GSM 17.05.2020 22:20:12
May 17 22:22:40 /devices/nw_tools/controls/Status LAN 15.05.2020 14:10:02
May 17 22:22:40 /devices/nw_tools/controls/Status/meta/type text
May 17 22:22:40 /devices/nw_tools/controls/Status/meta/order 7
May 17 22:22:40 /devices/nw_tools/controls/Status/meta/readonly 1
May 17 22:25:03 /devices/nw_tools/controls/Status LAN 17.05.2020 22:25:03
May 17 22:28:05 /devices/nw_tools/controls/Status LAN 15.05.2020 14:10:02
May 17 22:28:05 /devices/nw_tools/controls/Status/meta/type text
May 17 22:28:05 /devices/nw_tools/controls/Status/meta/order 7
May 17 22:28:05 /devices/nw_tools/controls/Status/meta/readonly 1
log.txt (12.0 КБ)

Получилось воспроизвести? Нужны еще какие-либо данные? Есть надежда на исправление?