Установка и настройка Home Assistant на Raspberry Pi

Raspberry Pi. Установка Home Assistant

Дата Автор 46 комментариев 66 985 просмотров

Home Assistant — одна из наиболее популярных систем с открытым исходным кодом для организации «умного дома» своими руками.

Этой статьей я хочу начать цикл публикаций на тему умного дома. Для начала мы рассмотрим процесс установки и первичной настройки Home Assistant на базе микрокомпьютера Raspberry Pi, а в последующих статьях цикла будут рассматриваться интеграции устройств в Home Assistant в формате «одна статья — одна интеграция».

Что нам понадобится

Для осуществления описываемых в этой статье действий понадобится:

Сервер Home Assistant не требователен к «железу» микрокомпьютера, однако в процессе его работы происходит большое количество операций чтения-записи, что приводит к ускоренному исчерпанию ресурса microSD-карт.

Например, во время работы первой конфигурации у меня отказала microSD-карта, которую я использовал еще в 2017 году во время написания того самого обзора Raspberry Pi 3. Ее ресурса хватило на 3 года работы «малинки», но при постоянном логировании значений с нескольких подключенных к системе датчиков Home Assistant добил ее за месяц.

Как быть:

  • Вариант 1. Регулярно делать бэкапы и иметь резерв в виде 1-2 новых microSD-карт, чтобы при отказе одной карточки памяти можно было развернуть уже сконфигурированную систему на новом накопителе.
  • Вариант 2. Купить eMMC-чип и microSD-адаптер для него. В сравнении с microSD память стандарта eMMC обладает не только более высокой скоростью чтения-записи, но и на порядки большим ресурсом.
  • Вариант 3. Перенастроить Raspberry Pi для загрузки системы с подключенного по USB жесткого диска или SSD.

Более подробно о настройке загрузки Raspberry Pi с жесткого диска я рассказал в отдельной статье. А пока будем исходить из того, что система у нас грузится с microSD.

Также желательно иметь несколько сенсоров или «умных» устройств для интеграции. На начальном этапе можно обойтись и без них, но работать с системой, которая умеет мониторить лишь собственные показатели и прогноз погоды на ближайшее время не очень интересно.

Почему именно Home Assistant

Есть несколько причин, по которым из всего многообразия систем по управлению «умным домом» я предлагаю остановить свой выбор именно на Home Assistant.

  1. Огромное сообщество. А чем больше сообщество пользователей — тем больше найдено решений типовых проблем, тем легче войти в тему новичку. Home Assistant входит в топ-10 наиболее активно развивающихся проектов на GitHub, оставляя далеко позади другие популярные системы.
  2. Большое количество поддерживаемых устройств и экосистем. Естественное следствие из предыдущего пункта: большое количество пользователей создает большое количество интеграций, которые покроют 80% потребностей начинающего строителя «умного дома».
  3. Удобный UI и большие возможности его кастомизации. Можно по-разному относиться к лежащему в основе интерфейса Home Assistant материальному дизайну, но трудно не согласиться с одним: интерфейсы других популярных систем выглядят гораздо хуже.
  4. Совместимость с Apple Homekit «из коробки». Несмотря на то, что сам по себе Homekit обладает достаточно скромным функционалом и не может являться основой для действительно серьезного проекта умного дома, его можно использовать в связке с Home Assistant в качестве удобного пульта управления и для поддержки голосового управления через Siri.

Варианты установки Home Assistant

Установить сервер Home Assistant можно различными путями. Можно воспользоваться ручной установкой в виртуальное окружение Python или развернуть систему в Docker-контейнере, можно воспользоваться готовыми дистрибутивами Hass.io или Hassbian.

O Hass.io стоит рассказать отдельно. Этот проект являет собой готовые сконфигурированные образы для наиболее популярных моделей миккрокомпьютеров (на данный момент поддерживается вся линейка Raspberry Pi, Asus TinkerBoard, несколько моделей Odroid и линейка компьютеров Intel NUC). Образ содержит в себе операционную систему, готовый к работе Home Assistant и свой собственный менеджер аддонов, позволяющих производить все манипуляции по настройке Home Assistant прямо из веб-интерфейса.

Может показаться, что Hass.io — это идеальный вариант для начинающего, однако у проекта есть большой недостаток: пользователю не дается административного доступа к операционной системе. Соответственно, установив Hass.io на микрокомпьютер вы не сможете параллельно использовать его для других задач, несмотря на то что мощность Raspberry Pi 4 позволяет вытянуть на себе не только Home Assistant, но и еще пару-тройку сервисов.

Hassbian в свою очередь является дистрибутивом Raspbian с уже установленным в виртуальное окружение Python сервером Home Assistant. К сожалению, проект закрылся и сборок на базе свежих дистрибутивов Raspbian с установленными на них свежими версиями Home Assistant больше не выпускают.

Преимущества Недостатки
Hass.io Наиболее легкая установка, своя система бэкапов конфигурации Нет полного доступа к системе со всеми вытекающими из этого последствиями, совместимость с ограниченным рядом устройств
Ручная установка Полный контроль над системой Требуется хотя бы минимальное умение работы с Linux
Hassbian Те же плюсы, что и у ручной установки в виртуальное окружение Python Поддержка Hassbian официально прекращена в октябре 2019
Docker Надежность, легкость разворачивания и переноса Необходимо уметь работать с контейнерами Docker

