Я продолжу очернять в глазах общественности домотикз, и восхвалять home-assistant, как лучшее, рукотворное решение для домашней автоматизации.
И так, написав пару статей, я провел некоторую диванную аналитику, выводы следующие: статьи нужны для совсем новичков, кто в теме - все обосрут сами разберутся
Собственно, статья будет стоять из примеров полезных (на мой взгляд) автоматизаций, тесно связанных с уведомлениями и кое чего еще (интрига). В этой статье конечно будет больше первого, потому что второе это картинка в конце поста (интрига разрушена).
Что интересно - все эти автоматизации настраиваются, без малейшего использования командной строки. Если вы используете что-то отличное от home-assistant, скорее всего вы будете ощущать легкое раздражение, в области.. Стоп, а зачем Вы это вообще читаете?
Что важно - кликабельные уведомления, настроены под нативный пуш iOS, о чем подробнее можно почитать здесь. Собственно не что не мешает переделать их под телегу, но я об этом рассказывать не буду, потому что это незаконно. ахаха.
В первой части, пробежимся по системным.
И такккккк. Первые два, банальные, и скорее всего вы ими уже пользуетесь. Если нет, то чего же вы ждете???
Уведомлении о включении
- alias: Hass Startup Notification #Уведомление о включении процесса initial_state: 'on' trigger: - platform: homeassistant event: start action: service: notify.notify #здесь подставляем свое data: title: "{{ '\ud83c\udd97' }} Системное уведомление" message: "{{ '\ud83c\udfc1' }} Cервер запущен в {{ states('sensor.time') }}. Адрес сервера {{ states('sensor.external_ip') }}"
Тут, как мы видим, в уведомлении прилетает еще ip адрес. Для него мы подключили следующий сенсор. И сенсор time
############# Внешний ip адрес ########### - platform: rest resource: http://ip.jsontest.com name: External IP value_template: '{{ value_json.ip }}' ############ Сенсор времени ############ - platform: time_date display_options: - "time" #Это время - "date" # Это ставим если нужен отдельно сенсор даты
Уведомление о выключении
- alias: Home Assistant Stop - Notify #Уведомление - о остановке процесса HA initial_state: 'on' trigger: platform: event event_type: homeassistant_stop action: - service: notify.notify data: title: Home Assistant message: "{{ '\u2757\ufe0f' }} Сервер остановлен в {{ states('sensor.time') }}"
Дальше пробежимся по безопасности.
Уведомление о неудачной попытке авторизации.
- alias: Login Failure #Уведомление о неверном вводе логина и пароля initial_state: 'on' hide_entity: false trigger: - platform: state entity_id: persistent_notification.http_login condition: - condition: template value_template: "{{ trigger.to_state.state != off }}" action: - service: notify.notify data: title: "{{ '\u26a0\ufe0f' }}Системное уведомление {{ '\ud83c\udf88' }}" message: "{{ '\ud83d\udcbb' }} Warning - Не удачная попытка подлючения. Не верно введен пароль. Всего попыток зафиксировано: {{ states('sensor.badlogin') }} {{ states.persistent_notification.http_login.attributes.message }}" data: push: sound: "wrong.mp3" #Это, опять же звуки которые мы подгрузили заранее в приложение Home-assistant companion badge: 0 category: "hastop" - service: persistent_notification.dismiss data: notification_id: http_login
По сколько у меня сервер с НА смотрит наружу, и добавил в уведомление возможность выключить сервер (Для конкретно этой реализации используется Docker, dockermon)
#Это в автоматизацию - id: push_notify_ha_stop #Выкл HA по ссылке в уведомлении alias: 'Push Notify HA STOP' initial_state: 'on' trigger: - platform: event event_type: ios.notification_action_fired event_data: actionName: HA_STOP action: - service: notify.notify data: title: Выключение! message: "{{ '\u26a0' }} Home-assistant выключен удаленно из соображений безопасности." - service: switch.turn_off entity_id: switch.homeassistant #Это в configuration.yaml ios: push: categories: - name: hastop identifier: hastop actions: - identifier: HA_STOP title: "Выключить Home-assistant" activationMode: 'background' authenticationRequired: yes destructive: yes behavior: 'default'
switch.homeassistant это собственно включатель, из docker-mon. Который позволяет отдельно включать и выключать процессы.
Как его установить? Я это делаю через docker-compose (архитектура под raspberry pi)
# docker-compose.yml docker_mon: image: tribunex/ha-dockermon-pi container_name: ha_dockermon restart: always volumes: - /var/run/docker.sock:/var/run/docker.sock -./dockermon/config:/config ports: - 8126:8126
#Это добавляем в switches - platform: rest name: Home-assistant resource: http://192.168.1.1:8126/container/homeassistant #Важно, путь у вас будет другой. Вставляем свой ip и имя контейнера body_on: '{"state": "start"}' body_off: '{"state": "stop"}' is_on_template: '{{ value_json is not none and value_json.state=="running" }}'
Бонусом добавим сенсор, который будет показывать количество неудачных попыток ввода пароля. Берем это из логов. После перезагрузки соответственно обнуляется.
#В sensors - platform: command_line name: badlogin command: grep -c 'Login attempt' /config/home-assistant.log value_template: '{{ value | int - 1 }}'
Следующим пунктом - появление новых устройств в сети. Тем самым легко можно отследить, что, к wifi подключился кто-то новый, и если это были не вы, самое время начать внутренние расследование :)
Новое устройство в сети
- id: New Device Connected alias: New Device Connected initial_state: 'on' trigger: - platform: event event_type: device_tracker_new_device action: - service: notify.notify data_template: title: "Системное уведомление" message: 'В сети появилось новое устройство'
Уведомление о доступных обновлениях
- alias: 'Update Available Notifications' #Уведомление о наличии обновлений initial_state: 'on' trigger: platform: state entity_id: updater.updater action: service: notify.notify data: title: Системное уведомление message: '{{ "\ud83c\udf0d" }} Update? Доступно новое обновление. Подробности на офциальном сайте.'
Ну и вместо заключения. Будет полезно сразу обозначить те уведомления, в которых есть кликабельные варианты выбора. Я это делаю смайликом шарика в title сообщения. А вы?
Ну и не правда ли приятно, если у каждой категории уведомлений будет свой звук. Это делаем так:
Подключаем телефон к айтюнс (о да, я знаю, как вы это любите)
Ищем приложение home-assistant и скидываем туда, предварительно запоминая имя файла.
Затем заходим в приложение на ios - настройки, notification - import sounds.
Ну все, дальше уже сами!
UPD: Подкорректировал автоматизацию об безуспешной авторизации. Спасибо acidquest
О, новая статейка - отлично ;) спасибо за труды праведные )
Хороший пример, но как же убого в 21 веке писать скрипты =( о прогресссссс
ПС надеюсь доживём до тимплейтов которые можно подгрузить в один клик )))
Ты как всегда в точку (ну разве что с колобком не удобно получилось, ахаха).
Про скрипты я выскажу такую аллегорию - если долго кушать какашки, то они потихоньку начинают нравиться, так и тут - когда есть понимание, то с написанием проблем нет. К слову в HA уже довольно давно прикрутили некое подобие настройки автоматизаций через интерфейс, но мне оно уже не зашло. Хотя для новичков - я думаю это будет гораздо проще. Проще даже чем blockly который я когда-то нахваливал :)
А что там неудобного ?)
Ну человек ко всему привыкает, кто-то до сих пор подходит к выключателю что-бы выключить свет =DDDD
Пока лучшая реализация пресетов для сценариев была замечена в смарсинке от гнуса
Что куча народу его накупила, а теперь спрашивают как его в HA прокинуть :)
Я сам пользуюсь включателем)
Годная статья! Утащу себе пару вещей)
Благодарю.
Уведомления это конечно не плохо, лишним не будет. Давай продолжение про автоматизации с сервисами или системами или устройствами.
У меня была мысль сделать цикл статей по автоматизации (собственно в названии так и появилась часть 1), но понял, что прям сложных и интересных у меня то и не много, все совсем банально: про свет, да вентиляцию.
Но если ты приведешь конкретные примеры чего хотелось бы, я думаю озадачусь написанием )
Статья классная, стиль, вообще, огонь...даже не понимая о чём речь, то всё-равно не оторваться! ;)
И понял, что нужно поднять свой уровень знаний по Home Assistant до уровня новичка 😎
Ай спасибо!
Спасибо за статью. Взял пару автоматизаций себе. Пара замечаний по уведомлению о неудачной авторизации:
- здесь
title: "{{ '\u26a0\ufe0f' }}Системное уведомление {{ '\ud83c\udf88' }"
забыта вторая фигурная скобка, без нее не работает, по крайней мере, нотификация на телеграм.
- предлагаю добавить еще одно действие в action, удаление уведомления, так как пока оно висит, нотификация больше не приходит. А если будет реальная атака с перебором паролей Вы и не узнаете об этом, так как автоматизация сработает только один раз.
Да, верно. Просто в этом уведомлении title я не пользовался, собственно он даже сюда попал закомментированный. Щас поправлю.
По второму пункту - прям в точку, добавил себе, и с твоего позволения и в статью это тоже добавлю)
У меня была мысль отслеживать изменение sensor.badlogin, но в итоге не стал заморачиваться, потому что 3 не верных попытки и ip баниться.
Все верно. Просто в этом уведомлении title я не использовал, собственно он даже сюда попал закомментированный. Щас поправлю.
У меня была мысль триггерить не появление уведомления, а сенсор sensor.badlogin, но отказался потому что 3 попытки и ip баниться.
Предложенный тобой вариант добавил себе, и с твоего позволения, в статью это тоже добавил)
А под андроид как сделать?
Я думаю, что лучше всего через телеграм
я извиняюсь за тупой вопрос, а - alias уведомления, это в какой раздел? верхний уровень этого алиаса это что?
А как сделать голосовые оповещения не на телефон, а прямо на самой железке?
У меня ha на hass-супервизоре внутри докера и я не могу просто так взять и выполнить shell-команду на вопроизведение файла. А в случае с tts, гуглу наверняка придётся платить и работать это будет мега медленно (нужна не более 100мс задержка)
Гугл tts - это как раз то что тебе нужно. Он бесплатный, задержки почти нет (в мс не скажу)
Но tts нужен, если ты формируешь фразу с используем динамичных данных. Если просто одна и та же фраза, то можно использовать готовые файлы. Задержка будет ещё меньше
Но к слову, почему именно нужен мгновенный отклик? Как по мне у ттс будь задержка и пару секунд - это не критично
чаще всего больше 100мс — это значит уже поздно
сейчас могу немного другой кейс привести: решил всё же попробовать готовые беспроводные выключатели aqara, до этого всё делал сам и на проводах. Так вот использовать их невозможно: жмёшь, ничего не происходит, начинаешь им щёлкать тоже ничего. Особенно девушке было сложно объяснить что там зедержка почти в секунду — это на самом деле это говно так работает, а не сломано. Думаю разобрать теперь и переделать как следует корпус-то хороший.
И так со всем: не должно быть никаких задержек, потому что до того как появилась вся эта автоматизация, которая должна всё сделать лучше их не было. Нельзя ухудшать такие базовые необходимые вещи
Я как с малины слез на нормальный сервер на i3 - задержка по включению стала почти незаметна. А после того как слез с сяоми шлюза, на z2m включение стали моментальными.
Но это все касаемо света, и прочих включателей. С же tts даже если задержка будет 2 секунды, это не критично. Точнее я придумал только один кейс, в котором это важно - озвучивать изменения при нажатии на кнопки. Например для изменения температуры термостата. Но это автоматизация ради автоматизации - удобства она не добавляет.
Ок, мб тоже малину на что-то сменю. Но хочется бесшумное.
Шлюз конечно не использую, догадывался что это вообще никуда не годный подход.
От з2м тоже говорят можно отказаться и напрямую в HA завести и будет ещё быстрее
а задержка 2 секунды а помню прям очень неприятна. Но я в целом мало пока виду оправданных кейсов для разговоров с домом.
Но в некоторых случаях хочется голосовые оповещения. Чтобы лучше понимать что происходит. Тут нужна своевременность
для воспроизведения нашёл mopidy плагин, но он не работает
он встал, файлы видит, tts-записа получает и якобы играет, но звук не идёт
похоже в докере где-то теряется
Можно на конфиг взглянуть ? Хочу TTS + MOPIDY организовать, все поставил, как всё заставить работать не понятно =(