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

WB4. Выставляю нужную температуру ползунком. При перезагрузке системы или сервиса wb-rules, значение сбрасывается до значения по-умолчанию. Давно не трогал систему, но решил-таки обновиться на свою голову (

defineVirtualDevice("thermostat", {
  title: "Thermostat", //

  cells: {
    "Floor 1" : {
        type : "range",
        value : 250,
        max : 300
    }
  }
}

WB5 то же самое наблюдал. Только происходит это не всегда, а с некоторой вероятностью. Субъективно - 1 на 10 перезагрузок. Ползунок установки температуры уходит в 0. Кроме него могут наблюдаться случайным образом взбрыки и других виртуальных устройств - кнопок (к примеру у меня так идет управление сигнализацией). Перегружаешь - и после загрузки контроллер начинает процедуру включения этой самой сигнализации. Или не начинает… что тоже плохо, если сигнализация до этого была включена. Причем с каким конкретно устройством (или устройствами) это произойдет - тоже дело случайное.

Кроме того, на перезагрузках недавно словил и еще такой глюк - после перезагрузки подключенный по mqtt ioBroker становится в состояние disconnected и не восстанавливает свое состояние, пока не скажешь mqtt клиенту reload. Но самое забавное, что он при этом отправляет команды в сторону WB и они работают! А вот изменения топиков на WB он естественно не видит и вообще их не обновляет. Еще забавность - если просто отключить соединение между WB и сервером ioBroker на несколько минут - то ничего такого не происходит, как только восстанавливается соединение - все продолжает нормально работать. Вывод - WB при ручной перезагрузке что-то отправляет клиентам (к примеру “я выключаюсь”), после чего клиент перестает воспринимать WB работающим даже после того, как тот загрузился. Разработчикам ioBroker я отправил об этом информацию с логами работы на их стороне, обещали посмотреть…

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

А кто-нибудь может подсказать - как вообще все это дело подебажить? Заметил, что один range все-таки не сбрасывается (у меня их объявлено 3 штуки), а 2 остальных слетают.

И еще - если остановить и сразу запустить wb-rules, состояние сохраняется. Если подождать минут 10 - то сбрасывается.

  1. Посмотреть что происходит с топиками mosquito_sub -v -t /devices/<устройство>/#
  2. Открыть список устройств в другом браузере и смотреть двигаются ли ползунки при изменении параметров устройства в соседнем браузере

Гипотез 2:

  1. Скрипт правил портит состояние контрола (будет видно в выводе mosquito_sub)
  2. Изменение контрола пробегает только в топике /on и не фиксируется в состоянии контрола (также будет видно в выводе + в соседнем браузере значение не поменяется)

Итак, текущее состояние контролов такое:

/devices/thermostat/meta/name Thermostat
/devices/thermostat/controls/Basement/meta/type range
/devices/thermostat/controls/Basement/meta/order 1
/devices/thermostat/controls/Basement/meta/max 300
/devices/thermostat/controls/Basement 129
/devices/thermostat/controls/Floor 1/meta/type range
/devices/thermostat/controls/Floor 1/meta/order 6
/devices/thermostat/controls/Floor 1/meta/max 300
/devices/thermostat/controls/Floor 1 257
/devices/thermostat/controls/Floor 2/meta/type range
/devices/thermostat/controls/Floor 2/meta/order 8
/devices/thermostat/controls/Floor 2/meta/max 300
/devices/thermostat/controls/Floor 2 264

Значения для basement, floor 1 и floor 2 заданы ползунками и отличаются от дефолтных. Торможу wb-rules, жду 10 минут, запускаю снова:

/devices/thermostat/meta/name Thermostat
/devices/thermostat/controls/Basement/meta/type range
/devices/thermostat/controls/Basement/meta/order 1
/devices/thermostat/controls/Basement/meta/max 300
/devices/thermostat/controls/Basement 129
/devices/thermostat/controls/Floor 1/meta/type range
/devices/thermostat/controls/Floor 1/meta/order 6
/devices/thermostat/controls/Floor 1/meta/max 300
/devices/thermostat/controls/Floor 1 250
/devices/thermostat/controls/Floor 2/meta/type range
/devices/thermostat/controls/Floor 2/meta/order 8
/devices/thermostat/controls/Floor 2/meta/max 300
/devices/thermostat/controls/Floor 2 221

Basement остался в кастомном состоянии, floor 1 и 2 сбросились на дефолт.

Пробовал открывать список устройств в разных браузерах, двигать ползунки - двигаются одновременно, в mosquitto_sub выводит:

/devices/thermostat/controls/Floor 2/on 209
/devices/thermostat/controls/Floor 2 209
/devices/thermostat/controls/Floor 2/on 47
/devices/thermostat/controls/Floor 2 47

В скрипте отрубил всю логику, кроме определения виртуального устройства, не помогло.

Наверное надо лезть глубже :slight_smile:

Похоже нашел проблему - убрал пробел из названия “Floor 1” -> “Floor_1” и пока больше не воспроизводится.

@EvgenyBoger у вас баг, похоже.

Все-таки проблема в чем-то другом. Сегодня отключали электричество в доме - опять контролы Floor_1 и Floor_2 сбросились в дефолтное состояние. А Basement не сбросился.

bzzeke, добрый день! Проблема идентифицирована, готовится патч. По срокам сориентировать не могу, к сожалению. Значение контрола сохраняется в виде mqtt-retained сообщения, которые записываются на флеш-память с некоторой периодичностью, чтобы не убить постоянными записями память. Соответственно, запист может потеряться. Пока в качестве паллиативного решения можно написать правило, которое будет само сохранять и считывать значение нужных контролов в отдельном файле. Но при аварии по питанию во время записи будет риск закорраптить всю файловую систему. Можно для этого отдельную флешку подмонтировать. Но это — “колхоз”, сами понимаете. У нас есть аккумуляторный модуль WBMZ-BATTERY-1800MAH. Может, это будет лучшим решением.

Рад слышать, что нашли проблему. Планирую в скором времени WB повесить на бесперебойник заодно.

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

Добрый день, подскажите, пожалуйста с решением следующих проблем с WB 5.6 (прошивка последняя, update сделан)

  1. Есть выводы A1_OUT, A2_OUT, A3_OUT, A4_OUT. D ,в базе данных как я понимаю запомнились их значения.
    Например, A1_OUT = false, A2_OUT = true, A3_OUT = true, A4_OUT = false.
    Я меня значения выходов на другие состояния, жду от 2 мин до 7 часов, но при отключении питания и при последующем включении состояние портов всегда постоянное (как описано выше), т.е. не зависит от того в каком состоянии пропало питание. Флаг Initial state for GPIO не стоит.
  2. Есть виртуальное устройство, пытаюсь его удалить stabSettings

root@wirenboard:~# mqtt-delete-retained ‘/devices/stabSettings/controls/#’
/devices/stabSettings/controls/enabled
/devices/stabSettings/controls/enabled/meta/type
/devices/stabSettings/controls/enabled/meta/order
/devices/stabSettings/controls/highThreshold
/devices/stabSettings/controls/highThreshold/meta/type
/devices/stabSettings/controls/highThreshold/meta/order
/devices/stabSettings/controls/highThreshold/meta/max
/devices/stabSettings/controls/lowThreshold
/devices/stabSettings/controls/lowThreshold/meta/type
/devices/stabSettings/controls/lowThreshold/meta/order
/devices/stabSettings/controls/lowThreshold/meta/max
/devices/stabSettings/controls/samplebutton/meta/type
/devices/stabSettings/controls/samplebutton/meta/order
/tmp/1490075325.6597013/retain_hack
/devices/stabSettings/controls/lowThreshold
/devices/stabSettings/controls/enabled
/devices/stabSettings/controls/enabled/meta/type
/devices/stabSettings/controls/enabled/meta/order
/devices/stabSettings/controls/highThreshold/meta/max
/devices/stabSettings/controls/samplebutton/meta/type
/devices/stabSettings/controls/lowThreshold/meta/max
/devices/stabSettings/controls/highThreshold/meta/type
/devices/stabSettings/controls/samplebutton/meta/order
/devices/stabSettings/controls/highThreshold
/devices/stabSettings/controls/lowThreshold/meta/order
/devices/stabSettings/controls/highThreshold/meta/order
/devices/stabSettings/controls/lowThreshold/meta/type
done!
Удалил так же все файл скриптов в котором было создано это устройство, но после перезагрузки с помощью сброса питания это устройство опять появляется в списке топиков и устройство.
Подскажите, пожалуйста как очищать кеш от скриптов, виртуальных устройств и запомненных значений выходов?

Добрый день!
А каков вывод команды service wb-homa-gpio status на вашем устройстве?

service wb-homa-gpio status
[ ok ] wb-homa-gpio is running.
root@wirenboard:~#

Добрый день, еще раз. Сегодня еще раз протестировал и описанные выше проблемы не проявились.