Блог

Home Assistant, Python и Docker

Home Assistant, на момент написания статьи, насчитывает более 1400 интеграций (в том числе компонентов). Для подключения такого количества разнообразных устройств используются более 650 python-библиотек. Некоторые из этих библиотек написаны специально для Home Assitant, некоторые для совсем других проектов огромного python-сообщества.

Home Assitant на основании вашего config файла сам определяет какие вы используете компоненты и какие вам нужны библиотеки и сам их устанавливает при старте. При этом они складываются в папку с конфигами: /config/deps/...

Часто это является причиной кучи ошибок. Не все библиотеки платформо-независимы и просто так не поставятся в Windows или нетипичную версию Linux.

Также это очень тормозит первый старт при добавлении в config нового компонента.

В Docker версии Home Assistant нет этих проблем - все 650 библиотек установлены изначально, нужны они вам или нет. И Home Assistant всегда успешно запустится и будет работать там, где уже работает Docker. Только учтите, что Docker версия под Raspberry и аналоги отличается от версии для Desktop.

Часто при использовании Docker возникают вопрос: как в него доустановить свои python-скрипты.

Использовать python скрипты в Home Assistant в Docker можно несколькими способами:

  • модуль Python Scripts - позволяет использовать очень ограниченные функции python, например вам нельзя использовать import, а следовательно и другие полезные бибилотеки
  • написать свой Custom Component - Home Assistant при первом запуске этого компонента сам скачает и установит недостающие библиотеки
  • использовать Shell Command, которая вызовет ваш python-скрипт, но недостающие библиотеки должны быть установлены вами самостоятельно

Самостоятельно доустановить необходимые библиотеки не сложно - необходимо войти в консоль уже запущенного контейнера Home Assistant и выполнить pip install. Проблема в том, что при каждом обновлении Home Assistant эту процедуру необходимо будет повторять (особенности работы Docker).

Проще всего доверить установку всех библиотек самому Home Assistant. Начиная с версии 0.94 он устанавливает библиотеки глобально в систему (только Docker версия). Установленные таким образом библиотеки будут работать и внутри Home Assistant и в внешних shell скриптах.

Для этого пишем пустой кастомный компонент по инструкции разработчиков.

/config/custom_components/hello_state/__init__.py

DOMAIN = 'hello_state' async def async_setup(hass, config): return True

Добавляем в него необходимые вам зависимости, например ssh-клиент paramiko.

/config/custom_components/hello_state/manifest.json

{ "domain": "hello_state", "name": "Hello State", "documentation": "https://www.home-assistant.io/", "dependencies": [], "codeowners": ["AlexxIT"], "requirements": ["paramiko"] }

Прописываем новый компонет в /config/configuration.yaml, иначе он не загрузится:

hello_state:

При первой загрузке Home Assistant установит всё что вы попросили:

2019-07-26 07:30:22 INFO (SyncWorker_9) [homeassistant.util.package] Attempting install of paramiko 2019-07-26 07:32:08 INFO (MainThread) [homeassistant.setup] Setting up hello_state 2019-07-26 07:32:08 INFO (MainThread) [homeassistant.setup] Setup of domain hello_state took 0.0 seconds.

Для проверки создадим python-скрипт /config/script1.py

from paramiko import SSHClient, AutoAddPolicy client = SSHClient() client.set_missing_host_key_policy(AutoAddPolicy()) client.connect('192.168.1.123', username='pi', password='raspberry') stdin, stdout, stderr = client.exec_command('ls') data = stdout.read() + stderr.read() client.close() print(data)

И поправим файл конфигурации /config/configuration.yaml

sensor script1: - platform: command_line name: script1 command: python3 script1.py

Сенсор должен содержать результат выполнения python-скрипта. До скрипта не обязательно писать полный путь. Права доступа на скрипт тоже не должны вас беспокоить:

-rw-r--r-- 1 root root 301 Jul 26 07:49 script1.py


Привет, в synology станет ? или только малина ?

Очень многие используют Synology для HA в Docker

Понекрофилю немного. 

Четвертый способ - AppDaemon, швейцарский Python нож для Home Assistant. Работает и с докером и с HA (который бывший Hass.io). И вообще без докера тоже работает.


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