Что это такое 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

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

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

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

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

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

  3. Павел Яцкевич (paulig)
    Павел Яцкевич (paulig) 26 дней назад

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

    • (rupunx)
      (rupunx) 26 дней назад

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

    • (Brain)
      (Brain) 26 дней назад

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

      • Павел Яцкевич (paulig)
        Павел Яцкевич (paulig) 26 дней назад

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

  4. (alm)
    (alm) 26 дней назад

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

  5. Павел Яцкевич (paulig)
    Павел Яцкевич (paulig) 26 дней назад

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

  6. Антон Самсонов (samsonovs)

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

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

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

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