Опрос


Что для Вас Умный Дом?


Результаты

Защита от протечек с применением 1-wire

03/10/2011 12:35:16

После нас хоть потоп...

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

Айвазовский. Всемирный потоп
И. Айвазовский. Всемирный потоп. Больше - никогда!

Протечка - вещь довольно непредсказуемая. Относительно протечки можно сказать совершенно определенно только одно - она гарантированно случиться в самый неподходящий для этого момент. Поэтому ключевым узлом системы защиты является датчик. Именно он должен сгенерировать сигнал SOS.
Вода проводит ток. Не всякая (дистиллированная хуже) и не так хорошо, как металлы, но все-таки проводит. А значит в качестве датчика можно использовать все что угодно, даже просто два оголенных провода. Когда между проводниками пройдет ток, это будет сигналом тревоги. Но все же лучше с эстетической точки зрения выполнить чувствительный элемент в виде контактной площадки. Согласитесь, кусок голого провода на фоне испанской плитки, мрамора или гранита будет смотреться несколько вызывающе.

Сам по себе чувствительный элемент никуда никакой SOS отправить не сможет, поэтому его нужно подключить к чему-то более интеллектуальному. Это может быть специализированный контроллер протечки, который самостоятельно принимает решение о перекрытии подачи воды, или устройство, которое передает этот сигнал по какой-либо шине на пульт или сервер. В первом случае, когда используется специальный контроллер, вся система является независимой. Это плюс, так как надежность такой системы выше, но в то же время и минус - она не может учитывать информацию, поступающую от других элементов Умного Дома. Кроме того, специализированное решение имеет ограниченные возможности в управлении исполнительными механизмами (кранами, которые закрывают воду) и в плане уведомления людей об аварии. Сервер Умного Дома имеет куда больше средств контроля и управления. Во-первых, он сможет отличить протечку от регламентных ремонтных работ (например, обслуживание фильтров), в случае аварии, он сможет не просто закрыть кран, но и отключить некоторые узлы от электроэнергии, отправить SMS или позвонить с помощью Asterisk, написать сообщение по электронной почте и даже завопить на весь дом человеческим языком.

1-wire датчик протечки

Так как моя система является централизованной, где все информация стекается в единую базу данных, я решил пойти по второму пути и подключить датчик к уже существующей 1-wire сети. Для этого был изготовлен простой модуль на базе элемента DS2406, который усиливает сигнал, поступающий от датчика и в случае фиксации протечки меняет состояние пина 1-wire микросхемы. Элемент DS2406 был выбран не случайно. Шина 1-wire работает по принципу "мастер-слейв", а это значит, что ведомые устройства не могут отправлять сообщения мастеру/серверу. Только мастер может генерировать опрос состояние датчиков. Но в DS2406 заложен механизм так называемого "условного поиска". Мы заранее можем задать в какой ситуации компонент будет откликаться на команду Conditional Search ROM. Таким образом мастер не будет опрашивать все устройства по очереди. Вместо этого мастер один раз в несколько секунд будет посылать команду "ей, есть тут кто больной". Откликнуться только те элементы, у которых произошли важные изменения, сформировались нужные для этого "условия".

Датчик протечки на шине 1-wire

Для своего датчика я прописал посредством owfs в своейство set_alarm значение '131'. Это означает, что датчик будет отзываться на команду условного поиска в том случае, когда свойство sensed будет равным 1, а это, в свою очередь, говорит, что датчик зафиксировал наличие протечки.

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

<?

$dir = opendir("/mnt/1wire/alarm/");
$log = fopen("/var/www/server.log", "a");
$keys = array (
        0 => array (
            'key_address' => '12.A52D7D000000',
            'key_label' => 'leak',
            'alarm' => 0, 'key_pio' => 0, 'key_id' => 0
        )

    );
