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

28 сентября 2019, 16:18

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

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

Если видите нечто похожее - значит, всё установлено верно! Рамкой выделено выполнение нашей тестовой автоматизации.
Мы почти у цели - осталось только создать сервис для автоматического запуска 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
1600x_image.png?1569664272

Посмотреть примеры автоматизаций можно у нас на портале: Статья №1, Статья №2 и в репозитории AppDaemon.

Вот, собственно, и всё. Если остались какие-то вопросы, пишите в комментариях.

Спасибо за внимание!


Все новости мира умных домов - t.me/SprutAI_News

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

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

    Отличная статья! И отдельный лайк за оформление!

  2. (Brain)
    (Brain) отредактировано 16 дней назад

    Таки водятся еще на Руси староверы, которые слово блин приносят через ять )

    Почему Stretch, а не Buster ?

    • Антон Набатчиков (Anton0_0)

      Потому что, когда собирал образ, ещё не было Buster, а пересобираться на третьей rpi не вижу смысла

  3. Антон Киселёв (Whilser)
    Антон Киселёв (Whilser) 16 дней назад

    Интересно какие у вас автоматизации, что стало не хватать стандартных средств ХА. Там же можно шаблоны применять, это фактически тот же самый питон. 

    • Антон Набатчиков (Anton0_0)

      Мне необходимо оперировать несколькими произвольными переменными, менять их значения в соответствии с происходящими действиями в системе, дальше анализировать их значения и выполнять определённые действия. В алгоритмическом плане такие автоматизации элементарны и пишутся за 5 минут на питоне - что я и сделал. Простые автоматизации хранятся в HA, сложные (в плане реализации на HA) - в AppDaemon.

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

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

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