Hass.io не устраивает меня отсутствием полного доступа к операционной системе, а работать с контейнерами Docker я пока что не умею. Поэтому в данной статье будет описан самый надежный и универсальный вариант с ручной установкой в виртуальное окружение Python.

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

Сначала обновим все пакеты:

sudo apt-get update
sudo apt-get dist-upgrade

Затем установим необходимые для Home Assistant пакеты:

sudo apt-get install python3 python3-dev python3-venv python3-pip libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential libopenjp2-7 libtiff5

Создадим нового пользователя homeassistant, под которым в дальнейшем и будет работать наш сервер умного дома:

sudo useradd -rm homeassistant -G dialout,gpio,i2c

Создадим новую папку для установки и добавим права на нее пользователю homeassistant:

cd /srv
sudo mkdir homeassistant
sudo chown homeassistant:homeassistant homeassistant

Теперь нужно переключиться на пользователя homeassistant и создать виртуальное окружение для установки и последующей работы Home Assistant:

sudo -u homeassistant -H -s
cd /srv/homeassistant
python3 -m venv .
source bin/activate

Установим дополнительный пакет Python:

python3 -m pip install wheel

И запустим установку Home Assistant:

pip3 install homeassistant

Дождавшись завершения установки (на что потребуется минуты три), запустим систему:

hass

Во время первого запуска Home Assistant создаст базовые конфигурационные файлы и будет загружать и устанавливать дополнительные модули для своей работы. Все эти процессы займут еще около 5-10 минут, причем уведомлений о готовности не будет. Понять, что первичная настройка завершена можно по статусу «Starting Zeroconf broadcast» в терминале:

Установка и настройка Home Assistant на Raspberry Pi

После этого Home Assistant станет доступен через веб-интерфейс по адресу http://ip-адрес-raspberry-pi:8123:

Установка и настройка Home Assistant на Raspberry Pi

Осталось добавить его в автозагрузку. Для этого создадим файл:

sudo nano /etc/systemd/system/home-assistant@homeassistant.service

Со следующим содержимым

[Unit]
Description=Home Assistant
After=network-online.target

[Service]
Type=simple
ExecStartPre=/bin/sleep 10 
User=%i
WorkingDirectory=/home/%i/.homeassistant
ExecStart=/srv/homeassistant/bin/hass -c "/home/%i/.homeassistant"

[Install]
WantedBy=multi-user.target

И включим Home Assistant в качестве сервиса:

sudo systemctl --system daemon-reload
sudo systemctl enable home-assistant@homeassistant
sudo systemctl start home-assistant@homeassistant

Первоначальная настройка

1. Создаем новую учетную запись:
Установка и настройка Home Assistant на Raspberry Pi2. Придумываем название своего дома и задаем его координаты на карте (определяются автоматически через запрос к гео-сервису):
Установка и настройка Home Assistant на Raspberry Pi3. На следующем шаге система попытается автоматически найти «умные устройства» и предложит их добавить. Можно пропустить этот шаг и вернуться к нему позже, либо выбрать какие-то интеграции самостоятельно из выпадающего списка:
Установка и настройка Home Assistant на Raspberry PiЭта статья пишется во время коронавирусной пандемии, так что в числе стандартных интеграций можно выбрать коронавирусный монитор. Я выбрал интеграции с iCloud, приложением Home Assistant для iOS, торрент-клиентом Transmission, коронавирусный монитор, сенсор для вывода локального IP-адреса устройства и виджет списка покупок.

Помимо этого система обнаружила в локальной сети мой телевизор:
Установка и настройка Home Assistant на Raspberry Pi4. На этом настройка завершена, и по клику на кнопку «Готово» мы попадаем в панель управления нашим свежесозданным умным домом.

Поначалу она будет выглядеть ужасно:
Установка и настройка Home Assistant на Raspberry PiПоэтому первое, что надо сделать — это отключить автоматическое управление интерфейсом Lovelace UI, нажав на символ из трех вертикальных точек в верхнем правом углу и выбрав пункт «Настройка интерфейса».
Установка и настройка Home Assistant на Raspberry PiСистема спросит, уверены ли мы, что хотим получить доступ к редактированию интерфейса и попытается напугать тем, что при этом автоматически добавляться сенсоры новых добавляемых устройств. Это не должно смущать, т.к. сенсоры все равно никуда не денутся: Home Assistant перестанет автоматически выводить их все в одну кучу, но их по-прежнему можно будет найти в системе и настроить вывод самостоятельно и в удобной для себя форме.

Основные элементы в интерфейсе Home Assistant — это Entities и Glance. Они представляют собой группы сенсоров / кнопок / информеров, оформленные списком (Entities) или панелью иконок с подписями (Glance).

Также есть Badges — круглые значки, выводимые сверху. Именно в них Home Assistant по умолчанию вывел в системе сенсоры.

Установка и настройка Home Assistant на Raspberry Pi

Первичную настройку я закончу на том, что удалю из интерфейса все бейджи и выведу карточки для мониторинга ситуации с коронавирусом, показателей системы и статуса Transmission. Также я сразу добавил кнопку для управления Xiaomi Mi LED Desk Lamp.