while ( true )
{
    sleep(3);

    for ( $i = 0; $i < count($keys); $i++ )
    $keys[$i]['alarm'] = 0;

    rewinddir($dir);
    while (false !== ($file = readdir($dir)))
    {
        for ( $i = 0; $i < count($keys); $i++ )
        {
            if ( $file == $keys[$i]['key_address'] )
            $keys[$i]['alarm'] = 1;
        }
    }


    for ( $i = 0; $i < count($keys); $i++ )
    {
        # Обработка событий для датчика протечки
        if ( $keys[$i]['key_label'] == "leak" )
        {
            if ( $keys[$i]['alarm'] == 1 && $keys[$i]['key_pio'] == 0 )
            {
                $keys[$i]['key_pio'] = 1;
                $log_txt = date('H:i:s')." ".$keys[$i]['key_label']." ON";
                fwrite($log, $log_txt);
                // AHTUNG! Здесь должен быть код, который выполняется в случае выявления протечки!
            }
            elseif ( $keys[$i]['alarm'] == 0 && $keys[$i]['key_pio'] == 1 )
            {
                $keys[$i]['key_pio'] = 0;
                $temp_time = 0;
                $log_txt = date('H:i:s')." ".$keys[$i]['key_label']." OFF";
                fwrite($log, $log_txt);
            }

        }

    }
}

fclose($log);

?>

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

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

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

Шаровый кран с приводом FAR для защиты от протечек
Шаровый кран с электроприводом FAR. Время закрытия всего 8 секунд

Комплект: кран 1" с приводом стоит в рознику порядка 7500 руб. С одной стороны очень дорого, учитывая, что в продаже имеются куда более дешевые решения от российско-китайских прендов (от 3500 руб) и даже существенно дешевле, если заказывать на Алиэкспресс. С другой стороны я имел очень негативный опыт с китайскими сантехническими изделиями, поэтому в системе защиты от протечек мне нужна максимальная надежность. Китайская продукция - это всегда кот в мешке. Никогда не знаешь, что получишь в результате. В этом смысле FAR -фирма, которая зарекомендовала себя с лучшей стороны. Я выбирал между FAR и Danfoss, но приводы от последней конторы более показались мне слишком массивными и через чур медленным. Серые 8-секундные приводы - это лучшее, что предлагает FAR, поэтому я принял решение использовать именно эту модель. Привод работает от 220В (хотя есть модификация и для 12В). Чтобы кран закрылся, необходимо подать на него 220В. В течение 8 секунд кран перекроет подачу воды. Кран сделан очень добротно из толстого металла. Его вес (без привода) составляет 700 грамм. Еще фотографии крана.

Управлять таким краном можно также по шине 1-wire, используя, например, модуль на базе DS2413 или с помощью других исполнительных устройств, работающих по Ethernet, X10, ZigBee и т.д.
В программу выше нужно после оптимистичного слова "AHTUNG!" добавить нужную команду. Для 1-wire ключа что-то вроде этого:

require "/opt/owfs/bin/ownet.php";
$ow=new OWNet("tcp://localhost:3000");
$ow->set('Адрес ключа', 1);

Все же в этот раз я предпочел реализовать управление приводом крана с помощью контроллера MegaD-328. И вот почему. Кран имеет интересную схему подключения.

Синий провод - общий ноль
Коричневый - питающая фаза
Черный - управляющая фаза

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

Но беда в том, что электроника привода, работающая с управляющей фазой, не совместима с электронными реле - симисторами, поэтому для подключения привода к исполнительному модулю MegaD-7I7O я использовал промежуточное реле ABB серии CR-M.

MegaD-328 - промежуточное реле ABB
Контроллер MegaD-328 и промежуточное реле ABB

При такой схеме все работает прекрасно. Еще одной отличительной особенностью привода FAR является то, что из него выведены контакты концевого выключателя полного открытия крана. Таким образом появляется обратная связь! Подключение этих выводов на вход исполнительного модуля MegaD-7I7O позволяет системе точно знать в каком положении находится кран (в открытом или закрытом) и, соответственно, контролировать реакцию привода на команды. То есть система может самостоятельно проводить плановые проверки работоспособности привода и крана без участия в этом процессе человека.

Оповещение о протечке посредством телефонного звонка

Так как в моей системе функционирует программная АТС Asterisk, было бы неплохо уведомить домочадцев и меня по телефону, если система зафиксировала протечку. Сделать это нетрудно.
В /etc/asterisk/extensions.conf добавляем контекст.

