Введение
Для обновления из уведомления я не нашел других способов, кроме как с использованием SSH addon. Причем, похоже, из-за использования tmux, ни хостовый SSH, ни аддоновский, - не хочет нормально принимать команды вроде ha core update в неинтерактивном режиме - например, через paramiko. Поэтому берем за факт, что нам понадобится вышеозначенный аддон.
Если же Вы хотите только уведомление, без возможности обновиться прямо из него - аддон Вам не понадобится.
Создаем само уведомление
Уведомление может появляться множество раз, если его выкидывать и при этом не производить обновление. Для обхода подобных ситуаций пришлось пойти на хитрость - создать input_text, в котором хранится версия Home Assistant, о которой уведомление уже отправлялось.
Затем создаем автоматизацию:
- alias: Update Available initial_state: on trigger: platform: state entity_id: binary_sensor.updater to: 'on' condition: - condition: template value_template: "{{ not is_state('input_text.ha_version', state_attr('binary_sensor.updater', 'newest_version')) }}" action: - service: notify.mobile_app data_template: title: Доступен Home Assistant Core {{ state_attr('binary_sensor.updater', 'newest_version') }} message: "Изменения: {{ state_attr('binary_sensor.updater', 'release_notes') }}" data: push: category: UPDATE - service: input_text.set_value data_template: entity_id: input_text.ha_version value: "{{ trigger.to_state.attributes.newest_version }}"
Автоматизация срабатывает по включению датчика binary_sensor.updater.
Далее происходит проверка что уведомление об этой версии еще не отсылалось.
И в случае, если не отсылалось, это происходит сейчас.
А затем номер текущей версии записывается в input_text, о котором я писал чуть выше.
Не забываем заменить все input_text.ha_version и notify.mobile_app если они у вас названы иначе.
Для уведомления с возможностью обновиться из него, важна следующая часть:
data: push: category: UPDATE
Именно по ней приложение узнает какие кнопки отобразить для этого уведомления.
Взаимодействие с аддоном
Аддон SSH имеет способ передать в него команду из Home Assistant. Нужно использовать сервис hassio.addon_stdin.
Привожу ниже автоматизацию, которая заставит Home Assistant отозваться на нажатие кнопки в уведомлении и отправить команду на обновление в аддон SSH:
- alias: Update initial_state: on trigger: platform: event event_type: ios.notification_action_fired event_data: actionName: UPDATE action: service: hassio.addon_stdin data: addon: a0d7b954_ssh input: ha core update
Настройка приложения
Теперь нам надо научить приложение какие кнопки выводить в случае если category: UPDATE.
Итог всего этого действа будет выглядеть примерно так.
Кнопка "обновить сейчас" будет делать ровно то же самое, что кнопка UPDATE на странице Supervisor.
Кнопка "Позже" не будет делать ничего заметного, кроме скрытия уведомления.
Послесловие
В процессе написания подумал, что кнопка "Позже" может, например, запускать таймер на какое-то время, а затем снова присылать напоминание, если обновление на тот момент еще не было произведено вручную.
Если у кого-то будут еще какие-то мысли по доработке, добро пожаловать в комментарии.
Всем заинтересовавшимся удачи в реализации.