Программное обеспечение для умного дома

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

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.: Если нашли ошибку в программе, то пожалуйста, перешлите её на почту.
Поделиться публикацией

Похожие публикации

Комментарии 29

    0
    По поводу Яндекс.Радио — у меня есть немного наработок по java клиенту. Думаю, это было бы куда интереснее, чем запускать бразуер :)
      0
      Интересно. Есть ли описание Вашей программы? Хотелось бы почитать подробнее.
        0
        Описания нет, т.к. только набросан каркас. Приложение консольное. pom.xml уже настроен для сборки jar через Maven.
        Список команд вызывается через команду help.
        Из функционала пока есть возможность переключить вперед/назад, сменить жанр.
        К сожалению, пока нет времени дорабатывать. Как только появится, сделаю историю, избранные, like, dislike.
        Кстати тут есть одна особенность. Чтобы распространять свой клиент, нужно, чтобы он не обходил ограничения веб версии. А именно запрет на скачивание и воспроизведение рекламы.
      0
      Как сложно такое собрать самому и под какой лицензией распространяться ПО будет?
        0
        MIT. Собрать самому не сложно, нужен сервер на винде, я бы рекомендовал маленькие десктопы, сейчас модные, которые размером 30х30 сантиметров =) стоят где-то 8-12к, его даже можно на стену рядом с роутером повесить, при необходимости подключаться по удаленке. Если использовать ZWave, то кабеля проводить не нужно, достаточно вставить розетки, переключатели и диммеры в свои места и залинковать их с контроллером (у меня USB stick). Затем создаешь сценарии в программе, которые тебе нужно, пользуешься. С modbus все сложнее, там нужно щиток сооружать, но дешевле.
          +1
          а к серверу на винде еще винду купить.
            0
            Мне кажется в озвученную стоимость (8-12к) найти как TV-стик с виндой (цена от 6500), так и неттопчик с виндой (как раз в районе 12000).
              0
              Но ведь можно дешевле, но на Linux или Android.
        0
        Blynk пробовали?
          0
          Blynk это платформа для построения приложений, работающих с ардуино и распбери, т.е. функционал, который нужен в «умном доме» должен быть заранее захардкожен. За каждым желаемым изменением в сценариях использования системы будет пересборка приложения и заливание его на телефон заново. Это из минусов blynk. Хотя, его функционал и функционал Pyrite пересекаются очень слабо. Это просто разные вещи, которые иногда можно использовать одинаково. Pyrite жестко не завязан ни на какое оборудование, любой человек может сам создать модуль из 100 (грубо говоря) строчек кода и pyrite будет работать уже с другим оборудованием. Причем, чтобы добавить этот модуль даже не надо будет перезапускать систему и pyrite, просто из ui добавить готовый модуль (инструкция по созданию модулей: http://noant.github.io/Pyrite/PyriteMods.htm). Хотя я не отрицаю, что blynk это более серьезная вещь и весьма интересная.
            0
            И да, сценарии pyrite можно изменять на лету, blynk такое не может
              0
              А openHUB пробовали? У меня сейчас стоит z-way сервер на банане пи. Но интерфейс глючный и некрасивый. У openHUB судя по картинкам для андроида страшное приложение, извните, как и у вас, но там хоть прибамбасов куча. Вот еще openremote думаю попробовать.

              Хочу дешевые таблетки с андроидом поразвешать в комнатах на стены для управления умным домом, но хочется красивого интерфеса, а не этот «голимый программистический» стиль.
                0
                Хочу дешевые таблетки с андроидом поразвешать в комнатах на стены для управления умным домом, но хочется красивого интерфеса, а не этот «голимый программистический» стиль.


                Тогда обязательно гляньте на Блинк. Я его разработчик, если что :).
                  0
                  Не нашел ничего похожего на то, что у меня в голове.
                    +1
                    нашел, blynk, да, выглядит красиво, попробую, спасибо
                      0
                      Чуток поигрался. Не понял как убрать зеленое меню и как развернуть в горизонтальное положение. Не нашел read only режима. Что бы никто не мог с лайаутом играться. Что бы дизайнер и проигрователь раздельно были.

                      А так все красиво и подошло бы. Я так понял проект спонсировался через кикстартер, а дальше? Как финансируется? Хочется, что бы проект не умер до того, как я все настрою и куплю таблетки. :)
                        0
                        Не нашел read only режима. Что бы никто не мог с лайаутом играться. Что бы дизайнер и проигрователь раздельно были.


                        Эта фича называется шаринг. Есть в настройках проекта. Правда она чуток платная. Но на локальном сервере можно бесплатно разернуть.

                        Не понял как убрать зеленое меню

                        Делаем только для бизнес клиентов пока что. В будущем появится возможность кастомизации для обычных пользователей.

                        и как развернуть в горизонтальное положение

                        Пока нету и не планируется в ближайшее время. Ресурсоемкая задача.
                          0
                          Я так понял проект спонсировался через кикстартер, а дальше? Как финансируется?

                          Делаем заказы для бизнеса. То что можем отдаем назад в приложение.

                          Хочется, что бы проект не умер до того, как я все настрою и куплю таблетки. :)

                          Можно поставить локальный сервер. И никак от нас не зависеть.
                    0
                    OpenHub смотрел, интересная вещь, мощная. Pyrite по функцоналу схож.
                      0
                      Признаю, визуально приложение для андроид выглядит скромно, Блинк смотрится в этом плане намного интереснее =)
                      0
                      Спасибо за равернутый ответ.

                      И да, сценарии pyrite можно изменять на лету, blynk такое не может

                      Уже может :).
                        0
                        Это интересно! Нужно мне поближе с Блинк пообщаться.
                  0
                  Выделять целый комп под умный дом уж очень не хочется, хотя это может быть какой-нибудь мелкий неттоп. С другой стороны, с этим гораздо лучше справляются контроллеры типа Crestron или CUE. Жаль цены там просто космические… Доводилось программировать и то и то. Может быть есть подобные контроллеры в очень низкой ценовой категории?
                    0
                    Можно что-то недорогое и компактное выделить вроде Малины или Banana Pi.
                    0
                    OpenRemote не пробовали? делает тоже самое, плюс возможность нарисовать свой интерфейс. И поддерживает много разных протоколов
                      0
                      Зачем делать то, что уже есть? Наиболее популярные решения: opеnHAB, iridiummobile, по z-Wave — Fibaro, Vera.
                      Если уж сильно интересно, то почему бы не «доразвить» то уже есть сейчас? Например, opеnHAB с открытыми исходниками, на Java.

                      Серьезно, сильно интересно зачем делать поделки, которые с 99% вероятностью будут хуже чем то, что уже есть, протестированно и успешно внедрятся?
                        0
                        Я не автор. Но отвечу вопросом на вопрос. Зачем делать яндекс елси есть гугл? Зачем делать касперский если есть дрвеб? Список можно продолжать бесконечно.

                        Автор молодец, он сделал очень много полезного функционала. Как минимум он получил огромное количество опыта. Да, с вероятностью 99% этот проект умрет в течении года, но он так же может выжить и стать бизнесом. Почему нет?

                        + вполне может оказатся что допилить всякие опенхабы до нужного функционала сложнее чем написать свое.
                          0
                          Зачем делать яндекс елси есть гугл?
                          Хм, в контексте поделки автора скорее:
                          Зачем делать «СуперПоиск» если есть гугл, яндекс, бинг и тд.?
                          ибо 1 в поле не воин, а приведенные мной проекты и компании — довольно крупные.
                            0
                            ибо 1 в поле не воин


                            Тем не менее всякие гуглы регулярно выкупают проекты из 2-10 человек.

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое