Умный дом на .NET — релиз ThinkingHome 3.0
Содержание
Привет! Сегодня я наконец-то могу поделиться с вами результатами своей работы на протяжении последних двух лет! Вчера вечером я выпустил новую версию 3.0 системы управления умным домом ThinkingHome[1].
ThinkingHome[2] — это программа (.NET Windows service), с помощью которой вы можете организовать на своем компьютере управляющий центр умного дома. Это центр, который дружит между собой «железки» с разными интерфейсами от разных производителей, позволяет автоматизировать работу с ними (писать скрипты на JavaScript) и управлять всем этим хозяйством через веб-интерфейс.
Под катом более подробное описание системы, список изменений в новой версии и небольшое объявление для тех, кто ненавидит Windows 🙂
Платформа
ThinkingHome — не просто программа, управляющая устройствами! Это платформа, на основе которой вы можете реализовать (в виде плагинов) любой функционал, доступный для компьютера, при этом не заботясь о решении базовых задач, вроде логирования или сохранения данных между запусками системы.
Вам доступны:
- Система плагинов[3] — отвечает за подключение плагинов и их взаимодействие (плагины могут использовать API и подписываться на события друг-друга). Это значит, что вы можете подключить себе плагин, который написал для себя другой человек и этот плагин будет совместим с вашими плагинами. Плагины пишутся на языке C#.
- API логирования[4] — позволяет писать информацию в лог и гибко настраивать хранение логов. Например, вы можете хранить логи в текстовых файлах в течение месяца и при этом сообщения о критичных ошибках дополнительно отправлять на почту. Внутри используется NLog[5].
- API хранения данных в БД[6] — вы просто пишете классы на C# и сохраняете их в БД (используется NHibernate[7] в качестве ORM). Для миграции структуры БД — ecm7migrator[8].
- Инфраструктура HTTP API[9] — вы можете пометить метод своего плагина специальным атрибутом и он станет доступен для вызова по HTTP.
- Инфраструктура веб-интерфейса[10] — ваш плагин может добавлять в систему собственные типы виджетов для стартового экрана или даже новые разделы интерфейса.
- Клиент-серверная шина сообщений[11] — вы можете пушить сообщения с сервера на клиент или с клиента — всем остальным клиентам. Например, при получении нового значения температуры с датчика вы можете отправить его во все браузеры (!), в которых открыт веб-интерфейс системы, чтобы они обновили графики температуры на уже открытой странице. Внутри шины сообщений используется SignalR[12].
- API локализации[13] — позволяет вам отображать интерфейс на нескольких языках и гибко это настраивать. Ядро системы и все базовые плагины поддерживают русский и английский языки.
В комплекте идут готовые плагины:
Плагин сценариев[14] добавляет в систему сценарии — небольшие программы на языке JavaScript, которые пишутся через веб-интерфейс. С их помощью можно реализовать любую логику по автоматическому управлению домашними устройствами (для этого в сценариях доступен API плагинов). Например, вы можете написать сценарий, который автоматически выключает теплый пол и свет во всем доме, если днем больше часа не срабатывал ни один датчик движения.
Редактор сценариев выглядит примерно так:
Плагин MQTT[15] — тут всё просто: вы можете получать данные от других устройств и отправлять им команды по протоколу MQTT. Например, этот протокол поддерживает контроллер Wiren Board[16].
Плагин nooLite[17] позволяет управлять электроприборами с помощью системы nooLite[18]. Можно управлять освещением, вентиляцией, теплым полом и любыми другими электроприборами. Даже чайником 🙂
Плагин микроклимата собирает и сохраняет в БД информацию о температуре и влажности с датчиков nooLite[19]. Данные отображаются в виде графиков в веб-интерфейсе.
Выглядит примерно так:
Плагин будильник/таймер позволяет включить в заданное время звуковой сигнал или выполнить заданный сценарий. Например, можно настроить, чтобы в 8 утра жалюзи во всем доме сами открывались, а в 22 часа — сами закрывались.
Плагин прогноза погоды — отображает в веб-интерфейсе прогноз погоды для заданных городов. Информаця о погоде загружается из OpenWeatherMap API[20]. Результат выглядит примерно так:
Что нового?
В новой версии мы сделали большое количество новых доработок. Кроме того, были полностью переписаны многие части системы, чтобы увеличить скорость работы и сделать более удобный API.
Основные изменения:
- новая тёмная тема оформления (раньше было так[21]);
- новый интерфейс стартовой страницы[22] (удобно настраивается через редактор);
- виджеты и API nooLite для стартовой страницы;
- полноэкранный режим для редактора сценариев;
- поддержка нескольких языков (см. выше);
- поддержка протокола MQTT (см. выше);
- клиент-серверная шина сообщений (см. выше) + уже используется в виджетах;
- полностью переписано ядро веб-интерфейса;
- API для запуск перидодических действий
- на клиенте доступен chart.js (средство для отображения графиков);
- переподключение к приемникам nooLite, если приемник был недоступен, потом снова стал доступен;
- ускорен старт сервиса;
- и множество более мелких доработок.
Документация
Чтобы постороннему человеку хоть как-то возможно легче было разобраться со всеми этими штуками, мы написали документацию. Мы очень старались описать всё подробно и понятно! В результате получилось почти 50 страниц текста (если распечатать на А4) и больше сотни примеров кода (мы писали это почти 3 месяца).
Результат выложен на сайте http://system.thinking-home.ru[23].
Для тех, кто ненавидит Windows
Исторически так сложилось, что проект был написан на C#. В принципе, это неплохой вариант, учитывая количество готовых библиотек и очень высокое качество средств разработки. Однако, у этого варианта есть существенный (для многих — критичный) недостаток — приложению нужен .NET Framework, который работает только под Windows.
Так было до недавнего времени, но сейчас ситуация изменилась. Летом зарелизился кросс-платформенный .NET Core, а в ноябре вышла его версия 1.1. Мы рады сообщить, что уже начали портировать ThinkingHome на .NET Core.
Разработка ведется в отдельном репозитории[24]. Весь код пишется на маке и тестируется в macOS и linux. Сейчас уже портировано ядро системы и часть базовых плагинов (таймеры, работа с БД, сценарии). При портировании значительная часть кода полностью переписывается. Определенно новая версия будет значительно лучше старой в плане архитектуры, API и производительности.
Если вы вдруг хотите поучаствовать, мы будем рады любой помощи! (А если не хотите участвовать, всё равно зайдите на github[25] и кликните по звездочке 🙂
Вместо заключения
Очень много хотел рассказать, не уверен, что всё получилось понятно. Буду рад ответить на вопросы в комментариях.
Попробуйте установить приложение[26] и написать собственные плагины[27]. Создайте issues[28], если найдете ошибки и присылайте пулл реквесты[29]. Добавляйтесь в нашу группу вконтакте[30], чтобы быть в курсе новостей проекта.
Мне будет очень приятно, если вам понравится!
Использованны источники
- ^ ThinkingHome (system.thinking-home.ru)
- ^ ThinkingHome (system.thinking-home.ru)
- ^ Система плагинов (system.thinking-home.ru)
- ^ API логирования (system.thinking-home.ru)
- ^ NLog (nlog-project.org)
- ^ API хранения данных в БД (system.thinking-home.ru)
- ^ NHibernate (nhibernate.info)
- ^ ecm7migrator (github.com)
- ^ Инфраструктура HTTP API (system.thinking-home.ru)
- ^ Инфраструктура веб-интерфейса (system.thinking-home.ru)
- ^ Клиент-серверная шина сообщений (system.thinking-home.ru)
- ^ SignalR (www.asp.net)
- ^ API локализации (system.thinking-home.ru)
- ^ Плагин сценариев (system.thinking-home.ru)
- ^ Плагин MQTT (system.thinking-home.ru)
- ^ Wiren Board (contactless.ru)
- ^ Плагин nooLite (system.thinking-home.ru)
- ^ системы nooLite (www.noo.com.by)
- ^ датчиков nooLite (www.noo.com.by)
- ^ OpenWeatherMap API (openweathermap.org)
- ^ раньше было так (geektimes.ru)
- ^ новый интерфейс стартовой страницы (system.thinking-home.ru)
- ^ http://system.thinking-home.ru (system.thinking-home.ru)
- ^ отдельном репозитории (github.com)
- ^ github (github.com)
- ^ установить приложение (system.thinking-home.ru)
- ^ написать собственные плагины (system.thinking-home.ru)
- ^ issues (github.com)
- ^ пулл реквесты (github.com)
- ^ группу вконтакте (vk.com)