Home Assistant, Python и Docker

26 июля 2019, 05:03
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

Все новости мира умных домов - t.me/SprutAI_News или Instagram
Остались вопросы? Мы в Telegram - @Soprut

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. (lolik52)
    (lolik52) 10 месяцев назад

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

  2. (scr)
    (scr) 3 месяца назад

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

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

К списку блогов

Похожие записи

13 февраля 2019, 22:00
Подключение радио на Xiaomi Gateway к Home Assistant c дальнейшим использованием в автоматизациях
19 апреля 2019, 20:53
Требуется ваше мнение!
06 февраля 2019, 12:02
Автоматизированное открытие/закрытие окна
04 апреля 2019, 12:45
Самое важное из апдейта Home Assistant 0.91-0.91.4 от 03.04.19.
21 марта 2019, 11:59
Самое важное из апдейта Home Assistant 0.9 от 20.03.19.
21 февраля 2019, 21:12
Самое важное из апдейта Home Assistant 0.88 от 20.02.19.
19 января 2019, 20:49
Делюсь новостями по проекту.
07 февраля 2019, 21:12
Самое важное из апдейта Home Assistant 0.87 от 06.02.19.
20 мая 2019, 20:54
Добавляем Телевизор в Homekit c помощью новых возможностей Home Assistant версии 0.93 и кастом компонента SmartIR MediaPlayer.