Loxone Config: программа защиты от протечки воды

У нас уже есть статья, где описано как подключать приводы и датчики от системы защиты от протечки. Теперь хотелось бы поговорить о том, как же это программировать в Loxone Config.

Предполагается, что вы знаете как работать в Loxone Config хотя бы на базовом уровне. Вводная статья про Loxone Config.

В Loxone Config есть специальный блок для сигнализации о пожаре и протечки. Но у него есть некоторые нюансы и его функционал не достаточен.


Путь к блок сигнализации о пожаре и протечки в Loxone Config


Блок сигнализации о пожаре и протечки в Loxone Config


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



На видео видно, что произошла протечка (активировался вход 1, к которому подключен датчик). После нажатия на Подтверждение тревоги (сброс тревоги) несмотря на то, что датчик все еще мокрый все выходы выключились. То есть, произошла протечка, блок её увидел, выдал оповещение и активировал выход для перекрытия воды. Устранили протечку, в приложении подтвердили тревогу и выход выключился. Но если датчик за это время не высох, то при новой протечки (могли плохо починить) вы не получите уведомления и краны не перекроются.

Казалось бы, редкий случай, но одного такого раза вам хватит на долго. К тому же иногда датчики находятся в таком месте, что их крайне сложно протереть. Или кто-то мог по ошибке отключить тревогу.

Так как у нас есть множество разных стандартных блоков, то с помощью них можно справить ситуацию.

Дополнительно добавим возможность принудительного закрытия. Очень часто просят такую возможность. И часто в сценарии все ушли подача воды на всякий случай перекрывается.

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

Итого постараемся сделать так, чтобы было удобно и максимально надежно.

За основу возьмем блок "Сигнализация о пожаре и протечке". Можно в принципе и без него сделать, раньше его и не было. Но у него есть одна удобная функция. Когда произошла протечка и вы откроете приложение вам сразу откроется тревога. Без этого блока вам еще нужно пройтись по меню, чтобы увидеть, что произошло.

Для примера наша схема будет состоять из одного датчика, подключенного к входу 1, и одного привода, подключенного к выходу 1.


Схема подключения датчика протечки и привода крана к Loxone Miniserver


При стандартной схеме датчики подключаются к входу Iw.


Стандартный способ подключения датчика протечки


Но, чтобы иметь возможность запускать тревогу по новой нам как бы нужно отключать и подключать датчик снова, так как тревога подается при каждом импульсе на вход Iw. Для этого воспользуемся блоком Аналоговый переключатель.


Путь к блоку Аналоговый переключатель


Блок: Аналоговый переключатель Аналоговый переключатель
Суть его в том, что подачей сигнала на вдох S переключается значение какого входа AI1/AI2 будет выдано на выходе AQ1. То есть пока сигнал на вход S не подается на выходе AQ1 будет значение, которое подается на вход AI1, а если подать сигнал на вход S, то на выходе будет значение AI2.
Не имеет визуального представления в интерфейсе, используется только в программе.

Как не надо соединять блоки


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

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



Ссылка удобна для временного соединения, для постоянного не рекомендуется, так как если её случайно отсоединить, то она просто пропадает. Её нельзя двигать, многократно использовать и переименовывать. У памяти таких недостатков нету.

Память это переменная. В ней можно хранить как цифровое значение (0/1), так и аналоговое. Может быть отображен в интерфейсе, если в свойствах Визуализация поставить галку Использовать.

Ещё потребуется блок Задержка включения, чтобы согласовать сигналы. Сложно объяснить о каком согласовании идет речь, поэтому постарался продемонстрировать на видео.


Блок: Задержка включения Задержка включения
При подаче сигнала на вход Tr выход Q включается через время, указанное в параметре T. Если сигнал со входа Tr пропал до того, как прошло время T, то вход не включается и отсчет времени T сбрасывается.
Не имеет визуального представления в интерфейсе, используется только в программе.


Как видите без блока "Задержка включения" после подтверждения тревоги новой тревоги не последовало! Сигнал от датчика вновь поступил в тот же момент, что и подтверждение тревоги, а чтобы тревога снова включилась нужно, что бы сигнал от датчика гарантированно позже подтверждения поступил. Есть догадка, что это связанно с rise edge и fall edge сигнала.

В блоке "Задержка включения" в названии нужно указать, где находится датчик (например, кухня-мойка), так как в тревоге именно это название и будет отображаться. В видео заметно, что когда был подключен вход 1 к входу Iw (в предыдущем видео), то его название высветилось в источнике тревоги, потом подключили Аналоговый переключатель и появилось его название, и после уже название блока задержки включения.


Переименовываем блок


Теперь поговорим о выходах блока сигнализации, чтобы выбрать какой нам подойдет для управления краном подачи воды.
Q1 – выход предварительной сигнализации. В понятиях Loxone это выход для разных уведомлений (push, email и сигнализации светом).
Q2 – выход основной тревоги, включается после задержки. Задержка указывается в параметре D. И отключается после задержки, указанной в параметре Dm.
Qh – выход для серены, срабатывает вместе с Q2. В интерфейсе можно отдельно отключать.
Остальные выходы нам не интересны и по названиям думаю понятны.

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