[alarm]
exten => s,1,Answer()
exten => s,n,Wait(1)
exten => s,n,Playback(alarm_leak)
exten => s,n,Wait(1)
exten => s,n,Hangup()

Далее пишем скриптик, например на PHP, который создает файл в пуле звонков Astersk. Например, такой

<?
$call = '
# Номер телефона, который сервер будет набирать в случае протечки
Channel: SIP/102
Callerid: ALARM
MaxRetries: 50
RetryTime: 10
WaitTime: 30
Context: alarm
Extension: s
Priority: 1';

$cfile = fopen("/var/spool/asterisk/outgoing/alarm.call", "w");
fwrite($cfile, $call);
fclose($cfile);
?>

Файлик этот располагаем в защищенном месте на Web-сервере. В том, что это будет Web-скрипт, заложена глубокая мысль. Во-первых, если серверов в доме несколько, это очень простой способ дернуть за веревочку. Во-вторых, сообщение о протечке может генерировать многофункциональный контроллер MegaD-328. В этом случае не придется делать какие-то специальные костыли.

Ну и последнее. Вы, вероятно обратили внимание на строчку Playback(alarm_leak). Необходимо заранее подготовить звуковой файл, который система будет проговаривать по телефону. Проще всего сгенерировать файл с произвольным текстом с помощью Google Translate или синтеза речи festival. Затем, полученный, к примеру mp3 нужно сконвертрировать в 8Гц Моно в формате alaw следующей командой:

ffmpeg -i alarm_leak.mp3 -ar 8000 -ac 1 -ab 64 -f alaw alarm_leak.alaw -map 0:0

Остается только в главном скрипте после ключевого слова AHTUNG прописать вызов PHP-скрипта, генерирующего звонок через Asterisk.

Еще несколько нюансов

Однако, проанализировав свою водопроводную систему, я понял, что закрыть кран будет недостаточно. Все дело в том, что у меня имеется накопительная емкость на 950 литров. Сначала вода из магистрального водопровода попадает в безнапорную емкость, а потом с помощью повышающего насоса Grundfos MQ 3-45 давление уже во внутренней сети поднимается до 4,5 атмосфер. Это означает, что в случае протечки, даже если будет закрыт аварийный кран на подаче, насос будет качать воду до тех пор, пока все 950 литров не окажутся разлитыми по дому...

Можно было бы поставить еще один кран на выход из емкости, так как Grundfos MQ имеет встроенную защиту от сухого хода и просто бы ушел в аварийный режим, но я пока придумал решение лучше и главное дешевле. Я подключил насос к работающему уже модулю IP Power 9212, в котором имеются нормально-замкнутные реле. Такое решение позволит обесточить насос в случае протечки и сохранить воду в баке. Таким образом, существует возможность отключать насос не только в экстренном режиме, но и профилактически, когда никого нет дома или в других случаях - ремонтные работы, переключение подачи воды напрямую из магистрали при питании от генератора и т.д.

Можно еще на всякий случай сказать что-нибудь этакое с помощью синтеза речи.

Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.



Добавить комментарий:



Сортировка комментариев: Последние сверху | Первые сверху

2016-08-04 10:48:43 | Andrey_B
Логика защиты от протечек предельно проста - сработал датчик, перекрыли кран. На MegaD-328 это просто решается с помощью сценария по умолчанию (поле "Act").


2016-08-03 18:17:36 | Pop
А как реализовать автономную логику контроллера протечек на самом 328 без централизованного управления?


2015-04-19 21:14:09 | Andrey_B
Кирилл, отдельной статьи по поводу использования датчика Астра-361 на сайте нет. Да и описывать особенно нечего. Вся информация есть в документации к датчику. Датчик совместим со стандартным входом комплекта MegaD-328 Kit.


2015-04-19 19:09:27 | Jager
Андрей, нашел и опробовал шаровый кран с приводом который работает от 3,3 вольт :)
/jager-f.livejournal.com/48142.html


