Введение Целью проекта было создание и запуск в облаке веб-приложения для управления умным домом.
Интерфейсы управления, реализованные в приложении:
- Веб-интерфейс с возможностью подключения, контроля и изменения параметров умного дома.
- Навык для голосового помощника Алисы с возможностью управления умным домом.
- REST-API дублирующий возможности веб-интерфейса.
Структура умного дома
Дома
Сервис предусматривает подключение нескольких умных домов. Каждый дом связан с одним управляющим устройством и webhook-адрес на который будут отправляться POST-запросы об изменении состояния модулей. Дома полностью изолированы друг от друга.
Пользователи
Каждый пользователь привязывается к одному дому. Пользователи могут добавлять модули и объединять их в группы.
Модули
Модули соответствуют конечным физическим выключателям (скорее всего bluetooth-реле) и имеют два состояния. Каждый модуль в доме имеет уникальный номер порта, который будет использоваться при подключении к управляющему устройству. При создании модуля пользователь указывает кто может его использовать и редактировать или делает модуль общедоступным.
Группы
Группы позволяют объединить несколько модулей и управлять ими одновременно. Пользователь может добавить в группу те модули, которыми он может пользоваться. Права на использование и редактирование групп также определяются при создании.
Реализация
Веб-интерфейс
Для создания приложения применялся микрофреймворк Flask. Сайт работает на flask-обработчиках адресов, для генерации страниц используются шаблоны для jinja2, генератор форм flask_wtf и стили из Bootstrap. Структура умного дома реализована в SQL базе данных при помощи модуля sqlalchemy.
Навык для Алисы
Навык для голосового помощника Алисы создан согласно требованиям её API. Запросы на webhook навыка обрабатываются flask-приложением. Через навык можно войти в аккаунт и управлять своими устройствами и группами, а также узнавать их состояние.
REST-API
Api создано при помощи модуля flask-restful и реализует архитектуру REST. Для аутентификации пользователей используется реализация метода HTTP Basic Authentication модуля flask_httpauth.
Веб-сервер
Сервер запущен на Ubuntu на виртуальной машине в Яндекс.Облаке. Используются HTTP-сервер nginx и WSGI-сервер gunicorn. Для установки соединения по HTTPS созданы и подписаны сертификаты ключей шифрования. Есть система автоматического развёртывания с использованием GitHub Webhook.