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

Так вот, в моем понимании, "Умный дом" - это технология реализации, а иногда и автоматизации, УДАЛЕННОГО УПРАВЛЕНИЯ некоторыми домашними устройствами, а также - УДАЛЕННОГО КОНТРОЛЯ НЕКОТОРЫХ ПАРАМЕТРОВ.

То есть, подразумевается, что при реализации подобной системы, хозяин, используя коммуникационные возможности сети Интернет, может удаленно, находясь в любой точке Земли, где есть доступ к глобальной сети, например -

1. Контролировать температуру воздуха (и не только) в различных точках своего жилища.

2. Автоматически поддерживать заданную температуру в помещении, управляя нагревателем (или кондиционером)

3. Управлять напрямую, используя обычный смартфон, любыми нагрузками на удаленном объекте.

4. Удаленно ставить на охрану и снимать с охраны объект. Контролировать срабатывание тревожных датчиков.

И многое другое в подобном ключе.

Сразу хочу оговориться - я не преследую цели досконально разбираться в используемом программном обеспечении. Тем более - что чаще всего отыскиваю подходящие для своих целей куски кода в сети, и потом приспосабливаю их для своих задач. 

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

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

Исходя из этого, считаю, что мой подход тоже имеет право на существование. Тем более, если кому захочется вникнуть поглубже в используемые мной далее программные модули - тот сможет сделать это самостоятельно. Благо,такой информации в Интернете - большие кучи.

С другой стороны, если так, то у многих возникает вопрос - зачем я тогда вообще пишу все это? А для себя!

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

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

В-общем, эта серия статей про "умный дом" - нечно вроде развернутой записной книжки. Тем более, что я собираюсь применить отдельные элементы публикуемой системы  в своем проекте такого "дома".

На этом предлагаю закончить предварительные ласки это короткое введение и приступить непосредственно к делу. И начать предлагаю с изучения

 

                                             MQTT. Что это такое и зачем.

 Все просто - для удаленного управления чем-либо, или, к примеру, для получения показаний каких-нибудь датчиков, которые находятся где-нибудь очень далеко (или близко - это не играет никакой роли), мы должны принимать и передавать эти данные через интернет.

Те, кто занимался подобными вещами - например, пытался получить доступ к своему домашнему компу через интернет, примерно представляют трудности, с которыми это связано. Дело в том, что домашний комп находится во внутренней домашней сети и не имеет IP, к которому можно напрямую обратиться из глобальной сети. То есть -  устройство-передатчик имеет выход в Интернет и имеет возможность передать информацию. Но оно не может сделать это напрямую, так как  устройство-приемник находится за межсетевым экраном, модемом или другим устроством, которое обеспечивает подключение к Интеренету.

Можно было бы, конечно, дополнительно настроить оборудование на приемной стороне, обеспечить проброс нужных портов, прописать маршрутизацию, но... Это, во-первых, дополнительный геморрой с настройкой, а во-вторых - еще и небезопасно! Хакеры не дремлют! (Хотя, конечно, кому мы нужны - согласен).

Тем более - есть вариант попроще, который напрашивается логически. Это дополнительный компьютер-посредник в Интеренете, который предназначен для того, чтобы принимать и передавать сообщения между различными устройствами-клиентами. Такие серверы-посредники называются "брокеры".

 mqtt

 

Как видим - логика взаимодействия клиентов проста до примитивности. Центральный элемент - "Брокер", сервер, доступный для подключения через Интернет. И множество различных "клиентов", которые к нему могут подключаться для обмена информацией. В качестве "клиентов" может быть что угодно - любое устройство, имеющее возможность подключиться к Интернету, или, к примеру программа, как на Windows, так и на Android - не важно. Все, что поддерживает протокол MQTT - можно использовать для обмена информацией через "брокера".

 

                           MQTT. Публичный "брокер" и первые эксперименты.

 

Как и всякий популярный сервис (а эта технология в последнее время набирает все большую популярность), MQTT имеет бесплатную версию в Интернете. Например, вот тот публичный брокер, которым пользуюсь я для своих экспериментов - iot.eclipse.org.

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

Как попасть на сайт и зарегистрироваться там - думаю, разберетесь, не маленькие. После чего - можно прям сразу начинать пользоваться!

Короткая инструкция - как это все работает. Значит, в MQTT-брокере существует такое понятие, как "топик". Ну, примерно, как в форуме. И, в принципе - означает почти тоже самое, те есть - "раздел". Если честно, мне такое название совсем не нравится - мне кажется, что оно несколько сбивает с толку. 

Поэтому, можно договориться, и называть то, что в брокере называется "топиком", ну, к примеру - "каналом", или "каналом связи", как угодно. Мне кажется, что такое название более наглядно описывает суть вещей.

Еще одним из важнейших понятий MQTT яляется так называемая "подписка" (subscribe). Здесь все просто - "подписавшись" на какой-нибудь "канал", мы начинаем получать сообщения, которые публикуются в этом канале другими устройствами или людьми.

Ну и последнее из этой обязательной программы, тоже необходимое действие - "публикация" (publishing). Это, собственно, передача сообщения в канал.

Чтоб быстро протестировать свежесозданный аккаунт на iot.eclipse.org, скачаем программу, предназначенную для взаимодействия с MQTT-брокером. Мне попалась, например, MQTT Interaction, хотя, наверняка, их целая куча со сходными функциями. Посмотрим на единственное окно программулины:

TT31

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

Далее, для того, чтобы получать или передавать какие-либо сообщения, нужно предварительно подписаться на какой-либо канал (топик), в котором мы будем получать или передавать сообщения.Для этого, в разделе "Interactions" вводим название интересующего существующего топика, или просто придумываем новый и нажимаем кнопку "Subscribe" (Подписаться). В окошке "Subscriptions", в правом верхнем углу появляется запись типа /XXXX/state (это как пример). Это значит, что теперь мы слушаем канал (топик) /XXXX/state и будем получать все сообщения, которые там кто-нибудь опубликует. А также - сами можем что-либо опубликовать в этом канале.

Вот, собственно, и весь принцип паботы MQTT-брокера. То есть, какое-то устройство подписывается на определенный канал и начинает его "слушать". Получив какое-то сообщение, устройство анализирует его с помощью встроенного ПО и, в зависимости от полученной команды - выполняет какое-либо действие.

Или, например, другой вариант - устройство измеряет температуру и передает ее брокеру в каком-нибудь канале, устройство принимает данные о температуре, например, и, например, индицирует ее. Например, как-то так:

android

Это еще один MQTT-клиент, на этот раз - под Android. Но функции его абсолютно аналогичны с тем, про который я рассказал выше. Соединившись с тем же брокером, что и клиент под Windows, он так же имеет возможность отображать информацию, публикуемую в каком-либо канале (топике), или наоборот - отсылать какую-нибудь информацию.

Давайте, например, настроим во втором клиенте кнопку "Включатель" так, чтобы при каждом нажатии на нее, она отсылала поочередно команды "ON" и "OFF" в канал /XXXX/state. И соединившись с брокером обоими клиентами, попробуем понажимать эту кнопку, наблюдая поступление команд в первом клиенте.

TT32

 

Собственно, комментарии, полагаю, излишни. В основном окне первого клиента видим поступающие команды, которые мы посылаем со смартфона. Если бы на месте первого клиента эти команды принимало какое-нибудь устройство, то оно могло бы их распознать и выполнить какие-нибудь полезные действия.

Собственно, дальше мы и будем рассматривать такие устройства, способы их подключения и управления ими.

 

 

Продолжение следует...