Не фиксируется текущее состояние. Как получить текущее состояние?

Здравствуйте!
Еще с одной проблемой столкулся. Иногда в морде (и далее в иридии) не вижу текущего состояния каналов реле. Реле включено, а морде и в иридии оно отключено.
Потому, раз такие инциденты происходят, написал правило, которое по команде извне по MQTT собирает текущее состояние интересующих меня контроллов и отправляет по MQTT обратно через поле в вирт. девайсе.
Однако, чудо не произошло. Отправляется то, что я и вижу на морде. Т.е. dev[включенное реле] = false.
У меня на компе W10 стоит службой mosquitto, которое обеспечивает связь WB с иридием. Начал экспериментировать, иридий выключил и выявил закономерность. WB через WiFi шлет на мой комп в службу MQTT пакеты. Ну и морда мне доступна.
Если в морде ручками отключить два моих реле, несколько штук включить, потом выключить комп и через пару минут подать сигналы на входы DIDR, которые через правила включают два канала реле, эти реле включаются, контроллер отрабатывает правила.
Если включить комп, открыть морду, то вот эти включенные реле остались выключенными. Т.е. картинка с реле осталась как и была на момент выключения компа. (обновления и через ктрл шифт R не момогают)
Включал комп через пару минут после включения реле - тоже самое. Думал, WB надо время, чтобы что-то где -то записать запомнить. Однако, если комп выключить, замкнуть входы, включить реле и включить комп сразу - состояния отображаются.
Что это такое? Ведь любой ребут и система будет не верно оценивать обстановку.
Может, есть еще способ собрать из контроллера текущее состояние из правил? Где может быть проблема?

Добрый день!

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

Здравствуйте!
Спасибо за ответ в выходной день. Это мне покой только снится, спасибо.
Я описал что происходит, как это проявляется. Пришлось повозиться,чтобы это выявить и описать… Встречный вопрос: А что вообще можно через движок сделать такое, чтобы морда изменила свое состояние (не вирт девайс, а свич на устройство), чтобы я вообще мог увидеть на обновленном экране такое расхождение? Разве такое возможно? Я в систему не лезу, управляю через dev обернутые в правила.

Есть вероятность, что какая-то часть вашего комплекса ПО пытается записать состояние в топик без on на конце - тогда это вызовет смену состояния в веб-интерфейсе, но не вызовет отправку команды на релейный модуль - и получится расхождение.
Если вы используете только в правилах только конструкцию dev[][], то такое случиться не должно.
В любом случае, пока что я, к сожалению, занимаюсь гаданием - чтобы исправить проблему, мне нужно научиться её воспроизводить.

в данном случае все операции производятся в морде и скриптах.
Я же описал, как это у меня произошло. по шагам.
Вы пробовали?

Если в морде ручками отключить два моих реле, несколько штук включить, потом выключить комп и через пару минут подать сигналы на входы DIDR, которые через правила включают два канала реле, эти реле включаются, контроллер отрабатывает правила.
Если включить комп, открыть морду, то вот эти включенные реле остались выключенными. Т.е. картинка с реле осталась как и была на момент выключения компа. (обновления и через ктрл шифт R не момогают)

я пишу еще так: dev[devuce/name] - такой синтаксис не влияет?

Разумеется, без ваших правил я это повторить не смогу.

Что вы можете сделать, пока я буду смотреть на ваши правила:

  1. Проверить, что проблема всё ещё воспроизводится в другом современном браузере (Firefox, Chrome).
  2. Проверить, правильно ли отображается состояние реле в топике MQTT.
  1. дело не в браузере. Мне по большому счету все-равно что там отображается. Важно, что WB именно так и воспринимает состояние. Я в иридии вижу - 0, через опрос вижу - 0. Если в таком состоянии замыкаю вход на DIDR, правило инвертирует состояние и оставляет включенным реле, в морде из выключенного переводится во включенное. А реле не клацает, т.к. оно и было включено. И иридий тоже тогда только отображает, что включено.
  2. т.о. и получается, что в топике оно и сидит отключенное, хотя по факту включено.

Я пробовал выключить браузер и проделать тоже самое - косяк не повторяется. Именно выключение компа. Может, есть и еще более простой способ проверить, для этого мне надо написать простой скрипт, все снести со своего wb и обкатать так, ловить ситуацию.
Но я сейчас работаю надо проектом, не могу этого проделать, мне еще многое предстоит сделать.

Еще интересный косяк нашел)) Но не буду тут это развивать, нашел как обойти. В общем, довести бы до релиза, чтобы хоть сколько-нибудь поработало и как появится время сменить базу.
Вот скрипты для работы с DIDR.
Сначала сделал объектами, экземплярами…
Переделывал по-гадкому, лишь бы заработало. По-тупому, по-простому.
из железа надо будет DIDR16 + по модбасу MR6LV
Switch_SW3.txt (8.0 КБ)
Switch_SW2.txt (8.0 КБ)

