Блог

Система контроля протечек DIY

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

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

Куплены две штуки, доставили домой курьером. Цена на момент покупки составила 1668 руб. за оба.

Реле, которое переворачивает полярность. Цена на момент покупки 320 руб. за две штуки.
Sonoff 4ch DIY, версия на 7-32V, для того чтобы питать тем же, 12ти вольтовым блоком питания, что и запорные манипуляторы. Цена: 1042 руб.

Также куплены 2 zigbee датчика протечки от xiaomi. Еще для теста купил датчик протечки, работающий по rf433 в магазине Лента, но пока с ним не срослось, расскажу об этом в конце.

Sonoff перешил на прошивку Sonoff-Tasmota, вот инструкция по подключению к плате: https://github.com/arendst/Sonoff-Tasmota/wiki/Sonoff-4CH-DIY. Только я питал плату по usb и контакты от uart не припаивал к микросхеме, а просто приложил к нужным выводам микрухи. Настроил по инструкции выше, то есть указал тип модуля Generic и расставил вручную gpio.

Важный момент. Прошилось и настроилось все влет, но поначалу я не мог понять почему релюхи самопроизвольно перещелкиваются. Пишешь команду в mqtt топик, реле реагирует, включается, но потом само вырубается. Я даже перешил плату на прошивку easyesp, но поведение не изменилось. Оказалось, что есть несколько режимов работы всех этих diy плат от сонофа и регулируются режимы кнопкой, расположенной рядом с usb коннектором. Я до конца не понял сколько этих режимов, но суть их в том, что по умолчанию стоит режим, когда при получении команды реле включается и сразу возвращается в выключенное состояние. Понажимав на кнопку, методом тыка, добился нормальной работы. Причем, это не программная настройка и режим работы сохраняется при перепрошивке платы и тем более при ее перезагрузке или обесточивании.

Далее про реле, которое переворачивает полярность. Смысл его работы такой, что при подаче напряжения на определенные ноги с одного реле сонофа на выходе получаем плюс-минус, при добавлении напряжения со второго реле сонофа (плюс на ногу IN) полярность переворачивается. Поэтому и понадобился соноф с 4мя реле на борту.

Вот схема, извиняюсь за качество, обвел в фотошопе плюс красным, минус зеленым, иначе вообще не понятно было:

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

Теперь программная часть.

Прописал такие свичи:

- platform: mqtt name: water1-c state_topic: "stat/sonoff4waterguard/POWER1" command_topic: "cmnd/sonoff4waterguard/power1" payload_on: "ON" payload_off: "OFF" qos: 1 retain: true - platform: mqtt name: water2-c state_topic: "stat/sonoff4waterguard/POWER2" command_topic: "cmnd/sonoff4waterguard/power2" payload_on: "ON" payload_off: "OFF" qos: 1 retain: true - platform: mqtt name: water1-h state_topic: "stat/sonoff4waterguard/POWER3" command_topic: "cmnd/sonoff4waterguard/power3" payload_on: "ON" payload_off: "OFF" qos: 1 retain: true - platform: mqtt name: water2-h state_topic: "stat/sonoff4waterguard/POWER4" command_topic: "cmnd/sonoff4waterguard/power4" payload_on: "ON" payload_off: "OFF" qos: 1 retain: true

Из них на платформе темплате собрал 2 свича, которые отрабатываю сценарий с переворачиванием полярности. Для контроля состояния сделал input_boolean.

input_boolean.yaml waterguard_cold: icon: mdi:water-pump name: Холодная вода waterguard_hot: icon: mdi:water-pump name: Горячая вода switches.yaml - platform: template switches: coldwaterguard: value_template: '{{ states("input_boolean.waterguard_cold") }}' turn_on: - service: switch.turn_on entity_id: switch.water1_c - service: switch.turn_on entity_id: switch.water2_c - delay: 00:00:20 - service: switch.turn_off entity_id: switch.water1_c - service: switch.turn_off entity_id: switch.water2_c - service: input_boolean.turn_on entity_id: input_boolean.waterguard_cold turn_off: - service: switch.turn_on entity_id: switch.water1_c - delay: 00:00:20 - service: switch.turn_off entity_id: switch.water1_c - service: input_boolean.turn_off entity_id: input_boolean.waterguard_cold hotwaterguard: value_template: '{{ states("input_boolean.waterguard_hot") }}' turn_on: - service: switch.turn_on entity_id: switch.water1_h - service: switch.turn_on entity_id: switch.water2_h - delay: 00:00:20 - service: switch.turn_off entity_id: switch.water1_h - service: switch.turn_off entity_id: switch.water2_h - service: input_boolean.turn_on entity_id: input_boolean.waterguard_hot turn_off: - service: switch.turn_on entity_id: switch.water1_h - delay: 00:00:20 - service: switch.turn_off entity_id: switch.water1_h - service: input_boolean.turn_off entity_id: input_boolean.waterguard_hot

Необходимо сохранять состояния выключателей после перезагрузки. Иначе может возникнуть следующая ситуация: Допустим, что вода перекрыта и состояние выключателя OFF. Перекрыта по случаю протечки или, к примеру, планового отключения горячей воды. Произошла перезагрузка HA и после перезагрузки состояние выключателей встало в ON. А на самом деле они выключены. И тут наступает дата и срабатывает автоматизация, которая у меня 2 раза в месяц прокручивает краны (выключает и включает). Условием для запуска являются -. И что произойдет? После автоматизации кран будет открыт и зальет соседей или начнет подавать горячую воду из моего бойлера на весь стояк.

Решение нашел. Очень красивая автоматизация, собранная в package, вот линк:

https://github.com/dale3h/homeassistant-config/blob/master/packages/drop-in/persistence.yaml

