- PVSM.RU - https://www.pvsm.ru -
Добрый вечер!
Предлагаю вашему вниманию проект, над которым я работаю последние полтора года. Это программный продукт (если быть точным, .NET Windows Service), с помощью которого вы можете организовать на своем компьютере управляющий центр «умного дома». Хотя это всего лишь мое хобби (моя основная работа — веб-разработчик на .NET), многие люди, которым я показывал мой проект, высоко его оценили. Я пишу эту статью, чтобы попробовать заинтересовать вас.
Если набрать в гугле «умный дом», можно увидеть кучу сайтов, с предложениями «установить его под ключ». И хотя эти решения часто выглядят футуристически, почти всегда они решают проблемы, высосанные из пальца. Более того, в большинстве случаев функционал таких умных домов сводится к дистанционному управлению устройствами (например, с планшета).
На мой взгляд, «умный дом» — это то, что самостоятельно принимает решения по управлению домашними устройствами на основе поступающей извне информации (например, с датчиков) и заранее настроенных правил. Кроме того, я считаю, что умный дом должен взаимодействовать не только с устройствами, но и с интернет-сервисами (в принципе, в последнее время так, кажется, начали считать почти все).
Началось все пару лет назад со статьи [1] на хабре об Android-приложении on{x} [2]. Оно позволяет навешивать определенную логику на различные события в телефоне. Например, оно может отправить смску жене, когда вы выходите с работы. «Automate your life» — написано на их сайте. «Вот штука, о которой я всегда мечтал!» — подумал я тогда. «Но я хочу такую для своего дома, а не для телефона».
Далее был почти год экспериментов и программирования, в результате чего появилась первая версия приложения [3]. Там было много недоработок и почти не было пользовательского интерфейса, но, главное — она умела то же, что on{x} — управлять домом по сценариям. Из железа поддерживались только силовые блоки nooLite [4] и IP-камера D-Link DCS-932L.
На прошлой неделе я закончил работу над второй версией приложения [5]. В новой версии были сильно переработаны внутренности системы и появилась инфраструктура для пользовательского интерфейса. Также было написано несколько модулей, которые пользователи могли бы «из коробки» использовать в повседневной жизни: «планировщик-будильник» и «прогноз погоды».
По сравнению с первой версией, разработка заняла меньше времени (примерно пол года), но объем проделанной работы оказался значительно больше. Отчасти это из-за того, что, впечатленный статьей [6] из блога Джона Резига, я устроил трехмесячный «марафон» [7] с ежедневным написанием кода.
Система состоит из «ядра» и модулей (плагинов). По сути, ядро содержит только механизм подключения модулей и инфраструктуру для них (чтобы они могли описывать свой API и события, а также использовать API и подписываться на события друг друга). Также в ядре находится базовый функционал вроде логирования и средств доступа к системной БД.
Весь остальной функционал реализован в плагинах. Даже такие вещи, как сценарии и веб-интерфейс — всего лишь плагины (если их отключить, система будет и дальше нормально работать, хотя некоторые ее возможности исчезнут). Технически, плагины — это скомпилированные DLL, написанные на C# или другом .NET языке.
Управление домом по сценариям — основное назначение системы. Сценарии — это небольшие программы, управляющие домашними устройствами и взаимодействующие с интернет-сервисами. Сценарии пишутся на языке JavaScript (вы все еще не любите JavaScript? [8]) через веб-интерфейс и выполняются на стороне сервера. Внутри сценариев доступен API для управления домом, который может быть расширен с помощью плагинов.
В системе можно настроить автоматический запуск сценариев при возникновении определенных событий. Событие — это срабатывание датчика, сигнал с таймера, нажатие на кнопку или, например, получение сообщения в твиттере. Новые события, как и новые команды API, можно добавить с помощью плагинов.
В первой версии интерфейса почти не было. Стоит ли говорить, что это делало систему практически недоступной для большинства людей? Именно разработка интерфейса была основной задачей второй версии системы.
Веб-интерфейс системы — модульное одностраничное приложение [9] на основе backbone.js [10] и marionette.js [11], модули загружаются через require.js [12]. Для верстки используется Bootstrap [13], благодаря которому все выглядит аккуратно и корректно отображается на маленьких экранах мобильных устройств.
Плагины могут описывать свой собственный UI в виде js/css файлов, находящихся в ресурсах DLL. При установке плагина в систему его UI автоматически встраивается в веб-интерфейс управления домом (добавляется новый раздел). Например, вот так выглядит интерфейс плагина «прогноз погоды».
На мой взгляд, одна из особенностей моего проекта, отличающая его от других подобных систем — наличие подробной документации на русском языке. Посмотрите сами [5].
На ее написание ушло много сил и времени (почти 3 месяца). Было очень тяжело не давать себе программировать новый функционал, пока не написана документация к уже готовому. Но написание документации дало также положительный побочный эффект. Пришлось взглянуть на проект со стороны его пользователя, благодаря чему было выявлено и исправлено большое количество недоработок.
Еще один побочный эффект — во время работы над проектом я узнал новое о .NET и веб-разработке. Читая документацию, что-то новое, возможно, узнаете и вы.
Я думаю, умный дом должен автоматизировать рутинные задачи людей. Но у каждого человека свои привычки и задачи, которые он хотел бы автоматизировать (а также разное «железо»). Если реализовать хотелки всех людей, получится громоздкая неудобная система, в которой каждому конкретному человеку 90% функционала будет не нужно. Кроме того, ее невозможно реализовать без большой команды программистов за короткое время. Вместо готовой гигантской системы я хотел сделать инструмент, с помощью которого можно собрать собственную маленькую систему домашей автоматизации. Что-то типа конструктора, к которому можно подключить, например, собственные устройства на Arduino и при этом не заниматься самостоятельной реализацией инфраструктуры и общего функционала.
Попробуйте установить приложение [14] и написать собственные плагины (это очень просто [15]). Напишите [16] об ошибках и присылайте пулл реквесты [17]. Добавляйтесь в нашу группу вконтакте [18], чтобы быть в курсе новостей проекта. Мне будет очень приятно, если вам понравится!
Автор: dima117
Источник [19]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/71528
Ссылки в тексте:
[1] статьи: http://geektimes.ru/post/145294/
[2] on{x}: https://www.onx.ms
[3] первая версия приложения: http://habrahabr.ru/post/214387/
[4] nooLite: http://www.noo.com.by/sistema-noolite.html
[5] второй версией приложения: http://thinking-home.ru/system
[6] статьей: http://habrahabr.ru/post/219209/
[7] трехмесячный «марафон»: https://github.com/dima117
[8] вы все еще не любите JavaScript?: http://habrahabr.ru/post/214087/
[9] одностраничное приложение: http://ru.wikipedia.org/wiki/Single_Page_Application
[10] backbone.js: http://backbonejs.org
[11] marionette.js: http://marionettejs.com
[12] require.js: http://requirejs.org
[13] Bootstrap: http://getbootstrap.com
[14] установить приложение: http://thinking-home.ru/system/getting-started
[15] очень просто: http://thinking-home.ru/system/plugins
[16] Напишите: https://github.com/dima117/thinking-home/issues
[17] пулл реквесты: https://github.com/dima117/thinking-home
[18] группу вконтакте: https://vk.com/thinking_home
[19] Источник: http://geektimes.ru/post/240170/
Нажмите здесь для печати.