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

07 июня 2019, 13:40

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

Ни в коем случае не претендую на то, что моя система чертовски хороша, так как она далеко не идеальна, а просто делюсь своей реализацией. Цель была сделать систему универсальной, мобильной и не дорогой, а также интегрировать ее в 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, вот линк: 

Тем компонентам, у которых надо сохранять и восстанавливать после перезагрузки состояние в файле 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 точно можно. Вообщем, как приедет датчик и я с ним разберусь, пост дополню или изменю.

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

Еще про датчики. В магазине Лента обнаружен такой датчик протечки GAL SHW-1005. Работает по радио на 433 Мг. У меня есть бридж Sonoff RFBridge для отлова радиодатчиков и пультов. Честно говоря простаивает без дела пока. Вот хотел задействовать. Так этот датчик при замыкании загорается красным светодиодом и молчит. Когда его вытаскиваешь из воды посылает код. Я написал в техподдержку о проблеме и получил следующий ответ:

Здравствуйте. Датчики GAL корректно работают с системами «Умный день» серий GAL SH-1000  SH-1200. Алгоритм работы датчика протечки: при замыкании контактов загорается светодиод и непрерывно отправляется сигнал, при размыкании сигнал пропадает. Возможно Ваше устройство предназначенное для работы с пультом управления , считает долгую посылку сигнала за нажатие и удержание кнопки на пульте в результате чего Вы получаете сообщение только при пропадании сигнала.

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

На этом все.


Все новости мира умных домов - t.me/SprutAI_News

Остались вопросы? Мы в Telegram - t.me/soprut

  1. Олег Челбаев (sprut)
    Олег Челбаев (sprut) 18 дней назад

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

    • Ружинский Олег (acidquest)

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

      • Олег Челбаев (sprut)
        Олег Челбаев (sprut) 18 дней назад

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

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

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

        • Ружинский Олег (acidquest)

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

          • Олег Челбаев (sprut)
            Олег Челбаев (sprut) 18 дней назад
            Я для себя пока на таком остановился https://gidrolock.ru/productio...
            Ребята обещали выкатить ещё беспроводную версию, пока ждём..... =)
            А твоё решение круто подойдёт под полив и дачу, там не такая зона ответственности и можно немного сэкономить )))

  2. (654549545)
    (654549545) 18 дней назад

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

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

  3. (Brain)
    (Brain) 18 дней назад

    Вопрос с поляризацией я решил двумя умными розетками от сяоми. Кран бугатти на 220. Все это реализовано в бойлерной.
    Информацию с 9 датчиков протечки через шлюз той же конторы  передаю в HA.
    В итоге вообще ничего не паял, не прошивал и прочее.
    Кстати чтобы не коксовело, сами знаете какая у нас вода, раз в 2 недели по сценарию глубокой ночью кран заставляю закрыть и через пару минут открыть.

    И да, насчет автоматизации. Рекомендую второй строчкой любого сценария использовать :

    - alias: bathroom leak
      initial_state: true


    • Ружинский Олег (acidquest)

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

  4. (Silverow)
    (Silverow) 13 дней назад

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

    • Ружинский Олег (acidquest)

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

  5. Александр Вайдуров (AlexAW)

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

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

    1000x_image.jpg?1560610118
  6. Александр Вайдуров (AlexAW)

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

К списку блогов

Скидки для сообщества

MI-DOM

+7 977 282-80-53
Промокод:
SPRUTAI
Размер скидки:
5%

Похожие записи

20 января 2019, 17:39
Создание очень бюджетной автоматизации рулонных штор
19 апреля 2019, 20:53
Требуется ваше мнение!
13 февраля 2019, 22:00
Подключение радио на Xiaomi Gateway к Home Assistant c дальнейшим использованием в автоматизациях
06 февраля 2019, 12:02
Автоматизированное открытие/закрытие окна
21 марта 2019, 11:59
Самое важное из апдейта Home Assistant 0.9 от 20.03.19.
21 февраля 2019, 21:12
Самое важное из апдейта Home Assistant 0.88 от 20.02.19.
04 апреля 2019, 12:45
Самое важное из апдейта Home Assistant 0.91-0.91.4 от 03.04.19.
07 февраля 2019, 21:12
Самое важное из апдейта Home Assistant 0.87 от 06.02.19.
19 января 2019, 20:49
Делюсь новостями по проекту.
31 марта 2019, 11:37
Нативный HomeKit датчик температуры и влажности своими руками самый бюджетный вариант.