Добавить в корзинуПозвонить
Найти в Дзене

Статья 11. Изменяемые пороги для уведомлений через панель (dashboard) в Home Assistant

В этой статье мы создадим вспомогательную переменную, которая будет использоваться как порог для уведомления, с возможностью изменения прямо с дашборда без редактирования конфигов и перезагрузки Home Assistant. Вспомогательные объекты не привязаны к устройствам, они содержат заданные значения или вычисляются из данных устройств. Например, есть 5 датчиков открытых дверей/окон, вы можете создать бинарный сенсор (может быть только в состояниях on/off) и он будет off если все датчики указывают на то, что двери и окна закрыты, а если хотя бы одно окно открыто, то он будет on. Алерт в таком случае можно настроить на этот датчик, и не писать более сложные условия, учитывающие статус всех 5 датчиков. В какой ситуации применение оправдано: Вместо того чтобы каждый раз править код, мы сделаем регулируемый порог через элемент управления на панели. Нам потребуется два вспомогательных сенсора - первый числовой со значением порога, второй бинарный (принимает значение on/off), который будет индикатор
Оглавление

Часть 1. Что делаем и зачем это нужно?

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

Вспомогательные объекты не привязаны к устройствам, они содержат заданные значения или вычисляются из данных устройств. Например, есть 5 датчиков открытых дверей/окон, вы можете создать бинарный сенсор (может быть только в состояниях on/off) и он будет off если все датчики указывают на то, что двери и окна закрыты, а если хотя бы одно окно открыто, то он будет on. Алерт в таком случае можно настроить на этот датчик, и не писать более сложные условия, учитывающие статус всех 5 датчиков.

В какой ситуации применение оправдано:

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

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

Часть 2. Создаем вспомогательные сенсоры для порога

Нам потребуется два вспомогательных сенсора - первый числовой со значением порога, второй бинарный (принимает значение on/off), который будет индикатором преодолен порог или нет для алерта.

Переходим в Настройки - Устройства и Службы - вкладка Вспомогательное:

-2

Создаем первый вспомогательный датчик с типом число

-3

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

Изменение происходит с помощью слайдера (ползунок), максимальное и минимальное на этом ползунке и задается при создании.

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

-4

Нажимаем на шестеренку и сохраняем идентификатор объекта:

-5
-6

Создаем второй вспомогательный датчик с типом template (шаблон)

Создаем вспомогательный объект - шаблон (template) - бинарный сенсор. Прописываем в состоянии код ниже. sensor - это датчик, input_number - это наше вспомогательное число. Название, например, "Температура ниже заданного порога".

{{ states('sensor.zal_1_temperatura_vody_temperatura_vody_bassein_1') | float < states('input_number.temperatura_vody') | float }}
-7

Если условие в состоянии не выполняется, то бинарный датчик будет выключен, если условие выполнится - включится.

Также шаблонный бинарный сенсор имеет статус доступности и на его статус тоже можно повести автоматизацию с алертом. В примере выше, если датчик sensor.zal_1... недоступен, то и бинарный сенсор тоже станет недоступен.

Часть 3. Добавляем редактирование порога на панель управления и отображение наличия проблемы

Открываем ранее созданную панель, заходим в редактирование и добавляем в объектах созданное число:

-8

На панели появится блок с текущим значением:

-9

Кликнув на блок откроется история изменения и слайдер для изменения значения:

-10

Рядом добавляем еще один объект - ищем по названию бинарного шаблона.

Итог должен получится такой (на этом месте я понял, что порог не надо называть "Температура воды" и переименовал в "Нижний порог температуры воды"):

-11

Часть 4. Автоматизации с использованием порога и бинарного сенсора

Тут всё уже знакомо, делаем новые автоматизации, на начало проблемы и на завершение, на недоступность делать не будем, так как этот вариант уже покрыт алертами на недоступность датчика и устройства целиком.

Первая автоматизация на начало проблемы, в когда создаем Объект - Состояние, выбираем бинарный датчик и переход из состояния ОК в Проблема:

-12

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

Отправляемое сообщение немного редактируем, ранее порог был зашит в код, а теперь он берется из переменной - {{ '🌡️ Температура НИЖЕ ' ~ states('input_number.temperatura_vody') ~ '°C' }}

🚨 *СРАБОТАЛА АВТОМАТИЗАЦИЯ*
{% set temp = states('sensor.zal_1_temperatura_vody_temperatura_vody_bassein_1') | float | round(1) %}
{{ '🌡️ Температура НИЖЕ ' ~ states('input_number.temperatura_vody') ~ '°C' }}
*Датчик:* {{ state_attr('sensor.zal_1_temperatura_vody_temperatura_vody_bassein_1', 'friendly_name') }}
*Текущее значение:* {{ temp }}°C
*Время срабатывания:* {{ now().strftime('%d.%m.%Y %H:%M:%S') }}

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

-13

В дублировании удаляем выбранные состояния и выбираем с Проблемы на ОК.

Сообщение также копируем из ранее созданной автоматизации, добавив заданное значение порога - *Заданный порог:* {{ states('input_number.temperatura_vody') }}°C

🚨 *СРАБОТАЛА АВТОМАТИЗАЦИЯ*
Температура воды пришла в норму
*Датчик:* {{ state_attr('sensor.zal_1_temperatura_vody_temperatura_vody_bassein_1', 'friendly_name') }}
*Текущее значение:* {{ states('sensor.zal_1_temperatura_vody_temperatura_vody_bassein_1') | float | round(1) }}°C
*Заданный порог:* {{ states('input_number.temperatura_vody') }}°C
*Время срабатывания:* {{ now().strftime('%d.%m.%Y %H:%M:%S') }}

Итог.

Добавили возможность изменения порогов срабатывания алертов прямо с панели без редактирования автоматизаций и перезагрузки Home Assistant, не забыв про настройку отправки сообщений в телеграмм и почту.

Минусы прежнего подхода:

  • ❌ Для изменения порога нужно было править YAML
  • ❌ Перезагружать Home Assistant после каждого изменения
  • ❌ Риск ошибок в синтаксисе
  • ❌ Нет истории изменений порога

Плюсы нового подхода:

  • ✅ Меняем порог ползунком за 1 секунду
  • ✅ Без перезагрузок и правки кода
  • ✅ История изменений порога сохраняется
  • ✅ Визуальная индикация на панели
  • ✅ Автоматические уведомления при проблемах

Анонс.

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