2015-04-17 11:53:35 | Кирилл
Андрей, дай Вам Бог здоровья и долгих лет жизни! Не перестаю удивляться не только детальному подходу к любой проблеме, но и готовностью делиться решениями.
В моём случае не получится использовать 1-wire датчики, т.к. уже проложил шину по всему дому, для измерения температуры во всех жилых помещениях исключая санузлы. А под датчики протечек везде где возможны протечки, вывел витую пару на пол, вторым концом в щиток с контроллерами. Планировал найти какой- нибудь датчик для подключения к АЦП одно из контроллеров. Или может быть даже на вход сухого контакта, после устройства соответствующей обвязки. Пока собирался найти решение по датчику, очередной раз зайдя на сайт увидел что что у Вас оно уже найдено- Астра-361!
Хочу поинтересоваться есть ли уже опыт использования этого датчика. На сайте ничего не нашёл. Если есть- пошлите меня в соответствующее место)


2015-02-09 23:59:03 | Andrey_B
Владимир, вы имеете ввиду привод для шарового крана, как у меня? Конечно можно!


2015-02-09 22:54:55 | Владимир
Андрей, подскажи на релейную мегу можно без промежуточного реле подключать?


2014-09-09 17:01:22 | Александр
Андрей, а не опишите в подробностях, что куда подключать из крана в мегу на симисторах? Не хотелось бы ошибиться )


2012-10-31 13:22:54 | vladimir
Во-певых спасибо за сайт и статьи. Коллега дал ссылку - мечтаю сделать то же для своего дома. Про протечку. Хорошо бы после остановки подачи воды сбросить давление в стояке подачи. Например вернуть воду в безнапорную емкость. Даже если подачу остановить и гидроаккумулятора нет все равно есть вероятность дальнейшей течи до момента падения давления из стояка подачи воды до нуля


2011-10-09 22:34:52 | bdxprns
Андрей, можно ли купить готовый датчик протечки через Ваш сайт?


2011-10-09 14:46:38 | Andrey_B
Гарик, вот схема с дружественного сайта. В качестве усилителя используется транзистор КТ972. Чувствительность очень высокая. Как только датчик попадает во влажную среду, сразу же срабатывает DS2406.


2011-10-09 10:27:17 | Гарик
Андрей, не могли бы Вы описать конструкцию собственно датчика протечки? Достаточно ли для DS2406 в режиме датчика сухого контакта, когда подсоединенная к нему пластина из фольгированного текстолита, изображенная на Вашей фотографии, попадает в мокрую среду (какова вероятность, что DS2406 интерпретирует эту мокрость как замыкание контакта)? Мне приходилось читать про датчики протечки, и они выглядели более сложно: имели бОльшую площадь и длину границы между электродами. Если Вы использовали усилители, можно ли глянуть принципиальную схему?


2011-10-07 16:52:32 | Konstantin
Думаю да, Вы правы. В моем случае имел место вариант когда бак+гидроаккумулятор находились на одном уровне, а потребление было уровнем ниже. Хотя...(поэкспериментировать негде просто) если даже представить что все элементы находятся на одном уровне, то вполне возможно что резиновая камера в середине гидроаккума будет качать воду, не до бесконечности конечно, но все же несколько качков пожалуй сделает...


2011-10-07 16:19:27 | Andrey_B
Константин, если я правильно понимаю, то вы говорите о напорном баке. Такой гидроаккумулятор обычно ставится для того, чтобы насос не включался слишком часто. Если случилась протечка и система выключила насос, то течь остановится не сразу, а по мере падения давления в гидроаккумуляторе (но вода в накопительной емкости останется). Насосы серии Grundfos MQ разработаны специально для работы без гидроаккумуляторов. И выльется там максимум стакан воды.
Единственный случай, когда остановка насоса не решит проблему - это когда течь образуется ниже уровня бака. Тогда вода по закону сообщающихся сосудов выльется до того уровня высоты, на котором произошла протечка.


2011-10-07 15:59:11 | Konstantin
В первую очередь, спасибо за сайт ! А во вторую, хотелось бы заметить из личного опыта, если будет стоять кроме насоса еще и гидроаккумулятор, то есть вероятность что простое отключение насоса не остановит протекание воды в трубе