Текущая структура моей системы "умного дома". Красным цветом выделены компоненты, непосредственно участвующие в системе затопления.
Лучшие системы защиты от протечек воды
Последствия затопления дома холодной или, что еще хуже, горячей водой хорошо известны всем. Страдает все: потолки, стены, полы, мебель, электроприборы и, конечно же, нервы. А если, помимо нашей жилплощади, страдает еще и сосед – стресс и расходы возрастают многократно.
Можно ли избежать подобных неприятностей? Одним из самых эффективных способов (помимо постоянного внимания к состоянию труб и сливов) является установка современной системы защиты от протечек воды.
На российском рынке представлены различные варианты таких систем: более дешевые и более дорогие, более технологичные и более простые. Но в целом, основной принцип работы таков: если "несанкционированная" влага попадает на специальные датчики, система защиты от протечек в течение двух-десяти секунд блокирует подачу воды и помогает избежать аварии.
В нашем рейтинге лучших систем защиты от протечек воды мы собрали модели с наилучшим сочетанием цены и качества.
Топ-5 лучших систем защиты от протечек воды по версии KP
Высокотехнологичное решение от российского бренда: предназначено для обнаружения и локализации утечек воды в системах водоснабжения. Оно относится к так называемым интеллектуальным системам. Идея заключается в том, что центральный контроллер считывает данные с других компонентов. Таким образом, ситуация с утечками отслеживается автоматикой, а все данные выводятся на смартфон домовладельца. Это делается через приложение TUYA Smart Home.
Вся система работает через Wi-Fi. Похвалить производителя не за что: он позаботился о тех, у кого есть проблемы с беспроводным интернетом. Опционально контроллер подключается через Ethernet, то есть классическим соединительным кабелем, как и компьютеры.
Внешний вид
Аккумулятор поставляется в простой картонной коробке, без каких-либо опознавательных знаков. Внутри вы найдете все необходимое для ее подключения.
![]() |
![]() |
Инструкции не нужны, единственное, что пригодится – это как установить кран и как ознакомиться с характеристиками устройства.
Для работы крана необходим 12-вольтовый источник питания. Для этого в комплект входит блок питания 12В – 1А с европейской вилкой. Общая длина кабелей составляет около 5 метров, но при необходимости их можно удлинить.
![]() |
![]() |
На верхней части крана имеется кнопка включения/выключения (используется для открытия или закрытия крана, без использования мобильного приложения) и светодиод для индикации подключения WiFi.
Можно закрыть или открыть клапан, даже если в доме нет электричества, используя кольцо, чтобы потянуть запорный механизм на себя и повернуть рычаг на 90 градусов, чтобы закрыть или открыть клапан.
![]() |
![]() |
Фактически, это устройство можно использовать везде, где нужно повернуть что-то на 90 градусов, а некоторые даже приспособили его для открытия небольших окон в теплице.
Внутренние компоненты устройства
Модуль TYWE3S отвечает за умную работу устройства. TYWE3S – это встроенный модуль Wi-Fi с низким энергопотреблением, разработанный компанией Tuya. "Он состоит из высокоинтегрированного беспроводного радиочастотного чипа (ESP8266), нескольких периферийных устройств, интегрированного стека протоколов сети Wi-Fi и различных библиотечных функций." Googleranslate'.
Кнопка управления и светодиод, сигнализирующий о работе, находятся на отдельной плате.
Я думал, что внутри будет обычный редуктор с пластиковыми шестеренками. Но я был очень приятно удивлен, обнаружив, что шестерни металлические. Большой плюс для долговечности этого устройства.
Для ограничения угла открытия/закрытия были установлены концевые выключатели в виде небольших кнопок.
![]() |
![]() |
Датчики утечки
Датчики я купил от тех же контроллеров ВСУ – универсальные. Они имеют два выхода "открытый коллектор", один подтягивается к земле только при наличии воды, другой, если вода попала внутрь, подтягивается к земле постоянно, до отключения питания. Я использую только первый выход, остальная логика в контроллере, но похоже, что этот выход может быть полезен в некоторых более условных системах диспетчеризации.
Провода в комплекте имеют длину около трех метров. Цвет проводов – Hell_and_Israel. Контрольная цитата:
Красный (коричневый) провод (Vcc) питание от +5 до +30 В.
Черный (белый) провод (OUT2)
зеленый провод (OUT1)
желтый провод (GND)
Поэтому белый/черный не заземлены? На приводе смесителя тоже, кстати, провода имеют цветовую кодировку, логика не правильная. Первый датчик находится на кухне, под раковиной рядом с посудомоечной машиной.
Второй – в ванной в специальной сливной канаве. Когда я делал излив, он не доходил до самой стены. Есть своего рода отстойник для сбора воды из ванной и туалета.
Из опыта, у посудомоечной машины уже было одно ложное срабатывание датчика. По логу за один цикл (500мс) это было короткое замыкание, я изменил код – теперь изменение состояния происходит при 10 последовательных одинаковых значениях с датчика.
Контакты датчика позолочены. У моего друга подобные датчики стоят уже несколько лет, окисления не замечено.
Счетчики
Самый обычный Itelma, через каждые 10 литров контакты замыкаются. Со стороны водителя выход подтянут к + 3.3v, счетчик подтягивается к земле.
Внутри
Основан на Particle Photon, более подробная информация здесь. У них есть версия с модулем 2G или 3G (Electron). Первая прошивка была полной лажей, мигающие светодиоды были в порядке, но как только вы начинаете делать сложные вещи, играть с i2c и прерываниями, вы можете потерять wifi. Теперь я могу с этим жить. В принципе, вы можете вынуть датчики давления из схемы и подключить ее к ESP8266. Прежде всего, вам нужно связать photon с аккаунтом particle (это можно сделать через приложение для мобильного телефона или консоль Particle CLI – я использую второй способ) и зарегистрировать сеть wifi. После привязки контроллер и статус его подключения к облаку появятся в разделе устройств здесь.
У меня все узлы подключаются к облаку только для обновления прошивки. Не то чтобы я был параноиком – просто работа с облаком потребляет не самые богатые ресурсы контроллера. IDE поддерживает работу с библиотеками, буквально десяток поддерживается самим контроллером, остальные – сообществом. Еще одна замечательная вещь, в IDE вы можете сразу увидеть, сколько проектов используют библиотеки.
Исходный код прошивки
// Этот #include оператор был автоматически добавлен Particle IDE. #include "Adafruit_SSD1306/Adafruit_SSD1306.h" // Эта инструкция #include была автоматически добавлена Particle IDE. #include "MQTT/MQTT.h" // Эта #include инструкция была автоматически добавлена Particle IDE. #include "OneWire/OneWire.h" SYSTEM_THREAD(ENABLED); SYSTEM_MODE(MANUAL); STARTUP(WiFi.selectAntenna(ANT_EXTERNAL)); STARTUP(System. enableFeature(FEATURE_RETAINED_MEMORY)); struct counter_struct < float value; byte state; int pin; >; struct valve_struct < byte state; int pin; >; struct sensor_struct < int timeout; byte state; int pin; >; unsigned long currentMillis = 0; unsigned long previous_conected = 100000; //финт ушами unsigned long previous_wifi_uptime = 100000; //финт ушами unsigned long previous_counter_read = 0; //финт ушами unsigned long wifi_uptime; unsigned long start_temp_timer = 0; unsigned long read_temp_timer = 0; byte display_timeout = 0; //temp onewire OneWire ds0 = OneWire(D2); OneWire ds1 = OneWire(D3); byte addr0[8]; byte addr1[8]; bool presense0 = false; bool presense1 = false; byte data[12]; #define OLED_RESET A7 Adafruit_SSD1306 display(OLED_RESET); // управление клапаном сохраняется valve_struct valve[2] = < , >; // управление счетчиком сохраняется counter_struct counter[2] = < , >; volatile int pressure[2] = ; #define SENSOR_TIMEOUT 10 volatile sensor_struct sensor[2] = < , >; void callback(char* topic, byte* payload, unsigned int length); byte server[] = < 192,168,2,101>; MQTT client(server, 1883, callback); bool publish_message(const char* t, const char* p, bool retain) < return client. publish(t, (uint8_t*)p, sizeof(p), retain); >bool publish_message(const char* t, int p, bool retain) < char buf_d[12]; int n = sprintf(buf_d,"%d",p); return client. publish(t, (uint8_t*)buf_d, n, retain); >bool publish_message(const char* t, float p, bool retain) < //char buf_f[18]; String s(p, 4); // dtostrf(p, 9, 4, buf_f); //int n = sprintf(buf_f,"%f",p); return client. publish(t, (uint8_t*)s.c_str(), s.length(), retain); >// получить сообщение void callback(char* topic, byte* payload, unsigned int length) < char p[length + 1]; memcpy(p, payload, length); p[length] = NULL; String message(p); String t(topic); if (t.equals("home/water_count/spark/set")) < if (message.equalsIgnoreCase("1")) < Particle.connect(); if (waitFor(Particle.connected, 10000)) else > else < Particle.disconnect(); publish_message("home/water_count/spark", 0, false); >> else if (t.startsWith("home/water_count/valve/")) < int m = message.toInt(); int x = t. substring(23,24).toInt(); if (m >-1 && m < 2 && x >-1 && x <2) < set_valve(x, m); >else < publish_message("home/water_count/valve/" + t.substring(23,24), valve[x]. state , true); >> else if (t.startsWith("home/water_count/counter/")) < float m = message.toFloat(); int x = t.substring(25,26).toInt(); if (m >-1 && m -1 && x <2) < counter[x]. value = m; >publish_message("home/water_count/counter/" + t.substring(25,26), counter[x].value , true); > > > void setup() < //Serial.begin(9600); WiFi. on(); WiFi.connect(); if (waitFor(WiFi.ready, 5000)) for (int i=0; i < 2; i++) < pinMode(valve[i].pin, OUTPUT); digitalWrite(valve[i].pin, valve[i].state); pinMode(counter[i]. pin, INPUT); pinMode(sensor[i].pin, INPUT); counter[i].state = digitalRead(counter[i].pin); pinMode(pressure[i], AN_INPUT); >pinMode(A4, INPUT_PULLUP); display. begin(SSD1306_SWITCHCAPVCC, 0x3C); // инициализируем с I2C addr 0x3C (для 128×64) display.clearDisplay(); // очищаем экран и буфер //Particle. connect(); > void loop() < currentMillis = millis(); // проверяем наличие сети и подключения к MQTT брокеру if (currentMillis – previous_conected >= 30000 || previous_conected > currentMillis) < previous_conected = currentMillis; if (! client.isConnected() & wifi_uptime >60) < mqtt_connect(); >publish_message("home/water_count/rssi", WiFi.RSSI(), true); > if (currentMillis – previous_wifi_uptime >= 1000 || previous_wifi_uptime > currentMillis) < previous_wifi_uptime = currentMillis; WiFi. ready() ? wifi_uptime++ : wifi_uptime = 0; //praca z przyciskiem i wyświetlaczem int fg = digitalRead(A4); if (display_timeout >0) < display_timeout -= 1; if (display_timeout == 0) < display. clearDisplay(); display.display(); >> if (fg == 0) < if (display_timeout == 0) < display.clearDisplay(); // czyści ekran i bufor display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(0,0); display.print("C="); display.println(counter[0].value, 4); display. setCursor(0,16); display.print("H="); display.println(counter[1].value, 4); display.setCursor(0,32); display.print("Valve="); display.print(valve[0].state); display.print("|"); display. println(valve[1].state); display.setCursor(0,48); display. print("Sensor="); display.print(sensor[0].state); display.print("|"); display.println(sensor[1].state); display. display(); >display_timeout = 10; > > //sprawdzenie licznika if (currentMillis – previous_counter_read >= 500 || previous_counter_read > currentMillis) < previous_counter_read = currentMillis; for (int i=0; i < 2; i++) < byte count_state = digitalRead(counter[i]. pin); if (count_state != counter[i]. state) < counter[i].state = count_state; if (count_state == 0) < counter[i].value += 0.01; char buf18[30]; sprintf(buf18, "home/water_count/counter/%d", i); publish_message(buf18 , counter[i]. value, true); >> // // работаем с датчиком протечки byte sensor_state = digitalRead(sensor[i]. pin); if (sensor_state != sensor[i].state) // < sensor[i].state = sensor_state; sensor[i].timeout = SENSOR_TIMEOUT; >if (sensor[i].timeout > 0) < sensor[i]. timeout -= 1; if (sensor[i].timeout == 0) < char buf18[30]; sprintf(buf18, "home/water_count/sensor/%d", i); publish_message(buf18 , sensor[i].state, true); if (sensor[i]. state == 0) < set_valve(0, 1); //zamknij oba zawory set_valve(1, 1); //zamknij oba zawory >> > > // temp onewire if (currentMillis – start_temp_timer >= 299000 || start_temp_timer > currentMillis) < //стартуем расчет start_temp_timer = currentMillis; presense0 = start_temp0(); presense1 = start_temp1(); >if (currentMillis – read_temp_timer >= 300000 || read_temp_timer > currentMillis) > //Particle.process(); client.loop(); > void mqtt_connect() < if (client.connect("water_count")) < //подпись на spark и публикуем послднее состояние client.subscribe("home/water_count/spark/set"); publish_message("home/water_count/spark", Particle.connected() ? 1 : 0, true); client.subscribe("home/water_count/valve/+/set"); client.subscribe("home/water_count/counter/+/set"); >> bool start_temp0() < if ( !ds0. search(addr0)) < ds0.reset_search(); return false;>ds0.reset_search(); if (OneWire::crc8(addr0, 7) != addr0[7]) < return false;>ds0.reset(); ds0.select(addr0); ds0. write(0x44, 0); return true; > bool start_temp1() < if ( !ds1. search(addr1)) < ds1.reset_search(); return false;>ds1.reset_search(); if (OneWire::crc8(addr1, 7) != addr1[7]) < return false;>ds1. reset(); ds1.select(addr1); ds1.write(0x44, 0); return true; > bool read_temp0() < //delay(1000); ds0. reset(); ds0.select(addr0); ds0.write(0xBE, 0); for (int i = 0; i < 9; i++) < data[i] = ds0.read(); >int16_t raw = (data[1] 100) return false; publish_message("home/water_count/temp/0", celsius, false); //Serial. println(celsius); ds0. reset_search(); return true; > bool read_temp1() < //delay(1000); ds1.reset(); ds1.select(addr1); ds1.write(0xBE, 0); for (int i = 0; i < 9; i++) < data[i] = ds1. read(); >int16_t raw = (data[1] 100) return false; publish_message("home/water_count/temp/1", celsius, false); //Serial.println(celsius); ds1.reset_search(); return true; > void set_valve(int vlv, byte state) < valve[vlv]. state = state; digitalWrite(valve[vlv].pin, state); char buf26[26]; sprintf(buf26, "home/water_count/valve/%d", vlv); publish_message(buf26 , state , true); >
Подключение к брокеру через MQTT. Мониторинг датчиков и отправка событий и значений в соответствующие ветки mqtt. Например, home/water_count/valve/0 – контроль холодной воды. home/water_count/counter/0 – показания счетчика охлажденной воды.
Сборка
Мы начинаем собирать систему в соответствии с нашими требованиями. Добавляем второй комплект смесителей:
Просто вставьте провода в пустые гнезда разъемов:
И соединяем два устройства вместе:
Берем радиобазу:
Отсоединяем дополнительный блок датчиков и подключаем радиобазу:
Подсоединяем батарейные блоки:
И собираем все вместе:
Строительный блок. Кстати, мы забыли подключить краны и проводной датчик. И при необходимости внешний источник питания – при его использовании не расходуется заряд батареи, а беспроводные датчики опрашиваются постоянно. При питании от батарейки есть небольшая задержка, от 1 секунды до 5 секунд, в реакции на нажатие кнопки на беспроводном датчике или затопление.
Сначала делаем самое простое – прикручиваем монтажную панель двумя винтами:
И вешаем на нее контроллер:
Снимаем краны:
Я это сделал, чтобы облегчить установку на уже готовую систему, так как заслонка слишком выступала – ее установка была не очень удобной.
Обматываем разъемы дымовой изолентой:
Мы перекрываем воду и думаем, куда поставить кран, чтобы не пришлось вызывать сантехника для переустановки всей системы?
У меня есть немного места за счетчиком – там, где находится обратный клапан. Смотрим на нижнюю трубу (процесс установки крана горячей воды я не снимал):
откручиваем то, что открутили. Видим свободную резьбу – фумлентная обмотка 🙂
Накручиваем вентиль на кран:
И прикручиваем все это дело обратно к счетчику.
Обрезаем соединительную трубу – кран занял свое место, не перекладывать же из-за этого все остальные трубы?
И ставим ее на место:
Прикручиваем мотор и приводим в порядок провода:
Проверяем
Трубу я не прорвал, но о небольшом потопе в ванной пришлось задуматься:
Приобрести систему можно на официальном сайте.
Цена зависит от комплектации, например, самая дешевая (TH00) обойдется в 6 220 рублей. В него входят два проводных датчика и один кран. Дополнительный кран (TK12) стоит еще 2 390 рублей. Таким образом, самое бюджетное решение для квартиры с горячей и холодной водой – 8 610 рублей.
Тот вариант системы, который был у меня – обойдется в 15 990 рублей. Он включает в себя два крана и четыре датчика – два проводных и два радио.
Каков результат?
Цель достигнута. Когда срабатывает датчик протечки, я получаю текстовое уведомление типа "Владелец, у нас потоп!", и клапан автоматически закрывается менее чем за 30 секунд.
У меня также есть возможность отключить автоматическое открытие и закрытие клапана нажатием кнопок на пульте дистанционного управления, со смартфона или через веб-браузер.
Срабатывание каждого датчика и устройства записывается в журнал.
В данном случае мне не пришлось писать никакого кода, и повторить это решение самостоятельно вполне доступно для большинства (кроме установки клапанов на трубы, конечно).
Настройка системы, зная, чего вы хотите, занимает максимум 10 минут. Сюда входит активация датчика и радиореле, создание всех сценариев.
Очевидно, что в том виде, в каком он показан на фотографиях, в реальности он не будет работать долго и надежно.
Блок питания для привода клапана, радиореле и сам датчик должны быть размещены в пластиковых коробках с хоть какой-то степенью защиты.
Плюс ко всему, уже есть различные идеи по развитию системы, например, дублирование оповещения о световой сигнализации, периодическая "тренировка" клапана, чтобы он "не застаивался" и т.д. Кстати, лично у меня возникают серьезные сомнения в необходимости функции аварийного питания электромагнитного клапана, которой так кичатся некоторые "покупные" противотопочные комплекты.
Другими словами – аппетит растет по мере еды.
Хорошо то, что вам не нужно вызывать "сертифицированных" специалистов для модификации системы, чтобы она заработала. Вы можете легко сделать все сами, используя простые правила настройки универсального контроллера.
Немного о ценах:
NS-1000 Nanoserver – 44 долл.
Магнитоконтактный датчик MD-209R – $13
Радиореле – $10
Клапан – $15
Итого (без учета доставки) = $82.
Не так уж и дешево. Но если не учитывать, что наносервер используется не только для защиты от наводнений. Ведь с его помощью реализуется охранная и пожарная сигнализация и другие функции.
В процессе реализации, уже купив клапан, я обнаружил, что существуют электроприводы, которые можно устанавливать на обычные шаровые краны с ручным управлением.
Дополнительным и немаловажным преимуществом такого подхода является то, что в аварийной ситуации ручное управление клапаном может быть восстановлено в течение нескольких минут.
Я сразу же отказался от врезки дополнительного запорного клапана в систему водоснабжения и заказал такой привод. С нетерпением жду его появления.
Обновление 2:
Во время нанесения соли производитель контроллера заявил о наличии детектора утечки.
Из информации следует, что в датчике используется принцип бесконтактного обнаружения воды, что само по себе довольно необычно. Интересно также отметить, что он не является "брендоспецифичным" и может использоваться не только с системой "Умный дом 1-М", но и с любой системой, использующей протокол PowerCode. Фактически, он посылает аналогичный пакет, что и датчик MD-209R, который я использовал для защиты от протечек.
Цена также представляется сопоставимой – 9,9 долларов США.
- умный дом
- DIY
- защита от протечек воды
- управление устройством
- Гаджеты
- Умный дом
- Интернет вещей
- Сделай сам или сделай сам