- PVSM.RU - https://www.pvsm.ru -

Мой умный дом на .NET, версия 2.0

Добрый вечер!

Предлагаю вашему вниманию проект, над которым я работаю последние полтора года. Это программный продукт (если быть точным, .NET Windows Service), с помощью которого вы можете организовать на своем компьютере управляющий центр «умного дома». Хотя это всего лишь мое хобби (моя основная работа — веб-разработчик на .NET), многие люди, которым я показывал мой проект, высоко его оценили. Я пишу эту статью, чтобы попробовать заинтересовать вас.

Мой умный дом на .NET, версия 2.0

Предыстория

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

На мой взгляд, «умный дом» — это то, что самостоятельно принимает решения по управлению домашними устройствами на основе поступающей извне информации (например, с датчиков) и заранее настроенных правил. Кроме того, я считаю, что умный дом должен взаимодействовать не только с устройствами, но и с интернет-сервисами (в принципе, в последнее время так, кажется, начали считать почти все).

Началось все пару лет назад со статьи [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 для управления домом, который может быть расширен с помощью плагинов.

image

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

image

Управление через веб-интерфейс

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

Веб-интерфейс системы — модульное одностраничное приложение [9] на основе backbone.js [10] и marionette.js [11], модули загружаются через require.js [12]. Для верстки используется Bootstrap [13], благодаря которому все выглядит аккуратно и корректно отображается на маленьких экранах мобильных устройств.

image

Плагины могут описывать свой собственный UI в виде js/css файлов, находящихся в ресурсах DLL. При установке плагина в систему его UI автоматически встраивается в веб-интерфейс управления домом (добавляется новый раздел). Например, вот так выглядит интерфейс плагина «прогноз погоды».

image

Документация

На мой взгляд, одна из особенностей моего проекта, отличающая его от других подобных систем — наличие подробной документации на русском языке. Посмотрите сами [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/