Вмикаємо відео на Apple TV під час повітряної тривоги за допомогою Home Assistant

Привіт! Мене звати Олександр Ющенко, я Software Engineer в ISD. Віднедавна я апгрейднув свою Home Lab до повноцінного ПК і хочу поділитись своїм досвідом з автоматизації в Home Assistant з інтеграцією різних сервісів. Коли я налаштував Home Assistant у себе вдома і додав декілька інтеграцій, вирішив подивитись, які ж ще інтеграції доступні й чим би вони були мені корисні.

Після декількох хвилин скролінгу я наткнувся на інтеграцію з Ukraine Alarm, що є обгорткою над API застосунком «Повітряна тривога». В цю ж секунду в мене промайнула ідея про налаштування автоматизації, яка б вмикала кліп на пісню «Повітряна тривога» на моєму телевізорі.

Підготовка

Обладнання та софт, що я використовував:

  • HP Elitedesk 800 G4 mini
    • Proxmox VE 8
    • Home Assistant Core (працює як lxc контейнер)
      • Вже налаштована інтеграція з Apple TV
    • Plex Media Server (працює як lxc контейнер)
  • Apple TV
    • Plex
  • Телевізор з підтримкою CEC (вмикання через сигнал по HDMI)

Далі у статті я також покрию можливі варіанти з використанням розумних телевізорів на інших ОС, а ще розповім, як теоретично можна обійтись без Plex.

Мій вибір пав на автоматизацію разом з Plex через те, що я вже використовую його як медіасервер, а також через те, що так відео хоститься локально.

Додаємо відео на Plex

Відео Повітряна тривога в Plex

Насамперед треба додати бажане відео до медіатеки Plex. Для цього я створив окрему медіатеку з типом Other Videos, вказав теку для сканування і додав в цю теку відео.

Далі відкриваємо сторінку доданого відео в Plex і копіюємо URL. Посилання містить дві потрібні змінні — Server ID та Content ID. Посилання буде виглядати приблизно так:

https://{PLEX IP OR HOSTNAME}/web/index.html#!/server/{SERVER ID}/details?key=%2Flibrary%2Fmetadata%2F{CONTENT ID}&context=source%3Acontent.library~0~0

Додаємо інтеграцію «Повітряної тривоги» до Home Assistant

Додавання інтеграції Ukraine Alarm в Home Assistant

Переходимо в Settings, обираємо Devices & Services і у вкладці Integration натискаємо Add Integration. Додаємо Ukraine Alarm.

Обираємо регіон і зону, до якої буде додана інтеграція.

Додаємо помічний вимикач

Щоб автоматизація не була жорстко звʼязана і щоб розбити її на кілька простіших фрагментів, додаємо віртуальний помічний вимикач.

Створення допоміжного перемикача в Home Assistant

Для цього переходимо у вкладку Helpers і натискаємо Create Helper. У меню вибираємо Toggle, задаємо назву та іконку. В моєму прикладі назва створеної сутності — Alarm, а Entity ID — input_boolean.alarm.

Вмикаємо телевізор та відео за допомогою автоматизації

В налаштуваннях переходимо до Automations & scenes і у вкладці Automations створюємо нову автоматизацію. Нижче я надаю приклад YAML-коду автоматизації. Тут слід замінити Server ID та Content ID на ті, що були отримані раніше з Plex. Крім того, назви ваших сутностей можуть відрізнятись від моїх, тому ви можете змінити їх у коді, або ж перейти назад до візуального редактора та вибрати їх з дропдаунів.

Автоматизація вмикання Apple TV та відео в Home Assistant

В моєму прикладі Entity ID Apple TV — media_player.apple_tv, а пульту від нього — remote.apple_tv.

Щоб перейти до YAML-редактора, треба натиснути на три крапки в верхньому правому кутку та обрати Edit in YAML.

alias: Alarm on
description: Start Povitryana tryvoha on Apple TV
triggers:
  - trigger: state
    entity_id:
      - input_boolean.alarm
    from: "off"
    to: "on"
conditions: []
actions:
  - action: media_player.turn_on
    metadata: {}
    data: {}
    target:
      entity_id:
        - media_player.apple_tv
  - action: media_player.play_media
    target:
      entity_id: media_player.apple_tv
    data:
      media_content_id: com.plexapp.plex
      media_content_type: app
    metadata:
      title: Plex
      thumbnail: null
      media_class: app
      children_media_class: null
      navigateIds:
        - {}
        - media_content_type: apps
          media_content_id: apps
  - action: media_player.play_media
    data:
      media_content_type: url
      media_content_id: >-
        plex://play/?metadataKey=%2Flibrary%2Fmetadata%2F{CONTENT ID}&server={SERVER ID}
    target:
      entity_id: media_player.apple_tv
mode: single

Примітка: якщо вмикання Apple TV з використанням action: media_player.turn_on працює нестабільно, як в моєму випадку — можна використовувати вмикання через пульт:

- action: remote.send_command
  target:
    entity_id:
      - remote.apple_tv   
  data:
    num_repeats: 1
    delay_secs: 0.4
    hold_secs: 0
    command: wakeup

Використання інших сервісів, окрім Plex

Як ви могли помітити, я не використовую інтеграцію Plex в цій автоматизації, а просто відкриваю посилання з протоколом plex, яке оброблює встановлений програвач. Це надає можливість використовувати не тільки Plex, а і Youtube, інший застосунок для відтворення відео чи аудіо. Але інші варіанти я не перевіряв на практиці. До того ж перед тим, як відкривати посилання, я спочатку відкриваю застосунок на телевізорі, щоб Apple TV не показував діалогове вікно про відкриття посилання у застосунку.

Використання телевізорів чи приставок на інших ОС

Якщо ваш телевізор підтримує інтеграцію з Home Assistant — можете спробувати зробити цю ж саму автоматизацію, просто замінивши Entity ID. Але в такому випадку є проблема — не всі телевізори можуть виходити з режиму сну і крок з вмиканням через пульт теж може не допомогти. В ідеальному випадку телевізор повинен бути підключений по дроту до локальної мережі, а в налаштуваннях — увімкнена функція Wake on LAN. В моєму телевізорі також є функція Wake on WLAN, але вона працює нестабільно і через це телевізор може вмикатись просто так.

Вимикання телевізору

Автоматизація вимкнення Apple TV в Home Assistant

Схожим чином треба додати автоматизацію на вимкнення Apple TV:

alias: Alarm off
description: Stop media, return Apple TV to home and turn off
triggers:
  - trigger: state
    entity_id:
      - input_boolean.alarm
    from: "on"
    to: "off"
conditions: []
actions:
  - action: media_player.media_stop
    metadata: {}
    data: {}
    target:
      entity_id: media_player.apple_tv
  - action: remote.send_command
    metadata: {}
    data:
      num_repeats: 1
      delay_secs: 0.4
      hold_secs: 0
      command: home
    target:
      entity_id: remote.apple_tv
  - action: media_player.turn_off
    metadata: {}
    data: {}
    target:
      entity_id: media_player.apple_tv
mode: single

Автоматичне вимикання тривоги

Автоматизація вимкнення перемикача через 30 секунд в Home Assistant

Третя автоматизація буде автоматично вимикати допоміжний вимикач після 30 секунд, а це вимикання вже буде викликати минулу автоматизацію.

alias: Auto turn off alarm
description: ""
triggers:
  - trigger: state
    entity_id:       
      - input_boolean.alarm
    from: "off"
    to: "on"
conditions: []
actions:
  - delay:
      hours: 0
      minutes: 0
      seconds: 30
      milliseconds: 0
  - if:
      - condition: state
        entity_id: input_boolean.alarm
        state: "on"
    then:
      - action: input_boolean.turn_off
        metadata: {}
        data: {}
        target:
          entity_id: input_boolean.alarm
mode: single

Вмикаємо та вимикаємо перемикач тривоги за допомогою інтеграції «Повітряна тривога»

Автоматизація увімкнення повітряної тривоги в Home Assistant

Створюємо автоматизацію, але в цьому випадку простіше усе зробити в візуальному редакторі, бо Device ID та Entity ID «Повітряної тривоги» можуть відрізнятись. Тому додаємо тригер на повітряну тривогу та дію для вмикання нашого перемикача Alarm.

Аналогічно можна зробити для вимкнення, але раніше ми вже додали автоматизацію для вимкнення через 30 секунд.

Висновок

Таким чином ми створили автоматизації для вмикання кастомної повітряної тривоги в себе вдома. Таке використання, звісно, не виглядає корисним. Натомість ви можете отримати негативні коментарі від співмешканців, бо телевізор вмикається посеред ночі й на весь будинок лунає пісня «Повітряна тривога», що, очевидно, заважає спати.

Але водночас цей приклад може бути вашим першим кроком до більш комплексної автоматизації. Також ось кілька прикладів використання подібного кейсу, які б могли б бути корисними. Можна, наприклад:

  • вмикати промо-відео в апартаментах, коли гість відчинив двері;
  • увімкнути відеопривітання зі святом члена родини, коли він зайде у свою кімнату;
  • запланувати вмикання фільмів та освітлення за таймером, коли ви відсутні вдома.

Я поділився своїм результатом автоматизації з групою гіків, яких порадував цей експеримент, що і надихнуло мене на написання цієї статті.

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

👍ПодобаєтьсяСподобалось4
До обраногоВ обраному1
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Вітаю Олександра! Дуже цікава стаття! Чи є якісь перспективи застосування ШІ наприклад для голосового спілкування з AppleTV?

P.S А що мається на увазі під різними сутностями?

Ви маєте заувазі, що сутності можуть відрізнятись? Тут я про те, що entity_id — це ідентифікатор сутності і він може не співпадати у мене і у вас, тому слід звернути на це увагу

Я думаю, що це питання окремого топіку у темі AI на DOU)
Якщо говорити з перспективи автоматизації розумного будинку, то можна встановити інтеграцію з Apple HomeKit та налаштувати Bridge у свою екосистему HomeKit. Далі девайсами можна буде керувати в тому числі і через Сірі на Apple TV.
Також я думаю, що в маркеті вже є безліч ChatGPT wrapper-ів, але їх використання я ставлю під сумнів.
Більш складний варіант також можливий: налаштувати голосового асистента в Home Assistant (є відео в NetworkChuck) і спробувати або налаштувати Shortcut (в цьому способі я не впевнений) або написати свій wrapper який звертатиметься до API Home Assistant (релевантність під питанням).

Тому, на мою думку, треба почекати роки 2 поки, по-перше, Apple Intelligence буде доступний по всьому світу, по-друге, вийде нова модель Apple TV з можливістю користуватись ним.

Олександре, Дякую за круту статтю. Додав її в обране та лайкнув.

1. Ніколи не працював з lxc. Чому ви їх використовуєте? Які переваги lxc над docker?

2. Приклад трошки нагадав (обидва варіанти творчі) нещодавнє відео NetworkChuck. Де він вимикає інтернет дітям та вмикає відео послання через Plex, якщо кришка та двері туалету відкриті. youtu.be/k02P5nghmfs

3. За автоматизацію, повага. Я б вимкнув би цю автоматизацію після першого спрацювання вночі. Живу в Києві і мій максимум піти у ванну, якщо чути сильні вибухи поруч. Відео повітряна тривога класне, хоча трохи виглядає наркоманським (люблю такі). А ось як Денис Довгань вирішує цю проблему. denysdovhan.com/...​istant-config/config/war

Дякую)

1. Я використовую і docker, і lxc, але для різних завдань. Docker класно підходить для застосунків, що працюють незалежно і для них не треба встановлювати додаткових пакетів. До плюсів docker я також відніс би, що контейнери займають менше памʼяті на диску. LXC контейнери мають перевагу в тому, що туди можна встановити темплейту популярних linux-дистрибутивів і користуватись контейнером ніби це окреме повноцінне залізо, встановлювати додаткові сервіси, пакети і тд.
Таким чином HA в LXC, хоч і не має аддонів, але має ті самі можливості як HAOS і при цьому споживає менше ресурсів.

2. Я також бачив це відео) Але приклад NetworkChuck не працюватиме якщо телевізор вимкнений і Plex вже не бачить його як клієнт

3. По секрету, я вже це вимкнув, бо мені «дуже сильно поскаржились»))))

Дякую за відповідь і ще раз дякую за круту статтю

якась нездорова історія...

Тепер я редагую статті тільки під цю пісню 👍😄

Підписатись на коментарі