скрипты идентичные, просто разнесены в разные файлы в разные функции… такой вот способ освоения)))))

На всякий случай:


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

Добрый день! Если честно, то очень, очень сложно понять, что именно вы пишете. Не могли бы вы постараться изолировать проблему и описывать её более кратко?

Воспроизвести проблему у нас не получится, потому что всех нужных данных в ваших сообщениях найти не получается.

Могу только порекомендовать начать смотреть в сторону mosquitto на компьютере: это единственный нестандартный компонент в вашем решении. Совертую попробовать всё повторить без отдельного mosquitto, подключая иридиум напрямую к брокеру mosquitto, запущенному на WB.

Здравствуйте, Евгений!
что тут сложного? Как вообще такое может быть, чтобы реле выло включено, а морда показывала, что оно выключено? Что тут смотреть, в какую сторону? Я прислал скрипты, по шагам описал что нужно, чтобы воспроизвести, я долго над этим работал, чтобы как раз изолировать проблему и выявить её. Ранее у меня просто “иногда не правильно работало”. Теперь я могу воссоздать и все вам рассказал, сделал за вас работу. Ведь не должно же быть так, что морда WB показывает не верно, не так ли? Морда подключена в WB, иридий могу не запускать.
Я правильно понял, что в настройках драйвера MQTT иридия я могу просто указать IP WB, порт и подключусь к москито WB? Подскажите хотя бы это, пожалуйста.

  1. проверить состояние в встроенном веб-интерфейсе контроллера
  2. отключить внешний брокер, повторить
  3. смотреть в сторону того, что внешний брокер пересылает сообщения о состоянии обратно на Wiren Board. В контроллер у вас должны приходить управляющие сигналы, из контроллера -статусные, не наоборот.

Возможно дело во мне, но в трёх экранах сплошного текста я не смог найти рецепта для воспроизведения. Пожалуйста опишите его заново последовательно по пунктам, не ссылаясь на предыдущую переписку и не отвлекаясь на другие вопросы. Это позволит нам помочь вам гораздо быстрее.

да.

Я попробовал, иридий перестал видеть WB.
Может, настройки бриджа еще надо менять? Наверное, это элементарный вопрос для знатоков mosquitto… Но я не пойму что не так.
Через внутренний москито помню топики шли без преффикса, сразу с devices. Может, в этом дело? Тогда как мне с иридия слать конкретному контроллеру? Или есть еще какие настройки?

Если у вас несколько контроллеров, то, естественно, вы не сможете ими управлять, подключившись к одному.

Покажите свои настройки целиком.

Евгений, спасибо за ответ в выходной день. Я на объекте, налаживаю систему, отсюда и вопросы.
Сейчас я все удалил из бриджа, просто пустой файл. Настроил на иридии работу через москито WB. Не понял, как настроить аутентификацию, чтобы WB принимал команды только от иридия. Так что настроек сейчас никаких нет. Я только в бридж до этого вносил данные.

Бридж тут не причём. Iridium подключается клиентом к WB, который является брокером и отвечает на запросы. Нужно только адрес и порт в Iridium занести
В Iridium вижу есть драйвер и в нем соответствующие настройки есть.
https://dev.iridi.com/MQTT

иридий можно клиентом подключить и к wb и к установленному на том же компе, где иридий, например, брокеру. Сейчас я этот брокер отключил, соответвтвенно, бридж опустошил и данные теперь не от брокера к клиенту идут и дальше к иридию, а от иридия напрямую к WB.
еще интересно, если в правилах я пишу dev[dev/celj] = 1 по москито on 1 ведь обязательно должно пройти? Не может так быть, что только состояние в некоторых случаях изменяется? У меня эти глюки не всегда, но только от правил.

как я понял, бридж нужен для того, чтобы подключиться к другому москито. В этом файле я настраиваю верификацию и перечисляю топики, которые в этот другой москито отправляются. Так?

Если я сторонней программой, иридием, подключаюсь к москито на WB, то мне бридж не нужен, так?

Скажите, пожалуйста, где настройки верификации для москито WB? Ведь не может быть, что кто угодно из локальной сети мог бы отправить топик на WB и он их все отработает.

Очень похоже, что, когда правила через dev включают реле, например, данные об этом событии не уходят иногда в москито. Такое возможно? Я теперь не могу москито WB нормально отслеживать, т.к. туда чухом валится все, а не как я хотел по-человечески выводить-вводить только нужные топики.

Бридж нужен для связи между брокерами, а так клиентом подключайтесь принимайте-отправляйте сообщения.

Пропусков не должно быть…

понимаю, что не должно быть… тогда откуда они?(

вопрос с верификацией как решаете, если напрямую подключаетесь к WB?