Блок: Задержка выключения Задержка выключения
Как и следует из названия задерживает выключение выхода на время, указанное в параметре T. То есть после пропадания сигнала на входе Tr, выход Q остается включенным на время T.
Не имеет визуального представления в интерфейсе, используется только в программе.


Как видите при использовании блока задержки выключения выход не выключается между тревогами. Важно, чтобы время задержки выключения для выхода (привода крана) выло больше, чем время задержки включения для входа (датчика) иначе кран будет открываться между тревогами.

У нас получилась схема, которая исправляет ошибку в логике стандартного блока. Теперь добавим дополнительных функций.


Схема без ошибки


Сначала добавим принудительное закрытие. Воспользуемся блоком "Переключатель".


Блок: Переключатель Переключатель
При каждом импульсе на входе Tr меняет значение Q. То есть подали импульс на Tr выход Q включился, подали еще один импульс выключился и т.д.
При импульсе на вход R всегда выключает выход Q.
При импульсе на вход O всегда включает выход Q.
Вход Dis. При сигнале на этот вход блокируются сигналы на входы Q, R и O, но через интерфейс блоком можно управлять.
Батарейка. При перезагрузке контроллера сохраняет состояние выхода. То есть если перед перезагрузкой выход Q был включен, то он и останется включенным после перезагрузки. В противном случае будет выключен.
Выход Qon. Импульсный выход, срабатывающий при включении выхода Q.
Выход Qoff. Импульсный выход, срабатывающий при выключении выхода Q.
Имеет визуальное представление в интерфейсе, если в свойствах Визуализация стоит галка Использовать.

Добавляем принудительное закрытие


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


Добавляем блок Или


Для лучшей визуальной читаемости программы воспользуемся блоком "Или", чтобы объединить сигналы от принудительного закрытия и тревоги.


Блок: Или Или
При подаче на любой из входов I1 и I2 включается выход Q. То есть если вы подадите сигнал на I1 или на I2, или одновременно на I1 и I2, то выход Q будет включён.
Не имеет визуального представления в интерфейсе, используется только в программе.

Кстати, возможно вы заметили, что если вход в обозначении начинается с буквы A, то это значит, что это аналоговый вход, например AI1, а если без, например, I1 это уже цифровой вход. Аналогично и с выходами.

Цифровой вход
Если на такой вход подать сигнал меньше 1, то на входе будет логический 0, если 1 и более, то на входе будет логический 1.

Возможно, кому-то покажется не понятно о каких единицах и нулях идет речь. Постараюсь объяснить на примере выключателя. Предполагаем, что выключатель подключён к первому входу контроллера. Если нажать и удерживать выключатель, то на входе появиться сигнал и так как вход у нас цифровой, то в программе этот вход выдаст 1, то есть он включен. Если отпустить выключатель, то пропадет сигнал и вход выдаст 0.


Цифровой сигнал


Осталось добавить функцию принудительного открытия с таймером.

Так как кран у нас перекрывается, когда мы подаем сигнал на выход, то для его открытия нам нужно убрать этот сигнал. Для этого воспользуемся блоком "Аналоговый переключатель". И подключим выход блока "Переключатель" к входу S этого блока. Таким образом когда мы включаем принудительное открытие мы отключаем сигнал блока сигнализации от выхода.



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


Принудительное открытие для кранов протечки


Для задержки воспользуемся двумя блоками: Аналоговый переключатель и Задержка включения. А для запуска таймера воспользуемся состоянием переключателя.

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



В примере задержка сброса равна одной секунде. Это только для примера, на объекте уже поставьте какую вам необходимо.

Остался последний штрих. Нужно сделать, что бы если до принудительного открытия у нас было включено принудительное закрытие, то оно должно сброситься. Иначе у вас и интерфейсе будет одновременно включено принудительное открытие и закрытие, что естественно не может быть. Так же нужно и сделать наоборот, то есть если у нас было включено принудительное открытие, то оно должно сбросится если включили принудительное закрытие.

Для этого воспользуемся выходами Qon обоих блоков. Подключим Qon одного блока ко входу R другого. Таким образом при включении одного из них другой будет выключаться.



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

Теперь наша схема полностью готова, можно посмотреть, как это выглядит в интерфейсе.

Но предварительно укажем блокам категорию и помещение. В видео выше можно было видеть, что помещение указывалось как "Не определён". Указать категорию и помещение достаточно только тем блокам, что будут в визуализации.



Иконки для категории и помещения можно выбрать другие, а если не нашли подходящих, то можно загрузить свои.

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

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

Файл с программой для Loxone Config.


Как видите такая простая, казалось бы, задача как защита от протечки имеет массу нюансов и превращается уже в не настолько и простую.

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

Надо заметить, что, к сожалению, постоянно есть какой-нибудь объект, который неправильно сделали. Восстановление такого объекта занимает массу времени и это обходится существенно дороже нежели сделать хорошо сначала. Чаще всего ошибки связаны с непониманием и/или небольшой практикой. После таких объектов люди начинают плохо относиться к умным домам и, в частности, к оборудованию Loxone.



Автор: Максим Кулешов
maksim@kickstone.ru