Як створювати автоматизації в Home Assistant
Привіт усім! У цій статі покажу на прикладах як створювати автоматизації в Home Assistant. Російський військовий корабель, пішов нах***!
Home Assistant (HA) — це гарна, сучасна та потужна операційна система з частими оновленнями та крутою спільнотою в Україні. Перша річ, за яку я обожнюю його, — він об’єднує та керує пристроями різних виробників з одного додатку, навіть без інтернету. Друга — автоматизації, що дозволяє цим пристроям автоматично реагувати на події, що відбуваються.
На перший погляд, автоматизації можуть здатись складними, але опанувати їх досить просто. У своїй основі це конфігураційний YAML файл. Проте для зниження рівня входу автоматизації можна створювати з графічного інтерфейсу та на основі існуючих проєктів, які дуже легко імпортуються.
При створенні автоматизації я спочатку використовую графічний інтерфейс, він підказує можливі типи тригерів, умов, дій та пристроїв, а потім редагую YAML. Перед тим як розглянути приклади, пропоную ознайомитись з основними термінами.
Сутність (entities) — «цеглинка» Home Assistant. Я уявляю сутності для себе так. Якщо в домі є пристрій, він має бути розділений на функції, щоб я або Home Assistant зміг до них звернутися.
Наприклад, датчик температури може показувати температуру, вологість, тиск, рівень заряду, силу сигналу. Сутностями можуть бути:
- віртуальні події: оновлення, перезавантаження,
- інформація: кількість кроків, прибрана площа,
- стани: стан резервного копіювання, наявність живлення.
Зазвичай автоматизація складається з трьох складових:
Тригер (trigger) — це те, що запускає автоматизацію. Коли будь-який з тригерів спрацьовує, Home Assistant перевіряє умови, якщо такі є, і викликає дію. Тригером може бути увімкнення сутності, повернення людини додому, точний час або схід сонця. Існує багато тригерів, проте найчастіше використовується тип пристрій.
Умова (condition) — не обов’язкова частина автоматизації. Вона використовується для виконання дії лише за певної умови. Наприклад робота лише у вихідні або увімкнення світла лише після заходу сонця. Більше про умови тут.
Дія (action) — те, що виконується при запуску автоматизації. Дією може бути завдання для конкретного пристрою, виклик служби, очікування спливання часу та ін.
Приклад роботи автоматизації
Корисні поради
Перед початком створення автоматизації рекомендую активувати розширений режим.
Для цього потрібно перейти в профіль (homeassistant.local:8123/profile) та активувати перемикач. Це надасть змогу перезавантажувати окремий компонент, не перезавантажуючи весь Home Assistant. Перезавантажити автоматизації, скрипти, сцени можна тут homeassistant.local:8123/developer-tools/yaml
Для зручності редагування автоматизацій встановіть додаток File Editor. Редактор доступний з магазину офіційних додатків, підтримує підсвічування синтаксису YAML, списки з доступними сутностями, тригерами, подіями, умовами та послугами, перезавантаження автоматизацій прямо в редакторі.
Щоб автоматизація з наведених прикладів працювала у вас, замініть назви сутностей на свої. Усі сутності можна знайти за адресою homeassistant.local:8123/config/entities
Мова конфігурацій YAML чутлива до табуляції (відступів), тому при редагуванні автоматизацій, скриптів та сцен звертайте увагу на правильність відступів та тире.
Сповіщення про відкриття дверей
Усі автоматизації можна знайти в меню конфігурацій >> Автоматизації та сцени, або за адресою homeassistant.local:8123/config/automation/dashboard. Самі ж конфігурації зберігаються в файлі /config/automation.yaml.
Перейдіть до автоматизацій та натисніть кнопку «Додати автоматизацію».
Для створення автоматизації завжди потрібна умова спрацьовування (тригер). Для цього я використовую датчик відкриття дверей Xiaomi. Автоматизація виглядатиме так: якщо двері відчиняються, на телефон надходить сповіщення.
Для цього створюю довільну назву автоматизації, як тригер обираю пристрій, у полі пристрою обираю датчик відкриття дверей.
Обираю тригер. Оскільки я хочу, щоб сповіщення приходило, коли двері відкриті, то обираю двері відчинені. Якщо забути обрати цей тригер, автоматизація не спрацьовуватиме.
Тип дії обираємо виклик служби. Серед служби обираємо — notify.mobile_app_*** де *** ім’я користувача. Або можна обрати notify.notify, тоді сповіщення надходитимуть на усі пристрої.
Служба (services) керує сутностями. Відповідає на питання: що зробити, ввімкнути, озвучити, сповістити.
Примітка. Щоб можна було обрати користувача, потрібно встановити мобільний додаток Home Assistant перед тим. Вписуємо message та за бажанням вказуємо title. Дуже круто, що Home Assistant підтримує emoji.
Тепер подивимось, що у нас вийшло в режимі YAML. В цьому випадку немає додаткової умови (condition), тому на її місці стоять пусті квадратні дужки.
alias: door_open description: door open trigger: - type: opened platform: device device_id: ad40afb8f9bcdd3b8d35adb03cacc825 entity_id: binary_sensor.0x00158d00040389e6_contact_2 domain: binary_sensor condition: [] action: - service: notify.mobile_app_bogdan data: message: Двері відчинені 🚪 - service: notify.mobile_app_iphone data: message: Двері відчинені 🚪 mode: single
Сповіщення про повітряну тривогу в Home Assistant
Перейдіть за посиланням або знайдіть та встановіть інтеграцію Ukraine Alarm. Інтеграція повідомляє про повітряну тривогу, вуличні бої та артилерійські обстріли та швидко працює. При першому налаштуванні оберіть своє місто.
Створіть нову автоматизацію. Назвемо її «повітряна тривога». Тип тригера — пристрій. В моєму випадку пристрій називається «м. Київ». Тригер м. Київ Air реєструє безпеку
Дія — виклик служби notify.mobile_app_bogdan. Також вкажу повідомлення «Повітряна тривога»
У режимі YAML це виглядає так:
alias: Повітряна тривога description: "" trigger: - type: unsafe platform: device device_id: 762ca6f458ef8b00bbbac0c400800740 entity_id: binary_sensor.m_kiyiv_air domain: binary_sensor condition: [] action: - service: notify.mobile_app_bogdan data: message: 🔴 Повітряна тривога mode: single
За аналогією можна створити сповіщення про відбій повітряної тривоги. Єдина відмінність — тригер м. «Київ Air» реєструє безпеку. Якщо Home Assistant з якоїсь причини буде перезавантажено, сповіщення про відбій тривоги прийде повторно, бо спрацює тригер «м. Київ Air» реєструє безпеку.
alias: Відміна description: "" trigger: - type: unsafe platform: device device_id: 762ca6f458ef8b00bbbac0c400800740 entity_id: binary_sensor.m_kiyiv_air domain: binary_sensor condition: [] action: - service: notify.mobile_app_bogdan data: message: 🟢 Відміна тривоги mode: single
За власним досвідом сповіщення надходять навіть раніше, ніж в «Київ цифровий».
Нагадування
Можна створити постійні важливі нагадування, передати показники електроенергії/ води/ газу, нагадати про день народження дружини тощо.
Ось приклад нагадування кожного першого числа опівдні.
alias: Показники description: "" trigger: - platform: time at: "12:00:00" condition: - condition: template value_template: "{{ now().day == 1 }}" action: - service: notify.notify data: message: Подати показники електроенергії ⚡️ mode: single
В автоматизації використаний тригер часу, який активується, якщо виконується умова шаблону, тобто настає перше число місяця.
Шаблон — це потужна функція, що дозволяє контролювати інформацію, яка надходить у систему та виходить з неї.
Шаблонування в Home Assistant працює на основі механізму шаблонів Jinja2. Інтерфейс Home Assistant має влаштований редактор шаблонів, що знаходиться в пункті меню інструменти для розробників >> Шаблони, або за адресою
homeassistant.local:8123/developer-tools/template
Клікабельні сповіщення
Android
Ви можете включити масив actions у вашому сервісному виклику. Android дозволяє додавати лише 3 дії, iOS дозволяє близько 10 дій.
service: notify.mobile_app_bogdan data: message: "Вдома щось сталось!" data: actions: - action: "ALARM" # Ключ, який ви надсилаєте для події title: "Звукове сповіщення" # Заголовок кнопки - action: "URI" # Встановіть URI title: "Відкрити посилання" uri: "https://google.com" # URL-адреса, яка відкривається, коли вибрано дію, також може бути посиланням на Lovelace.
iOS
Клікабельні сповіщення на IOS не відрізняються від звичайних. Це потрібно запам’ятати, або підписувати сповіщення. Щоб вони стали клікабельні, їх необхідно довго затиснути.
Діями (action) в клікабельних сповіщеннях може бути:
— існуюча служба (те саме, що і сервіс),
— посилання на елементи інтерфейсу користувача lovelace,
— самостійно створена дія.
Для піктограм використовується пакет sfsymbols від apple, по аналогії з mdi. Назви піктограм:
alias: Клікабельне сповіщення description: door open trigger: - type: opened platform: device device_id: ad40afb8f9bcdd3b8d35adb03cacc825 entity_id: binary_sensor.0x00158d00040389e6_contact_2 domain: binary_sensor condition: [] action: - service: notify.mobile_app_bogdan data: message: Двері відчинено! data: actions: - action: ALARM title: Увімкнути сигналізацію icon: sfsymbols:bell - action: SILENCE title: Вимкнути сигналізацію icon: sfsymbols:bell.slash title: "Натисни "
Перезавантаження Home Assistant
Якщо ви спостерігаєте проблему зі стабільністю Home Assistant, можна скористатись корисною автоматизацією. Вона перезавантажує Home Assistant о 00:00 щодня.
В даній автоматизації тригером є час — настання півночі.
Також присутня умова часу — виконуватись в усі дні тижня.
Дією є перезапуск операційної системи.
alias: HA restart description: "" trigger: - platform: time at: "00:00:00" condition: - condition: time weekday: - mon - tue - wed - thu - fri - sat - sun action: - service: homeassistant.restart data: {} mode: parallel
Ping
Ping це мережева утиліта, що періодично надсилає ICMP пакети. В Home Assistant вона моніторить доступність пристроїв (binary_sensor) або відстежує, чи користувачі вдома (device_tracker). Для її використання рекомендую встановити статичну адресу на роутері. За допомогою утиліти можна дізнатись, чи прийшов якийсь користувач додому, чи працює телевізор та ін.
Ви можете додати будь-який блок конфігурації в кінець файлу configuration.yaml, не забудьте змінити ip адресу на свою.
Бінарний сенсор з інтервалом 10 секунд надсилає чотири пакети на пристрій. Ви можете контролювати час спрацьовування за допомогою команди scan_interval.
count — кількість відправлених icmp-пакетів,
scan_interval — інтервал між відправленням icmp-пакетів.
binary_sensor: - platform: ping host: 192.168.1.108 name: "phone" count: 4 scan_interval: 10
Відстеження пристроїв (device_tracker) змінює статус з «вдома» на «не вдома». Статус вдома встановлюється приблизно за 10 секунд після підключення до wi-fi. Статус з «вдома» на «не вдома» змінюється приблизно за 3 хвилини. Якщо вам необхідна швидша зміна статусу, використовуйте бінарний датчик:
device_tracker: - platform: ping hosts: iphone_bogdan: 192.168.1.108
На основі статусу ping можна створювати автоматизації. Наприклад, увімкнути світло в коридорі по приходу:
alias: bog_home description: "" trigger: - platform: state entity_id: - binary_sensor.phone_bogdan from: "off" to: "on" condition: - condition: sun after: sunset - condition: time before: "22:00:00" action: - type: turn_on device_id: 870147a7a596b0b3eabe20dcaae947df entity_id: switch.0x54ef4410004db2fa_left domain: switch mode: single
Взагалі придумати можна будь-що, це не обов’язково має бути світло після заходу сонця.
Увімкнення вентиляції, при збільшенні рівня вологості
Автоматизація вмикає (switch.turn_on) вентилятор (switch.bathroom_fan), коли датчик вологості (sensor.0×00124b002513498b_humidity) фіксує рівень вологості вище (above) 71%:
- alias: turn_bathroom_fan_on trigger: platform: numeric_state entity_id: sensor.0x00124b002513498b_humidity above: 71 action: service: switch.turn_on entity_id: switch.bathroom_fan
Для вимкнення використаємо подібну автоматизацію, яка буде вимикати (switch.turn_off) вентилятор, коли рівень вологості буде нижче (below) 50%:
- alias: turn_bathroom_fan_off trigger: platform: numeric_state entity_id: sensor.0x00124b002513498b_humidity below: 50 action: service: switch.turn_off entity_id: switch.bathroom_fan
Ось ще один приклад. Автоматизація запускається при досягненні 71% вологості, працює 50 хв, а потім вимикається на 20 хв. Якщо за цей час вологість впаде нижче 71%, тригер не зможе спрацювати повторно.
alias: turn_bathroom_fan trigger: - platform: numeric_state entity_id: sensor.0x00124b002513498b_humidity above: "71" action: - service: switch.turn_on data: {} target: device_id: f746090a2a47d7b7b4cb6420f67b0eef - delay: hours: 0 minutes: 50 seconds: 0 milliseconds: 0 - service: switch.turn_off data: {} target: device_id: f746090a2a47d7b7b4cb6420f67b0eef - delay: hours: 0 minutes: 20 seconds: 0 milliseconds: 0 if - else
Проєкти
Проєкти (Blueprints) це спільні шаблони автоматизації, які будь-хто може створити, поділитися та застосувати у власних налаштуваннях Home Assistant. Люди можуть придумати креативні та складні засоби автоматизації, які вони перевірили та впровадили самі, а потім поділитися ними зі спільнотою.
Home Assistant надає можливість додати проєкти з форуму спільноти або GitHub, просто вставивши посилання на них.
Після додавання проєкту, можна створити автоматизацію або скрипт на його основі.
Пропоную розглянути приклади найпопулярніших проєктів.
Сповіщення про розряд акумулятора
Цей проєкт регулярно перевіряє всі датчики батареї та сповіщає, якщо порогове значення перевищено. Див. тут.
Сповіщення про знімок камери під час руху
Надсилає сповіщення на телефон, коли камера виявляє рух. Див. тут.
Увімкнення світла на основі руху та низького рівня освітлення
На основі виявлення руху та (необов’язково) низького рівня освітлення, увімкніть світло, вимикач, сцену або сценарій. Див. тут.
Сповіщення про закриття дверей або вікна через задану кількість хвилин
Надсилає два сповіщення на мобільний пристрій про необхідність закрити вікно чи двері після їх відкриття, якщо температура на вулиці нижче певного градуса. Див. тут.
Більше про найпопулярніші проєкти можна прочитати тут.
Скрипти
Скрипт, або сценарій — це виконувана послідовність дій. Скрипти та автоматизації настільки схожі, що їх важко відрізнити. Відмінність в тому, що для автоматизації обов’язково потрібен тригер, для скрипта — ні. Також на відміну від автоматизації скрипт можна зупинити. Це може бути корисно, коли між декількома діями потрібно встановити великі затримки.
У скрипті можна створити набір з кількох дій, а потім викликати скрипт в автоматизації, в секції дії як службу. Усі скрипти можна знайти за адресою
homeassistant.local:8123/config/script/dashboard в графічному інтерфейсі, або в файлі scripts.yaml
Home Assistant підтримує три види скриптів:
— Скрипти Home Assistant,
— Python-скрипти,
— Зовнішні скрипти, що запускаються з командного рядка.
Скрипти Home Assistant
Перетворити автоматизацію на скрипт досить легко. Їх синтаксис майже ідентичний, лише видаляється тригер та action міняється на sequence:
<strike>- id: morning_bedroom</strike> <strong>morning_bedroom:</strong> alias: "Morning Lights On" <strike> trigger:</strike> <strike>platform: state</strike> <strike>entity_id: input_boolean.morning_light_automation</strike> <strike>action:</strike> <strong>sequence:</strong> - service: light.turn_on data: entity_id: light.kyles_lamp brightness_pct: 100 color_temp: 250 transition: 30 - service: light.turn_on data: entity_id: light.mels_lamp brightness_pct: 100 color_temp: 250 transition: 30 - delay: 00:00:30 - service: switch.turn_on data: entity_id: switch.master_bedroom_switch
Час до сну
Цей скрипт спочатку вмикає синє світло на світлодіодній стрічці та головному освітленні, чекає 30 секунд, вимикає телевізор, світлодіодну стрічку та головне світло. Коли і чому це буде відбуватись, можна придумати самому в автоматизаціях.
bedtime: alias: Time for bed description: 'Вимикає світло та телевізор у вітальні перед сном' sequence: - alias: LED Strip turn blue service: light.turn_on data: entity_id: light.living_room_leds rgb_color: [0,0,255] - alias: Main Light turn blue service: light.turn_on data: entity_id: light.lohasone rgb_color: [0,0,255] - delay: seconds: 30 - alias: Turn TV off service: media_player.turn_off data: entity_id: media_player.massive_sony - alias: Tree Lamp off service: light.turn_off data: entity_id: light.treelamp - alias: LED Strip off service: light.turn_off data: entity_id: light.living_room_leds - delay: minutes: 2 - alias: Turn Main Light Off service: light.turn_off data: entity_id: light.lohasone
Також можна виконувати цей скрипт вручну. Для цього потрібно створити кнопку в інтерфейс lovelace:
Більше цікавих скриптів home assistant можна знайти на форумі.
Python-скрипти
Скрипти Python в Home Assistant представлені за допомогою інтеграції Python Scripts. Інтеграція має обмеження не можна використовувати import.
Для того, щоб скористатись Python скриптами необхідно активувати їх використання, додавши рядок python_script: в кінці файлу configuration.yaml:
та створити директорію python_scripts в корені (config). Після «Перезавантажити Home Assistant».
Для побудови python-скрипта можна використовувати наступні змінні:
Ім’я |
опис |
hass |
Об’єкт «Home Assistant». Його можна використовувати лише для виклику служб, встановлення станів і запуску подій. Посилання на API |
data |
Дані передаються як корисне навантаження під час виклику служби проєкції самого сценарію. |
logger |
Home Assistant: logger.info(), logger.warning(), logger.error(). Посилання на API |
Пробний скрипт
name = data.get("name", "world") logger.info("Hello %s", name) hass.bus.fire(name, {"wow": "from a Python script!"})
Якщо все виконано успішно в службах (homeassistant.local:8123/developer-tools/service) з’явиться нова сутність python_script.hello_world
Попередження про низький рівень заряду
Перші два рядки генерують дві змінні:
- перше — значення поточного заряду телефону,
- друге — значення вхідних даних, створених для встановлення обмеження.
Ці змінні порівнюються, і якщо рівень заряду акумулятора нижче встановленого ліміту, здійснюється виклик служби persistent_notification для створення сповіщення в Home Assistant. Також викликається служба text to speech (tts) та озвучує повідомлення.
Змініть значення sensor.oneplus_battery_level на назву сутності рівня заряду батареї вашого телефону. Знайти його можна в об’єктах інтеграції mobile app або за адресою:
http://homeassistant.local:8123/config/entities
Також змініть media_player.gh_bureau на назву сутності вашого динаміка, знайти його можна за тією ж адресою. Детальніше тут.
levelBatteryPhone = hass.states.get("sensor.oneplus_battery_level") levelLimitBattery = hass.states.get("input_number.limit_battery_before_notification").state if float(levelBatteryPhone) < float(levelLimitBattery): hass.services.call( "persistent_notification", "create", { "title": "Телефон відключено", "message": "Недостатній рівень заряду. Повторно підключіть телефон!" } ) hass.services.call( "tts", "cloud_say", { "entity_id": "media_player.gh_bureau", "message": "Телефон було від’єднано від мережі, а заряд акумулятора низький" } )
У наступному прикладі пояснюється, як написати скрипт з двома вхідними змінними: entity_id (обов’язково) і rgb_color (необов’язково). Скрипт, викликаний через відповідну службу, вмикає світло, вказане за допомогою entity_id, встановлюючи будь-який колір rgb, переданий за допомогою rgb_color, а також встановлює максимальну яскравість (255):
entity_id = data.get('entity_id') rgb_color = data.get('rgb_color', [255, 255, 255]) if entity_id is not None: service_data = {'entity_id': entity_id, 'rgb_color': rgb_color, 'brightness': 255 } hass.services.call('light', 'turn_on', service_data, False) Не забудьте замінити entity_id та rgb_color після двокрапки. Наприклад, на {"entity_id": "light.camera", "rgb_color": [255, 0, 0] }
Скрипти AppDaemon на основі HACS
Ви можете скористатись готовими скриптами, що надає HACS. Такий підхід дозволяє в графічному режимі встановлювати та користуватись python скриптами інших користувачів (щось на кшталт blueprints) Детальніше тут.
Сцени
Сцени запам’ятовують встановлений стан пристрою, та відновлюють його при її активації. Наприклад, сцена може під час перегляду фільму вимкнути основне світло, зашторити вікна, встановити підсвічування. Усі сцени знаходяться в файлі /config/scenes.yaml
Редактор сцен дозволяє створювати сцени лише в графічному режимі. Мені цього вистачає.
Створіть нову сцену, дайте їй назву, оберіть область і піктограму. Оберіть пристрій та оберіть стан пристрою, натиснувши на нього, збережіть сцену — готово!
До прикладу, я змінив колір лампи на синій, зменшив яскравість і зберіг. Кожен раз, коли ця сцена активується, лампа буде світити синім зі зменшеною яскравістю. Можна додавати декілька пристроїв, або сутності, які не належать пристроям (я так контролюю положення сервомотора) та зберігати їх стан. І це круто!
Сцену можна активувати, натиснувши на сцену, або натиснувши кнопку Activate.
Сцену можна використовувати в автоматизації в секції дії, для цього потрібно обрати дію, активувати сцену та обрати сцену з запропонованих.
Куточок читача
Хочу порадити україномовний сайт, присвячений налаштуванню HA та огляду обладнання — Smart Ninja та їх YouTube-канал. А якщо ви, найкращі читачі, знаєте про якісний контент та спільноти українською на тему розумного будинку, порадьте його в коментарях.
Висновок
Інструменти автоматизації Home Assistant — гнучкі та водночас потужні. Важко описати усі можливості в одній статті. Тому якщо я пропустив щось важливе або сказав щось не так, доповніть, будь ласка.
Також буде чудово, якщо ви поділитесь своїми автоматизаціями, сценами та скриптами в коментарях. Це допоможе розвитку україномовної спільноти «розумного будинку».
Сподобалась стаття? Подякуй донатом у фонд «Повернись живим».
28 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів