MQTT это просто.....


Есть такая интересная штука в интернете как "серый"  IP. Это все интернет соединения по GPRS.  Что 1G, что 4G без разницы. А прикол в том, что интернет работает в одном направлении от клиента в сеть, и пока клиент поддерживает связь она работает. После окончания клиентской сессии если вы захотите обратится к своему устройству - не получиться, нет реального IP адреса у устройства.
Но решение есть! MQTT. По простому - ваше устройство с заданной периодичностью кладет заранее оговоренные данные (по умному - топики) на специальную полочку у специального брокера в интернете и соответственно забирает там ответные данные. Все просто до безобразия и практически в текстовом формате.

Ну например :
Вот вид топика - login/hostname/метрика  xxx

login - это логин или emal , который используется для доступа к MQTT брокеру(серверу).
hostname - это имя модуля, устройства.
метрика - это имя датчика или устройства, или же номера GPIO
xxx  -  это само значение

Устройство нам шлет - login/hostname/датчик температуры  25 = температура 25 град.
А мы ему можем послать  - login/hostname/GPIO  1 = переключи GPIO на 1
Вот так все просто и понятно устройство нам сообщает температуру, а мы ему говорим включить или выключить отопление.

Теперь о брокере. Что за зверь ? Да специальный сервер который имеет реальный IP адрес и всегда доступен. Может быть где угодно в интернете или даже на соседнем компьютере в локальной сети. Есть платные, есть бесплатные, есть свой!
Для однозначной идентификации ваших устройств необходима регистрация на брокере.

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

ВНИМАНИЕ !  Никогда, слышите ? Никогда не ставьте галочку в окне Retain !!!
Пока не узнаете зачем это вам нужно.

А как мы шлем/читаем команды - да элементарно, с мобильного телефона или с компьютера. 
Есть специальные программы для этого .....


А теперь подробности - смотрим как сделать настройки на примере ESP8266 с прошивкой WiFi-IoT (во всех программах настройки брокера и топиков аналогичные, но нужна внимательность) :

Рассмотрим хорошего брокера - Сlusterfly.ru - Российский бесплатный брокер – “мы предоставляем доступ к бесплатному mqtt серверу для всех желающих”. Авторизация и регистрация на сервисе возможна через социальные сети. Затем в личном кабинете можно узнать логин и пароль для подключения.


Регистрируемся у брокера и получаем логин и пароль 


Для начала рекомендую подключиться к серверу srv2.clusterfly.ru через порт 9991
На данном брокере Login и пароль вы получите автоматически и не надо запрашивать новый пароль, иначе придется перенастраивать модули.




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

В прошивке модуля ограничение длины поля логина - 20 символов, пароля - 10 символов. В данный момент увеличить длину пароля можно  через дополнительную настройку в шестеренке опции... (настройки слетят )




В общем все настройки на брокере на этом и закончились. Осталось ввести в нашем устройстве данные полученные от брокера. 
Напоминаю, что во всех примерах используется прошивка  WiFi IoT в которой уже встроены поля для настройки.

Заходим во вкладку Servises и заполняем соответствующие поля. Параметры брокера мы уже получили.





НАПОМИНАЮ !!!   на главной странице настроек нашего модуля имя устройства должно быть написано латинскими буквами 
 Config module: Host name: 
Вот вид топика - login/hostname/метрика  xxx

Внимание! Не включайте в настройках MQTT JSON клиент
  пока не узнаете зачем он вам нужен.  
После заполнения и сохранения настроек модуля его необходимо перезапустить.

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

Как проверить ?

На телефоне -
Програмка   MQTT Terminal  очень простенькая, но красиво показывает топики у брокера. Если указать в поле Subscribe - login/#    то программа отобразит весь список существующих модулей и  топиков, и самое главное - можно будет увидеть как правильно они пишутся .  Если написать login/hostname/# - получим все топики данного модуля,  login/hostname/rssi - получим значение RSSI






Итак - запускаем программу и через плюсик  в правом нижнем углу переходим в настройки
Так же как и на модуле ESP  вводим данные для подключения к srv2.clusterfly.ru    
Теперь переходим на поле Subscribe (Подписка на топики) и прописываем волшебные - login/#
Сохраняем настройки и видим все топики которые нам присылает модуль ESP.


Для дальнейшей жизни лучше использовать более удобные для управления программы типа - Mqtt Dashboard  куда при настройке нужно прописать увиденные выше топики.


На компьютере-
запустим на компьютере программу для просмотра информации на брокере mqtt-explorer




Заполняем данные полученные от брокера.












    И видим список всех наших модулей и соответственно их топики.

    Не забываем что полный формат наших топиков - login/hostname/метрика  xxx
    Смотрим как изменяются значения 

Итак все работает! Бинго.




Список основных метрик
 
   
login/hostname/hostname
Имя устройства
login/hostname/freemem
Свободное ОЗУ
login/hostname/ver
Версия и дата сборки прошивки
login/hostname/uptime
Время работы
login/hostname/rssi
Уровень сигнала (нет на старых SDK)
login/hostname/vdd
Напряжение питания (ESP8266)
login/hostname/thermo_setX
Установка термостата
login/hostname/thermo_enX
Состояние термостата вкл/выкл
login/hostname/adc
Внутренний АЦП (ESP8266)
login/hostname/cntXi
Данные с счетчика 60
login/hostname/pmv
Напряжение с устройства Power Monitor
login/hostname/pmc
Ток с устройства Power Monitor
login/hostname/pmw
Мощность с устройства Power Monitor
login/hostname/pmwh
Расход с устройства Power Monitor
login/hostname/co2
Датчики CO2 MH-Z1x
login/hostname/ping
ping тест статус
login/hostname/dswX
Температура датчиков DS 18B20
login/hostname/countrstX
Счетчики импульсов сбрасываемый.
login/hostname/counterX
Счетчики импульсов.
login/hostname/gpiointX
Событие прерывания
login/hostname/inputX
Состояние GPIO входа (MQTT)
login/hostname/outputX
Состояние и установка выхода (MQTT)




4 комментария: