Информация не всегда доходит до модулей


#1

Предысотрия следующая
wb6 был куплен для автоматизации системы отопления в цехе.
Имеется 20 инфракрасных излучателей, которые включаются и отключаются при соответствующих показаниях 3 датчиков температуры.

Первой проблемой был через раз работающий модуль аналоговых входов, который был спешно заменен на MB110 от Овена, который был в наличии. Оборудование подключилось и работало достаточно долго без сбоев.

Второй проблемой стал wb-rules, который стал себя совершенно неадекватно вести после экспериментов с PersistentStorage. Файлы не отображались, скрипты не работали, после удаления строк с PersistentStorage и перезапуска движка все входило в норму, но после перезапуска контроллера движок wb-rules на запускался. В связи с утратой доверия wb-rules был заменен на чистый nodejs. После долгого написания программы все вроде заработало, но выяснилось, что поджидает третья проблема

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

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

Поможет ли освобождение памяти на диске?

Какой объем оперативки моих скриптов потянет wb6 в дополнении к уже запущенному хозяйству wb6 (сейчас 150-200 MB, но хочется еще свой webUI и viberBot)?


#2

Задача выглядит не очень сложной, давайте разбираться.

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

А он точно забит? Что показывает
df -h

Проверьте, сколько свободной оперативки осталось:
free -m
Смотреть значение available.


#3

df-h: image

free - m позже скину, я postgresql поставил, у меня диск забился и больше не принимает, на флешку надо перевести. Мои скрипты по пока не работают

Основной вопрос да - в том что до модулей не доходит. Как уже писал, вся логика на чистом nodejs, пока использую ваш вэб-интерфейс. Ситуация очень не понятная, на вэб-интерфейсе пишет, что реле включено, а по факту нет. Я грешил на то, что не до всех подписчиков доходит сообщение. И еще один раз странное поведение наблюдалось, когда резко поднялось показание на датчике температуры с 11 до 16 градусов, т.е.наоборот выходит, что с модбасовского модуля не дошло. И логику не могу винить, т.к.обычно все ок. Идея одна - подчистить все лишнее, оставив чистый брокер и обработку модулей ввода-вывода и сделать keepalive скрипт, который будет значения в модули переписывать раз в минуту, сейчас я, чтобы брокер не нагружать, повторяющиеся значения не пишу


#4

Вам нужно:

  1. Освободить место.
  2. Найти минимальную конфигурацию, когда

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


#5
  1. Диск подчистил:
    image
    1.1) По опреативке скидываю

    1.2) Что можно отключить из родного у WB (wb-rules, web-интерфейс, может что-то еще) и как ? По факту использую брокер, модули, модбас-устройство

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

Может у меня архитектура неправильная - микросервисы взаимодействующие друг с другом через mqtt, но вроде в этом и задумка Ваша была. Библиотека для nodejs предполагает, что message - это всегда строка при подписке и публикации. Но строки - это очень медленно, брокер только со строками работает или я чего-то не понимаю.


#6

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


#7

Вручную не воспроизводится.
К Вам вопросы консультационные:

  1. Что можно отключить и как, чтобы остался только брокер и поддержка модулей ввода-вывода, в том числе модбас, и стоит ли это делать ?
  2. Из Вашего опыта, если много небольших скриптов запущены и взаимодействуют через mqtt, возможно ли такое, что кому-то из подписчиков сообщение не дойдет?
  3. Когда публикую сам, ставлю {“retain”:true, “qos”:2}. Какой должен быть qos? Какие еще параметры можно выставить, чтобы увеличить надежность доставки?

#8

Не добавлял подтопик ‘/on’. (https://wirenboard.com/wiki/index.php/MQTT) Из за этого могло такое произойти?

При использовании сторонних скриптов добалвяю {qos:1, retain:true}. Нужно ли это делать? Спрашиваю потому, что в топики 4 уровня, а ‘on’ - это пятый, может какой-то препроцессор есть и он их не поймет.

Сам с собой веду беседу. Ура! Я дурак, техника работает, спасибо за обратную связь от мдолей. Но про qos и retain вопрос в силе


#9
  1. /on, конечно, нужен.
  2. Все наши встроенные сервисы отправляют именно retained-сообщения c QoS 2, поэтому и для вас это, наверно, будет правильным выбором.