Иногда появлятеся необходимость создать в Home Assistant новый сенсор значение которого — это
что-то расчетное. Например, может понадобиться создать сенсор значение которого — это атрибут другого сенсора
или результат какой-то математическкой операции. Для это существует специальный инструмент — template сенсор — шаблонный сенсор.
В Home Assistant активно используется инструмент для работы с шаблонами который называется Jinja2.
Это не собственная разрабтка Home Assistant, это весьма привычная вещь для языка
программирования питон. Jinja2 — достаточно большой и сложный инструмент, но в двух словах —
нужно записывать выражение внутри фигурных скобок, вот пример:
Результат этого шаблона — это число 5.
Перед тем как использовать шаблон в template сенсоре очень удобно его протестировать в специальном
инструменете которые есть в Home Assistant. Он находится по адресу
homeassistant.local:8123/developer-tools/template
Дополнительная информация про использование шаблонов есть в этой статье.
В системе умного дома Home Assistant в куче мест используются шаблоны (templates).
Например, можно отправить сообщение в мессенджер и там указать значение
какого-нибудь сенсора. Или создать новый сенсор значение которого это будет
атрибут другого сенсора.
Давайте, начнем с самого начала.
Итак, есть какая штука в Home Assistant. У этой штуки есть 2 вещи:
next_dawn: ‘2020-04-08T04:23:05+00:00’
next_dusk: ‘2020-04-07T18:59:37+00:00’
next_midnight: ‘2020-04-07T23:42:09+00:00’
next_noon: ‘2020-04-08T11:42:16+00:00’
next_rising: ‘2020-04-08T04:58:27+00:00’
next_setting: ‘2020-04-07T18:24:22+00:00’
elevation: 12.51
azimuth: 266.07
rising: false
friendly_name: Sun
Before version 0.55 this component was known as input_slider and did not have the mode configuration option. Also, service select_value is now set_value.
# Example configuration.yaml entry
Numeric Input Box
Содержание
Configuration Variables
Alias for the input. Multiple entries are allowed.
min max nameFriendly name of the input. initialInitial value when Home Assistant starts. Default value: 0 stepStep value for the slider. Smallest value 0.001. Default value: 1 modeDefault value: slider unit_of_measurementUnit of measurement in which the value of the slider is expressed in. iconIcon to display in front of the box/slider in the frontend. Refer to the Customizing devices page for possible values.
Restore State
This component supports the restore_state function which restores the state after Home Assistant has started to the value it has been before Home Assistant stopped. To use this feature please make sure that the recorder component is enabled and your entity does not have a value set for initial. Additional information can be found in the Restore state section of the recorder component documentation.
Automation Examples
Here’s an example of input_number being used as a trigger in an automation.
# Example configuration.yaml entry using ‘input_number’ as a trigger in an automation
Bedroom Light – Adjust Brightness
# Note the use of ‘data_template:’ below rather than the normal ‘data:’ if you weren’t using an input variable
Another code example using input_number, this time being used in an action in an automation.
# Example configuration.yaml entry using ‘input_number’ in an action in an automation
Bedroom Light – Custom
# Again, note the use of ‘data_template:’ rather than the normal ‘data:’ if you weren’t using an input variable.
Example of input_number being used in a bidirectional manner, both being set by and controlled by an MQTT action in an automation.
# Example configuration.yaml entry using ‘input_number’ in an action in an automation
Target Heater Temperature Slider
# This automation script runs when a value is received via MQTT on retained topic: setTemperature
# It sets the value slider on the GUI. This slides also had its own automation when the value is changed.
Set temp slider
# This automation script runs when the target temperature slider is moved.
# It publishes its value to the same MQTT topic it is also subscribed to.
Temp slider moved
Здравия всем! В этой заметке я расскажу о первой настройке Home Assistant после установки.
Я делаю резервные копии системы, при любых установка модулей или больших изменениях. Для этого перейдем в раздел Резервные копии
И нажмем кнопку Создать резервную копию
Можно написать осмысленное название
, а можно ничего не писать, резервная копия все равно создаться. И нажать кнопку Создать
Теперь вернемся в раздел Дополнения
и нажмем кнопку Магазин дополнений
Найдем в открывшемся магазине File editor.
Откроется описание модуля File editor, нажмем кнопку Установить.
Во время установки, поверх кнопки будет крутится кружок.
Когда модуль установится, я включаю кнопку Показывать на боковой панели
для удобства.
Осталось только нажать кнопку Запустить
, чтобы дополнение заработало.
В правом верхнем углу, кружочек наглядно меняется с красного на зеленый.
Я предпочитаю, по старинке, настраивать Home Assistant через конфигурационные файлы. Мне так проще искать ошибки.
Перейдем в File editor, для этого на боковой панели, щелкнем значок с ключом
При открытии File editor открывает последний открытый файл. Чтобы выбрать нужный файл для редактирования щелкнем по кнопке, с изображением папки.
Откроем главный файл конфигурации configuration.yaml. Home Assistant перечитывает его каждый раз перед запуском.
Файл состоит из разделов. Название раздела начинаются с новой строки без пробелов, и ограничено двоеточием. За названием, идет описание раздела. Обязательно либо продолжить после двоеточий, либо с новой строки, но с отступом пробелов. Язык Yaml, на котором написана конфигурация Home Assistant, очень требователен к пробелам. Каждый раздел, должен начинаться с того же положения, что и предыдущий раздел или подраздел. Количеством пробелов определяется степень вложенности.
Для удобства работы, Home Assistant поддерживает вынос разделов и подразделов, в разные файлы и папки.
В стандартной конфигурации разделы Группы (groupe), Автоматизации(automation), Скрипты(script) и Сцены (scene) уже вынесены в отдельные файлы. Рассмотрим как происходит вынос в отдельные файлы на примере Групп.
после названия раздела идет команда !include, потом название файла. Если перед названием файла, ничего нет, значит файл лежит в той же папке, что и файл configuration.yaml.
Есть в Home Assistant специальный файл секретов. Называется он secrets.yaml и находится в той же папке, что и configuration.yaml.
Чтобы из файла конфигурации обратиться к паролю welcome, нужно прописать следующее:
password: !secret some_password
Где password: некий элемент, которому нужно задать пароль. Для этого после двоеточий ставим специальную команду !secret, а за ней название элемента из секретного файла some_password
Настройка Home Assistant
Настроим наш Home Assistant. Начнем редактировать файл configuration.yaml. В самом начале вставим конфигурацию:
homeassistant:
name: My Iot Home
latitude: !secret latitude_coord
longitude: !secret longitude_coord
elevation: 125
unit_system: metric
time_zone: Europe/Moscow
Как понятно из примера, мы задаем имя нашего Home Assistant, координаты дома, высоту над уровнем моря, систему единиц и временную зону. Координаты дома, нужны к примеру, для точного определения восхода и заката Солнца.
После внесения изменений, File editor автоматически, проверяет синтаксис пробелов. О чем свидетельствует иконка в правом верхнем углу. Для сохранения введенных данных, нажмем появившуюся кнопку дискеты.
В примере используется секретный файл. Откроем на редактирование файл /config/secrets.yaml и вставим туда следующие строки:
latitude_coord: 55.799353
longitude_coord: 37.670753
При этом, точные координаты дома определяются по яндекс или гугл картам. Сохраним изменения.
Проверка конфигурации Home Assistant
Сразу попадаем в раздел Сервер, нажимаем кнопку Начать проверку. После проверки, если все хорошо то над кнопкой, появится зеленая надпись Конфигурация выполнена верно
Если проверка не пройдена, то появится красная надпись Ошибка в конфигурации, и место и строка ошибки
Исправляем ошибку, сохраняем конфигурацию и снова проверяем.
Применение конфигурации Home Assistant
Для применения конфигурации, после успешной проверки нажмем кнопку, Перезапустить
Нажимаем, ОК и ждем перезагрузки. В левом нижнем углу браузера, отображается статусы перезагрузки Home Assistant
Перезагрузка части конфигурации
Home Assistant позволяет перезагрузить не весь сервер, а только какую то отдельную функцию. Для этого в том же разделе идем ниже и видим Перезагрузка конфигурации YAML
При нажатии на соответствующую кнопку, будет перезагружен соответствующий раздел конфигурации. Но нужно учитывать, что при такой перезагрузки, может не применить какой то код. При такой перезагрузке Home Assistant не будет запускать скрипты при инициализации.
На этом первый этап настройки Home Assistant закончен. В дальнейшей настройке, проверка и перезагрузка как всей конфигурации или её части, дойдет до автоматизма. Настройка Home Assistant это очень занимательная, хотя порой, однотипная работа.
Здравия всем! Когда я первый раз поставил Home Assistant, после того как несколько лет сидел на MajorDomo, встал вопрос: А где и как хранить переменные и константы? Я мучился 2 недели. Никак в официальной документации и в рунете не мог найти упоминание. В рунет в основном описано как сделать то или другое, как подключить оборудование?
И вот в одном из описаний мне попалась информация как автор использовал Input Number. Я начал изучать его в документации и меня осенило! Вот же шь авторы Home Assistant. Я потратил 2 недели поисков, а ларчик просто открывался. В Home Assistant есть несколько типов Input :
Как видим из названий, нам доступно 5 типов переменных, это булевы переменные, время, список, числовой и текстовый. Рассмотрим их подробнее.
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:
garden_tap_on_1:
name: “Время полива сада”
has_date: false
has_time: true
garden_day:
name: “Время последнего полива”
has_date: true
has_time: true
После применения настроек, у нас появится новые объекты
Можно выставить время в интерфейсе:
Либо можно изменять его в коде:
Давайте поменяем в автоматизации, из примера 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:
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. При инициализации нам нужно определить минимальное, максимальное значение. Так же при инициализации автоматически определяется шаг: 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
Данная автоматизация устанавливает значение слайдера, из MQTT топика.
Input Text хранит значения в текстовом виде. Может принимать форму для ввода пароля.
При инициализации Input Text определяются его входные параметры:
Поменяем значение в коде:
– service: input_text.set_value
target:
entity_id: input_text. Text1
data:
value: “Привет мир!”
Как видно из этой заметки, в Home Assistant есть всё, чтобы облегчить себе настройку и работу. Настраиваются эти вспомогательные объекты, как через конфигурацию, так и через web интерфейс. В самом начале меня сбили названия Input. Но самое главное, они выполняют свою функцию, они хранят текущие значения переменных и констант в базе данных. И при пропадании электричества, восстанавливают значения, если при инициализации не указано какое нибудь значение!
Здравия всем! Что же, пришло время познакомится с ESPHome. В этой статье я расскажу как настроить ESPHome после установки, как создать новую прошивку и залить её в устройство как по USB, так и по воздуху. Как подключить наше устройство к Home Assistant. Что же начнем!
Свои первые устройства для автоматизации я собирал на контроллерах Arduino Uno и Arduino Mega теперь уже в далеких 2011-2013 годах. С тех времен утекло много воды. Когда появился теперь уже народный чудо контроллер ESP8266, мир поменялся. Он сразу на борту имел WiFi и Flash память на 512кб — 4мб. И практически сразу был портирован на Arduino SDK.
Главная прелесть ESP8266, в том, что его один раз нужно прошить прошивкой через USB подключение к компьютеру, а последующие изменения можно вносить по воздуху с так называемым OTA режимом.
Первые прошивки для ESP8266 я писал на Arduino SDK. Но после перехода на Home Assistant, я перешел на ESPHome, который разрабатывается специально для подключения к Home Assistant, через API. По этому добавление любого датчика и исполняющего устройства в Home Assistant стало очень просто. Я практически не использую MQTT брокера. Который раньше был узким местом в системе, если MQTT брокер падал вместе с сервером умного дома, происходил коллапс. И приходилось делать прошивки, которые продолжали работать без MQTT брокера.
ESPHome это система для создания прошивок (Firmware) с помощью конфигурационных файлов, написанных на языке Yaml. После освоения его в Home Assistant, написание прошивок на ESPHome дело очень легкое. Для конфигурирования, компиляции и управления ESPHome использует понятный Web интерфейс. Давайте же разберемся с ним
После установки ESPHome, описанной в этой статье, откроем наш web интерфейс.
Как видим из приведенного изображения, вначале у нас список устройств пуст. Но есть 2 функциональные кнопки: NEW DEVICE и SECRET.
Щелкнем сверху на кнопку SECRET
Откроется редактор файла secrets.yaml. Этот файл, аналогичен файлу secrets.yaml в Home Assistant. Он нужен для хранения персональной информации, к примеру, название WiFI сети и паролем доступа к ней.
Заполним поля wifi_ssid и wifi_password своими данными. И нажмем кнопку SAVE, чтобы применить настройки.
Создание первого устройства
Щелкнем по кнопке NEW DEVICE, откроется мастер создания нового устройства.
У нас появится первое устройство. Откроем редактор конфигурации, нажав кнопку EDIT
Откроется редактор нашего устройства в файле конфигурации esptest.yaml
Как видно из изображения, используется язык разметки YAML. В редакторе встроена проверка синтаксиса. И если мы что то не правильно ввели, редактор нам сразу же об этом скажет красным квадратом в правом верхнем углу. Если на него навести курсор мыши, всплывет подсказка в какой строке у нас ошибка.
Не забывайте сохранять изменения перед выходом, автоматически они не сохраняются.
Первая программа на ESPHome
Под общим названием ESP8266 скрывается обширный набор устройств, отличающихся количеством памяти, тактовой частотой процессора и количеством портов, доступных пользователю.
ESPHome работает на основе фраймворка PlatformIO, соответственно какие платы поддерживаются размещены на сайте. Посмотрев таблицу, понимаем, что большинство плат на чипе ESP-12E и ESP-12F идут под общим названием nodemcuv2.
Я в своих тестах использую плату Nodemcu V3 на чипе ESP-12F
Откроем снова редактор нашего нового устройства и отредактируем нашу конфигурацию и изменим плату на nodemcuv2
esp8266:
board: nodemcuv2
Если в WiFi сети, где будет расположено устройство работает DHCP Server, то можно компилировать прошивку.
Скомпилируем прошивку, нажав кнопку Install
Откроется мастер создания прошивок
Откроется окно в котором будет вестись лог компиляции прошивки. После завершения компиляции появится кнопка Download, и файл сам начнет скачиваться.
Заливаем первую прошивку через USB
Осталось залить прошивку в наше устройство. Подключим нашу плату по USB к компьютеру. Для прошивки будем использовать утилиту ESPHome Flasher. Скачаем её с гитхаба и запустим.
С недавних пор Windows 10 ужесточило запуск программ. По этому может вылезти такое предупреждение.
Откроется главное окно программы
Выберим нужный Serial Port, на котором весит наше устройство. Нажмем кнопку Browse и выберим нашу прошивку. Осталось нажать кнопку Flash ESP. Начнется проверка и заливка прошивки.
После удачной заливки, наше устройство перезагрузится и выведет информацию о текущем подключении
Можно закрывать приложение. Дальнейшая настройка будет происходить на web интерфейсе ESPHome.
Настройка нового устройства
После тога, как мы залили прошивку в наше устройство и оно перезагрузилось, поменялся интерфейс ESPHome
Как видим, наше устройство поменяло статус с OFFLINE на ONLINE. Кнопка LOGS стала информативной, при ее нажатии происходит коннект к устройству и забирается последний лог
На каждой ESP12 есть распаянный светодиод на 2 порту. Давайте его сделаем аналогом лампы.
esphome:
name: esptest
esp8266:
board: nodemcuv2
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: “ONenF3FmMEBZD0V5u15E+wp4rNoN3RfqZ3cPJtl10D4=”
ota:
password: “1bcebac7181111892d02a04ea4867d3b”
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: “Esptest Fallback Hotspot”
password: “p1Tkhye6thDA”
captive_portal:
output:
– platform: gpio
id: led
pin: GPIO02
inverted: true
light:
– platform: binary
id: in_led
output: led
name: Test Lamp
Сохраним настройки и скомпилируем прошивку. Но в этот раз прошьем по воздуху. Для этого нажмем кнопку Wirelessly
Сразу же откроется окно компиляции и загрузки прошивки по воздуху
Дождемся загрузки новой прошивки
Видим, что наш новый светильник появился в логе.
Интеграция в Home Assistant
Для добавления устройства на ESPHome, нам нужны 2 вещи. Это IP адрес устройства и ключ шифрования, указанный в конфигурации. Чтобы узнать IP, если он не был указан в конфигурации, откроем окно лога устройства. Находим поле IP Address и записываем его
Теперь идем в редактор конфигурации и ищем поле key: в подразделе encryption: раздела api: и записываем наш ключ шифрования
Нажимаем кнопку ДОБАВИТЬ ИНТЕГРАЦИЮ
Откроется мастер добавления интеграции
На этом интеграция устройства на ESPHome закончена. Данные теперь прилетают по API в наш Home Assistant. Перейдем на вкладку Устройства и выберем наше устройство esptest
Как видим, наша лампа появилась в интерфейсе и ей можно сразу же и управлять и настраивать.
В этой статье я рассказал как настроить ESPHome после установки, как создать новую прошивку и залить её в устройство как по USB, так и по воздуху. Как подключить наше устройство к Home Assistant. Как понятно из статьи делать это очень легко и просто. В дальнейшем я покажу различные свои устройства, которые я использую в повседневной работе.
Новый синтаксис
В 2021 году в Home Assistant появился новый синтаксис для описания template сенсоров, вот пример:
У этого способа описания есть большой недостаток — он не работает при использовании в packages.
Про это постоянно пишут тикета на GitHub (например, вот пример тикета),
но разработчки HA говорят что это не баг, а так и задуманно и похоже что не собираются это исправлять.
У меня есть большие сомнения что нужно использовать новый синтаксис.
Создать сенсор со значением атрибута
У меня есть zigbee розетка BlitzWolf BW-SHP13.
Она подключена в Home Assistant с помощью zigbee2mqtt. В Home Assistant автоматически появляется
несколько разных сенсоров, например sensor.0x842e14fffe1393a2_power Вот как выглядит этот сенсор
в инструменте проверки состояния:
Есть статус (в данный момент — это число 0), и куча разных атрибутов. Я хочу создать отдельный
сенсор, значение которого — это значение атрибута energy. Для этого нужно написать вот такой
конфиг:
После перезпуска Home Assistant повяляется новый сенсор — sensor.total_energy_pump,
значение которого 77.13 — то же самое число которе содержится в атрибуте energy.
Как только меняется атрибут energy у сенсора sensor.0x842e14fffe1393a2_power значение нового сенсора автоматически меняется.
Использование регулярных выражений
Регулярные выражения — это очень мощный способ как-то преобразовать
строку. Достать ее часть или превратить во что-то другое. Вот пример использования
регулярного выражения:
Результат работы этого шаблона:
Получить дату-время в будущем
Вот пример как получить дату-время плюс два часа от текущего момента:
Перевести значение кВтч в рубли
Если у вас есть сенсор в котором содержится данные про то сколько было израсходовано кВтч за сегодня
(например, с помощью utility_meter,
то можно посчитать сколько это стоит в рублях с помощью следующих сенсоров.
При использовании однотарифного учета:
При использовании двухтарифного учета:
Создать timestamp из строки
Строка воспринимается как дата-время в часовом поясе который указан в настройках Home Assistant.
В том случае если в строке данные о дате и времени находятся в каком-то необычном порядке,
то нужно дополнительно использовать функцию strptime:
Создание template сенсора
В configuration.yaml записываем:
Перезапускаем HA и после этого в системе появляется новая сущность “sensor.solar_angle”
значение которого — это значение атрибута “elevation” у объекта “sun.sun”:
Разные способы получить фрагмент текущей даты-времени
Результат работы всех трех шаблонов одинаковой — текущий год.
Relative_time
Вот пример создания сенсора который рассчитывает абсолюную влажность в ванной.
Этот сенсор использует значения с двух сенсоров (у меня эти данные отдает
Aqara climate sensor):
Получить значение атрибута в шаблоне
Вот как получить значение атрибута ‘elevation’ элемента “sun.sun”:
Sun elevation is “12.51”
И для получения значения атрибута тоже есть другой способ (но который использовать не нужно):
Получить state в шаблоне
Вот пример шаблона, который отображает state:
И этот шаблон превратится в:
Sun state is “above_horizon”
Очень популярный формат представления даты-времени в компьютерах. Это число которое означает количество секунд с 00:00:00 1 января 1970 года.
Можно сделать это и другим способом:
Создание template сенсора с атрибутами
Можно создать сенсор и управлять не только содержимым стейта, но и тем что содержится в атрибутах. Вот пример:
Форматирование даты и времени
Пример использования функции strftime:
28 March 2021 13:48:00 MSK
Значения last_updated в разных форматах и часовых поясах
2021-04-30 08:51:07.797174+00:00
2021-04-30 08:51:07
2021-04-30 11:51:07
Первая и вторая строчка возращают дату-время в часовом поясе UTC. Вариант с timestamp_custom()
возвращает дату-время в часовом поясе Home Assistant.
Использование условий в шаблоне
Иногда необходимо чтобы результат работы шаблона как-то отличался
в зависимости от условий. Вот пример, который выдает разный текст в
зависимости от статуса элемента “sun.sun”:
Вообще, вроде как считается что более правильно проверку записывать иначе:
Разница только в первой строчке. Используется не оператор сравнения, а специальный метод, который возвращает True или False.
Но, насколько я знаю, оба эти варианта работает абсолютно одинаково. Мне проще
читать вариант с оператором сравнения, так что я обычно использую первый вариант.
Использование кавычек и других символов
Шаблон записывается в поле value_template. Обычно когда шаблон помещается в одну строчку, то он записывается в кавычках:
Разница между этими вариантами — это то как происходит работа с пробельными символами.
Подрбности есть на сайте https://yaml-multiline.info.
Получить текущую дату и время
Время отображается в часовом поясе который указан в настройках Home Assistant.