Всем привет!
Для автоматического управления устройствами умного дома, в Domoticz имеется поддержка скриптов на Python или Lua, а так же "блочные скрипты". Об использовании последних я и хочу рассказать в данной статье.
Понятие блочный скрипт относится к визуальному программированию. Программа составляется из блоков-картинок, похожих на пазлы. У каждого блока своя функция. Соединяя их друг с другом в нужной конфигурации мы составляем программу.
Для примера настроим автоматическое управление вентилятором, чтобы регулировать уровень влажности в помещении. Допустим, что в нашем распоряжении есть датчик влажности и умная розетка, к которой подключен вентилятор. Нужно, чтобы система поддерживала влажность внутри помещения в диапазоне от 40% до 60%.
Для составления блочного скрипта заходим в веб-интерфейс Domoticz, в верхнем меню нажимаем на "Setup", далее "More Options" и "Events". Откроется страница, где слева располагается список скриптов (пока пуст), оставшуюся часть раздела занимает таблица, в которой перечислены устройства, атрибуты которых можно задействовать в наших скриптах. Нажимаем на "плюсик" и выбираем "Blocky".
После этого появляется инструментарий составления блочной программы.
Отобразилась страница конструктора скрипта. Его интерфейс содержит кнопки "On/Off" для изменения рабочего статуса скрипта, поле ввода названия скрипта. Кнопки "Import" и "Export" позволяют выгружать и загружать код в скрипт. "Save" и "Delete", думаю понятно, что для сохранения и удаления скрипта.
Ниже располагается область составления скрипта. В левой его части набор программных блоков, рассортированных по категориям:
- Control - содержит два блока условного выбора типа If-Do и If-Do-Else-Do, позволяющий строить конструкции с несколькими вариантами условий;
- Logic - набор для составления логических выражений;
- Time - хранит блоки для работы с временными параметрами;
- Messages - для отправки уведомлений;
- Security - изменение режима безопасности;
- Debug/log - для записи данных в системный журнал;
- Devices - содержит блоки, соответствующие подключенным устройствам, рассортированные по типу.
Итак, составим программу с такой логикой работы: если влажность выше 60%, то включаем вентилятор (розетку).
Для начала дадим нашему скрипту имя, которое будет лучше передавать смысл его работы. Вместо "Script #1" я написал "socket_on".
Нажимаем на "Control". Отобразятся доступные блоки, и курсором мыши перетаскиваем блок "If-Do" вправо, на поле составления скрипта.
Далее нам понадобится блок сравнения. Берем его в разделе "Logic" и также перетаскиваем в область скрипта. Таким же образом возьмем и блок установки значений "Set", на следующей иллюстрации он находится в самом низу.
Добавим блок с показателем влажности. Раздел "Devices", далее "Humidity".
Затем блок управления розеткой. Снова "Devices" затем "Switches".
Обратите внимание, что блоки устройств разбиты на группы по алфавиту в зависимости от имени устройства. Если у вас несколько устройств попадают в одну группу то следует добавить блок на поле составление скрипта, нажать на стрелочку справа от названия устройства и в выпадающем списке выбрать нужное устройство. У меня такое пока одно.
Так, теперь нам нужны блоки значений. Влажность имеет значение цифровое, а состояние розетки - логическое (Да/Нет или ВКЛ/ВЫКЛ). В разделе "Logic" берем соответствующие блоки.
Посмотрим, чего мы там набрали.
Теперь все эти блоки нужно объединить. Одни скрепляем между собой как пазлы, вторые вставляем один в другой. Должно получиться так:
Но нужно кое-что подправить. В блоке сравнения, где значение влажности, нужно поставить знак "больше", а в блоке для цифрового значения указать "60". Так же нужно проконтролировать, чтобы в блоке установки значений, розетке присваивался статус "On", т.е. "включено".
Наш скрипт готов. Если влажность станет более 60%, то розетка включит подсоединенный к ней вентилятор. Теперь нажимаем на кнопку "On" в верхней части конструктора скрипта, а затем на "Save". Скрипт сохранился и появился в списке скриптов (слева на странице).
Теперь нужно составить программу для выключения вентилятора при достижении нужного значения влажности. Она не будет сильно отличаться от предыдущей. Логика работы будет такой: если влажность меньше 40%, то выключить розетку.
Проделываем то же самое, что и в предыдущем примере, только в блоке сравнения ставим условие "меньше", значение влажности 40%, а в блоке установки значения вместо "On" ставим "Off". Вот так:
Если все получилось как описано выше, то система будет регулировать влажность.
В данном примере я старался рассказывать максимально просто, чтобы лишние детали не мешали восприятию информации. У нас получилось два скрипта, один на включение, второй на выключение вентилятора, но можно все эти действия объединить в один, если использовать блок условного оператора If-Do-Else-Do. Он также находится в разделе "Control", на его пиктограмме находится синий значок с шестеренкой.
Создаем новый скрипт и переносим этот блок в рабочую область. Если нажать на шестеренку, то сверху основного блока отобразятся варианты конфигурации в виде двух маленьких блоков. Перемещаем блок с надписью "else if" и прикрепляем его снизу блока "if". Вид основного блока изменился как показано на иллюстрации ниже.
Нажимаем опять на шестеренку, чтобы убрать варианты конфигурации, и добавляем уже знакомые нам блоки, чтобы получилось так:
Один этот скрипт будет делать то же, что и два предыдущих.
Рекомендую ознакомится с остальными блоками, чтобы составлять программы с большей функциональностью. Можно настроить отправку уведомления по электронной почте или Telegram при наступлении какого-либо события, делать фото с камеры наблюдения при срабатывании датчика движения и прочее.
На этом пока все.
Напомню, что ссылки на скачивание прошивок с "умным домом" для роутеров D-Link можно найти в Telegram-канале @dlink_ru_smart_home.
Другие статьи по этой теме теме:
Часть 1. Запуск системы Domoticz.
Часть 2. Подключение к Domoticz устройств Zigbee.
Часть 3. Настройка Domoticz для работы с MQTT.
Часть 5. Настраиваю управление отоплением на даче.
Часть 6. Удаленное управление со смартфона, программа IoT MQTT Panel.
Всем доброго здравия! Пока!