[Из песочницы] Программное обеспечение для умного дома

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

image

image
Включение и выключение ZWave лампочки через мобильное приложение
image
При появлении устройства в сети (по приходу пользователя домой) происходит
включение ZWave лампочки, релейного модуля Modbus RTU, запуск компьютера через WakeOnLan и включение ТВ
image
Запуск браузера, переход на яндекс.радио,
перелистывание треков (эмуляция горячих клавиш)

Вкратце:

1. Основная часть ПО — сервер, который крутится на ОС Windows, написан на C#;
2. Клиент на ОС Android, написан на Java;
3. Планируются клиенты на UWP и IOS, web-клиент.

Некоторые особенности ПО:

1. Конструктор сценариев. Создание сложных сценариев с циклами и условиями;
2. Работа с устройствами ZWave и Modbus;
3. Вложенность сценариев. Можно один сценарий использовать в другом в качестве процедуры;
4. Запуск удаленного сценария. В сценарии текущего сервера можно запускать сценарий удаленного;
5. Возможность добавлять в систему свою функциональность посредством создания модулей;
6. Запуск сценариев с помощью смартфона.

Конструктор сценариев


Программа позволяет создавать как сложный сценарий, так и одиночное действие.

Одиночное действие — это сценарий, который содержит только одно действие. В нем нет возможности создавать циклы и условия, а можно лишь «замапить» определенное действие на кнопку в UI клиента.

В качестве примера приведу свой способ их использования: создал категорию «Розетки», в ней собрал все лампы, бытовой вентилятор, светильники, телевизор и компьютер. Теперь, чтобы включить одно из этих устройств, следует открыть клиент на андроиде, зайти в категорию «Розетки» и выбрать соответствующий пункт меню.

Обычно, одиночные действия использовать неудобно, так как различные устройства удобно запускать при каком-то условии или хотя бы не по одному. Именно для этого нужен «сложный сценарий», о чем далее.

Конструктор сложного сценария позволяет создавать сценарии с циклами и условиями. Имеет два режима: просмотр и редактирование.

Пример сценария в режиме просмотра
Пример сценария в режиме редактирования
image
image

ЕСЛИ и ИНАЧЕ в конструкторе. В данных конструкциях можно создавать цепочки условий с логическими операторами НЕ, ИЛИ, И. Конструктор позволяет создавать группу условий и использовать операторы непосредственно с группой. Если условие остается пустым, то оно автоматом вычисляется как ложь.

Есть некоторое количество встроенных проверок (такие как проверка на дату, время и т.д.), а также некоторое количество в качестве подключаемых модулей.

Цикл ПОКА в конструкторе. Цикл состоит из условия и тела. Условие создается аналогично тому, как он создается в конструкции ЕСЛИ (группы условий, операторы НЕ, ИЛИ, И).

Оператор ЕСЛИ и возможные условия
Оператор ПОКА
image
image

image
Тела ЕСЛИ, ИНАЧЕ и ПОКА нужно чем-то заполнять. Собственно, это содержимое и есть самое важное в сценарии.

Основное окно конструктора сценариев
image

Также можно настроить следующие параметры сценариев:

— Запуск извне (вкл/выкл), позволяет запретить или разрешить запуск сценария с другой машины или из клиента;
 — Автоматический запуск сценария при старте системы;
 — Выбор категории сценария, позволяет отображать в UI клиента пункт меню для запуска сценария в определенной категории.

Работа с устройствами ZWave и Modbus


На данный момент система поддерживает устройства ZWave (на основе openzwave) и Modbus RTU (на основе nmodbus).

ZWave — это беспроводной протокол связи, использующийся в домашней автоматизации. Для реализации протокола используются миниатюрные маломощные радиочастотные модули. Сейчас на рынке ZWave представлен довольно обширный перечень устройств, таких как ZWave лампочки, розетки, релейные модули, переключатели, замки, датчики температуры (влажности, движения, протечки), терморегуляторы, устройства управления кондиционером и т.д. Также распространены мультисенсоры — устройства, сочетающие несколько датчиков (например, датчик освещенности, присутствия, температуры, дверной датчик и т.д.), что весьма привлекательно с точки зрения финансовых затрат и расположения в помещении.

