Здравия всем! Что же, пришло время познакомится с ESPHome. В этой статье я расскажу как настроить ESPHome после установки, как создать новую прошивку и залить её в устройство как по USB, так и по воздуху. Как подключить наше устройство к Home Assistant. Что же начнем!
Введение
Свои первые устройства для автоматизации я собирал на контроллерах Arduino Uno и Arduino Mega теперь уже в далеких 2011-2013 годах. С тех времен утекло много воды. Когда появился теперь уже народный чудо контроллер ESP8266, мир поменялся. Он сразу на борту имел WiFi и Flash память на 512кб — 4мб. И практически сразу был портирован на Arduino SDK.
Главная прелесть ESP8266, в том, что его один раз нужно прошить прошивкой через USB подключение к компьютеру, а последующие изменения можно вносить по воздуху с так называемым OTA режимом.
Первые прошивки для ESP8266 я писал на Arduino SDK. Но после перехода на Home Assistant, я перешел на ESPHome, который разрабатывается специально для подключения к Home Assistant, через API. По этому добавление любого датчика и исполняющего устройства в Home Assistant стало очень просто. Я практически не использую MQTT брокера. Который раньше был узким местом в системе, если MQTT брокер падал вместе с сервером умного дома, происходил коллапс. И приходилось делать прошивки, которые продолжали работать без MQTT брокера.
ESPHome это система для создания прошивок (Firmware) с помощью конфигурационных файлов, написанных на языке Yaml. После освоения его в Home Assistant, написание прошивок на ESPHome дело очень легкое. Для конфигурирования, компиляции и управления ESPHome использует понятный Web интерфейс. Давайте же разберемся с ним
Знакомство с интерфейсом ESPHome
После установки ESPHome, описанной в этой статье, откроем наш web интерфейс.
Как видим из приведенного изображения, вначале у нас список устройств пуст. Но есть 2 функциональные кнопки: NEW DEVICE и SECRET.
Файл secrets
Щелкнем сверху на кнопку SECRET
Откроется редактор файла secrets.yaml. Этот файл, аналогичен файлу secrets.yaml в Home Assistant. Он нужен для хранения персональной информации, к примеру, название WiFI сети и паролем доступа к ней.
Заполним поля wifi_ssid и wifi_password своими данными. И нажмем кнопку SAVE, чтобы применить настройки.
Создание первого устройства
Щелкнем по кнопке NEW DEVICE, откроется мастер создания нового устройства.
Редактор конфигурации
У нас появится первое устройство. Откроем редактор конфигурации, нажав кнопку EDIT
Откроется редактор нашего устройства в файле конфигурации esptest.yaml
Как видно из изображения, используется язык разметки YAML. В редакторе встроена проверка синтаксиса. И если мы что то не правильно ввели, редактор нам сразу же об этом скажет красным квадратом в правом верхнем углу. Если на него навести курсор мыши, всплывет подсказка в какой строке у нас ошибка.
Не забывайте сохранять изменения перед выходом, автоматически они не сохраняются.
Первая программа на ESPHome
Тип устройства
Под общим названием ESP8266 скрывается обширный набор устройств, отличающихся количеством памяти, тактовой частотой процессора и количеством портов, доступных пользователю.
ESPHome работает на основе фраймворка PlatformIO, соответственно какие платы поддерживаются размещены на сайте. Посмотрев таблицу, понимаем, что большинство плат на чипе ESP-12E и ESP-12F идут под общим названием nodemcuv2.
Я в своих тестах использую плату Nodemcu V3 на чипе ESP-12F
Откроем снова редактор нашего нового устройства и отредактируем нашу конфигурацию и изменим плату на nodemcuv2
esp8266:
board: nodemcuv2
Если в WiFi сети, где будет расположено устройство работает DHCP Server, то можно компилировать прошивку.
Компиляция прошивки
Скомпилируем прошивку, нажав кнопку Install
Откроется мастер создания прошивок
Откроется окно в котором будет вестись лог компиляции прошивки. После завершения компиляции появится кнопка Download, и файл сам начнет скачиваться.
Заливаем первую прошивку через USB
Осталось залить прошивку в наше устройство. Подключим нашу плату по USB к компьютеру. Для прошивки будем использовать утилиту ESPHome Flasher. Скачаем её с гитхаба и запустим.
С недавних пор Windows 10 ужесточило запуск программ. По этому может вылезти такое предупреждение.
Откроется главное окно программы
Выберим нужный Serial Port, на котором весит наше устройство. Нажмем кнопку Browse и выберим нашу прошивку. Осталось нажать кнопку Flash ESP. Начнется проверка и заливка прошивки.
После удачной заливки, наше устройство перезагрузится и выведет информацию о текущем подключении
Можно закрывать приложение. Дальнейшая настройка будет происходить на web интерфейсе ESPHome.
Настройка нового устройства
После тога, как мы залили прошивку в наше устройство и оно перезагрузилось, поменялся интерфейс ESPHome
Как видим, наше устройство поменяло статус с OFFLINE на ONLINE. Кнопка LOGS стала информативной, при ее нажатии происходит коннект к устройству и забирается последний лог
На каждой ESP12 есть распаянный светодиод на 2 порту. Давайте его сделаем аналогом лампы.
esphome:
name: esptest
esp8266:
board: nodemcuv2
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "ONenF3FmMEBZD0V5u15E+wp4rNoN3RfqZ3cPJtl10D4="
ota:
password: "1bcebac7181111892d02a04ea4867d3b"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Esptest Fallback Hotspot"
password: "p1Tkhye6thDA"
captive_portal:
output:
- platform: gpio
id: led
pin: GPIO02
inverted: true
light:
- platform: binary
id: in_led
output: led
name: Test Lamp
Сохраним настройки и скомпилируем прошивку. Но в этот раз прошьем по воздуху. Для этого нажмем кнопку Wirelessly
Сразу же откроется окно компиляции и загрузки прошивки по воздуху
Дождемся загрузки новой прошивки
Видим, что наш новый светильник появился в логе.
Интеграция в Home Assistant
Подготовка
Для добавления устройства на ESPHome, нам нужны 2 вещи. Это IP адрес устройства и ключ шифрования, указанный в конфигурации. Чтобы узнать IP, если он не был указан в конфигурации, откроем окно лога устройства. Находим поле IP Address и записываем его
Теперь идем в редактор конфигурации и ищем поле key: в подразделе encryption: раздела api: и записываем наш ключ шифрования
Подключение интеграции
Как я раньше говорил, прошивки на основе ESPHome легко интегрируются в Home Assistant. Откроем в web интерфейсе Home Assistant Настройки -> Устройства и службы
Нажимаем кнопку ДОБАВИТЬ ИНТЕГРАЦИЮ
Откроется мастер добавления интеграции
Управление устройством
На этом интеграция устройства на ESPHome закончена. Данные теперь прилетают по API в наш Home Assistant. Перейдем на вкладку Устройства и выберем наше устройство esptest
Как видим, наша лампа появилась в интерфейсе и ей можно сразу же и управлять и настраивать.
Заключение
В этой статье я рассказал как настроить ESPHome после установки, как создать новую прошивку и залить её в устройство как по USB, так и по воздуху. Как подключить наше устройство к Home Assistant. Как понятно из статьи делать это очень легко и просто. В дальнейшем я покажу различные свои устройства, которые я использую в повседневной работе.
Доброго всем времени суток. Прошу помощи в HA новичок, не дает сохранить secrets.yaml выдает ошибку:
❌ An error occurred saving secrets.yaml
Подскажите что с этим делать?
Debian12
Home Assistant 2023.9.3
Supervisor 2023.09.4.dev2902
Пользовательский интерфейс 20230911.0 — latest
Здравствуйте, Юрий. В каком дополнении вы пытаетесь поменять secrets.yaml?
Доброго времени суток. Помогите.
При инсталляции появляется ошибка:
sh: 1: xtensa-lx106-elf-g++: not found
Лазил по форумам, но ничего не нашел.
Добрый день!
При инсталяции чего у вас такая ошибка вылазит?
Вот log файл.
HA установлен на Raspbery 4
INFO ESPHome 2023.10.6
INFO Reading configuration /config/esphome/garazh.yaml…
INFO Generating C++ source…
INFO Compiling app…
Processing garazh (board: nodemcuv2; framework: arduino; platform: platformio/espressif8266@3.2.0)
———————————————————————————
HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash
Dependency Graph
|— ESPAsyncTCP-esphome @ 2.0.0
|— ESPAsyncWebServer-esphome @ 3.1.0
|— DNSServer @ 1.1.1
|— ESP8266WiFi @ 1.0
|— ESP8266mDNS @ 1.2
|— noise-c @ 0.1.4
Compiling .pioenvs/garazh/src/esphome/components/api/api_connection.cpp.o
sh: 1: xtensa-lx106-elf-g++: not found
Compiling .pioenvs/garazh/src/esphome/components/api/api_frame_helper.cpp.o
sh: 1: xtensa-lx106-elf-g++: not found
Compiling .pioenvs/garazh/src/esphome/components/api/api_pb2.cpp.o
sh: 1: xtensa-lx106-elf-g++: not found
*** [.pioenvs/garazh/src/esphome/components/api/api_connection.cpp.o] Error 127
Compiling .pioenvs/garazh/src/esphome/components/api/api_pb2_service.cpp.o
*** [.pioenvs/garazh/src/esphome/components/api/api_frame_helper.cpp.o] Error 127
*** [.pioenvs/garazh/src/esphome/components/api/api_pb2.cpp.o] Error 127
sh: 1: xtensa-lx106-elf-g++: not found
*** [.pioenvs/garazh/src/esphome/components/api/api_pb2_service.cpp.o] Error 127
========================== [FAILED] Took 2.52 seconds ==========================
ESP стоит как модуль Home Assistant? Пробовали его переустанавливать?
Всё. Вопрос закрыт. Тупо взял и поставил НА на Raspberry Pi4 как ОС.
Дофига чего непонятно с точки зрения новичка. Откуда берется encription key? Генерируется при открытии нового «чистого» файла проекта? Что будет если его потерять или забыть? Придётся сносить прошивку и интеграцию и устанавливать по-новой или можно как-то восстановить, вытащив из устройства? Для чего нужна fallback-сеть, в плане какую информацию она выдаёт в веб-интерфейс, если к ней подключиться? Логи? Что будет если IPшник поменяется после перезапуска и переподключения устройства к сети (если в настройках роутера мы не присвоим устройству static IP, оставив DHCP)? Установленная в HA интеграция слетит? Или она умеет работать с динамическими IP? Можно ли на уровне прошивки установить конкретный статический IP? Как? Про азы синтаксиса языка Yaml не спрашиваю, примеры есть на сайте проекта. В общем, довольно поверхностно, тема не раскрыта, хотя и понимаю, что это больше блог для личных заметок а не ответы на вопросы для новичков. Однако был бы благодарен за ещё один материал с более подробным описанием, с живыми примерами желательно.
Здравствуйте, Константин!
1. encription key генерируется при создании нового проекта. Либо вы его берете из головы!
2. Он нужен для связи HA b ESPHome через API
3. Если потерять его или забыть, придется перекомпилировать проект и заливать заново.
4. Как вытащить его из устройства я не знаю
5. Fallback-сеть нужна для подключения к устройству. По умолчанию можно получить с нее логи. Если в конфиге был прописан web интерфейс, то можно будет подключиться к нему.
6. Если HA и esp в одной сети, то HA сам увидит, что устройство поменялось. Если в разных он будет ждать тот же IP.
7. Я в своих рабочих проектах использую только статический IP, прописанный в конфиге. Пример:
wifi:
networks:
— ssid: !secret myssid
password: !secret myssid_pass
manual_ip:
static_ip: 192.168.0.76
gateway: 192.168.0.1
subnet: 255.255.255.0
8. DHCP использую только при тестировании.
Спасибо за исчерпывающие ответы!