Обновление

Home Assistant — активно развивающийся проект, новые обновления выходят каждую неделю. Поскольку в обновлениях внедряются все новые интеграции, рекомендую ставить их сразу же по мере выходя.

Если Home Assistant устанавливался по моей инструкции, а именно:

  • в папку /srv/homeassistant
  • от отдельно созданного пользователя с именем homeassistant

То обновить его можно, выполнив следующие команды в терминале:

sudo -u homeassistant -H -s
cd /srv/homeassistant
source bin/activate
python3 -m pip install --upgrade homeassistant

Если ваша установка отличается, то команды нужно поправить под себя, указав корректный путь к месту установки и переключившись на нужного пользователя.

После установки обновления нужно перезапустить сервер:

Home Assistant → Настройки → Сервер → Перезапустить

Заключение

Французскому архитектору Ле Корбюзье приписывают высказывание «дом — это машина для жилья». Однако реализовать концепцию «дома-машины» стало возможным только в сейчас, когда уровень развития бытовой автоматики намного шагнул вперед.

На базе Home Assistant можно реализовать любые проекты домашней автоматизации. Уже сейчас в продаже доступны сотни поддерживаемых системой устройств, и их количество растет с каждым месяцем.

В следующих статьях цикла будут рассмотрены более детально вопросы кастомизации пользовательского интерфейса, интеграция различных компонентов и создание автоматизаций для их совместной работы.

Микрокомпьютер Raspberry Pi 4
Микрокомпьютер Raspberry Pi 4

Broadcom BCM2711 | 2Gb/4Gb/8Gb RAM | 10/100/1000Mbit Ethernet

Купить на AliExpress

Автор статьи:
Дмитрий
Руководитель отдела в IT-компании. Веду этот блог с 2013 года, пишу о гаджетах и домашней автоматизации, обозреваю одноплатные компьютеры, неспешно собираю «умный дом».

