Home Assistant — одна из наиболее популярных систем с открытым исходным кодом для организации «умного дома» своими руками.
Этой статьей я хочу начать цикл публикаций на тему умного дома. Для начала мы рассмотрим процесс установки и первичной настройки Home Assistant на базе микрокомпьютера Raspberry Pi, а в последующих статьях цикла будут рассматриваться интеграции устройств в Home Assistant в формате «одна статья — одна интеграция».
Содержание
Что нам понадобится
Для осуществления описываемых в этой статье действий понадобится:
- Raspberry Pi 3 / 4
- Локальная сеть
Сервер 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.
- Огромное сообщество. А чем больше сообщество пользователей — тем больше найдено решений типовых проблем, тем легче войти в тему новичку. Home Assistant входит в топ-10 наиболее активно развивающихся проектов на GitHub, оставляя далеко позади другие популярные системы.
- Большое количество поддерживаемых устройств и экосистем. Естественное следствие из предыдущего пункта: большое количество пользователей создает большое количество интеграций, которые покроют 80% потребностей начинающего строителя «умного дома».
- Удобный UI и большие возможности его кастомизации. Можно по-разному относиться к лежащему в основе интерфейса Home Assistant материальному дизайну, но трудно не согласиться с одним: интерфейсы других популярных систем выглядят гораздо хуже.
- Совместимость с 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 станет доступен через веб-интерфейс по адресу http://ip-адрес-raspberry-pi:8123:
Осталось добавить его в автозагрузку. Для этого создадим файл:
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. Создаем новую учетную запись:
2. Придумываем название своего дома и задаем его координаты на карте (определяются автоматически через запрос к гео-сервису):
3. На следующем шаге система попытается автоматически найти «умные устройства» и предложит их добавить. Можно пропустить этот шаг и вернуться к нему позже, либо выбрать какие-то интеграции самостоятельно из выпадающего списка:
Эта статья пишется во время коронавирусной пандемии, так что в числе стандартных интеграций можно выбрать коронавирусный монитор. Я выбрал интеграции с iCloud, приложением Home Assistant для iOS, торрент-клиентом Transmission, коронавирусный монитор, сенсор для вывода локального IP-адреса устройства и виджет списка покупок.
Помимо этого система обнаружила в локальной сети мой телевизор:
4. На этом настройка завершена, и по клику на кнопку «Готово» мы попадаем в панель управления нашим свежесозданным умным домом.
Поначалу она будет выглядеть ужасно:
Поэтому первое, что надо сделать — это отключить автоматическое управление интерфейсом Lovelace UI, нажав на символ из трех вертикальных точек в верхнем правом углу и выбрав пункт «Настройка интерфейса».
Система спросит, уверены ли мы, что хотим получить доступ к редактированию интерфейса и попытается напугать тем, что при этом автоматически добавляться сенсоры новых добавляемых устройств. Это не должно смущать, т.к. сенсоры все равно никуда не денутся: Home Assistant перестанет автоматически выводить их все в одну кучу, но их по-прежнему можно будет найти в системе и настроить вывод самостоятельно и в удобной для себя форме.
Основные элементы в интерфейсе Home Assistant — это Entities и Glance. Они представляют собой группы сенсоров / кнопок / информеров, оформленные списком (Entities) или панелью иконок с подписями (Glance).
Также есть Badges — круглые значки, выводимые сверху. Именно в них Home Assistant по умолчанию вывел в системе сенсоры.
Первичную настройку я закончу на том, что удалю из интерфейса все бейджи и выведу карточки для мониторинга ситуации с коронавирусом, показателей системы и статуса 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 можно реализовать любые проекты домашней автоматизации. Уже сейчас в продаже доступны сотни поддерживаемых системой устройств, и их количество растет с каждым месяцем.
В следующих статьях цикла будут рассмотрены более детально вопросы кастомизации пользовательского интерфейса, интеграция различных компонентов и создание автоматизаций для их совместной работы.

