Описание небольших доработок модуля для корректного отображения статуса шлюзов
Давно использую сеть датчиков на базе протокола 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 проекта, если вдруг появятся еще какие то изменения.
Но в любом случае Ивану огромное спасибо за его модуль, он проделал огромную полезную работу.
Санкт-Петербург, Россия
На форуме: cabat