Статья

5 полезных автоматизаций под Home-assistant. Часть 1. Системные.

Я продолжу очернять в глазах общественности домотикз, и восхвалять 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 который я когда-то нахваливал :) 

2000x2000x_image.png?1549468028

А что там неудобного ?)

Ну человек ко всему привыкает, кто-то до сих пор подходит к выключателю что-бы выключить свет =DDDD

Пока лучшая реализация пресетов для сценариев была замечена в смарсинке от гнуса

Что куча народу его накупила, а теперь спрашивают как его в HA прокинуть :)

Я сам пользуюсь включателем)

Годная статья! Утащу себе пару вещей)

Благодарю. 

Уведомления это конечно не плохо, лишним не будет. Давай продолжение про автоматизации с сервисами или системами или устройствами.

У меня была мысль сделать цикл статей по автоматизации (собственно в названии так и появилась часть 1), но понял, что прям сложных и интересных у меня то и не много, все совсем банально: про свет, да вентиляцию.

Но если ты приведешь конкретные примеры чего хотелось бы, я думаю озадачусь написанием ) 

Статья классная, стиль, вообще, огонь...даже не понимая о чём речь, то всё-равно не оторваться! ;)

И понял, что нужно поднять свой уровень знаний по Home Assistant до уровня новичка 😎

Ай спасибо!

Спасибо за статью. Взял пару автоматизаций себе. Пара замечаний по уведомлению о неудачной авторизации:

- здесь 

title: "{{ '\u26a0\ufe0f' }}Системное уведомление {{ '\ud83c\udf88' }"

 забыта вторая фигурная скобка, без нее не работает, по крайней мере, нотификация на телеграм.

- предлагаю добавить еще одно действие в action, удаление уведомления, так как пока оно висит, нотификация больше не приходит. А если будет реальная атака с перебором паролей Вы и не узнаете об этом, так как автоматизация сработает только один раз.

  - service: persistent_notification.dismiss 
data:
notification_id: http_login

 


Да, верно. Просто в этом уведомлении 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 организовать, все поставил, как всё заставить работать не понятно =( 


Вернуться назад

Устройства


Raspberry Pi

Raspberry Pi 4

(16 отзывов)

Вернуться назад