Broadcom BCM2711 | 2Gb/4Gb/8Gb RAM | 10/100/1000Mbit Ethernet
Большое спасибо за твои статьи!!!
Добрый день.
при первом запуске выдаёт такое:
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 и не пропускай этап обновления системы
Лучшая статья которую я видел по установке HA.
И самая свежая на этот день что нашел, автор молодец!
Все, хорошо, а где у вас в HA вкладочка супервизор интересно? И как ее туда пришить обратно?
Супервизор доступен только в Hass.io, в обычном дистрибутиве Home Assistant его нет. И к установке в виртуальное окружение Python «доустановить» не получится, т.к. его работа завязана на управление Docker-контейнерами, а в таком варианте установки они не используются.
Добрый день!
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
Доброго времени суток, Алексей. Как решили свою проблему с паролем от пользователя homeassistant? Отпишитесь, пожалуйста, на почту egor050998@gmail.com/
Добрый вечер! Шестой раз с нуля ставлю HomeAssistant, а запустить не могу. Первый раз при установке по Вашей инструкции, при запуске homeassistant посыпались ошибки и предложение обновить Python до 3.8. Так как я начинающий, от слова «совсем», как обновить я не знал. Пробовал по разному — не прокатило. Пошел учить матчасть… Выучил… Установил Python 3.8.6. Установил его версией по умолчанию. В cd /srv/homeassistant создал виртуальную машину python3.8 -m venv ., запустил, установил homeassistant, но при запуске опять ошибки. На версию Python уже не ругается. Куда можно выложить логи?
Здравствуйте, Дмитрий.
Подскажите, пожалуйста, а обязательно ли устанавливать HASS в «/srv»?
Или я могу установить его в, к примеру, «/mnt/hdd»? У меня здесь находится примонтированный внешний HDD.
И если я установлю его на внешний HDD, по идеи, я обезопасю свою карту памяти от износа HASS’ом?
Добрый день, пути конечно же можно менять. И если у вас все равно подключен HDD или SSD, то можно настроить загрузку всей системы с него, а не только Home Assistant. Карта памяти в таком варианте вообще использоваться не будет.
Здравствуйте. Спасибо за статьи, практически все сделал по вашим настройкам. Остался пока что один вопрос — а как вы вывели параметры малины в ассистента? Я не нашел такой интеграции ни в приложении, ни на сайте.
Добрый день, это как раз штатная интеграция под названием System Monitor, она позволяет отслеживать параметры того устройства, на котором запущен Home Assistant. Есть вариант с мониторингом в HA и других устройств — путем запуска сервера Glances и настройки интеграции с ним.
Спасибо! Кстати, теперь загрузка с USB делается очень просто — путем установки чистого распбиана на него с нуля. По крайне мере на 4 версии платы. Но тогда придется восстанавливать все настройки с нуля.
Создайте snapshot, скачайте на комп, установите с нуля на SSD и загрузите snapshot, и вуаля, все настройки перенесены
Пробовал обновлять или устанавливать его на 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, прямо вместе с нужной для обновления командой? Обычно после установки этого обновления ошибки исчезают.
Написано легко и понятно, но на этапе установки ha выдает такое сообщение — «Please upgrade Python to 3.8.0 or higher». Хорошо бы поправить инструкцию)
А за блог — спасибо! Много интересного и полезного.
После команды »hass» загрука и установка не запускается, выдает сообщение – “Please upgrade Python to 3.8.0 or higher” и висит
Инструкция по обновлению Python есть тут.
Но мне нечего обновить так как неустанавливается
Python присутствует в системе изначально, он не является частью Home Assistant.
Может подскажете как в даный момент правильно устанавить Home assistant с нуля. Я пробавал по вашеи инстукций и мне выдаёт в конце после команды »hass» кучу ошибок.
pi@raspberrypi:~ $ python -V
Python 2.7.16
В системе установлено два интерпретатора python (для версии 2.x) и python3 (3.x соответственно), т.к. 2 и 3 версии Python несовместимы между собой.
python3 -V — проверка именно третьей версии.
Сначала вам надо установить свежий Python по этой инструкции https://dmitrysnotes.ru/home-assistant-obnovlenie-python — только из раздела «Обновление Python». Потом, когда он будет обновлен, начать ставить Home Assistant командами уже из этой статьи. Возможно будут ошибки в зависимостях, тогда дополнительно надо будет обновить pip3 (это предложит сделать сам установщик, и выведет команду для обновления).
Других ошибок возникать не должно — я совсем недавно ставил HA на тестовый сервер с чистой системой.
установка »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
Огромное спасибо! Написано человеческим языком и что самое приятно- все работает, в отличие от других, испробованных мною мануалов!
Я только начал разбираться с этой темой и у меня вопрос, который возник еще на этапе установки, а в последствии отразился в уведомлениях 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 ни чего не находит. Как обновить питона для устранения этой проблемы?
Вот тут я писал про обновление Python:
https://dmitrysnotes.ru/home-assistant-obnovlenie-python
Только сейчас актуальная версия 3.9.4, а в статье описана установка 3.9.1, так что надо будет цифры при скачивании и распаковке архива поменять.
Спасибо за подробное изложение!
С питоном вроде разобрался. Но вот такой вопрос- при описанном способе установки Home Assistant устанавливается без компонента Supervisor. В результате получаем по сути бесполезную игрушку. Как установить все вместе?
Спасибо. Все отлично расписано.
У меня при запуске hass на терминале появляется «bash: homeassistant: command not found»
Не подскажете, что сделать?
Сколько же у Вас терпения все это объяснять раз за разом =) Спасибо за статью!
Дмитрий, а есть ли возможность активировать Supervisor?
Раньше я использовал установку образа HA (без Raspbian) и из Supervisor устанавливался File Editor, позволявший редактировать configuration.yaml прямо из web-интерфейса HA — довольно удобно.
При таком варианте установке — нет. Home Assistant доступен в версиях Core и Supervised, у меня рассматривается установка именно Core. В ней отсутствует Supervisor.
Дмитрий, спасибо вам за ваш труд! Я новичек. Дайте же ответ на вопросы по поводу ввода пароля при запуске команды «Насс» после установки home assistant! Не понимаю что нужно сделать, где взять пароль, от расберри пользователя не подходит и даже не водится ничего! Что делать?
Так не должен при этом пароль запрашиваться.
Попробуйте перелогиниться по SSH перез запуском hass.
Устанавливал все по Вашей статье, все до установки 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