Вкратце:
1. Основная часть ПО — сервер, который крутится на ОС Windows, написан на C#;
2. Клиент на ОС Android, написан на Java;
3. Планируются клиенты на UWP и IOS, web-клиент.
Некоторые особенности ПО:
1. Конструктор сценариев. Создание сложных сценариев с циклами и условиями;
2. Работа с устройствами ZWave и Modbus;
3. Вложенность сценариев. Можно один сценарий использовать в другом в качестве процедуры;
4. Запуск удаленного сценария. В сценарии текущего сервера можно запускать сценарий удаленного;
5. Возможность добавлять в систему свою функциональность посредством создания модулей;
6. Запуск сценариев с помощью смартфона.
Конструктор сценариев
Программа позволяет создавать как сложный сценарий, так и одиночное действие.
Одиночное действие — это сценарий, который содержит только одно действие. В нем нет возможности создавать циклы и условия, а можно лишь “замапить” определенное действие на кнопку в UI клиента.
В качестве примера приведу свой способ их использования: создал категорию “Розетки”, в ней собрал все лампы, бытовой вентилятор, светильники, телевизор и компьютер. Теперь, чтобы включить одно из этих устройств, следует открыть клиент на андроиде, зайти в категорию “Розетки” и выбрать соответствующий пункт меню.
Обычно, одиночные действия использовать неудобно, так как различные устройства удобно запускать при каком-то условии или хотя бы не по одному. Именно для этого нужен “сложный сценарий”, о чем далее.
Конструктор сложного сценария позволяет создавать сценарии с циклами и условиями. Имеет два режима: просмотр и редактирование.
Пример сценария в режиме просмотра |
Пример сценария в режиме редактирования |
ЕСЛИ и ИНАЧЕ в конструкторе. В данных конструкциях можно создавать цепочки условий с логическими операторами НЕ, ИЛИ, И. Конструктор позволяет создавать группу условий и использовать операторы непосредственно с группой. Если условие остается пустым, то оно автоматом вычисляется как ложь.
Есть некоторое количество встроенных проверок (такие как проверка на дату, время и т.д.), а также некоторое количество в качестве подключаемых модулей.
Цикл ПОКА в конструкторе. Цикл состоит из условия и тела. Условие создается аналогично тому, как он создается в конструкции ЕСЛИ (группы условий, операторы НЕ, ИЛИ, И).
Оператор ЕСЛИ и возможные условия |
Оператор ПОКА |
Тела ЕСЛИ, ИНАЧЕ и ПОКА нужно чем-то заполнять. Собственно, это содержимое и есть самое важное в сценарии. |
Основное окно конструктора сценариев |
Также можно настроить следующие параметры сценариев:
— Запуск извне (вкл/выкл), позволяет запретить или разрешить запуск сценария с другой машины или из клиента;
— Автоматический запуск сценария при старте системы;
— Выбор категории сценария, позволяет отображать в UI клиента пункт меню для запуска сценария в определенной категории.
Работа с устройствами ZWave и Modbus
На данный момент система поддерживает устройства ZWave (на основе openzwave) и Modbus RTU (на основе nmodbus).
ZWave — это беспроводной протокол связи, использующийся в домашней автоматизации. Для реализации протокола используются миниатюрные маломощные радиочастотные модули. Сейчас на рынке ZWave представлен довольно обширный перечень устройств, таких как ZWave лампочки, розетки, релейные модули, переключатели, замки, датчики температуры (влажности, движения, протечки), терморегуляторы, устройства управления кондиционером и т.д. Также распространены мультисенсоры — устройства, сочетающие несколько датчиков (например, датчик освещенности, присутствия, температуры, дверной датчик и т.д.), что весьма привлекательно с точки зрения финансовых затрат и расположения в помещении.
В моей программе модуль ZWave позволяет производить все стандартные операции с устройствами, такие как удаление, добавление устройств, сброс контроллера. Также можно использовать несколько ZWave контроллеров, конечный пользователь не увидит разницы. К примеру, можно осуществить снятие показаний температуры с датчика, который соединён с контроллером «А», и запустить кондиционер с помощью контроллера «Б». Тут нет ни каких ограничений, любое действие и проверка осуществляются стандартными способами и добавляются в конструкторе сценариев.
Modbus — это проводной протокол, применяемый для связи между электронными устройствами, которые его поддерживают. В контексте нашей программы может быть полезен для работы с релейными модулями, для чего я его и использую у себя дома.
Релейный модуль Modbus. Соединяется с контроллером через COM-порт |
|
Основное окно Modbus RTU модуля |
Вложенность сценариев
Вложенность сценариев используется для декомпозиции сценариев умного дома. Часто бывают такие ситуации, когда одно действие участвует во многих сценариях (например, отключение всех бытовых устройств может происходить по нажатию на пункт меню в программе, по сценарию выхода всех wi-fi устройств из сети, просто по таймеру), и поэтому каждый раз создавать (или править) одинаковый алгоритм в каждом из сценариев не представляется удобным. Для этого существует такое встроенное действие, которое позволяет запускать уже созданный сценарий в текущем. Также это может быть удобно, когда часто добавляются новые бытовые устройства (или другие частые изменения в алгоритме работы “умного дома”), для изменения работы всех сценариев достаточно будет изменить лишь один сценарий, который используется в них.
Действие «Существующий сценарий» в списке |
Выбор существующего сценария |
Запуск удаленных сценариев
Посредством запуска удаленных сценариев можно запускать сценарий одного сервера в сценарии другого. В качестве примера хочу привести мой вариант использования этого функционала: создал сценарий (на домашнем сервере) под названием “свет+мультимедиа”, который включает свет в помещении, запускает мой десктоп (используя WakeOnLan), включает тв, к которому подключен десктоп и ждет пока на нем (десктопе) запустится экземпляр нашей программы, затем запускает на ней сценарии “включить музыку” и “звук на 20 единиц” с помощью запуска удаленных сценариев.
«Запуск удаленного сценария» в списке |
Выбор сервера и его сценария |
Написание собственных модулей
Помимо того, что пользователь может создавать сложные сценарии штатными средствами, программа позволяет “расширять” ее пользовательскими модулями на C#. Все элементы действий и проверок в сценариях (такие как “Проверка по дате”, “Показать сообщение”, “Действие Modbus”, “Действие ZWave” и т.п.) это классы, унаследованные от ICustomAction и ICustomChecker. Следуя определенным правилам, любой пользователь может создать свой модуль, который может быть как очень простым (например, озвучивание текущей температуры воздуха за окном), так и сложным, за которым может крыться целый фреймворк. Достаточно наследоваться от интерфейсов ICustomAction или ICustomChecker, расставить несколько атрибутов, скомпилировать DLL и добавить в программу через вкладку “МОДУЛИ” (полная инструкция создания модулей).
Вкладка «МОДУЛИ» |
Запуск сценариев с помощью смартфона
*пока только OS Android
Сценарии отображаются на главном экране и в категориях. Категория является виртуальной “папкой”. При запуске сценария обновляется статус соответствующей кнопки.
Экран настроек соединения |
Экран с запуском сценариев |
Помимо этого, есть возможность запускать сценарии из меню быстрого запуска на PC.
Меню быстрого запуска |
В дальнейшем планируется клиент для UWP, IOS, web, а так же голосовой модуль для управления устройствами (планы на ближайшее будущее) и создания сценариев с помощью голоса (стратегические планы).
Видео напоследок:
» Страничка программы
» Ссылка для скачивания
» Инструкция для пользования
» Инструкция для создания собственных модулей
P.S.: Если нашли ошибку в программе, то пожалуйста, перешлите её на почту.
Комментарии (29)
pasharyzhov
02.09.2016 14:38Как сложно такое собрать самому и под какой лицензией распространяться ПО будет?
noant
02.09.2016 14:59MIT. Собрать самому не сложно, нужен сервер на винде, я бы рекомендовал маленькие десктопы, сейчас модные, которые размером 30х30 сантиметров =) стоят где-то 8-12к, его даже можно на стену рядом с роутером повесить, при необходимости подключаться по удаленке. Если использовать ZWave, то кабеля проводить не нужно, достаточно вставить розетки, переключатели и диммеры в свои места и залинковать их с контроллером (у меня USB stick). Затем создаешь сценарии в программе, которые тебе нужно, пользуешься. С modbus все сложнее, там нужно щиток сооружать, но дешевле.
doom369
02.09.2016 15:16Blynk пробовали?
noant
02.09.2016 16:06Blynk это платформа для построения приложений, работающих с ардуино и распбери, т.е. функционал, который нужен в «умном доме» должен быть заранее захардкожен. За каждым желаемым изменением в сценариях использования системы будет пересборка приложения и заливание его на телефон заново. Это из минусов blynk. Хотя, его функционал и функционал Pyrite пересекаются очень слабо. Это просто разные вещи, которые иногда можно использовать одинаково. Pyrite жестко не завязан ни на какое оборудование, любой человек может сам создать модуль из 100 (грубо говоря) строчек кода и pyrite будет работать уже с другим оборудованием. Причем, чтобы добавить этот модуль даже не надо будет перезапускать систему и pyrite, просто из ui добавить готовый модуль (инструкция по созданию модулей: http://noant.github.io/Pyrite/PyriteMods.htm). Хотя я не отрицаю, что blynk это более серьезная вещь и весьма интересная.
noant
02.09.2016 16:11И да, сценарии pyrite можно изменять на лету, blynk такое не может
gsaw
02.09.2016 16:52А openHUB пробовали? У меня сейчас стоит z-way сервер на банане пи. Но интерфейс глючный и некрасивый. У openHUB судя по картинкам для андроида страшное приложение, извните, как и у вас, но там хоть прибамбасов куча. Вот еще openremote думаю попробовать.
Хочу дешевые таблетки с андроидом поразвешать в комнатах на стены для управления умным домом, но хочется красивого интерфеса, а не этот «голимый программистический» стиль.doom369
02.09.2016 17:02Хочу дешевые таблетки с андроидом поразвешать в комнатах на стены для управления умным домом, но хочется красивого интерфеса, а не этот «голимый программистический» стиль.
Тогда обязательно гляньте на Блинк. Я его разработчик, если что :).gsaw
02.09.2016 17:12Не нашел ничего похожего на то, что у меня в голове.
gsaw
02.09.2016 17:29+1нашел, blynk, да, выглядит красиво, попробую, спасибо
gsaw
02.09.2016 18:13Чуток поигрался. Не понял как убрать зеленое меню и как развернуть в горизонтальное положение. Не нашел read only режима. Что бы никто не мог с лайаутом играться. Что бы дизайнер и проигрователь раздельно были.
А так все красиво и подошло бы. Я так понял проект спонсировался через кикстартер, а дальше? Как финансируется? Хочется, что бы проект не умер до того, как я все настрою и куплю таблетки. :)doom369
02.09.2016 18:18Не нашел read only режима. Что бы никто не мог с лайаутом играться. Что бы дизайнер и проигрователь раздельно были.
Эта фича называется шаринг. Есть в настройках проекта. Правда она чуток платная. Но на локальном сервере можно бесплатно разернуть.
Не понял как убрать зеленое меню
Делаем только для бизнес клиентов пока что. В будущем появится возможность кастомизации для обычных пользователей.
и как развернуть в горизонтальное положение
Пока нету и не планируется в ближайшее время. Ресурсоемкая задача.
doom369
02.09.2016 18:22Я так понял проект спонсировался через кикстартер, а дальше? Как финансируется?
Делаем заказы для бизнеса. То что можем отдаем назад в приложение.
Хочется, что бы проект не умер до того, как я все настрою и куплю таблетки. :)
Можно поставить локальный сервер. И никак от нас не зависеть.
noant
02.09.2016 17:26Признаю, визуально приложение для андроид выглядит скромно, Блинк смотрится в этом плане намного интереснее =)
iga2iga
04.09.2016 11:57Выделять целый комп под умный дом уж очень не хочется, хотя это может быть какой-нибудь мелкий неттоп. С другой стороны, с этим гораздо лучше справляются контроллеры типа Crestron или CUE. Жаль цены там просто космические… Доводилось программировать и то и то. Может быть есть подобные контроллеры в очень низкой ценовой категории?
Igoriok83
05.09.2016 02:32OpenRemote не пробовали? делает тоже самое, плюс возможность нарисовать свой интерфейс. И поддерживает много разных протоколов
bitver
05.09.2016 14:38Зачем делать то, что уже есть? Наиболее популярные решения: opеnHAB, iridiummobile, по z-Wave — Fibaro, Vera.
Если уж сильно интересно, то почему бы не «доразвить» то уже есть сейчас? Например, opеnHAB с открытыми исходниками, на Java.
Серьезно, сильно интересно зачем делать поделки, которые с 99% вероятностью будут хуже чем то, что уже есть, протестированно и успешно внедрятся?doom369
05.09.2016 15:31Я не автор. Но отвечу вопросом на вопрос. Зачем делать яндекс елси есть гугл? Зачем делать касперский если есть дрвеб? Список можно продолжать бесконечно.
Автор молодец, он сделал очень много полезного функционала. Как минимум он получил огромное количество опыта. Да, с вероятностью 99% этот проект умрет в течении года, но он так же может выжить и стать бизнесом. Почему нет?
+ вполне может оказатся что допилить всякие опенхабы до нужного функционала сложнее чем написать свое.bitver
05.09.2016 16:32Зачем делать яндекс елси есть гугл?
Хм, в контексте поделки автора скорее:
Зачем делать «СуперПоиск» если есть гугл, яндекс, бинг и тд.?
ибо 1 в поле не воин, а приведенные мной проекты и компании — довольно крупные.doom369
05.09.2016 16:48ибо 1 в поле не воин
Тем не менее всякие гуглы регулярно выкупают проекты из 2-10 человек.
makedonsky94
По поводу Яндекс.Радио — у меня есть немного наработок по java клиенту. Думаю, это было бы куда интереснее, чем запускать бразуер :)
noant
Интересно. Есть ли описание Вашей программы? Хотелось бы почитать подробнее.
makedonsky94
Описания нет, т.к. только набросан каркас. Приложение консольное. pom.xml уже настроен для сборки jar через Maven.
Список команд вызывается через команду help.
Из функционала пока есть возможность переключить вперед/назад, сменить жанр.
К сожалению, пока нет времени дорабатывать. Как только появится, сделаю историю, избранные, like, dislike.
Кстати тут есть одна особенность. Чтобы распространять свой клиент, нужно, чтобы он не обходил ограничения веб версии. А именно запрет на скачивание и воспроизведение рекламы.