Суббота, 20.04.2024, 01:45
| RSS
Поиск
Главная |
Защита, контроль, управление
Форма входа
Логин:
Пароль:

Меню

Авторские проекты

Статьи

Raspberry Pi

Полезная информация

Обратная связь

Ссылки

Форум

Чат

Канал YouTube

Группа в Facebook


Календарь
«  Июнь 2018  »
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
252627282930

Наш опрос

Ссылки


Яндекс.Метрика





.
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Протокол MQTT в WebHomePi

Протокол MQTT в WebHomePi

Наш канал в YouTube


О протоколе передачи данных MQTT (Message Queue Telemetry Transport), слышали, пожалуй, уже все, кто хоть немного интересуется темой автоматизации. В 2014 году спецификация протокола MQTT была стандартизирована и с того времени он набирает все большую популярность.  Поэтому, вполне логично, что поддержка данного протокол была интегрирована в систему домашней автоматизации WebHomePi.

Остановимся на основных особенностях протокола MQTT.

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

Для обмена данными между устройствами в протоколе MQTT используется принцип «издатель-подписчик». Издатель является источником данных, подписчик – их получателем. Взаимодействие между издателями и подписчиками осуществляется через «посредника», который в MQTT называется «брокер»

Рассмотрим пример работы протокола MQTT (рис.1).

 

MQTT WebHomePi

Рис. 1

 

Допустим, нам необходимо передать данные  с датчика температуры на компьютер пользователя. В этом случае датчик температуры (P) является издателем, а компьютер (PC1) – подписчиком. Издатель отправляет данные брокеру, который ретранслирует эти данные на компьютер пользователя. Причем, эти данные также получат все, кто подписан на рассылку от датчика температуры (т.е. и компьютер PC2).

В рассмотренном примере датчик температуры (а точнее устройство, в котором он установлен) выполняет только функцию издателя. Но если это устройство имеет не только функцию измерения и контроля (датчик температуры), но и функцию управления извне (реле), то устройство является издателем и подписчиком одновременно (P/S) – через издание передаются данные от датчика, а через подписку – принимаются команды управления реле.

Брокер может быть организован как в локальной сети пользователя, так и в глобальной сети интернет. Применительно к системе домашней автоматизации, лучше создать брокера именно в локальной сети. Для Raspberry Pi наиболее оптимальным вариантом является брокер Mosquitto. Интеграция Mosquitto, а также сопутствующих пакетов в WebHomePi уже реализована и появится в ближайшем обновлении системы. Но вы можете установить брокер в текущую версию и самостоятельно. Как это сделать, я попробую сейчас рассказать. Ну и заодно рассмотрим демонстрационный контроллер, работающий по протоколу MQTT.

Для установки Mosquitto в первую очередь выполним обновление операционной системы Raspbian и установленных пакетов:

sudo apt-get update

sudo apt-get update

Импортируем ключ GPG (ключ необходим для подтверждения подлинности устанавливаемого пакета Mosquitto) :

sudo wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key

sudo apt-key add mosquitto-repo.gpg.key

sudo rm mosquitto-repo.gpg.key

Скачиваем из репозитория и устанавливаем брокер и клиент Mosquitto:

cd /etc/apt/sources.list.d/

sudo wget http://repo.mosquitto.org/debian/mosquitto-stretch.list

sudo apt-get update

sudo apt-get install mosquitto

sudo apt-get install mosquitto mosquitto-clients

Далее, для взаимодействия Mosquitto со скриптами Python, необходимо установить пакет Paho:

sudo git clone https://github.com/eclipse/paho.mqtt.python.git

cd paho.mqtt.python

sudo python3 setup.py install

Выполнив установку Mosquitto и Paho, мы фактически реализовали поддержку протокола MQTT в Raspberry Pi. Далее переходим к скриптам, которые обеспечивают работу WebHomePi с этим протоколом.

Скопируйте прилагаемые файлы mqtt. html и mqtt.py соответственно в папки в html и python. Но сначала откройте в текстовом редакторе файл mqtt.py  и замените в строке

client.connect("192.168.1.12", 1883, 60)

указанный IP адрес "192.168.1.12" на адрес вашего Raspberry Pi. Аналогичную замену адреса необходимо выполнять и в строках макросов управление реле.

В директорию html/logs скопируйте файл mqtt_dht22.txt

Настройку WebHomePi для работы по протоколу MQTT можно считать законченной. Переходим к «клиентской» части – контроллеру.

Устройства, предназначенные для работы по протоколу MQTT, вне зависимости от своего статуса (издатель, подписчик, издатель/подписчик) должны иметь сетевой интерфейс Ethernet или Wi-Fi. Поэтому, наиболее оптимальным вариантом для разработки таких устройств являются популярные модули ESP8266. Они позволяют создать сегмент беспроводных контроллеров, которые могут рассматриваться как альтернатива существующему в WebHomePi радиомодулю и радиодатчикам. Причем, альтернатива довольно серьезная.

