Что это такое AppDaemon?

23 августа 2019, 09:52

AppDaemon - это среда Python, предназначенная для написания приложений автоматизации для проектов домашней автоматизации. В том числе, написания автоматизаций на чистом Python для HomeAssistant.

Установка Appdaemon

3 способа установки:

  • официальный аддон для hass.io  (frenck);
  • установка при помощи pip3 (sudo pip3 install appdaemon);
  • установка в Docker.

Рассмотрим установку AppDaemon в Docker

Перед тем как пойти дальше, вы должны убедиться, что этот самый Docker у вас стоит. Есть отличная статья по его установке и настройке от нашего автора. 

Для начала надо создать долгосрочный токен в HomeAssistant. Для этого заходим в HA, нажимаем на свой профиль, в самом низу находим "Долгосрочные токены доступа" и выбираем "Создать токен". Вводите название токена (например, AppDaemon) и далее полученный токен сохраняем куда-нибудь, он нам понадобится.

Теперь начинаем установку AppDaemon в Docker. Для начала, я рекомендую создать папку, куда будут сохранятся конфиги. Например, у меня это /home/docker/appdaemon. После чего запускаем контейнер:


docker run --name=appdaemon -d -p 5050:5050 \
  --restart=always \
  -e cert_verify="Flase"\
  -e dash_url="http://192.168.XX.XX:5050"\
  -e HA_URL="https://192.168.xx.xx:8123" \
  -e TOKEN="<ваш TOKEN который получили в HA>" \
  -v /home/docker/appdaemon:/conf \
  acockburn/appdaemon:latest

Пишем первую автоматизацию

Для этого открываем в папке с конфигом файл apps/apps.yaml. 

По умолчанию там прописан HelloWorld:

hello_world:
  module: hello
  class: HelloWorld

Дописываем свою первую автоматизацию, к примеру, давайте сделаем так: при включении света в туалете включается вытяжка, а при выключении - вытяжка будет выключатся по таймеру через 5 минут. Но если 5 минут не прошло, и мы снова включаем свет, то сбрасываем таймер выключения вытяжки.

Для этого вписываем в apss.yaml:

hello_world:
  module: hello
  class: HelloWorld

toilet_fan:
  module: toiletfan # тут пишется название вашего файла с автоматизацией, в нашем случае это будет toiletfan.py
  class: ToiletFan # тут пишется название класса в файле toiletfan.py

Далее создаем файл toiletfan.py, где и будет расписана наша автоматизация.

import appdaemon.plugins.hass.hassapi as hass

#
# Toilet Fan Control
#

class ToiletFan(hass.Hass):
    handle = None
    delay = 300 # задержка 300 сек

    def initialize(self):
        self.log("Toilet FAN App run")
        self.listen_state(self.turn_fan_on, "switch.toilet", attribute="all")
        # тут мы подписываемя на изменение состояния выключателя у меня это switch.toilet
 # attribute="all" означает что будут отслеживатся не только state но и все аттрибуты
# т.е. при любом изменении любого аттрибута switch.toilet будет вызыватся функция turn_fan_on

    def turn_fan_on(self, entity, attribute, old, new, kwargs):
        # self.log('Old: {}'.format(old))
        # self.log('New: {}'.format(new))
        # тут проверяется если state выключателя перешел из состояния off в on
        # то сбрасывается таймер
        # и включается вытяжка у меня это switch.toilet_fan
        if old['state'] == 'off' and new['state'] == 'on':
            self.cancel_timer(self.handle)
            self.turn_on(entity_id="switch.toilet_fan")
            
        # тут проверяется если state выключателя перешел из состояния on в off
        # то запускаем функцию на выключене вытяжки с задержкой 300сек (delay = 300)
        if old['state'] == 'on' and new['state'] == 'off':
            self.handle = self.run_in(self.turn_fan_off, self.delay)
# эта функция отключения вытяжки
    def turn_fan_off(self,delay):
        self.log("Off after {}s".format(delay))
        self.turn_off(entity_id="switch.toilet_fan")

Как только вы сохраните этот файл, AppDaemon автоматически запустит эту автоматизацию. Он отслеживает изменения файлов в папке apps и как только появится новый файл *.py, и если он правильно прописан в apps.yaml, то автоматизация сразу начинает работать.

Вот и все, для начала. Это моя первая статья, просьба сильно меня не пинать. ))))

Если есть интерес, могу описать более сложные автоматизации. К примеру, как заставить Xiaomi Gateway заговорить (TTS), или как использовать уже готовые apps на AppDaemon (Heaty, Alarm). Ну или как запустить Dashboard на AppDaemon и что это даст. )))

Больше информации по всем функциям смотрите тут или тут.


Все новости мира умных домов - t.me/SprutAI_News или Instagram
Остались вопросы? Мы в Telegram - @Soprut

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. Дмитрий Батюшин (ReD)
    Дмитрий Батюшин (ReD) 4 месяца назад

    Конечно хочется увидеть более сложные автоматизации. Ждем продолжение 

  2. Алексей Таянов (tayanov)
    Алексей Таянов (tayanov) 4 месяца назад

    Может я упустил. Но в чем приемущество? Что можно сделать чего нельзя сделать простыми автоматизациями?

  3. Павел Яцкевич (paulig)
    Павел Яцкевич (paulig) 4 месяца назад

    для меня самое главное преимущество в том что тут пишешь просто на Python, а не эти долбанные непонятные YAML автоматизации))) Если честно для меня был ад делать автоматизации на YAML. И когда я открыл AppDAemon я просто радовался как ребенок. И второе преимущество что ты можешь выходит за рамки автоматизаций HA. Я обязательно напишу еще статьи на эту тему. Одна из них как заставить говорить Xiaomi Gateway.

    • (rupunx)
      (rupunx) 4 месяца назад

      О! Как говорить - вот этого точно не хватало.

    • (Brain)
      (Brain) 4 месяца назад

      Вы серьезно считаете, что на питоне проще писать нежели стряпать банальный конфигурационный yaml ? ))

      • Павел Яцкевич (paulig)
        Павел Яцкевич (paulig) 4 месяца назад

        Конечно! Для меня да! Почему это будет понятнее после того когда напишу еще статьи. Это скажем так вводная статья.

  4. (alm)
    (alm) 4 месяца назад

    Про  HADashboard будет продолжение? 

  5. Павел Яцкевич (paulig)
    Павел Яцкевич (paulig) 4 месяца назад

    да тоже думал написать. я пока его не использую, но у него есть очень классные фичи думал хотя бы в общем это описать и что мне очень в нем понравилось

  6. Антон Самсонов (samsonovs)
    Антон Самсонов (samsonovs) 4 месяца назад

    спасибо, давно ждал эту статью

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

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

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