Здравия всем! Когда я первый раз поставил Home Assistant, после того как несколько лет сидел на MajorDomo, встал вопрос: А где и как хранить переменные и константы? Я мучился 2 недели. Никак в официальной документации и в рунете не мог найти упоминание. В рунет в основном описано как сделать то или другое, как подключить оборудование?
И вот в одном из описаний мне попалась информация как автор использовал Input Number. Я начал изучать его в документации и меня осенило! Вот же шь авторы Home Assistant. Я потратил 2 недели поисков, а ларчик просто открывался. В Home Assistant есть несколько типов Input :
- Input Boolean
- Input Datetime
- Input Select
- Input Number
- Input Text
Как видим из названий, нам доступно 5 типов переменных, это булевы переменные, время, список, числовой и текстовый. Рассмотрим их подробнее.
Input Boolean
Input Boolean может принимать два значения 0/1 или False/True. Очень удобно использовать этот тип данных в автоматизации. И в зависимости от значения запускать её или нет.
Конфигурация
Для того чтобы использовать Input Boolean надо его определить в конфигурации
input_boolean:
garden_auto:
name: Сад автополив
icon: mdi:water-check
После перезагрузки конфигурации Home Assistаnt у нас появится переключатель
Управление
Этот переключатель можно щелкать в интерфейсе:
а можно в коде. Включить:
service: input_boolean.turn_on
target:
entity_id: input_boolean.garden_auto
Выключить:
service: input_boolean.turn_off
target:
entity_id: input_boolean.garden_auto
или переключить:
service: input_boolean.toggle
target:
entity_id: input_boolean.garden_auto
Состояние переключателя сохраняется при перезагрузки
Использование
Самое интересное, это использование, например в автоматизациях. Добавим в нашу конфигурацию
automation:
#Включаем автополив в 21:00
- alias: garden_auto_tap
initial_state: true
trigger:
- platform: time
at: "21:00"
condition:
- condition: state
entity_id: input_boolean.garden_auto
state: 'on'
action:
- service: switch.turn_on
entity_id: switch.garden_tap_1
Данная автоматизация, включает авто полив сада в заданное ! При этом секции condition происходит проверка условия, разрешен ли автополив.
Input Datetime
Input Datetime может быть определен тремя разными способами:
- Только время
- Только дата
- и дата и время
Конфигурация
Для того чтобы использовать Input Datetime надо его определить в конфигурации
input_datetime:
garden_tap_on_1:
name: "Время полива сада"
has_date: false
has_time: true
garden_day:
name: "Время последнего полива"
has_date: true
has_time: true
После применения настроек, у нас появится новые объекты
Управление
Можно выставить время в интерфейсе:
Либо можно изменять его в коде:
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.garden_tap_on_1
data:
time: "21:00:00"
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.garden_day
data:
timestamp: "{{ now().timestamp() }}"
Использование
Давайте поменяем в автоматизации, из примера Input Boolean, время включения на Input Datetime
automation:
#Включаем автополив в 21:00
- alias: garden_auto_tap
initial_state: true
trigger:
- platform: time
at: input_datetime.garden_tap_on_1
condition:
- condition: state
entity_id: input_boolean.garden_auto
state: 'on'
action:
- service: switch.turn_on
entity_id: switch.garden_tap_1
Теперь, не нужно лезть в автоматизацию, чтобы поменять время включения авто полива.
Input Select
Как видно из названия, Input Select определяет список.
Конфигурация
Определим наш список в конфигурации:
input_select:
garden_auto:
name: Режим полива сада
options:
- Отключен
- Ручной
- Автоматический
Управление
Управление через интерфейс:
Использование
automation:
- alias: garden_auto_off
initial_state: true
trigger:
- platform: state
entity_id: input_select.garden_auto
to: 'Отключен'
action:
service: input_boolean.turn_off
target:
entity_id: input_boolean.garden_auto
Данная автоматизация, при изменении списка на «Отключен», выключает Input Boolean полива
Input Number
Как видно из названия Input Number хранит данные в числовом значении. Он может хранить как целые числа, так и дробные.
Конфигурация
Определим наш Input Number. При инициализации нам нужно определить минимальное, максимальное значение. Так же при инициализации автоматически определяется шаг: 1 Если нам нужен другой, меняем его на нужный.
input_number:
target_temp:
name: Температура термостата
min: 1
max: 30
step: .1
icon: mdi:target
Управление
Изменять значение можно как в интерфейсе:
так и в коде:
service: input_number.set_value
target:
entity_id: input_number.target_temp
data:
value: 10.8
Использование
automation:
- alias: "Set temp slider"
trigger:
platform: mqtt
topic: "setTemperature"
action:
service: input_number.set_value
target:
entity_id: input_number.target_temp
data:
value: "{{ trigger.payload }}"
Данная автоматизация устанавливает значение слайдера, из MQTT топика.
Input Text
Input Text хранит значения в текстовом виде. Может принимать форму для ввода пароля.
Конфигурация
При инициализации Input Text определяются его входные параметры:
input_text:
text1:
name: Text1
initial: Some Text
text2:
name: Text2
min: 8
max: 40
text3:
name: Text3
pattern: "[a-fA-F0-9]*"
text4:
name: Text4
mode: password
Управление
Поменяем значение в коде:
- service: input_text.set_value
target:
entity_id: input_text.Text1
data:
value: "Привет мир!"
Заключение
Как видно из этой заметки, в Home Assistant есть всё, чтобы облегчить себе настройку и работу. Настраиваются эти вспомогательные объекты, как через конфигурацию, так и через web интерфейс. В самом начале меня сбили названия Input. Но самое главное, они выполняют свою функцию, они хранят текущие значения переменных и констант в базе данных. И при пропадании электричества, восстанавливают значения, если при инициализации не указано какое нибудь значение!
Спасибо за статью! Тоже долго искал переменные, пока не наткнулся на input_boolean, а там и сюда попал.
По этому и написал статью, чтобы было легче понять Home Assistant.
Спасибо Юра!👍
Спасибо за статью, полезно. А как-то можно использовать эти переменные в автоматизациях через GUI
Здравствуйте, все просто, идем в Настройки -> Устройства и службы -> Вспомогательное и щелкаем по кнопке + Создать вспомогательный объект. Появится окошко в нем много разных элементов
А куда можно записать отрицательное значение, например хочу хранить минимальную температуру на улице за определенный период.
Можно создать число (input_number) со следующими параметрами
Спасибо
У меня невозможно ввести отрицательное число в поля ввода
Действительно недоработка интерфейса, но если ввести число и потом нажать стрелки вверх вниз в интерфейсе поля ввода, то число сохраняется
Ввел способом копипаста😎
А не подскажешь как присвоить в автоматизации значение сенсора созданной переменной input_number ?
Что нибудь такого:
service: input_number.set_value
target:
entity_id: input_number.target_temp
data:
value: "{{ states('sensor.temperture') }}"
Спасибо, испробую.