Pull to refresh

Контролируем чистоту воды с Home Assistant

Level of difficultyEasy
Reading time4 min
Views12K

Всем привет! Хочу рассказать о небольшом и довольно простом кейсе использования Home Assistant (далее HA), но на мой взгляд очень полезном. Это контроль ресурса магистральных фильтров. Идея сделать что то такое беспокоила меня давно и вот наконец руки дошли и до этого.

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

Такое количество грязи собирает фильтр за пару месяцев
Такое количество грязи собирает фильтр за пару месяцев

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

Для этого заведем вспомогательное устройство (Настройки -> Устройства и службы -> Вспомогательное) "Число"

Заполняем поля, называем фильтр как удобно, иконку тоже какая нравится, минимальное значение 0, максимальное по-больше, главное чтобы в лимит вписывались максимальные показания счетчика. Режим отображения - поле ввода, шаг естественно 1, единица измерения m³.

Чтобы далеко не ходить, здесь же сразу создадим поле "Дата" для фиксации даты последней замены.

Теперь сделаем скрипт, который записывает в числовое поле текущие показания счетчика, а в поле даты, текущую дату. Для этого зайдем в Настройки -> Автоматизации и сцены -> Скрипты -> Создать новый скрипт, заполняем поля названия и иконки, режим одиночный.

И добавляем действие "Вызвать службу", выбираем службу "Число: Установить значение", в качестве объекта нужно выбрать созданное ранее поле, будут предложены варианты. но вот дальше уже придется переключиться в текстовый режим и модифицировать код следующим образом.

service: input_number.set_value
target:
  entity_id: input_number.filtr_vannaia_gv
data:
  value: "{{ states('sensor.watercounter_vannaia488') }}"

Где в entity_id нужно указать id вспомогательного поля, посмотреть его можно открыв параметры поля. А в value нужно указать идентификатор сенсора счетчика, в моем случае он называется sensor.watercounter_vannaia488.

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

service: input_datetime.set_datetime
target:
  entity_id: input_datetime.data_poslednei_zameny_gv_vannaia
data:
  datetime: "{{ now() }}"

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

template:
  - sensor:
    - name: "Фильтр ГВ Ванная отработал"
      state: >
        {% set hot_water_488 = states('sensor.watercounter_vannaia488') | float %}
        {% set hot_water_488_state = states('input_number.filtr_vannaia_gv') | float %}
        {{ (hot_water_488 - hot_water_488_state) | round(2, default=0) }}
      unit_of_measurement: m³
      device_class: water
      state_class: measurement 

Если раздел template у Вас уже существует, то добавляем только со следующей строчки в него. Имя здесь указываем произвольное, потом оно понадобится для вывода показателей. Объявляем две переменные, первая ссылается на сенсор счетчика, вторая на наше поле, затем вычисляется разница между ними.

И раз мы уже открыли configuration.yaml давайте сразу еще создадим сенсор который будет говорить что картридж пора менять.

template:
  - binary_sensor:
      - name: Фильтр ГВ ванная статус
        device_class: problem
        state: >
            {{ states('sensor.filtr_gv_vannaia_otrabotal')|float(0) > 10}} 

В нем проверяются показания сенсора из предыдущего шага и если значение больше 10 (m³) таким я определил предел работы картриджа, то сенсор становится в true. Идентификатор сенсора "sensor.filtr_gv_vannaia_otrabotal" это название сенсора из предыдущего шага, чтобы узнать как HA сделал транслитерацию, можно найти его в списке и открыть параметры, оттуда скопировать идентификатор. Если все сделали правильно, после перезагрузки HA сенсоры можно начать использовать.

Для каждого фильтра сделал такой блок.

Где видно сколько он отработал, есть кнопка запуска скрипта замены, статус фильтра и дата последней замены. Так же бинарный сенсор я использую на основной странице, где отображаются различные проблемы, когда он приобретает статус true, то начинает там отображаться.

type: entity-filter
entities:
  - binary_sensor.filtr_gv_vannaia_status

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

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

Tags:
Hubs:
Total votes 20: ↑16 and ↓4+19
Comments46

Articles