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

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


    image


    Чтобы сразу заинтересовать читателя, продемонстрирую некоторую часть сценариев использования ПО:



    Управление освещением, климатом,
    мультимедиа и т.д., посредством
    устройств Z-Wave и Modbus,
    возможность расширять список
    совместимых протоколов написанием
    плагинов
    .




    GPS-трекер и триггеры геолокации.

    Создание алгоритмов работы
    сценария с циклами и условиями;
    использование одного сценария в
    другом
    ; возможность объединить
    несколько серверов Lazurite
    посредством удаленных сценариев.


    СЦЕНАРИИ


    Lazurite позволяет создавать триггеры и сложные сценарии с условиями и циклами, т.е. пользователь может «запрограммировать» программу с помощью встроенного конструктора на любые свои нужды.


    Любой сценарий имеет свой переключатель в пользовательском интерфейсе — "плитку". В зависимости от типа данных сценария переключатель будет выглядеть по-разному.


    Примеры переключателей сценариев.


    >> Подробнее о типах данных и переключателях.


    Помимо этого, в Lazurite существует три разновидности сценариев: одиночное действие, сложный сценарий и удаленный сценарий.


    Окно выбора типа создаваемого сценария.


    Одиночное действие


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


    Конструктор одиночного действия на примере создания переключателя ModbusRTU.


    Сложный сценарий


    Сложный сценарий — это сценарии со сложной логикой, в котором есть циклы и условия.


    >> Подробно о создании сложного сценария.


    Пока влажность в комнате меньше или равна 40%, то регулировать влажность.


    Сложный сценарий на примере работы с Z-Wave устройствами.


    Сложное условие с группами и сравнениями числовых значений.


    Удаленный сценарий


    Lazurite имеет встроенный сервер, на котором крутится WCF-сервис. Именно это позволяет клиентским приложениям получать информацию о сценариях и выполнять некоторые действия. Но, помимо этого, к серверу Lazurite может подключиться другой сервер Lazurite и использовать сценарии удаленного сервера. Для того, чтобы использовать этот функционал, необходимо создать удаленный сценарий.


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


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



    ТРИГГЕРЫ


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


    Триггер на срабатывание датчика движения.


    ДЕЙСТВИЯ


    Любая строка, добавляемая в конструкторе сценария, является "действием". Каждый плагин, устанавливаемый в Lazurite, добавляет в программу некоторые новые возможности — действия. Любая работа с Z-Wave, Modbus, геолокацией и т.д. производится через этот функционал. Соответственно, любое действие, как и сценарий, имеет свой тип данных.


    >> Список всех действий в Lazurite.


    Окно выбора действия в конструкторе сценария.


    БЕЗОПАСНОСТЬ


    В Lazurite можно настроить доступ к просмотру и изменению значения сценария. Это может быть нужно, когда мы создаем пользователя в системе для нашего гостя или когда просто хотим скрыть сценарий, который выполняет вспомогательные функции и не должен быть отображен пользователям.


    Окно настройки безопасности сценария.


    Для настройки безопасности доступны следующие пункты:


    • "Запретить для любого использования";
    • "Запретить для всех групп, кроме..." — запрет на использование сценария пользователям, не состоящим в выбранных группах;
    • "Запретить для всех пользователей, кроме..." — запрет на использование сценария для всех пользователей, кроме выбранных;
    • "Запретить для групп" — запрет на выполнение для выбранных групп пользователей;
    • "Запретить для запуска из сети" — сценарии с этим ограничением не могут быть отображены в клиентских приложениях и не могут быть использованы как "удаленный сценарий";
    • "Запретить для меню быстрого запуска" — сценарий не будет отображаться в меню быстрого запуска;
    • "Запретить для пользователей" — запрет на выполнение для выбранных пользователей;
    • "Запретить использовать из другого сценария/триггера" — сценарий не может быть выполнен в другом сценарии или триггере.

    По умолчанию любой сценарий запрещен для запуска из сети и для меню быстрого запуска.


    ПОЛЬЗОВАТЕЛИ И ГРУППЫ


    Пользователи в Lazurite являются неотъемлемой частью системы. Не имея учетной записи, пользователи не смогут получить доступ к нужным сценариям и управлять устройствами в доме. Если бы не было аутентификации, то любой человек подключился бы к системе и выполнил любые сценарии, что крайне нежелательно.


    Для удобства настройки безопасности сценария пользователей можно объединять в группы, например, можно создать группу "Гости" и запретить этой группе выполнение некоторых сценариев.


    >> Подробнее о пользователях и группах.


    Z-WAVE


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


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


    На изображении выбран узел, мультисенсор — ZW100, затем выбран его пользовательский параметр, с помощью которого можно измерить температуру в комнате.


    После того, как будет создан сценарий, использующий этот узел, появится плитка с информацией о температуре.


    >> Подробнее о Z-Wave в Lazurite.


    СТАТИСТИКА


    Lazurite имеет функционал, который позволяет вести историю значений разных сценариев (например температура в гостиной, влажность в комнате, уровень ультрафиолета, обнаружение движений). Пользователь может выбрать сценарии, по которым необходимо вести статистику, затем посмотреть на графиках их динамику за определённый промежуток времени.


    Отображение статистики в виде графиков.


    Отображение статистики в виде круговой диаграммы.


    >> Подробнее о статистике.


    ГЕОЛОКАЦИЯ ПОЛЬЗОВАТЕЛЯ


    В Lazurite присутствует функционал GPS-трекера. Любое клиентское приложение отправляет информацию о геоданных на сервер Lazurite, где эти данные можно обработать, сохранить и отобразить. Действия, представленные в плагине UserGeolocationPlugin, созданы для работы с геолокацией пользователей и позволяют вычислять такие значения, как расстояние пользователя до места, нахождение пользователя в определенном месте и т.д.


    Некоторые действия предполагают наличие не только пользователя, но и места, или "локации", которое должно быть заведено и настроено в программе. Таким местом может быть дом, работа, город, станция метро. Действия с таким параметром нужны для того, чтобы произвести какое-либо действие по появлению или отдалению пользователя от этой "локации". Место имеет три параметра: координаты центра, радиус и наименование.


    Пример созданных мест (дом и работа) и маршрут пользователя между ними в выбранную дату.


    Позицию пользователя можно просматривать через приложение Lazurite на смартфоне.


    Помимо этого, можно вести историю перемещений, если добавить соответствующий сценарий в статистику.


    Перемещения пользователя за большой промежуток времени.


    >> Подробнее о плагине.
    >> Подробнее об истории перемещений.


    РАЗНОЕ


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


    Окно отображения входящих сообщений.


    Отправка сообщения другому пользователю.


    Помимо этого, присутствуют разные другие функции, например Wake-on-Lan, эмуляция мультимедиа клавиш на Windows, управление звуком на Windows, работа с процессами Windows, управление устройствами Modbus и т.д.


    О том, как создавать плагины, можно узнать здесь.


    Дальнейшее развитие системы на данный момент видится следующим образом:


    • модернизация архитектуры программы будет проведена таким образом, чтобы можно было использовать готовые движки или сервисы распознавания речи как плагины;
    • дальнейшая декомпозиция и модернизация функционала плагинов и сценариев в будущем позволит создавать сценарии с планшета или смартфона;
    • планируется создать модуль видеонаблюдения, в котором был бы функционал записи видео, трансляции видеопотока на мобильные устройства, распознавание движения и т.д.

    >> WIKI проекта
    >> Веб-сайт проекта
    >> На GOOGLE PLAY
    >> Последняя версия


    Поделиться публикацией
    Комментарии 35
      0
      Mqtt брокер есть? HTTPS сервер есть? генератор-составитель http запроса из статичной части и параметров есть? Возможность запускать сценарии внешними http/https get post запросами есть? Возможность читать писать переменные теми же http/s get/post запросами есть? Есть ли статистика наработки? (кол-во включений-выключений устройств, сумарное время в день месяц год во включенном и выключенном состоянии). И самое главное — интеграция с гугл асистентом планируется?
        0
        Работает через HTTPS. Помимо этого, все запросы на сервер отправляются в зашифрованном виде в теле сообщения. Через эти запросы можно запускать сценарии, т.е. задавать входящие значения сценариям (в программе нет разделения на переменные и сценарии). Подробнее про это можно прочитать здесь (в разделе про удаленные сценарии), здесь. Возможно, будет смысл сделать отдельную либку, чтобы можно было из другой программы дергать сценарии. Про mqtt — пока его заменяет периодическое дерганье сервака с клиентов, нужно будет сделать.
          0
          Этот факт прекрасен :)
          Теперь про внутреннюю часть — в квартире устройствам тоже обязательно https запросы уметь отрабатывать? esp8266 например неумеет в https но умеет http get post и умеет mqtt. она самый распространенный исполнительный механизм и она же самый распространенный узел считывания датчиков. wifi-iot посмотрите — в средах domotics и majordomo эта прошивка — 90% всех устройств.
            0
            Wifi-iot, безусловно, прекрасная вещь, ее вполне можно реализовать в Lazurite на уровне плагинов, так же, как реализован плагин ZWave и Modbus. Работа с плагинами сводится к абстракции некоей единицы, которая имеет определенное число параметров и имеет несколько методов (типа Get и Set, но немного усложненных, так как там еще передается контекст управления, в котором есть нужные для выполнения сценария вещи). У меня есть ощущение, что плагин для wifi-iot будет писать намного легче, чем тот же плагин для ZWave. Нужно бы мне побольше покопать про это, благо дома лежит esp-шка, которой как раз найду применение. Про то, как работают плагины, можно посмотреть здесь.
        +1
        Управлять надо торлько тупым домом, умный должен сам все понимать.
          0
          К этому надо стремится, однозначно.
            0
            «Умный дом» умный настолько, насколько обучен житель дома.
            0

            Автор, классную штуку ты сделал, будешь продавать, или выложишь на гит?
            Я скоро дом буду строить, хотелось бы использовать именно твою прогу, ну и свои новшевства привносить в процессе.

              0
                0
                Спасибо! В любом случае, система будет развиваться и у меня еще есть много идей как многое сделать. Одному, к сожалению, это трудно осуществить, поэтому считаю Lazurite не законченной программой, а стартапом, из которого можно развить нечто большее. На данный момент приоритетными считаю несколько дополнительных функциональностей, они описаны в конце статьи. Есть определенный взгляд на то, какой должна быть эта система в будущем.
                0

                Только под windows?

                  0
                  Сейчас да, но добрая часть кода кроссплатформенна и, конечно, хочется сделать порт на другие ОС. Основное, что не является переносимым на другие платформы, это часть, которая отвечает за работу WCF сервиса (благо, там не много кода, и перенести будет не слишком сложно), а вот серверный UI, который отвечает за конструирование сценариев, переносить будет сложнее.
                    0
                    а вот серверный UI, который отвечает за конструирование сценариев, переносить будет сложнее.

                    AvaloniaUI вам в помощь!
                  0
                  Пипец, титанический труд, все это причесать, еще и сайт с документацией.
                  Но боюсь… в корзину.
                  Не вижу преимущества над Openhab, domotics и majordomo, не говоря уж от Home-Assistant с его тысячей готовых плагинов.
                  У нас не хорошая тенденция — одна система умного дома на один язык программирования.
                  Почему бы не разобраться в том же HomeAss? И если архитектура устраивает, поизучать Питон как новый язык для себя, клевый же повод. Меня вот в HA кардинально программирование сценариев не устраивает, поэтому прикрутил NodeRed с нужными либами и они прекрасно живут вместе.
                    0
                    По поводу программирования сценариев. Мне нравится концепция создания сценария голосом, типа «через 5 минут выключи ТВ», или «Когда я прихожу домой, то начни набирать ванну», а не программирование его текстом (или конструктором, как в Lazurite). Хорошая декомпозиция на уровне сценариев и плагинов позволит это воплотить в жизнь. Только для этого нужно очень сильно модернизировать архитектуру всей программы. На данный момент я как раз поставил себе такую цель и у меня есть мысли по этому поводу.
                      0
                      это другое, это скорее голосовые помощники.
                      Уже сейчас подобное можно замутить прикрутив google ass или axela к любому умному дому.
                      Задержка 5 минут будет реализована на их стороне, а сама операция — апи умного дома.
                        0
                        Я знаю что такое голосовые помощники. Я не про «включи свет», которое сейчас можно прикрутить чуть-ли не к реле напрямую, а про создание сценариев. Полноценных сценариев. Вы сказали, что Вас не устраивает программирование сценариев, а я отвечаю, что вместо классического программирования сценариев круто бы было создавать сценарии голосом, без писания «пока i<=10 мигать светильником», а сказав «поморгай светильником несколько раз», или «набери воду в ванну когда я сегодня приду домой», и, однозначно, это одна из функциональностей умного дома в будущем.
                          0
                          И это не вам не мне, ни какому то другому опенсорсу не осилить. Это уровень Яндекса и Гугла. Мы сможем дать им Апи на элементарные действия (кубики). А жонглировать их на основе сложных голосовых команд (сценариев) будут они, опенсорс с ними тягаться не может.
                            0
                            Абсолютно согласен. Вывод один: в таких задачах нужен большой штат профессионалов.
                      0
                      Можно поподробней о прикручивании NodeRed к HA?
                        0
                        flows.nodered.org/node/node-red-contrib-home-assistant есть такая либа.
                        Там операнды под ловлю событий HA и для вызова сервисов HA. Посередине между ними можно творить все чего NodeRed может, а умеет он практически все.
                        Еще раньше все это крутилось раздельно, но месяц назад купил стик на Z3735 и вкрячил туда с бубном HASS.IO, там есть конкейнер докера с NOdeRed полностью готовый к интеграции
                        0
                        Но боюсь… в корзину.
                        Не вижу преимущества над Openhab, domotics и majordomo, не говоря уж от Home-Assistant с его тысячей готовых плагинов.

                        Возможно вы и правы.
                        Но… Может не стоит с ними конкурировать, а найти автору свою нишу потребителя. На мой взгляд преимуществ у них довольно много и тягаться с ними практически тяжело. но столкнувшись на практике, в чём проблема таких многофункциональных систем — они рассчитаны на энтузиастов или же профессионалов, нужно обладать (или же научиться) не малыми знаниями, чтоб развернуть и запустить систему.
                        У многих русскоязычной документации как таковой нет, есть разбросанные по разным форумам и ресурсам сведения. Допустим у меня, что установить Z-wave на малину ушло довольно много времени — даже разработчики протокола на оф. сайте не обновляют информацию по установке, описана была установка на Debian 7, хотя везде используется 9-ый.
                        На другой стороне УД от производителей по технологии Zigbee (тот же ксаоми и прочие) — просто и быстро в установке, но привязанность к производителю, его сервисам и ограниченность в использовании.
                        Вот с ними можно попытаться потягаться.
                        0
                        Запустил потестировать… очень сложно догадаться как же создавать сценарии.
                        В wiki написано, что есть тип сценария геокоординаты, не вижу такого при создании сценария!
                        Может быть нужно сделать уже готовые примеры сценариев?
                          0
                          Создать сценарий -> Одиночное действие -> в конструкторе на первой строке «Изменить тип действия», там появится список всех доступных действий image там будет вся работа с геолокацией в столбце «Геолокация» (на картинке он задизаблен, так как там в комплексном сценарии в левой стороне действия выбирается). Конкретно, чтобы открывать на клиенте позицию текущего пользователя, нужно выбрать «Открыть геокоординаты пользователя». Вообще, можно его создавать и в сложном сценарии с циклами и условиями, но удобнее один раз создать одиночное действие и потом его использовать уже в сложных алгоритмах, так читаемость и понятность возрастает.
                            0
                            всё это я видел… но!
                            создаю одиночное действие, тип = открыть геокоординаты..., выбираю юзера и устройство, запреты убираю, сохраняю
                            нажимаю на кнопку, открывается ссылка «yandex.ru/maps/?mode=whatshere&whatshere%5Bpoint%5D=не%C2%A0число%2Cне%C2%A0число&whatshere%5Bzoom%5D=13»
                            явно, что то не то!
                            упс… разрешил на мобильнике для программы местоположение, появились координаты
                            sorry
                              0
                              Для удобства, при открытии геокоординат не используется встроенная карта, а используется сформированная ссылка в браузер (на компьютере) и Intent на открытие геокоординат на Android (открываются Google Карты). Если открывается пустая карта, то значит пользователь еще не передал никаких геокоординат системе. Наверное, это тоже стоит обрабатывать и не давать пользователю открывать пустые геокоординаты.
                          +2
                          Меня все время интересовала концепция умный дом, но сколько не сталкивался так и не находил в чем от него польза? Включение света, настройка климата, включение музыки и прочее это максимум экономия пару нажатий клавиш/выключателей в день, т.е. меньше минуты в день. Может кто-то раскрыть зачем он нужен? Или кинуть ссылкой на статью где это можно прочитать?
                            0
                            Как круиз-контроль в авто — удобство при некоторых стандартных сценариев. К примеру: приходя домой не нужно идти включать свет и закрывать окна (если вечер), запускать медиацентр, включать отопление/кондиционер, ждать закипания чайника. Можно пробежаться и все сделать, уложившись в минуту, но насколько ж приятнее, если жилище к твоему приходу уже готово!
                              0
                              Думаю у каждого своё мнение на счёт удобства, комфорта, востребованности тех или иных функций УД. Ещё кажется совсем недавно (лет 25-30) был выбор платить в три дорога за тот же ТВ с пультом ДУ, или вручную переключать каналы. А сейчас без пульта телевизора не найдешь. То же автоматическое отключение устройств, тех же бытовых, кухонных приборов. Хорошо, когда оно есть в устройстве, а если нет? Или покупать новый — подороже обычного, или же использовать функции Умного дома. К примеру: увлажнитель воздуха, вытяжка/вентилятор и т.д. Да и автоматизация — те же сценарии, влажность понизилась, включился увлажнитель, довольно удобно. Ну и ещё можно добавить про безопасность: разного рода датчики, актуаторы и видеонаблюдение. К тому же есть довольно большое удобство — пользования всего с одного пульта управления (смартфон/браузер). Как то так я понимаю эту концепцию.
                                0
                                Вообще-то на увлажнителе и осушителе есть крутелочка с какого до какого уровня стартовать. Но єто, конечно же, без ардуиньі и блютуза mqtt запроса и геолокации пользователя и возможности включать с айфона смартфона.
                                0
                                Самый простой пример — включение кондиционера за пол часа до прихода.
                                0
                                Сейчас самое распространенное исполнительное устройство — это ESP8266. Чтоб ваш проект взлетел нужна поддержка http get, post и mqtt. Тогда domotics будет нервно курить в сторонке.
                                  0
                                  В ближайшее время планирую разобраться с этим и, возможно, выпущу плагин для работы с wifi-iot.
                                    0
                                    Еще желательно барахло от Xiaomi прикрутить. И интерфейс не очень понятен
                                  0
                                  Не радует, что снова выходит вариант «умного дома» если бы все были программистами. А можно всех заинтересованных в реализации «умного дома» рассмотреть вопрос о его реальном наполнении, а не очередной вариации на тему мегапульта?
                                  Результат работы очень крут. Взять и начать делать системно с задумкой о том, как это масштабировать, развивать и поддерживать не часто встречается.

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

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