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 и что это даст. )))
Конечно хочется увидеть более сложные автоматизации. Ждем продолжение
Может я упустил. Но в чем приемущество? Что можно сделать чего нельзя сделать простыми автоматизациями?
для меня самое главное преимущество в том что тут пишешь просто на Python, а не эти долбанные непонятные YAML автоматизации))) Если честно для меня был ад делать автоматизации на YAML. И когда я открыл AppDAemon я просто радовался как ребенок. И второе преимущество что ты можешь выходит за рамки автоматизаций HA. Я обязательно напишу еще статьи на эту тему. Одна из них как заставить говорить Xiaomi Gateway.
О! Как говорить - вот этого точно не хватало.
Про
HADashboard будет продолжение?
да тоже думал написать. я пока его не использую, но у него есть очень классные фичи думал хотя бы в общем это описать и что мне очень в нем понравилось
спасибо, давно ждал эту статью
Статья в принципе не плохая. Только из всего написанного мне совершенно не понятно, а как собственно запускается подобная автоматизация. Все что я увидел это создание класса на python. Как сделать так чтобы запустить на выполнение все функции прописанные в этом классе?