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). И вообще без докера тоже работает.