В качестве примера рассмотрим тестовое устройство, построенное на ESP8266 и имеющее функцию измерения температуры и влажности, а также функцию управления электромагнитным реле. Это позволит продемонстрировать работу протокола MQTT, когда данное устройство выступает в роли и издателя, и подписчика. Подключение датчика температуры DHT22 и электромагнитного реле к портам модуля ESP8266, приведено на рис.2

 

MQTT ESP8266

Рис. 2

 

Программирование модуля ESP8266 выполняется в среде Arduino IDE. Для работы модуля в вашей локальной сети, в скетч MQTT_DHT_GPIO.ino необходимо внести следующие изменения:

const char *ssid =  "Network" – имя точки доступа (роутера)

const char *pass =  "11111111"- пароль точки доступа

const char *mqtt_server = "192.168.1.12" – IP адрес сервера MQTT (Raspberry Pi)

Загружаем отредактированный и скомпилированный скетч в ESP8266, подключаем датчик DHT22 и реле в соответствии со схемой на рис.2 и можно приступать к тестированию функции контроля и управления через протокол MQTT. После открытия страницы mqtt. html в web-браузере  будут отображаться показания температуры и влажности, а кнопками ON/OFF можно управлять реле. Обратите внимание, что в качестве исполнительного элемента на схеме показан релейный модуль с транзисторным ключом без оптронной развязки.  Если вы используете релейный модуль с оптронной развязкой, то управляющие сигналы для него необходимо инвертировать, т.к. в таком модуле,   как правило, включение реле производится низким уровнем, а выключение, соответственно, высоким уровнем.

Также на web-страницу выводится  график изменения температуры и влажности (рис.3)

 

MQTT

Рис. 3

 

Данные температуры и влажности обновляются на web-странице приблизительно каждые 20 секунд. Записывать с такой высокой дискретностью данные в лог-файл и строить по ним график температуры и влажности, большого смысла нет, поэтому данные записываются приблизительно каждые 15 минут.  Впрочем, если требуется иная дискретность записи, достаточно в скрипте mqtt.py  изменить значение константы count.

Подводя итог применению протокола MQTT в системе домашней автоматики необходимо отметить следующее. Использование MQTT позволяет максимально упростить построение системы домашней автоматизации. Например,  все функции контроля и управления можно возложить на сегмент распределенных контроллеров, построенных на ESP8266 , и Raspberry Pi в этом случае будет использоваться только в качестве web-сервера и брокера MQTT (рис.4)

 

MQTT Raspberry Pi ESP8266

Рис. 4

 

Реализуя подобную концепцию построения системы домашней автоматизации, вам не придется прокладывать дополнительные коммуникации для организации каналов связи. Достаточно подключить к роутеру домашней сети Raspberry Pi (через кабель или Wi-Fi), установить в нужных местах контроллеры, которые будут подключаться через Wi-Fi, и, в принципе, инфраструктура сети готова. А учитывая, что в настоящее время для модулей ESP8266 написано огромное количество библиотек,  вы без проблем сможете создавать беспроводные контроллеры с различным функционалом под свои требования и цели.

Вместе с тем, при всей безупречности построения системы по такому принципу, справедливости ради отметим и некоторые недостатки. Во-первых, появляется дополнительный «буфер» между Raspberry Pi  и контроллерами (датчиками, исполнительными устройствами) – роутер (точка доступа Wi-Fi), в случае отключения или выхода из строя которого, работа системы будет нарушена. Это в очередной раз подтверждает мнение, что в системах домашней автоматизации каждый контроллер должен быть самодостаточным устройством и не зависеть от работоспособности центрального модуля.

Второй момент – если контроллеров очень много, то домашняя сеть значительно разрастается, т.к. каждому модулю ESP8266 нужно выделить IP-адрес. Причем, это IP-адрес очень желательно сделать статическим (разумеется, в рамках локальной сети). Следовательно, пользователю придется немного позаниматься и администрированием сети, по крайней мере на первоначальном этапе наладки системы.

И третий момент – это применение «беспроводного» метода передачи данных в сети. Конечно, Wi-Fi это актуально и современно,  не нужно прокладывать линии связи, но для дома в первую очередь нужна надежность. А надежнее «проводных» каналов пока еще ничего не придумано.

Тем не менее, преимуществ у протокола MQTT значительно больше, чем недостатков, что и подтверждает его широкое использование в сфере IoT (интернета вещей).

В завершение небольшое видео по тестированию контроллера (для контроля управления вместо реле используется светодиод):

 

Архив к статье (скрипты, скетч для ESP8266)

 




Категория: | Просмотров: 4023 | Добавил: Admin | Теги: | Рейтинг: 5.0/3 |
Всего комментариев: 0






T2M © 2024
Сайт управляется системой uCoz