Для чего нужна данная статья?
Всё началось с того, что мне стало не хватать стандартных автоматизаций HomeAssistant (HA) - либо их было очень сложно реализовать, либо совсем невозможно. И в один прекрасный день в нашем замечательном чате я узнал о существовании AppDaemon, автоматизации в котором пишутся на языке Python.
Наш коллега, Павел, уже рассказал, что такое AppDaemon, поэтому повторяться не буду.
Информации по установке в Docker достаточно много, в статье Павла она тоже есть. Но Докером я не пользуюсь, а HA у меня установлен в виртуальное окружение Python. Поэтому и Appdaemon я буду ставить туда же.
Во время установки у меня возникли некоторые трудности из-за того, что несколько шагов в официальной документации либо пропущены, либо разбросаны в хаотичном порядке по всей документации. Поэтому я и решил написать подробную пошаговую инструкцию по установке AppDaemon в виртуальное окружение Python.
Данная статья будет полезна новичкам, но может сэкономить время и опытным пользователям. Приступим.
Установка
Я буду производить установку на Raspberry Pi Model 3B с Raspbian Stretch в качестве ОС.
Версия HA - 0.98.5. Версия Python - 3.7.3.
Подключаемся к нашему серверу по SSH и обновляем пакеты:
sudo apt update && sudo apt upgrade -y
Внимание!
В официальной документации сказано НЕ устанавливать Appdaemon в то же виртуальное окружение, что и HA, иначе HA перестанет работать! А создавать виртуальное окружение лучше от пользователя HA.
Создаём директорию для установки AppDaemon и назначаем хозяином пользователя HA (у меня это homeassistant):
cd /srv sudo mkdir appdaemon sudo chown homeassistant:homeassistant appdaemon
Далее заходим в пользователя HA, создаём виртуальное окружение и запускаем его:
sudo -u homeassistant -H -s cd /srv/appdaemon python3.7 -m venv. source bin/activate
Устанавливаем AppDaemon:
pip3 install appdaemon
Создаём директорию, в которой будут храниться конфигурационные файлы AppDaemon:
cd /home/homeassistant/.homeassistant mkdir appdaemon cd appdaemon
Теперь создадим долгосрочный токен доступа в HA: открываем веб-интерфейс HA, идём в свой профиль, спускаемся в самый низ и жмём "СОЗДАТЬ ТОКЕН", появляется всплывающее окно с предложением ввести имя токена, пишем AppDaemon и жмём "ОК". Появляется ещё одно всплывающее окно, в котором будет наш токен - копируем его куда-то, он нам скоро понадобится.
Создаём файл appdaemon.yaml:
nano appdaemon.yaml
Вставляем в него следующее и сохраняем:
appdaemon: threads: 10 plugins: HASS: type: hass ha_url: "Ссылка на HA (пример: http://192.168.0.204:8123)" token: "Токен, который получили выше"
Подробные настройки конфигурационного файла можно найти тут.
Далее создаём директорию, в которой будут храниться все наши автоматизации:
mkdir apps
И сразу можем создать тестовую автоматизацию, которая будет писать в консоль приветствие:
cd apps nano hello.py
Вставляем следующее и сохраняем:
import appdaemon.plugins.hass.hassapi as hass # # Hello World App # # Args: # class HelloWorld(hass.Hass): def initialize(self): self.log("Hello from AppDaemon") self.log("You are now ready to run Apps!")
Нам потребуется ещё один файл, в котором мы будем указывать, какие автоматизации необходимо запускать:
nano apps.yaml
Вставляем информацию о созданной тестовой автоматизации и сохраняем:
hello_world: module: hello class: HelloWorld
module – название файла, в котором хранится код автоматизации. В нашем случае hello.py.
class – название класса в данной автоматизации.
Теперь проверяем, что всё установлено и настроено верно:
appdaemon -c /home/homeassistant/.homeassistant/appdaemon
Если видите нечто похожее - значит, всё установлено верно! Рамкой выделено выполнение нашей тестовой автоматизации.
Мы почти у цели - осталось только создать сервис для автоматического запуска AppDaemon после старта HA ;)
Останавливаем AppDaemon нажатием Ctrl C и выходим из под шелла пользователя HA командой exit.
Создаём сервис:
sudo nano /etc/systemd/system/appdaemon@homeassistant.service
Вставляем в него следующее и сохраняем:
[Unit] Description=AppDaemon After=homeassistant@homeassistant.service [Service] Type=simple User=%I ExecStart=/srv/appdaemon/bin/appdaemon -c /home/homeassistant/.homeassistant/appdaemon [Install] WantedBy=multi-user.target
Активируем наш сервис и запускаем его:
sudo systemctl --system daemon-reload sudo systemctl enable appdaemon@homeassistant.service sudo systemctl start appdaemon@homeassistant.service
Проверим статус нашего сервиса:
sudo systemctl status appdaemon@homeassistant.service
Посмотреть примеры автоматизаций можно у нас на портале: Статья №1, Статья №2 и в репозитории AppDaemon.
Вот, собственно, и всё. Если остались какие-то вопросы, пишите в комментариях.
Спасибо за внимание!
Отличная статья! И отдельный лайк за оформление!
Спасибо)
Интересно какие у вас автоматизации, что стало не хватать стандартных средств ХА. Там же можно шаблоны применять, это фактически тот же самый питон.
Мне необходимо оперировать несколькими произвольными переменными, менять их значения в соответствии с происходящими действиями в системе, дальше анализировать их значения и выполнять определённые действия. В алгоритмическом плане такие автоматизации элементарны и пишутся за 5 минут на питоне - что я и сделал. Простые автоматизации хранятся в HA, сложные (в плане реализации на HA) - в AppDaemon.