cabat

<<< Back

Небольшой тюнинг модуля MySensors

Описание небольших доработок модуля для корректного отображения статуса шлюзов

Давно использую сеть датчиков на базе протокола MySensors с помощью модуля для МДМ. Все работает стабильно и хорошо, а некоторое время назад автор добавил поддержку нескольких шлюзов и у меня появилась возможность реализовать давнюю хотелку - развернуть второй сегмент сети на базе проводного интерфейса RS485 (до этого я использовал датчики на базе радио-интерфейса NRF24).

Удалось успешно подключить второй шлюз Ethernet-RS485, все заработало, заказал и собрал несолько датчиков для подключения по RS485.

Но есть один момент, который немного смущал - статус второго шлюза всегда был "Offline". Стал разбираться, где модуль хранит состояние узлов,
оказалось, что это таблица "msnodestate" в базе "db_terminal".

Почему то в ней нет записи для второго шлюза - у шлюзов поле NID равно 0, а поле GID хранит идентификатор шлюза
(позже будет понятно, почему нет строки для второго шлюза):

Решил добавить руками. Для этого самое простое - это скопировать строчку от шлюза номер 1 и исправить номер на 2.



И тут возникла проблема - в таблице применяется индекс по полю "NID", и для всех шлюзов он равен 0, код шлюза хранится в поле "GID", поэтому при попытке вставить в таблицу "msnodestate" еще одну строку со значением 0 в поле "NID" возникает ошибка:

Решением явлется изменение состава индекса с добавлением в него колонки "GID" (номер шлюза):






Убеждаемся, что статус второго шлюза перестал быть все время "Ofline":

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

Оказалось, что данную проблему легко решить добавлением в прошивку шлюза регулярной отправки сообщения Heartbeat, что приводит к обновлению информации о времени последней активности шлюзов. Добавил это в прошивку одного из шлюзов и убедился, что все работает корректно (кому интересны подробности - рекомендую обратится к документации по протоколу на сайте MySensors.org)

PS На логичный вопрос, почему не сделал pull-request в репозитарий модуля, отвечу - к сожалению автор модуля уже некоторое время редко появлется на форуме, один запрос на изменения модуля висит уже с июня. Возможно позже сделаю fork проекта, если вдруг появятся еще какие то изменения.
Но в любом случае Ивану огромное спасибо за его модуль, он проделал огромную полезную работу.

Discuss (2) (5)

See also:
2019-08-30 Настройка OpenVPN на Raspberry Pi2 (дистрибутив Wheezy)

Санкт-Петербург, Россия

На форуме: cabat