Использование ESPHome в связке с Home Assistant

20 янв. 2019 г.

ESPHome. Вникаем. Пользуемся.

Часть  I. Вводная.

Небольшое вступление

Полная и достаточно внятная поддержка ESPHome в Home Assistant пришла к нам с обновлением 0.85.

Что же такое ESPHome? 

Если коротко, то это инструмент, который позволяет интегрировать в Home Assistant устройства, созданные на базе ESP8266 / ESP32.

Конечно, есть масса других проектов для подобных задач, таких как Tasmota, ESPEasy, WifiIot, ESPUrna, но основное их отличие от  ESPHome заключается в том, что все они, для интеграции с любыми системами, используют MQTT, а вот ESPHome разрабатывался специально для Home Assistant и для интеграции используется Native API.

Я ни в коем случае не призываю отказываться от MQTT, но в связке ESPHome + Home Assistant он просто не нужен.

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

P.S. И в завершение краткого описания хочу сказать, если честно, проникся я этой системой, зацепила она меня. Вот уж действительно, в ней всё по-настоящему "Easy".

P.P.S. Статья будет большая, дабы не упустить важные моменты и показать максимум возможностей на старте.

Итак, в данной статье мы рассмотрим следующее:

  1. Установка ESPHome
  2. Создание файла конфигурации
  3. Прошивка платы
  4. Запуск
  5. Добавление датчиков

Приступим.

1. Установка ESPHome

Что использовал я?

У меня после переезда Home Assistant на Raspberry 3B+ остался не у дел Orange Pi LIte с 512 Мб и установленной DietPi на борту.

На этой плате и будем работать с ESPHome.

Следует заметить, что ESPHome может быть установлена на одном устройстве с Home Assistant. Но в моем случае обе системы находятся на разных устройствах. 

Так же есть возможность  работы системы в случае использования Hass.io . 

Для работы системы понадобится предустановленный Python 2.7 ибо система использует platformio.

Итак, установка:

pip install esphome

Надеюсь во время установки ошибок не возникло. Переходим к следующему этапу.

2. Создание файла конфигурации

В ESPHome есть 2 варианта создания основного файла конфигурации:

  • Создание файла в консоли
  • Создание файла в Dashboard

Я расскажу про оба эти варианта. 

Вариант первый. Создаем файл в консоли командой:

esphome test.yaml wizard

Где, test.yaml, это имя файла вашего проекта

Далее отвечаем на вопросы дружественного мастера установки:

Придумываем и указываем имя нашего проекта.

Например, Test. Пишем с маленькой буквы. 

Теперь нужно выбрать и ввести тип нашей платформы. Я буду использовать ESP-01 с объемом памяти 1 Мб, по этому выбираю ESP8266.

Далее выбираем тип платы. У меня esp01_1m.


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

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

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

Вводим пароль для последующего обновления прошивки по воздуху.

Итак, мы создали файл основной конфигурации.

Теперь нужно его залить в плату.

Сделаем это.

3. ПРОШИВКА ПЛАТЫ

Перед прошивкой подключаем TTL-конвертер к серверу, а плату к конвертеру. 

Не забываем перевести плату в режим прошивки - замыкаем GPIO-0 на землю и подаем питание.

Прошивка устройства осуществляется командой:

esphome test.yaml run

После запуска скачиваются недостающие библиотеки и компилируется проект. Это займет какое-то время.

Потом система пытается залить скомпилированный файл в нашу плату.

Далее нам нужно выбрать, через что мы будем шить нашу плату: через TTL-конвертер или через ОТА.

Первая прошивка должна заливаться только через TTL-конвертер.

Вот так выглядит заливка конфигурационного файла.

Далее, перезагружаем плату и по идее мы должны увидеть лог старта нашей платы.

На этом месте я прервусь, дабы перейти ко второму варианту создания конфигурационного файла.

Вариант второй. Создаем файл в Dashboard.

Для работы в Dashboard нам сначала нужно ее установить.

Сделаем это командой:

pip2 install tornado esptool

И запустим командой:

esphome config/ dashboard

После этого в браузере перейдем по адресу:

localhost:6052

Где, "localhost", это адрес сервера, на котором мы работаем с ESPHome

В браузере нас встречает вот такая форма:

Нажимаем на "+" что бы создать конфиг-файл.

Вводим имя проекта

Выбираем тип нашей платы

Вводим логин и пароль WiFi

В завершение видим сообщение, что у нас всё хорошо и мы готовы к прошивке устройства.


В выпадающем списке справа выбираем, через что будем шиться. Для первого раза выбираем TTL-конвертер

