Статья

Установка AppDaemon в виртуальное окружение Python

Для чего нужна данная статья?

Всё началось с того, что мне стало не хватать стандартных автоматизаций 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.


Вернуться назад

Устройства


Raspberry Pi

Raspberry Pi 3 Model B+

(22 отзыва)

Вернуться назад