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

05 февраля 2019, 15:27

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


Все новости мира умных домов - t.me/SprutAI_News

Остались вопросы? Мы в Telegram - t.me/soprut

  1. Олег Челбаев (sprut)
    Олег Челбаев (sprut) 4 месяца назад

    О, новая статейка - отлично ;) спасибо за труды праведные )

    • Олег Челбаев (sprut)
      Олег Челбаев (sprut) 4 месяца назад

      Хороший пример, но как же убого в 21 веке писать скрипты =( о прогресссссс

      ПС надеюсь доживём до тимплейтов которые можно подгрузить в один клик )))

      • Белояр Иван (Ivan711)
        Белояр Иван (Ivan711) 4 месяца назад

        Ты как всегда в точку (ну разве что с колобком не удобно получилось, ахаха). 

        Про скрипты я выскажу такую аллегорию - если долго кушать какашки, то они потихоньку начинают нравиться, так и тут - когда есть понимание, то с написанием проблем нет. К слову в HA уже довольно давно прикрутили некое подобие настройки автоматизаций через интерфейс, но мне оно уже не зашло. Хотя для новичков - я думаю это будет гораздо проще. Проще даже чем blockly который я когда-то нахваливал :) 

        2000x2000x_image.png?1549468028
        • Олег Челбаев (sprut)
          Олег Челбаев (sprut) 4 месяца назад

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

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

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

          • Белояр Иван (Ivan711)
            Белояр Иван (Ivan711) 4 месяца назад

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

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

  2. Александр Жабунин (OXOTH1K)

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

  3. Роман П (Gigru)
    Роман П (Gigru) отредактировано 4 месяца назад

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

    • Белояр Иван (Ivan711)
      Белояр Иван (Ivan711) 4 месяца назад

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

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

  4. Алексей Новосельцев (novo)

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

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

  5. Ружинский Олег (acidquest)
    Ружинский Олег (acidquest) 4 месяца назад

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

    - здесь  title: "{{ '\u26a0\ufe0f' }}Системное уведомление {{ '\ud83c\udf88' }"  забыта вторая фигурная скобка, без нее не работает, по крайней мере, нотификация на телеграм.

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

      - service: persistent_notification.dismiss 
        data: 
          notification_id: http_login 

     

    • Белояр Иван (Ivan711)
      Белояр Иван (Ivan711) отредактировано 4 месяца назад

      Да, верно. Просто в этом уведомлении title я не пользовался, собственно он даже сюда попал закомментированный. Щас поправлю. 

      По второму пункту - прям в точку, добавил себе, и с твоего позволения и в статью это тоже добавлю)

      У меня была мысль отслеживать изменение sensor.badlogin, но в итоге не стал заморачиваться, потому что 3 не верных попытки и ip баниться. 

  6. Белояр Иван (Ivan711)
    Белояр Иван (Ivan711) отредактировано 4 месяца назад
    Комментарий был удален
  7. (maikl)
    (maikl) 4 месяца назад

    А под андроид как сделать?

К списку статей

Похожие статьи

15 ноября 2018, 09:42
Способы автоматизации механических ворот
15 июня 2018, 12:13
Охранная система в гараж на ESP8266 с интеграцией в Apple HomeKit
24 августа 2018, 12:18
Пошаговая установка HomeAssistant
27 августа 2018, 10:14
Интегрируем ХА в HomeKit
01 ноября 2018, 09:27
Настройка Deconz USB стика ConBee от Dresden Elektronik в Hass.io и некоторые особенности эксплуатации
25 ноября 2018, 18:23
Умное зеркало добавляем модули Airplay и Google Calendar
04 апреля 2019, 17:48
Расскажу о том за ~1 час перевезти УД с 2мя USB стиками с Raspberry PI на Synology NAS.
03 октября 2018, 22:03
Как собрать и настроить Hyperion Ambilight - адаптивную подсветку ТВ.
20 октября 2018, 22:57
Теоретические основы протокола MQTT и описание того, как он работает и для чего используется
24 августа 2018, 10:15
Краткий экскурс в настройку Home Assistant