Компьютерный мастер

Адрес:
Сочи, ул.Роз, 37

Телефон: +7 (918) 614-88-20,
WhatsApp: +7 (918) 614-88-20

Режим работы:
Без выходных: с 9:00 до 19:00

Сетевой мост между серверами MQTT

Сетевой мост, его настройка между серверами MQTT.

Назначение - обмен информацией между локальным и внешним сервером MQTT. Для чего это нужно? Сетевой мост (network bridge), служит для объединения двух разнородных локальных сетей в одну или для разделение одной сети на два сегмента. такой мост часто используется для раздачи интернета в сети при помощи одного из компьютеров. Как использовать в технологиях умного дома?

С учётом специфики работы устройств со слабой мощностью и сетей с небольшой пропускной способностью протокол MQTT сделан маленьким и лёгким. К их числу можно отнести смартфоны, планшеты и микрокомпьютеры, датчики и т.д.

MQTT стал протоколом, наиболее часто используемым разработчиками "умного дома".


сетевой мост(картинка взята из интернета)

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

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



WQTT

У меня локальный сервер поднят на Raspberry PI3, который по своим характеристикам вполне может выполнять эти задачи. Использование "Малинки" обусловлено его низкой ценой, небольшим энергопотреблением. Многие разработчики устанавливают сервер MQTT на маршрутизаторе или станционарном компьютере. Ну тут кому как удобнее. Микрокомпьютер загружается не с SD-карты, а флешки объемом 16 Гб. Это сделано для повышения надежности, так как SD-карты часто выходят из строя и каждые 6-12 месяцев переустанавливать программное просто лень. USB Флеш-накопитель гораздо надежнее. Вместо флешки можно использоваить SSD или жесткий диск. Сделать это несложно. На Raspberry pi4 данная функция загрузки с USB носителя уже есть в прошивке и там делать ничего не надо. На старых моделях эту возможность нужно активировать вручную путем внесения значения в OTP-память опции USB Boot Mode. Устанавливаем на флеш накопитель операционную систему (точно также как на SD-карту). Загружаемся с SD- карты, заходим в терминал и прописываем строку в config.txt (для этого использовал программу putty, осуществляющую соединение по SSH):



putty


echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt

Сохраняемся и перезагружаем микрокомпьютер командой - sudo reboot. Вынимаем SD карту. Теперь можно загружаться с флешки. Настраиваем операционную систему. Обязательно после настройки системы выполняем две команды в терминале:
sudo apt-get update
sudo apt-get upgrade

Рекомендовал бы прописать для Raspberry сетевой статистический IP- адрес, чтобы не зависить от внезапной его замены на другой. В этом случае Вы потеряете сетевое подключение к микрокомпьютеру. Для этого необходимо отредактировать файл “dhcpcd.conf”, который находится в каталоге “etc”.

Вводим команду в терминале
sudo nano /etc/dhcpcd.conf
В открывшемся окне в конце файла прописываем
nodhcp
Далее устанавливаем статистический IP- адрес для Raspberry прописывая следующие строки в dhcpcd.conf:

interface eth0
static ip_address=192.168.1.48/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1
У меня примерно так.

После настройки устанавливаем на Raspberry mosquitto (сервер MQTT). Не буду подробно описывать его установку и установку ОС - об этом не писал разве только ленивый. Смотрите публикации в интернете.

Я пользуюсь внешним брокером WOTT.ru. Оплата за услуги пользования 300 рублей в год, сумма по нынешним временам небольшая. Для установки сетевого моста между серверами на локальном сервере используем терминал в файле /etc/mosquitto/conf.d/bridge_wqtt.conf прописать следующие строки

sudo nano /etc/mosquitto/conf.d/bridge_wqtt.conf
connection m4.wqtt.ru
address server xxxxx:port
try_private true
notifications true
start_type automatic
remote_clientid Local-Broker
remote_username логин
remote_password пароль
#bridge_cafile /etc/ssl/certs/ca-certificates.crt
topic # both
#bridge_cafile /etc/ssl/certs/ca-certificates.crt (данную строку я задокументировал так как не использую шифрование)

Перезагружаемся. Теперь связь (мост) между серверами должна быть установлена. В устройствах необходимо прописать все данные локального сервера. Почему локального? Локальный сервер MQTT основной и будет получать данные с устройств и управлять ими, одновременно отсылая данные на сервер в интернете. Если соединение с интернетом не установлено у вас все (кроме голосового управления) будет работать. Также если какие-то команды поступят на внешний сервер, то он передаст их на локальный. Сетевое соединения между устройствами в вашей сети будет обеспечивать маршрутизатор даже при отсутствии интернета.

Если же будет прописан в настройках устройств внешний сервер - то при отсутствии соединения с интернетом все устройства работать не будут из-за отсутствия сетевого соединения с сервером. Установить IP-адрес Raspberry можно в роутере или при помощи программы Advanced IP Scanner или аналогичной.


Настройка MQTT

Проверить есть ли обмен пакетами информации между серверами MQTT достаточно просто. Я использовал приложение MQTT Dash для смартфона. Настройки сервера в приложении соответствовали его настройкам на Raspberry. При нажатии например на какой либо выключатель происходило срабатывание и на внешнем сервере это отбражалось. Точно также проверялась работа сетевого моста с WQTT на локальный сервер. Отключаем входящий кабель от роутера, имитируя пропажу интернета. После чего проверяем управление устройствами со смартфона. Как видите ничего сложного и установить обмен данными (мост) между серверами возможно самостоятельно.