Итак, мы готовы шиться.

Но перед этим пару слов о кнопочках проекта:

  • UPLOAD - запускает процесс прошивки по выбранному интерфейсу
  • EDIT - позволяет редактировать конфиг-файл
  • SHOW LOGS - показывает лог работающего устройства
  • VALIDATE - проверяет на ошибки конфиг-файл после изменения.
Ну, погнали. 

Переводим плату в режим прошивки - замыкаем GPIO-0 на землю и подаем питание.

Жмем VALIDATE и если ошибок нет, жмем UPLOAD.

Все, что происходит далее, ничем не отличается от прошивки через консоль.

4. Запуск

После прошивки видим, что наш проект онлайн - это значит, что дальше мы можем прошивать устройство по ОТА. 

Можем нажать SHOW LOGS и посмотреть, что там пишет наше устройство

После успешного старта проекта, пусть даже с пустой конфигурацией предлагаю заглянуть в Home Assistant.

Заходим в Настройки/Интеграции/Создать новую интеграцию и напротив строки ESPHome нажимаем НАСТРОИТЬ.

Вводим адрес платы. Можно посмотреть в логе

Вводим пароль, который мы указывали при создании конфиг-файла

Видим пока что, вот такую картину. 

А чего мы хотели, мы же еще не добавили ни одного датчика...

5. Добавление датчиков

Теперь откроем конфиг-файл и добавим веб-сервер и какие-нибудь внутренние датчики.

В Dashboard нажмем на EDIT.

Добавляем веб-сервер:

web_server:
  port: 80

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

binary_sensor:
  - platform: status
    name: "Test"

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

sensor:
  - platform: uptime
    name: Test Uptime Sensor

Целиком конфиг-файл выглядит следующим образом:

esphome:
  name: test
  platform: ESP8266
  board: esp01_1m

wifi:
  ssid: '**********'
  password: '********'

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: '*******'

ota:
  password: '*******'

web_server:
  port: 80
  
binary_sensor:
  - platform: status
    name: "Test"
sensor:
  - platform: uptime
    name: Test Uptime Sensor

Сохраняем и нажимаем VALIDATE

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

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

Проверим, что там у нас в Home Assistant.

Ага. Отлично.

Теперь посмотрим на веб-сервер.

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

Ну, неплохо же!

Теперь можно добавлять в конфиг-файл различные сенсоры, бинарные сенсоры, Light-компоненты, свитчи, автоматизации и прочие фишечки...

Вот собственно и всё, что я хотел рассказать в первой части. Этого пожалуй достаточно для старта.

Во второй части я планирую рассказать уже о более конкретной задаче, которую я хочу реализовать на устройстве Sonoff Basic.

Ну и в завершение.

Хочу добавить. 

Если вдруг вы хотите перейти с уже существующего устройства в котором залита Tasmota

или ESPEasy или ESPurna, то создаете конфиг-файл, как описано выше, только не жмете UPLOAD, а нажимаете на три точки, справа от имени проекта. Затем на кнопку COMPILE

После того, как скомпилируется ваш конфиг-файл вы можете скачать его и подсунуть для обновления прошивки вашего устройства в настройках той системы, которая сейчас установлена.

Ну и в завершение 2.

Если у вас возникли проблемы еще на первом этапе заливки основного конфиг-файла в устройство и проблемы эти связаны с Linux-системами, то можно скомпилировать файл и залить его из Windows программой esphomeflasher

В программе выбираете com-порт, к которому подключен TTL-конвертер, выбираете скомпилированный файл и жмете кнопку FLASH ESP

После удачной прошивки, устройство видится в Dashboard и с ним можно уже работать по ОТА.

Ну и в завершение 3. Бонус

Для автоматического запуска Dashboard, можно создать сервис в SystemD, например:

[Unit]
Description=Dashboard
After=network-online.target

[Service]
Type=simple
User=%i
ExecStart=/root/config esphome dashboard

[Install]
WantedBy=multi-user.target

Или добавить строку в rc.local

/usr/local/bin/esphome /root/config/ dashboard

Важный момент - обращайте внимание на пути, указанные в коде. Вы должны указать свои пути расположения ESPHome.

Вот теперь точно - всё!

Всем спасибо, кто осилил текст и дочитал до конца!

P.S. Статья обновлена 8.04.19 по причине критичных изменений в самом проекте ESPHome.

Изменения коснулись смены имени проекта. Раньше было ESPHomeLib, а теперь просто ESPHome.

Соответственно изменились основные команды и пути расположения файлов. 


