среда, 23 марта 2016 г.

Прототип для отработки архитектуры системы управления умным домом

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

В качестве объекта управления использовался простой светодиод. Его включением/выключением можно было управлять голосом с телефона, через веб интерфейс умного дома с компьютера, через приложение на Android для управления умным домом. Сам объект управления (светодиод) был подключен к микроконтроллеру, получающему команды по WiFi от сервера умного дома.

Для обмена сообщениями между центральным сервером умного дома и микроконтроллером использовался протокол MQTT (http://mqtt.org/) публикации/подписки сообщений , специально предназначенный для обмена данными между устройствами "интернета вещей", имеющими ограниченную производительност. Данный протокол позволяет различным устройствам подписываться и получать сообщения друг друга. За обмен сообщениями между устройствами отвечает специальный программный сервер с названием MQTT Broker, с которым напрямую взаимодействую все MQTT устройства. MQTT Broker получает опубликованные сообщения от устройств и публикует их для всех подписчиков, подписанных на определенный тип сообщения. Существуют и другие реализации архитектуры публикации/подписки, такие как DDS или механизм в ROS (Robotics Operation System)

Наш прототип был собран на базе сервера умного дома OpenHab (http://www.openhab.org/) и контроллера ESP8266 с подключением по WiFi (http://esp8266.ru/).  Данный микроконтроллер уникален тем, что при достаточно приличной производительность и ресурсах, возможности подключения по WiFi, может быть приобретен за 150 р. на AliExpress или 300 р. в составе платы разработки. При такой стоимости и размере в ноготь боьлшого пальца данный микроконтроллер может быть легко интегрирован в различные умные мобильные устройства в составе умного дома.

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

Для того чтобы умный дом был действительно умным, система управления домом должна иметь доступ к информации от всех доступных датчиков, всех имеющихся систем. Она также должна иметь возможность управлять различными системами скоорденированно.  Пользователь умного дома должен иметь возможность получать информацию от различных систем дома и управлять им с помощью различных интерфейсов: приложения на телефоне, веб браузера, голосом и т.д.

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

В нашем прототипе умного дома использовались следующие аппаратные устройства:
- ноутбук
- домашний роутер с WiFi
- телефон с Android
- контроллер: на базе модуля ESP8266 с возможностью WiFi 
- актуатор: простой светодиод, подключенный к контроллеру

Использовалось следующее программное обеспечение, работающее на перечисленных выше устройствах:
- приложение OpenHab для телефона с Android
- приложение Голосовой ассистент Дуся для телефона с Android
- сервер OpenHab, запущенный на ноутбуке
- браузер на ноутбуке для доступа к веб интерфейсу умного дома
- сервер подписки/публикации сообщений по протоколу MQTT, запущенный на ноутбуке (MQTT Broker. использовался Mosquitto, http://mosquitto.org/)
- программа управления светодиодом на микроконтроллере на базе ESP8266, получающая по WiFi команды по протоколу MQTT
- MQTT клиент Paho для ноутбука (использовался для отладки и настройки)
- MQTT клиент для Android (использовался для отладки и настройки)



Для демонстрации работы прототипа умного дома был реализован следующий сценарий:

1. При старте микроконтроллера ESP8266 с загруженной на нем программой управления светодиодом, программа первым делом подключается к домашней сети по WiFi и подписывается на сервере MQTT Broker на сообщения управления светодиодом.

2. Сервер Open Hub при старте подписывается на сервере MQTT Broker на сообщения о состоянии светодиода

3. Программа управления светодиодом при старте выключает светодиод и публикует состояние светодиода на сервер MQTT Broker

4. Сервер MQTT Broker получает сообщение о состоянии светодиода и передает его всем подписчика (в нашем случае серверe OpenHab)

5. Сервер OpenHab отражает состояние светодиода во всех подключенных клиентских приложениях: веб-браузерах, приложениях на телефонах

6. Человек может получает информацию о состоянии светодиода, с использованием
- через приложение OpenHab на Android
- через веб интерфейс OpenHab на ноутбуке (можно и на телефоне, но на телефоне более удобно использовать специализированное приложение)

7. Человек может дать команду управления светодиодом, используя один из доступных способов
- через приложение OpenHab на Android
- через веб интерфейс OpenHab на ноутбуке (можно и на телефоне, но на телефоне более удобно использовать специализированное приложение)
- с помощью голосового ассистента Дуся  (программа на телефоне)

8. Команда от пользовательского приложения поступает на сервер умного дома OpenHab и встает в очередь на обработку

9. Сервер умного дома OpenHab обрабатывае полученные команды в соответствии с настроенными на нем правилами. В нашем случае поступление команды управления светодиодом приводит к публикации сообщения на сервер MQTT Broker сообщения управления светодиодом по протоколу MQTT

10. Сообщение управления светодиодом может быть опубликовано на сервере MQTT Broker и с помощью других клиентских приложений MQTT. В качестве такого приложения может выступать например Paho MQTT Client или приложение MQTT Client на телефоне).

11. MQTT Broker при получении сообщения управления светодиодом  передает данное сообщение для всех подписчиков (в нашем случае это был один микроконтроллер ESP8266).

12. ESP8266 получает по WiFI и протоколу MQTT команду управления светодиодом, анализирует ее и включает, либо выключает светодиод.

13. Светодиод включается и светит, либо выключается

14. По результатам контроллер для подтверждения публикует для MQTT Broker (по WiFi) сообщение об изменении состояния светодиода.

15. MQTT Broker публикует сообщение о состоянии светодиода всем подписчикам данного сообщения (это могут быть OpenHab или любой другой MQTT клиент, такие как Paho или MQTT Client на Android)

16. Сервер OpenHab получает сообщение о состоянии светодиода и отражает изменение его состояния на пользовательских устройствах - в браузере на ноутбуке, в приложении OpenHab на телефоне Android.

17. Человек видит на пользовательском устройстве изменившееся состояние светодиода.

Данный прототип умного дома на базе OpenHab был собран с нуля в течении одного дня. Правда этому предшествовало некоторое время освоения работы с MQTT протоколом на микроконтроллере ESP8266.

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

На самом деле открывающиеся возможности гораздо шире. Теперь нужно понять ЧТО именно нужно делать умному дому, раз уж мы разобрались КАК это делать :)



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

  1. Я тут из интереса почитал спеки MQTT, понял что разработтанный мной VSSCP(Vocord Supervision Systems Control Protocol) круче по функционалу и меньше требует ресурсов, легче расширяется и масштабируется.
    Хотя сейчас я бы сделал в нем маленькое изменение по поводу еще более экономного представления "Variable Size", хотя оно и так лучше чем в MQTT. Но мы придумали еще меньше по ресурсам и экономнее.
    Жаль, что не наткнулся во время фазы обсуждения стандарта MQTT мог бы ребятам дать много дельных советов :( всетаки 15 лет опыта в сложных embedded устройствах и протоколах взаимодействия.

    ОтветитьУдалить
  2. BTW MQTT это шаг вперед в сторону ресурснобедных embedded по сравнению с реализацией стандартного ROS IPC/RPC и много много по сравнению с PSIA, ONVIF

    ОтветитьУдалить
  3. Вот делюсь на весьма пристойный embedded device на котором у нас даже работает распознавалка номеров от RAW данных с 4Mpix камеры быстрее чем на NUKE...
    http://www.hardkernel.com/main/products/prdt_info.php?g_code=G145457216438&tab_idx=2

    ОтветитьУдалить
  4. И еще могу подарить PandaBoard Rev B2 (на OMAP), прямо из Redmond привезли мне. Трофейчик в $MS использовали для тестов Skype...

    ОтветитьУдалить