Тем компонентам, у которых надо сохранять и восстанавливать после перезагрузки состояние в файле cusmomize.yaml прописываем опцию persistent: true и их состояние после этого сохраняется (используется mqtt для этого). Поддерживаются следующие компоненты: automation, input_boolean, input_select, input_number, input_text, light, и switch.

cusmomize.yaml switch.coldwaterguard: persistent: true switch.hotwaterguard: persistent: true input_boolean.waterguard_hot: persistent: true input_boolean.waterguard_cold: persistent: true

Ну и самое главное, автоматизации:

automations.yaml - alias: Water Leak Sensor 1 Alarm trigger: - platform: state entity_id: binary_sensor.water_leak_sensor_1 from: 'off' to: 'on' action: - service: notify.telegram_all data: message: 'ВНИМАНИЕ!!! Протечка воды в туалете. ВНИМАНИЕ!!!' - service: switch.turn_off entity_id: switch.coldwaterguard - service: switch.turn_off entity_id: switch.hotwaterguard - alias: Water Leak Sensor 2 Alarm trigger: - platform: state entity_id: binary_sensor.water_leak_sensor_2 from: 'off' to: 'on' action: - service: notify.telegram_all data: message: 'ВНИМАНИЕ!!! Протечка воды на кухне. ВНИМАНИЕ!!!' - service: switch.turn_off entity_id: switch.coldwaterguard - service: switch.turn_off entity_id: switch.hotwaterguard - alias: Cold Water Valve OFF-ON every 5th and 20th day of month trigger: - platform: time at: '01:15:00' condition: - condition: and conditions: - condition: state entity_id: 'switch.coldwaterguard' state: 'on' - condition: or conditions: - condition: template value_template: '{{ now().strftime("%d") == "05" }}' - condition: template value_template: '{{ now().strftime("%d") == "20" }}' action: - service: switch.turn_off entity_id: switch.coldwaterguard - delay: 00:01:00 - service: switch.turn_on entity_id: switch.coldwaterguard - service: notify.telegram_oleg data: message: '-=Вентиль с холодной водой передернули=-' - alias: Hot Water Valve OFF-ON every 5th and 20th day of month trigger: - platform: time at: '01:20:00' condition: - condition: and conditions: - condition: state entity_id: 'switch.hotwaterguard' state: 'on' - condition: or conditions: - condition: template value_template: '{{ now().strftime("%d") == "05" }}' - condition: template value_template: '{{ now().strftime("%d") == "20" }}' action: - service: switch.turn_off entity_id: switch.hotwaterguard - delay: 00:01:00 - service: switch.turn_on entity_id: switch.hotwaterguard - service: notify.telegram_oleg data: message: '-=Вентиль с горячей водой передернули=-'

Доработки.

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

Ну и второй узкий момент, вытекающий из первого. Что если произойдет глобальный (в рамках дома или квартиры) трындец, прорвет воду и вырубится электричество или сгорит роутер или заглючит сервер? В том то и дело, что ничего не произойдет. Поэтому есть мысль сделать систему автономной. Хотя бы в пределах разводки стояка, до ванной и кухни наврятли потяну провода. Для реализации задуманного заказан проводной датчик протечки.

На плате есть свободные GPIO и в прошивке можно настроить автономные автоматизации. Точно не уверен на счет Sonoff-Tasmota, но в espeasy точно можно. Вообщем, как приедет датчик и я с ним разберусь, пост дополню или изменю.

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

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

На этом все.


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

Так описал, в разделе доработки

Сори моя невнимательность, за это отдельное спасибо.

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

+ если креативить дальше можно посмотреть в эту сторону https://sprut.ai/client/article/736">https://sprut.ai/client/articl...

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

Я для себя пока на таком остановился https://gidrolock.ru/production/gidrolock-winner/">https://gidrolock.ru/productio...
Ребята обещали выкатить ещё беспроводную версию, пока ждём..... =)
А твоё решение круто подойдёт под полив и дачу, там не такая зона ответственности и можно немного сэкономить )))

Отличная статья. Сам подобное реализовал на прошивке от espeasy, но реализовал по проводам с обычными датчиками дождя (протечки, капель, осадков или как их там ещё называют). Автоматизацию настроил всю внутри прошивки и так получил автономную защиту. Но вопрос с питание все же открыт, если выключится свет то ничего не сделаешь. 

Кстати, реле можно использовать любое, но нужно двойное, просто паутиной соединить питание 12в с проводами привода и клеммами реле. В реле же 2 положения, в одном получается постойного открытый кран, на срабатывание реле кран закрывается. Только надо чтобы 2 реле одновременно замкнулись, опять же прошивка espeasy этому способствует. 

А для чего реле переворота? Ведь у управляющего все равно два канала используются. Можно было бы просто 1 вкл, 2 выкл закрывается. 1 выкл, 2 вкл открывается. Скриптами настраивать, что бы одновременно оба вкл не были

Да, но в этом случае полярность не переворачивается. Я по крайней мере не придумал, как ее можно таким образом перевернуть. 



Смену полярности лучше всего делать двух групповым реле, но в случае использования двух реле  в 

Sonoff 4ch можно так же с успехом менять полярность без дополнительных релюшек.

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

1000x_image.jpg?1560610118

Что касается радиодатчиков - так и есть они бухтят в эфир пока чувствуют протечку, что весьма не экономно. Есть http://electromost.com/news/dorabotka_radiodatchikov/2018-06-10-176">вариант датчика для самостоятельной сборки правда. Но работает грамотней. шлет посылки по 100мс. раз в 3 секунды, ну и пищит конечно с той же периодичностью. Последняя версия еще и за питанием следит и посылает другой радиокод в случае обнаружения низкого питания. И пискает раз в минуту, так же как автономные датчики дыма. 


Вернуться назад
Вернуться назад