Мы в Telegram - t.me/soprut
  1. Вячеслав Фетисов (Ziracul)
    Вячеслав Фетисов (Ziracul) 2 месяца назад

    Спасибо за ваш труд, очень интересная статья. Продолжайте в том же духе.

    • Владимир Карпенко (Reliable_bob)

      Спасибо. Буду стараться в том же духе)

      • Вячеслав Фетисов (Ziracul)
        Вячеслав Фетисов (Ziracul) 2 месяца назад

        Будет интересно почитать еще ваших трудов, подробно расписали и по полочкам. Как говориться для дураком. Если что это не оскорбление ни для кого. Просто очень подробно.

  2. Алексей Леонтьев (c_ache)
    Алексей Леонтьев (c_ache) 2 месяца назад

    Как раз для меня статья) Спасибо добрый человек!)

  3. Белояр Иван (Ivan711)
    Белояр Иван (Ivan711) 2 месяца назад

    Плюсую, хорошая статья, на хороший продукт. 

    Но. Если ставить на sonoff - то переодически отваливается как и тасмота, и еспизи, на свежих ядрах (2.4 и 2.5) по тому что использует тоже самое ядро. По этому именно для соноф, я продолжают использовать тасмоту на ядре 2.3. 

    А вот для ноды я конечно по эксперементирую. Планировал вообще отказаться от MySensors в пользу esphomelib но они еще так и не завезли поддержку датчиков MQ-2

    • Владимир Карпенко (Reliable_bob)

      Спорить не буду)

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

      • Белояр Иван (Ivan711)
        Белояр Иван (Ivan711) 2 месяца назад

        Обновление по ОТА стабильно работает?

        • Владимир Карпенко (Reliable_bob)

          Да, с этим проблем не было.

          Правда я сразу пошел на хитрость и прописал статик IP.

          Может это сказалось...

          • Алексей Леонтьев (c_ache)
            Алексей Леонтьев (c_ache) 2 месяца назад

            А на каком шаге и как прописать статик ip? 

            • Владимир Карпенко (Reliable_bob)
              Владимир Карпенко (Reliable_bob) отредактировано 2 месяца назад

              После первой прошивки через USB плата стартанёт и в логе вы увидите IP, который она получила (или в статистике роутера можно посмотреть).

              После этого снова редактируем конфиг-файл и правим там раздел WIFI. 

              Выглядеть он будет примерно так (само собой с Вашими адресами и масками):

              wifi:
                ssid: MyHomeNetwork
                password: VerySafePassword
              
                # Optional manual IP
                manual_ip:
                  static_ip: 10.0.0.42
                  gateway: 10.0.0.1
                  subnet: 255.255.255.0        
  4. Дмитрий Батюшин (ReD)
    Дмитрий Батюшин (ReD) 2 месяца назад

    было интересно в этом все разобраться и написать статью, но ты меня опередил, отличная статья!!! продолжай в том же духе 

  5. (macros)
    (macros) отредактировано 2 месяца назад

    Дополню для малины:

    NOTE: Installation on RPis running in 64-bit mode is currently not possible. Please use the 32-bit variant of HassOS instead.

    Насколько я понял проблема в отсутствии 64-битного paltformio.

  6. Алексей Мокренок (Lefey)
    Алексей Мокренок (Lefey) 2 месяца назад

    Спасибо, как раз планировал протестировать эту прошивку

  7. Алексей Леонтьев (c_ache)
    Алексей Леонтьев (c_ache) 2 месяца назад

    На сайте API еще указан вариант запуска на Python 3.5+

    pip3 install -U https://github.com/platformio/platformio-core/archive/develop.zip
К списку статей

Похожие статьи

15 нояб. 2018 г.
Xiaomi Mi Remote 360 добавляем Apple HomeKit
4 сент. 2018 г.
Интеграция RGB ленты на ESP8266 с прошивкой tasmota в систему HomeBridge (HomeKit)
2 нояб. 2018 г.
Кнопка звонка с уведомлениями в HomeKit
15 окт. 2018 г.
Прошивка для Sonoff c нативным HomeKit
15 нояб. 2018 г.
Способы автоматизации механических ворот
27 окт. 2018 г.
Нативный Термостат для котла на ESP8266 с поддержкой Apple HomeKit
1 окт. 2018 г.
Нативный HomeKit на ESP8266
15 июн. 2018 г.
Охранная система в гараж на ESP8266 с интеграцией в Apple HomeKit
27 авг. 2018 г.
Интегрируем ХА в HomeKit
2 окт. 2018 г.
Установка SDK для компиляции прошивок под HomeKit