В моей программе модуль ZWave позволяет производить все стандартные операции с устройствами, такие как удаление, добавление устройств, сброс контроллера. Также можно использовать несколько ZWave контроллеров, конечный пользователь не увидит разницы. К примеру, можно осуществить снятие показаний температуры с датчика, который соединён с контроллером «А», и запустить кондиционер с помощью контроллера «Б». Тут нет ни каких ограничений, любое действие и проверка осуществляются стандартными способами и добавляются в конструкторе сценариев.

image
Рынок ZWave устройств достаточно широк. Имеется множество исполнительных устройств, таких как релейные модули, лампочки, устройства для работы с кондиционером, терморегуляторы, регуляторы теплого пола, розетки, переключатели. Так же существует множество датчиков: датчик открытия двери, температуры, датчик протечки, датчик присутствия и т.д. В качестве контроллера ZWave можно использовать USB stick.
image
Основное окно ZWave модуля
image
Окно выбора контроллера и операций с ним
image
Выбор узла (датчики, переключатели и т.д.)
image
Выбор параметра узла (включен/выключен, различные числовые параметры, такие как температура, влажность и т.д.)

Modbus — это проводной протокол, применяемый для связи между электронными устройствами, которые его поддерживают. В контексте нашей программы может быть полезен для работы с релейными модулями, для чего я его и использую у себя дома.
image
Релейный модуль Modbus. Соединяется с контроллером через COM-порт
image
Основное окно Modbus RTU модуля

Вложенность сценариев


Вложенность сценариев используется для декомпозиции сценариев умного дома. Часто бывают такие ситуации, когда одно действие участвует во многих сценариях (например, отключение всех бытовых устройств может происходить по нажатию на пункт меню в программе, по сценарию выхода всех wi-fi устройств из сети, просто по таймеру), и поэтому каждый раз создавать (или править) одинаковый алгоритм в каждом из сценариев не представляется удобным. Для этого существует такое встроенное действие, которое позволяет запускать уже созданный сценарий в текущем. Также это может быть удобно, когда часто добавляются новые бытовые устройства (или другие частые изменения в алгоритме работы «умного дома»), для изменения работы всех сценариев достаточно будет изменить лишь один сценарий, который используется в них.
Действие «Существующий сценарий» в списке
Выбор существующего сценария
image
image

Запуск удаленных сценариев


Посредством запуска удаленных сценариев можно запускать сценарий одного сервера в сценарии другого. В качестве примера хочу привести мой вариант использования этого функционала: создал сценарий (на домашнем сервере) под названием «свет+мультимедиа», который включает свет в помещении, запускает мой десктоп (используя WakeOnLan), включает тв, к которому подключен десктоп и ждет пока на нем (десктопе) запустится экземпляр нашей программы, затем запускает на ней сценарии «включить музыку» и «звук на 20 единиц» с помощью запуска удаленных сценариев.
«Запуск удаленного сценария» в списке
Выбор сервера и его сценария
image
image

Написание собственных модулей


Помимо того, что пользователь может создавать сложные сценарии штатными средствами, программа позволяет «расширять» ее пользовательскими модулями на C#. Все элементы действий и проверок в сценариях (такие как «Проверка по дате», «Показать сообщение», «Действие Modbus», «Действие ZWave» и т.п.) это классы, унаследованные от ICustomAction и ICustomChecker. Следуя определенным правилам, любой пользователь может создать свой модуль, который может быть как очень простым (например, озвучивание текущей температуры воздуха за окном), так и сложным, за которым может крыться целый фреймворк. Достаточно наследоваться от интерфейсов ICustomAction или ICustomChecker, расставить несколько атрибутов, скомпилировать DLL и добавить в программу через вкладку «МОДУЛИ» (полная инструкция создания модулей).
Вкладка «МОДУЛИ»
image

Запуск сценариев с помощью смартфона


*пока только OS Android

Сценарии отображаются на главном экране и в категориях. Категория является виртуальной «папкой». При запуске сценария обновляется статус соответствующей кнопки.

Экран настроек соединения
Экран с запуском сценариев
image
image

Помимо этого, есть возможность запускать сценарии из меню быстрого запуска на PC.
Меню быстрого запуска
image

В дальнейшем планируется клиент для UWP, IOS, web, а так же голосовой модуль для управления устройствами (планы на ближайшее будущее) и создания сценариев с помощью голоса (стратегические планы).

Видео напоследок:

» Страничка программы
» Ссылка для скачивания
» Инструкция для пользования
» Инструкция для создания собственных модулей

P.S.: Если нашли ошибку в программе, то пожалуйста, перешлите её на почту.

Комментарии (0)

© Habrahabr.ru