46 комментария на «Raspberry Pi. Установка Home Assistant»

  1. Добрый день.
    при первом запуске выдаёт такое:
    2020-06-21 19:05:08 ERROR (MainThread) [homeassistant.setup] Error during setup of component alexa
    Traceback (most recent call last):
    File «/srv/homeassistant/homeassistant/lib/python3.7/site-packages/homeassistant/setup.py», line 190, in _async_setup_component
    result = await asyncio.wait_for(task, SLOW_SETUP_MAX_WAIT)
    File «/usr/lib/python3.7/asyncio/tasks.py», line 416, in wait_for
    return fut.result()
    И далее всё с ошибками

    • Добрый день, попробуйте перезагрузиться и запустить hass снова. И если опять будут ошибки, то невзирая на них надо попробовать открыть веб-интерфейс. Возможно они не мешают работе.

      Если и ошибки возникают и интерфейс недоступен, то я бы предположил, что возникли какие-то проблемы с установкой Python и виртуального окружения, и нужно заново провести установку на «чистой» системе.

      • К сожалению не получается. При повторно hass выдаёт:
        06:26:21 WARNING (Recorder) [homeassistant.components.recorder] Ended unfinished session (id=6 from 2020-06-21 12:46:32.857253)
        К веб интерфейсу не подключается.
        Система с нуля — это уже вторая попытка.

        • Аналогичная ситуация.
          Все установил на чистую систему, но запустить не могу — те же ошибки.

          • попробуй вытащить из юсб разъемов все флэшки до момента установки HA и не пропускай этап обновления системы

  2. Лучшая статья которую я видел по установке HA.
    И самая свежая на этот день что нашел, автор молодец!

    • Супервизор доступен только в Hass.io, в обычном дистрибутиве Home Assistant его нет. И к установке в виртуальное окружение Python «доустановить» не получится, т.к. его работа завязана на управление Docker-контейнерами, а в таком варианте установки они не используются.

  3. Добрый день!
    1. После запуска Home Assistant (команды HASS) в консоли не отображается ни какая информация типа «Starting Zeroconf droadcast», но интерфейс программы открывается. На попытку зарегистрироваться не реагирует. Останавливается только CTRL +C.

    2. При вводе команды «sudo nano /etc/systemd/system/home-assistant@homeassistant.service» запрашивает пароль пользователя. Где его брать?

    • Добрый день.

      1) Не совсем понял в чем проявляется проблема, но если первый экран открывается, то скорее всего надо просто дольше подождать.

      2) Нужно ввести пароль того пользователя, под которым вы залогинены на микрокомпьютере. Если это Raspbian, то по умолчанию пользователь pi с паролем raspberry. Сменить пароль можно консольной командой passwd.

      • 1. Уточняю: Ввожу команду «hass». На терминале, после нажатия клавиши «Ввод», появляется следующая строка и никакой реакции. Ждал долго, оставлял на ночь. Делал несколько раз. Процесс останавливается через Ctrl+C. Но при этом можно зайти на веб-интерфейс, ввести данные для регистрации учетки, но, при нажатии «Регистрация», опять никакой реакции.
        2. У меня спрашивает пароль для пользователя HomeAssistant — все равно пароль для малинки вводить?

        Спасибо!

        • Мы полагаем, что ваш системный администратор изложил вам основы
          безопасности. Как правило, всё сводится к трём следующим правилам:

          №1) Уважайте частную жизнь других.
          №2) Думайте, прежде что-то вводить.
          №3) С большой властью приходит большая ответственность.

          Вот такое пишет. Пароль от Raspberry не подходит

          • вы в этот момент не под пользователем homeassistant сидите?
            зайдите под пользователем pi

  4. Добрый вечер! Шестой раз с нуля ставлю HomeAssistant, а запустить не могу. Первый раз при установке по Вашей инструкции, при запуске homeassistant посыпались ошибки и предложение обновить Python до 3.8. Так как я начинающий, от слова «совсем», как обновить я не знал. Пробовал по разному — не прокатило. Пошел учить матчасть… Выучил… Установил Python 3.8.6. Установил его версией по умолчанию. В cd /srv/homeassistant создал виртуальную машину python3.8 -m venv ., запустил, установил homeassistant, но при запуске опять ошибки. На версию Python уже не ругается. Куда можно выложить логи?

  5. Здравствуйте, Дмитрий.
    Подскажите, пожалуйста, а обязательно ли устанавливать HASS в «/srv»?
    Или я могу установить его в, к примеру, «/mnt/hdd»? У меня здесь находится примонтированный внешний HDD.
    И если я установлю его на внешний HDD, по идеи, я обезопасю свою карту памяти от износа HASS’ом?

    • Добрый день, пути конечно же можно менять. И если у вас все равно подключен HDD или SSD, то можно настроить загрузку всей системы с него, а не только Home Assistant. Карта памяти в таком варианте вообще использоваться не будет.

  6. Здравствуйте. Спасибо за статьи, практически все сделал по вашим настройкам. Остался пока что один вопрос — а как вы вывели параметры малины в ассистента? Я не нашел такой интеграции ни в приложении, ни на сайте.

    • Добрый день, это как раз штатная интеграция под названием System Monitor, она позволяет отслеживать параметры того устройства, на котором запущен Home Assistant. Есть вариант с мониторингом в HA и других устройств — путем запуска сервера Glances и настройки интеграции с ним.

      • Спасибо! Кстати, теперь загрузка с USB делается очень просто — путем установки чистого распбиана на него с нуля. По крайне мере на 4 версии платы. Но тогда придется восстанавливать все настройки с нуля.

        • Создайте snapshot, скачайте на комп, установите с нуля на SSD и загрузите snapshot, и вуаля, все настройки перенесены

  7. Пробовал обновлять или устанавливать его на Python 3.9, не получается. Cыпит ошибками при установке sudo pip3 install homeassistant или hass
    А вот по этой инструкции установился нормально. на питоне 3.7 понимаю.

    Автозагрузка не работает, не могу сделать.

    • Недавно переустанавливал Home Assistant на чистую Raspberry Pi OS по приведенной тут инструкции — никаких проблем не возникает, в том числе и с автозагрузкой. Может у вас другая ОС без systemd? Это бы объяснило почему не работает автозагрузка.

      И да, дописал отдельную инструкцию по обновлению Python до 3.9.

      • Доброго дня
        При первой установке по инструкции возникла ошибка из-за не обновленного python. По Вашей второй статье обновил все пакеты и по новой установил homeassistant. В процессе выполнения pip3 install homeassistant появилась ошибка:

        ERROR: After October 2020 you may experience errors when installing or updating packages. This is because pip will change the way that it resolves dependency conflicts.

        We recommend you use —use-feature=2020-resolver to test your packages with the new resolver before it becomes the default.

        requests 2.25.0 requires idna=2.5, but you’ll have idna 3.1 which is incompatible.
        Подскажите пожалуйста, как откатить idna к нужной версии?

        • А там не выводится рекомендация обновить pip, прямо вместе с нужной для обновления командой? Обычно после установки этого обновления ошибки исчезают.

  8. Написано легко и понятно, но на этапе установки ha выдает такое сообщение — «Please upgrade Python to 3.8.0 or higher». Хорошо бы поправить инструкцию)
    А за блог — спасибо! Много интересного и полезного.

  9. После команды »hass» загрука и установка не запускается, выдает сообщение – “Please upgrade Python to 3.8.0 or higher” и висит

    • В системе установлено два интерпретатора python (для версии 2.x) и python3 (3.x соответственно), т.к. 2 и 3 версии Python несовместимы между собой.
      python3 -V — проверка именно третьей версии.

      Сначала вам надо установить свежий Python по этой инструкции https://dmitrysnotes.ru/home-assistant-obnovlenie-python — только из раздела «Обновление Python». Потом, когда он будет обновлен, начать ставить Home Assistant командами уже из этой статьи. Возможно будут ошибки в зависимостях, тогда дополнительно надо будет обновить pip3 (это предложит сделать сам установщик, и выведет команду для обновления).

      Других ошибок возникать не должно — я совсем недавно ставил HA на тестовый сервер с чистой системой.

  10. установка »pip3 install homeassistant» закончилось так
    ERROR: Exception:
    Traceback (most recent call last):
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_vendor/resolvelib/resolvers.py», line 171, in _merge_into_criterion
    crit = self.state.criteria[name]
    KeyError: ‘yarl’

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_internal/cli/base_command.py», line 189, in _main
    status = self.run(options, args)
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_internal/cli/req_command.py», line 178, in wrapper
    return func(self, options, args)
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_internal/commands/install.py», line 316, in run
    requirement_set = resolver.resolve(
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/resolver.py», line 121, in resolve
    self._result = resolver.resolve(
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_vendor/resolvelib/resolvers.py», line 453, in resolve
    state = resolution.resolve(requirements, max_rounds=max_rounds)
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_vendor/resolvelib/resolvers.py», line 347, in resolve
    failure_causes = self._attempt_to_pin_criterion(name, criterion)
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_vendor/resolvelib/resolvers.py», line 207, in _attempt_to_pin_criterion
    criteria = self._get_criteria_to_update(candidate)
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_vendor/resolvelib/resolvers.py», line 199, in _get_criteria_to_update
    name, crit = self._merge_into_criterion(r, parent=candidate)
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_vendor/resolvelib/resolvers.py», line 173, in _merge_into_criterion
    crit = Criterion.from_requirement(self._p, requirement, parent)
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_vendor/resolvelib/resolvers.py», line 82, in from_requirement
    if not cands:
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_vendor/resolvelib/structs.py», line 124, in __bool__
    return bool(self._sequence)
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py», line 143, in __bool__
    return any(self)
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py», line 38, in _iter_built
    candidate = func()
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/factory.py», line 167, in _make_candidate_from_link
    self._link_candidate_cache[link] = LinkCandidate(
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/candidates.py», line 300, in __init__
    super().__init__(
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/candidates.py», line 144, in __init__
    self.dist = self._prepare()
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/candidates.py», line 226, in _prepare
    dist = self._prepare_distribution()
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/candidates.py», line 311, in _prepare_distribution
    return self._factory.preparer.prepare_linked_requirement(
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_internal/operations/prepare.py», line 457, in prepare_linked_requirement
    return self._prepare_linked_requirement(req, parallel_builds)
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_internal/operations/prepare.py», line 500, in _prepare_linked_requirement
    dist = _get_prepared_distribution(
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_internal/operations/prepare.py», line 66, in _get_prepared_distribution
    abstract_dist.prepare_distribution_metadata(finder, build_isolation)
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_internal/distributions/sdist.py», line 39, in prepare_distribution_metadata
    self._setup_isolation(finder)
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_internal/distributions/sdist.py», line 97, in _setup_isolation
    reqs = backend.get_requires_for_build_wheel()
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_vendor/pep517/wrappers.py», line 177, in get_requires_for_build_wheel
    return self._call_hook(‘get_requires_for_build_wheel’, {
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_vendor/pep517/wrappers.py», line 284, in _call_hook
    raise BackendUnavailable(data.get(‘traceback’, »))
    pip._vendor.pep517.wrappers.BackendUnavailable: Traceback (most recent call last):
    File «/srv/homeassistant/lib/python3.9/site-packages/pip/_vendor/pep517/_in_process.py», line 86, in _build_backend
    obj = import_module(mod_path)
    File «/usr/local/lib/python3.9/importlib/__init__.py», line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
    File «», line 1030, in _gcd_import
    File «», line 1007, in _find_and_load
    File «», line 972, in _find_and_load_unlocked
    File «», line 228, in _call_with_frames_removed
    File «», line 1030, in _gcd_import
    File «», line 1007, in _find_and_load
    File «», line 986, in _find_and_load_unlocked
    File «», line 680, in _load_unlocked
    File «», line 790, in exec_module
    File «», line 228, in _call_with_frames_removed
    File «/tmp/pip-build-env-fgrf7gox/overlay/lib/python3.9/site-packages/setuptools/__init__.py», line 18, in
    from setuptools.dist import Distribution
    File «/tmp/pip-build-env-fgrf7gox/overlay/lib/python3.9/site-packages/setuptools/dist.py», line 32, in
    from setuptools import windows_support
    File «/tmp/pip-build-env-fgrf7gox/overlay/lib/python3.9/site-packages/setuptools/windows_support.py», line 2, in
    import ctypes
    File «/usr/local/lib/python3.9/ctypes/__init__.py», line 8, in
    from _ctypes import Union, Structure, Array
    ModuleNotFoundError: No module named ‘_ctypes’

    • Здравствуите
      падскажите как эту ошибку решить

      WARNING: You are using pip version 20.2.3; however, version 21.0.1 is available.
      You should consider upgrading via the ‘/srv/homeassistant/bin/python3.9 -m pip install —upgrade pip’ command.
      (homeassistant) homeassistant@raspberrypi:/srv/homeassistant $ /srv/homeassistant/bin/python3.9 -m pip install —upgrade pip
      Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
      Collecting pip
      Using cached pip-21.0.1-py3-none-any.whl (1.5 MB)
      Installing collected packages: pip
      Attempting uninstall: pip
      Found existing installation: pip 20.2.3
      Uninstalling pip-20.2.3:
      Successfully uninstalled pip-20.2.3
      ERROR: After October 2020 you may experience errors when installing or updating packages. This is because pip will change the way that it resolves dependency conflicts.

      We recommend you use —use-feature=2020-resolver to test your packages with the new resolver before it becomes the default.

      homeassistant 2021.2.1 requires pip=8.0.3, but you’ll have pip 21.0.1 which is incompatible.
      Successfully installed pip-21.0.1

  11. Огромное спасибо! Написано человеческим языком и что самое приятно- все работает, в отличие от других, испробованных мною мануалов!
    Я только начал разбираться с этой темой и у меня вопрос, который возник еще на этапе установки, а в последствии отразился в уведомлениях HA:
    «Support for the running Python version 3.7.3 is deprecated and will be removed in the first release after December 7, 2020. Please upgrade Python to 3.8.0 or higher.»
    Установлено на Armbian 21.02.3 Orangepipcplus_buster_current_5.10.21. Через обновления самого Armbian ни чего не находит. Как обновить питона для устранения этой проблемы?

  12. Спасибо за подробное изложение!
    С питоном вроде разобрался. Но вот такой вопрос- при описанном способе установки Home Assistant устанавливается без компонента Supervisor. В результате получаем по сути бесполезную игрушку. Как установить все вместе?

  13. Спасибо. Все отлично расписано.
    У меня при запуске hass на терминале появляется «bash: homeassistant: command not found»

    Не подскажете, что сделать?

  14. Дмитрий, а есть ли возможность активировать Supervisor?
    Раньше я использовал установку образа HA (без Raspbian) и из Supervisor устанавливался File Editor, позволявший редактировать configuration.yaml прямо из web-интерфейса HA — довольно удобно.

    • При таком варианте установке — нет. Home Assistant доступен в версиях Core и Supervised, у меня рассматривается установка именно Core. В ней отсутствует Supervisor.

  15. Дмитрий, спасибо вам за ваш труд! Я новичек. Дайте же ответ на вопросы по поводу ввода пароля при запуске команды «Насс» после установки home assistant! Не понимаю что нужно сделать, где взять пароль, от расберри пользователя не подходит и даже не водится ничего! Что делать?

  16. Устанавливал все по Вашей статье, все до установки Home Assistant:
    «pip3 install homeassistant» выполнялось без ошибок, а дальше…….
    Что делать не знаю (устанавливал 2 раза и одно и тоже)

    Collecting anyio=3.0
    Downloading https://www.piwheels.org/simple/anyio/anyio-3.6.2-py3-none-any.whl (80 kB)
    |████████████████████████████████| 80 kB 904 kB/s
    Building wheels for collected packages: cryptography
    Building wheel for cryptography (PEP 517) … error
    ERROR: Command errored out with exit status 1:
    command: /srv/homeassistant/bin/python3 /tmp/tmp3sy2o95a_in_process.py build_wheel /tmp/tmpt1ntfu08
    cwd: /tmp/pip-install-ue35ng8f/cryptography_703e8021b2e143818b26f0f9c5e4e213
    Complete output (191 lines):
    running bdist_wheel
    running build
    running build_py
    creating build
    creating build/lib.linux-armv7l-cpython-39
    creating build/lib.linux-armv7l-cpython-39/cryptography
    copying src/cryptography/fernet.py -> build/lib.linux-armv7l-cpython-39/cryptography
    copying src/cryptography/exceptions.py -> build/lib.linux-armv7l-cpython-39/cryptography
    copying src/cryptography/__about__.py -> build/lib.linux-armv7l-cpython-39/cryptography
    copying src/cryptography/utils.py -> build/lib.linux-armv7l-cpython-39/cryptography
    copying src/cryptography/__init__.py -> build/lib.linux-armv7l-cpython-39/cryptography
    creating build/lib.linux-armv7l-cpython-39/cryptography/hazmat
    copying src/cryptography/hazmat/_oid.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat
    copying src/cryptography/hazmat/__init__.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat
    creating build/lib.linux-armv7l-cpython-39/cryptography/x509
    copying src/cryptography/x509/ocsp.py -> build/lib.linux-armv7l-cpython-39/cryptography/x509
    copying src/cryptography/x509/name.py -> build/lib.linux-armv7l-cpython-39/cryptography/x509
    copying src/cryptography/x509/oid.py -> build/lib.linux-armv7l-cpython-39/cryptography/x509
    copying src/cryptography/x509/general_name.py -> build/lib.linux-armv7l-cpython-39/cryptography/x509
    copying src/cryptography/x509/base.py -> build/lib.linux-armv7l-cpython-39/cryptography/x509
    copying src/cryptography/x509/extensions.py -> build/lib.linux-armv7l-cpython-39/cryptography/x509
    copying src/cryptography/x509/__init__.py -> build/lib.linux-armv7l-cpython-39/cryptography/x509
    copying src/cryptography/x509/certificate_transparency.py -> build/lib.linux-armv7l-cpython-39/cryptography/x509
    creating build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives
    copying src/cryptography/hazmat/primitives/keywrap.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives
    copying src/cryptography/hazmat/primitives/padding.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives
    copying src/cryptography/hazmat/primitives/hashes.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives
    copying src/cryptography/hazmat/primitives/_asymmetric.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives
    copying src/cryptography/hazmat/primitives/constant_time.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives
    copying src/cryptography/hazmat/primitives/poly1305.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives
    copying src/cryptography/hazmat/primitives/__init__.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives
    copying src/cryptography/hazmat/primitives/_serialization.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives
    copying src/cryptography/hazmat/primitives/_cipheralgorithm.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives
    copying src/cryptography/hazmat/primitives/cmac.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives
    copying src/cryptography/hazmat/primitives/hmac.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives
    creating build/lib.linux-armv7l-cpython-39/cryptography/hazmat/backends
    copying src/cryptography/hazmat/backends/__init__.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/backends
    creating build/lib.linux-armv7l-cpython-39/cryptography/hazmat/bindings
    copying src/cryptography/hazmat/bindings/__init__.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/bindings
    creating build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/asymmetric
    copying src/cryptography/hazmat/primitives/asymmetric/dsa.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/asymmetric
    copying src/cryptography/hazmat/primitives/asymmetric/ed448.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/asymmetric
    copying src/cryptography/hazmat/primitives/asymmetric/rsa.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/asymmetric
    copying src/cryptography/hazmat/primitives/asymmetric/padding.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/asymmetric
    copying src/cryptography/hazmat/primitives/asymmetric/utils.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/asymmetric
    copying src/cryptography/hazmat/primitives/asymmetric/ed25519.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/asymmetric
    copying src/cryptography/hazmat/primitives/asymmetric/types.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/asymmetric
    copying src/cryptography/hazmat/primitives/asymmetric/dh.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/asymmetric
    copying src/cryptography/hazmat/primitives/asymmetric/__init__.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/asymmetric
    copying src/cryptography/hazmat/primitives/asymmetric/x448.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/asymmetric
    copying src/cryptography/hazmat/primitives/asymmetric/x25519.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/asymmetric
    copying src/cryptography/hazmat/primitives/asymmetric/ec.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/asymmetric
    creating build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/twofactor
    copying src/cryptography/hazmat/primitives/twofactor/totp.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/twofactor
    copying src/cryptography/hazmat/primitives/twofactor/__init__.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/twofactor
    copying src/cryptography/hazmat/primitives/twofactor/hotp.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/twofactor
    creating build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/ciphers
    copying src/cryptography/hazmat/primitives/ciphers/aead.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/ciphers
    copying src/cryptography/hazmat/primitives/ciphers/base.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/ciphers
    copying src/cryptography/hazmat/primitives/ciphers/__init__.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/ciphers
    copying src/cryptography/hazmat/primitives/ciphers/modes.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/ciphers
    copying src/cryptography/hazmat/primitives/ciphers/algorithms.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/ciphers
    creating build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/kdf
    copying src/cryptography/hazmat/primitives/kdf/concatkdf.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/kdf
    copying src/cryptography/hazmat/primitives/kdf/pbkdf2.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/kdf
    copying src/cryptography/hazmat/primitives/kdf/__init__.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/kdf
    copying src/cryptography/hazmat/primitives/kdf/hkdf.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/kdf
    copying src/cryptography/hazmat/primitives/kdf/kbkdf.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/kdf
    copying src/cryptography/hazmat/primitives/kdf/scrypt.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/kdf
    copying src/cryptography/hazmat/primitives/kdf/x963kdf.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/kdf
    creating build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/serialization
    copying src/cryptography/hazmat/primitives/serialization/pkcs12.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/serialization
    copying src/cryptography/hazmat/primitives/serialization/pkcs7.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/serialization
    copying src/cryptography/hazmat/primitives/serialization/base.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/serialization
    copying src/cryptography/hazmat/primitives/serialization/__init__.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/serialization
    copying src/cryptography/hazmat/primitives/serialization/ssh.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/primitives/serialization
    creating build/lib.linux-armv7l-cpython-39/cryptography/hazmat/backends/openssl
    copying src/cryptography/hazmat/backends/openssl/dsa.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/backends/openssl
    copying src/cryptography/hazmat/backends/openssl/aead.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/backends/openssl
    copying src/cryptography/hazmat/backends/openssl/ed448.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/backends/openssl
    copying src/cryptography/hazmat/backends/openssl/ciphers.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/backends/openssl
    copying src/cryptography/hazmat/backends/openssl/rsa.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/backends/openssl
    copying src/cryptography/hazmat/backends/openssl/hashes.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/backends/openssl
    copying src/cryptography/hazmat/backends/openssl/utils.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/backends/openssl
    copying src/cryptography/hazmat/backends/openssl/ed25519.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/backends/openssl
    copying src/cryptography/hazmat/backends/openssl/x509.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/backends/openssl
    copying src/cryptography/hazmat/backends/openssl/backend.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/backends/openssl
    copying src/cryptography/hazmat/backends/openssl/dh.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/backends/openssl
    copying src/cryptography/hazmat/backends/openssl/poly1305.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/backends/openssl
    copying src/cryptography/hazmat/backends/openssl/__init__.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/backends/openssl
    copying src/cryptography/hazmat/backends/openssl/x448.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/backends/openssl
    copying src/cryptography/hazmat/backends/openssl/x25519.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/backends/openssl
    copying src/cryptography/hazmat/backends/openssl/decode_asn1.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/backends/openssl
    copying src/cryptography/hazmat/backends/openssl/ec.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/backends/openssl
    copying src/cryptography/hazmat/backends/openssl/cmac.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/backends/openssl
    copying src/cryptography/hazmat/backends/openssl/hmac.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/backends/openssl
    creating build/lib.linux-armv7l-cpython-39/cryptography/hazmat/bindings/openssl
    copying src/cryptography/hazmat/bindings/openssl/binding.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/bindings/openssl
    copying src/cryptography/hazmat/bindings/openssl/__init__.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/bindings/openssl
    copying src/cryptography/hazmat/bindings/openssl/_conditional.py -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/bindings/openssl
    running egg_info
    writing src/cryptography.egg-info/PKG-INFO
    writing dependency_links to src/cryptography.egg-info/dependency_links.txt
    writing requirements to src/cryptography.egg-info/requires.txt
    writing top-level names to src/cryptography.egg-info/top_level.txt
    reading manifest file ‘src/cryptography.egg-info/SOURCES.txt’
    reading manifest template ‘MANIFEST.in’
    no previously-included directories found matching ‘docs/_build’
    warning: no previously-included files found matching ‘vectors’
    warning: no previously-included files matching ‘*’ found under directory ‘vectors’
    warning: no previously-included files matching ‘*’ found under directory ‘.github’
    warning: no previously-included files found matching ‘release.py’
    warning: no previously-included files found matching ‘.readthedocs.yml’
    warning: no previously-included files found matching ‘dev-requirements.txt’
    warning: no previously-included files found matching ‘tox.ini’
    warning: no previously-included files found matching ‘mypy.ini’
    warning: no previously-included files matching ‘*’ found under directory ‘.circleci’
    adding license file ‘LICENSE’
    adding license file ‘LICENSE.APACHE’
    adding license file ‘LICENSE.BSD’
    adding license file ‘LICENSE.PSF’
    writing manifest file ‘src/cryptography.egg-info/SOURCES.txt’
    /tmp/pip-build-env-9z_1wr02/overlay/lib/python3.9/site-packages/setuptools/command/build_py.py:202: SetuptoolsDeprecationWarning: Installing ‘cryptography.hazmat.bindings._rust’ as data is deprecated, please list it in `packages`.
    !!

    ############################
    # Package would be ignored #
    ############################
    Python recognizes ‘cryptography.hazmat.bindings._rust’ as an importable package,
    but it is not listed in the `packages` configuration of setuptools.

    ‘cryptography.hazmat.bindings._rust’ has been automatically added to the distribution only
    because it may contain data files, but this behavior is likely to change
    in future versions of setuptools (and therefore is considered deprecated).

    Please make sure that ‘cryptography.hazmat.bindings._rust’ is included as a package by using
    the `packages` configuration field or the proper discovery methods
    (for example by using `find_namespace_packages(…)`/`find_namespace:`
    instead of `find_packages(…)`/`find:`).

    You can read more about «package discovery» and «data files» on setuptools
    documentation page.

    !!

    check.warn(importable)
    copying src/cryptography/py.typed -> build/lib.linux-armv7l-cpython-39/cryptography
    copying src/cryptography/hazmat/bindings/_openssl.pyi -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/bindings
    creating build/lib.linux-armv7l-cpython-39/cryptography/hazmat/bindings/_rust
    copying src/cryptography/hazmat/bindings/_rust/__init__.pyi -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/bindings/_rust
    copying src/cryptography/hazmat/bindings/_rust/asn1.pyi -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/bindings/_rust
    copying src/cryptography/hazmat/bindings/_rust/ocsp.pyi -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/bindings/_rust
    copying src/cryptography/hazmat/bindings/_rust/x509.pyi -> build/lib.linux-armv7l-cpython-39/cryptography/hazmat/bindings/_rust
    running build_ext
    running build_rust

    =============================DEBUG ASSISTANCE=============================
    If you are seeing a compilation error please try the following steps to
    successfully install cryptography:
    1) Upgrade to the latest pip and try again. This will fix errors for most
    users. See: https://pip.pypa.io/en/stable/installing/#upgrading-pip
    2) Read https://cryptography.io/en/latest/installation/ for specific
    instructions for your platform.
    3) Check our frequently asked questions for more information:
    https://cryptography.io/en/latest/faq/
    4) Ensure you have a recent Rust toolchain installed:
    https://cryptography.io/en/latest/installation/#rust

    Python: 3.9.2
    platform: Linux-5.15.61-v7l+-armv7l-with-glibc2.31
    pip: n/a
    setuptools: 65.6.3
    setuptools_rust: 1.5.2
    rustc: n/a
    =============================DEBUG ASSISTANCE=============================

    error: can’t find Rust compiler

    If you are using an outdated pip version, it is possible a prebuilt wheel is available for this package but pip is not able to install from it. Installing from the wheel would avoid the need for a Rust compiler.

    To update pip, run:

    pip install —upgrade pip

    and then retry package installation.

    If you did intend to build this package from source, try installing a Rust compiler from your system package manager and ensure it is on the PATH during installation. Alternatively, rustup (available at https://rustup.rs) is the recommended way to download and update the Rust compiler toolchain.

    This package requires Rust >=1.48.0.
    —————————————-
    ERROR: Failed building wheel for cryptography
    Failed to build cryptography
    ERROR: Could not build wheels for cryptography which use PEP 517 and cannot be installed directly

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

[Хамство, оскорбления и попытки крауд-маркетинга будут удалены]