Ни в коем случае не претендую на то, что моя система чертовски хороша, так как она далеко не идеальна, а просто делюсь своей реализацией. Цель была сделать систему универсальной, мобильной и не дорогой, а также интегрировать ее в Home Assistant. Поэтому я не стал рассматривать моторизованные краны, которые устанавливаются взамен имеющимся, а решил использовать устройства, которые устанавливаются поверх существующих кранов. На али куплены следующие компоненты:
Собран крепко, внутри шестерни металлические, смазаны нормально. В крайних положениях кнопка, которая отключает манипулятор. При подаче напряжения 12 вольт закрывает, при изменении полярности крутит в другую сторону, то есть открывает. Есть кольцо, за которое можно потянуть и крутить вручную. Мои, вообщем то, тугие краны проворочивает без проблем.
Куплены две штуки, доставили домой курьером. Цена на момент покупки составила 1668 руб. за оба.
Также куплены 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...
Согласен на счёт того, что основная автоматика должна быть в сонофе, как доедет проводной датчик, доделаю. И на счёт китайских кранов тоже согласен, поэтому кран оставил бугатти, а автоматика вторым слоем. Хотя, я думаю что в массовых системах, типа Нептун и др. не меньше китайской автоматики используется. Глобализация емое
Ребята обещали выкатить ещё беспроводную версию, пока ждём..... =)
А твоё решение круто подойдёт под полив и дачу, там не такая зона ответственности и можно немного сэкономить )))
Отличная статья. Сам подобное реализовал на прошивке от espeasy, но реализовал по проводам с обычными датчиками дождя (протечки, капель, осадков или как их там ещё называют). Автоматизацию настроил всю внутри прошивки и так получил автономную защиту. Но вопрос с питание все же открыт, если выключится свет то ничего не сделаешь.
Кстати, реле можно использовать любое, но нужно двойное, просто паутиной соединить питание 12в с проводами привода и клеммами реле. В реле же 2 положения, в одном получается постойного открытый кран, на срабатывание реле кран закрывается. Только надо чтобы 2 реле одновременно замкнулись, опять же прошивка espeasy этому способствует.
А для чего реле переворота? Ведь у управляющего все равно два канала используются. Можно было бы просто 1 вкл, 2 выкл закрывается. 1 выкл, 2 вкл открывается. Скриптами настраивать, что бы одновременно оба вкл не были
Да, но в этом случае полярность не переворачивается. Я по крайней мере не придумал, как ее можно таким образом перевернуть.
Смену полярности лучше всего делать двух групповым реле, но в случае использования двух реле в
Sonoff 4ch можно так же с успехом менять полярность без дополнительных релюшек.
В этой схеме для смены полярности нужно одновременно включать и выключать оба реле, но для более стабильного потребления тока устройством лучше было бы одним реле включать одну полярность другим другую. этого легко достичь просто поменяв местами нормально замкнутый и нормально разомкнутый контакт у одной из релюшек. Данная схема защищена от коротких замыканий. В каком бы сочетании реле не были включены короткого замыкания не будет.
Что касается радиодатчиков - так и есть они бухтят в эфир пока чувствуют протечку, что весьма не экономно. Есть http://electromost.com/news/dorabotka_radiodatchikov/2018-06-10-176">вариант датчика для самостоятельной сборки правда. Но работает грамотней. шлет посылки по 100мс. раз в 3 секунды, ну и пищит конечно с той же периодичностью. Последняя версия еще и за питанием следит и посылает другой радиокод в случае обнаружения низкого питания. И пискает раз в минуту, так же как автономные датчики дыма.