Часть 1. Что делаем и зачем это нужно?
В этой статье мы создадим вспомогательную переменную, которая будет использоваться как порог для уведомления, с возможностью изменения прямо с дашборда без редактирования конфигов и перезагрузки Home Assistant.
Вспомогательные объекты не привязаны к устройствам, они содержат заданные значения или вычисляются из данных устройств. Например, есть 5 датчиков открытых дверей/окон, вы можете создать бинарный сенсор (может быть только в состояниях on/off) и он будет off если все датчики указывают на то, что двери и окна закрыты, а если хотя бы одно окно открыто, то он будет on. Алерт в таком случае можно настроить на этот датчик, и не писать более сложные условия, учитывающие статус всех 5 датчиков.
В какой ситуации применение оправдано:
- бассейн для малька, передержки или предпродажной подготовки и в нем в разное время плавают разные виды вид, которые требуют, например, разной температуры воды;
- плотность посадки - рыба растет, плотность посадки растет, кислород падает, можно уменьшить порог срабатывания уведомления до продажи, расселения;
- температура воды летом у вас больше чем зимой, сезонно изменяем порог;
- лечение рыбы - некоторые препараты снижают кислород;
- и др.
Вместо того чтобы каждый раз править код, мы сделаем регулируемый порог через элемент управления на панели.
Часть 2. Создаем вспомогательные сенсоры для порога
Нам потребуется два вспомогательных сенсора - первый числовой со значением порога, второй бинарный (принимает значение on/off), который будет индикатором преодолен порог или нет для алерта.
Переходим в Настройки - Устройства и Службы - вкладка Вспомогательное:
Создаем первый вспомогательный датчик с типом число
Уже дописав статью почти до конца понял, что называть порог просто "Температура воды" не правильно, путает и на панели по названию не очевидно, что есть что, поэтому не повторяйте моей ошибки сразу пишите название похожим на "Нижний порог температуры воды".
Изменение происходит с помощью слайдера (ползунок), максимальное и минимальное на этом ползунке и задается при создании.
Первоначально значение устанавливается минимальное, изменить можно в этом же меню, кликаем на созданное число и перетаскиваем в необходимое нам.
Нажимаем на шестеренку и сохраняем идентификатор объекта:
Создаем второй вспомогательный датчик с типом template (шаблон)
Создаем вспомогательный объект - шаблон (template) - бинарный сенсор. Прописываем в состоянии код ниже. sensor - это датчик, input_number - это наше вспомогательное число. Название, например, "Температура ниже заданного порога".
{{ states('sensor.zal_1_temperatura_vody_temperatura_vody_bassein_1') | float < states('input_number.temperatura_vody') | float }}
Если условие в состоянии не выполняется, то бинарный датчик будет выключен, если условие выполнится - включится.
Также шаблонный бинарный сенсор имеет статус доступности и на его статус тоже можно повести автоматизацию с алертом. В примере выше, если датчик sensor.zal_1... недоступен, то и бинарный сенсор тоже станет недоступен.
Часть 3. Добавляем редактирование порога на панель управления и отображение наличия проблемы
Открываем ранее созданную панель, заходим в редактирование и добавляем в объектах созданное число:
На панели появится блок с текущим значением:
Кликнув на блок откроется история изменения и слайдер для изменения значения:
Рядом добавляем еще один объект - ищем по названию бинарного шаблона.
Итог должен получится такой (на этом месте я понял, что порог не надо называть "Температура воды" и переименовал в "Нижний порог температуры воды"):
Часть 4. Автоматизации с использованием порога и бинарного сенсора
Тут всё уже знакомо, делаем новые автоматизации, на начало проблемы и на завершение, на недоступность делать не будем, так как этот вариант уже покрыт алертами на недоступность датчика и устройства целиком.
Первая автоматизация на начало проблемы, в когда создаем Объект - Состояние, выбираем бинарный датчик и переход из состояния ОК в Проблема:
В тогда отправляем сообщение в телеграмм и почту, копируем из уже настроенных автоматизаций.
Отправляемое сообщение немного редактируем, ранее порог был зашит в код, а теперь он берется из переменной - {{ '🌡️ Температура НИЖЕ ' ~ 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') }}
Вторая автоматизация на возвращение температуры воды в необходимые нам пределы, не забываем пользоваться дублированием - это заметно ускорит создание.
В дублировании удаляем выбранные состояния и выбираем с Проблемы на ОК.
Сообщение также копируем из ранее созданной автоматизации, добавив заданное значение порога - *Заданный порог:* {{ 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 устройствами с высокой нагрузкой.