Налаштовуємо ESPHome. Посібник для початківців

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Привіт. На зв’язку Богдан Свердлюк. Я люблю налаштовувати різні функції в «розумному» будинку і розповідати про це українською. У цій статті поговоримо про те, як налаштувати свою роботу з ESPHome.

Це — відкритий проєкт, що покликаний створювати дешеві Wi-Fi та Bluetooth пристрої без знань мови програмування на основі сімейства Wi-Fi плат ESP8266/ESP32 та RP2040. ESPHome підтримує велику кількість периферійного обладнання, що робить його дуже гнучким та потужним інструментом для DIY розробників та розв’язання побутових задач. російський військовий корабель, пішов нах***!

Як працює ESPHome

ESPHome дозволяє керувати підключеним обладнанням до контролера ESP чи Raspberry RP2040. Для цього перетворює добре зрозумілий конфігурацій файл YAML на файл прошивки (компілює) та завантажує в пам’ять контролера.

Існує декілька сценаріїв використання ESPHome:

  1. Створення нового пристрою на основі плат без програмного забезпечення.
  2. Перепрошивка пристроїв виробника. До прикладу частим сценарієм є перепрошивка реле Sonoff Basic, Shelly, Tuya та інших.
  3. Купівля готових пристроїв для роботи в ESPHome. Такі пристрої можна знайти на AliExpress з позначкою made for ESPHome.

Щодо архітектури роботи, пристрої під керуванням ESPHome можуть працювати як:

  • клієнт, що керується Home Assistant без можливості керування через вебінтерфейс;
  • клієнт, що керується Home Assistant з можливістю керування через вебінтерфейс;
  • незалежний вебсервер з можливістю керування через вебінтерфейс.

Є декілька способів керувати та отримувати стан пристрою ESPHome:

  • рекомендованим способом є керування пристроєм ESPHome через Home Assistant. Для цього використовується компонент Native API. Додатково до нього можна увімкнути керування за допомогою MQTT та REST API;
  • якщо пристрій працює незалежно можна керувати ним через MQTT;
  • якщо пристрій працює незалежно можна керувати ним через REST API.

Що можна зробити з ESPHome

ESPHome може створити майже будь-який пристрій IoT. Ось декілька прикладів. Конкретні приклади дивись нижче у розділі цієї статті цікаві проєкти.

Керування сенсорами дозволяє приєднувати до ESP та RPI велику кількість цифрових та аналогових сенсорів. Детальніше про сенсори — на сторінці ESPHome. До них входять сенсори руху, температури, вологості, якості повітря, різноманітних газів, відстані, потужності, струму, світла та багато інших. Детальніше на головній сторінці ESPHome.

Відстеження пристроїв iBeacon. iBeacon або маячки — це маленькі Bluetooth Low Energy (BLE) пристрої на батарейках, що дозволяють пристроям постійно надсилати заздалегідь визначений пакет даних.

Варіанти використання:

  • відстеження відстані до пристрою всередині приміщення.Наприклад, до ключів;
  • відстеження присутності людини у приміщені за допомогою смартфону.

Збір інформації з датчиків Xiaomi BLE. Дозволяє збирати дані BLE датчиків Xiaomi, інтегрувати їх в Home Assistant та використовувати без застосунку Mi Home. Це значить, що можна переглядати показники не лише коли вдома, але і дистанційно. Ця інтеграція лише прослуховує пакети та не керує BLE пристроями. Детальніше тут.

Керування освітленням ESPHome дозволяє керувати як звичайними, так і адресними світлодіодним стрічками, Wi-Fi лампами, димуванням, білим, холодним, монохроматичним освітленням, яскравістю та кольором.

Керування дисплеями дозволяє відображати дані на електронному папері, LCD, сегментних та інших цифрових дисплеях.

Керування реле дозволяє вмикати, вимикати пристрої, отримувати дані по сухому контакту, проводити енергомоніторинг, димування світла.

Керування сервоприводами та кроковими двигунами дозволяє створювати різноманітні рухомі механізми з обертальним та круговим рухом.

Керування звуком дозволяє під’єднувати динаміки (часто за допомогою шини I2C), п’єзоелемент.

Як встановити ESPHome

Home Assistant

ESPHome належить компанії, що розроблює Home Assistant — Nabu Casa. Тому популярним способом є встановлення ESPHome як застосунку у цій операційній системі.

Для встановлення ESPhome в Home Assisatnt перейдіть у бічне меню >> Застосунки >> Магазин >> у пошуку введіть ESPHome. Встановіть та запустіть.

Також можна використовувати ESPHome повністю незалежно від Home Assistant, що робить його ідеальним вибором для розробки пристрою IoT, якому не потрібен сервер.

Python

Щоб встановити ESPHome як Python-програму, спочатку встановіть Python. Після у терміналі або CMD, та встановіть ESPHome:

pip3 install wheel
pip3 install esphome

Запустіть майстер налаштувань:

esphome web_control.yaml wizard

де web_control — довільна назва вашого файлу. Буде створено файл конфігурації у папці, де ви зараз находитесь. Після можна відредагувати файл за допомогою зручного для вас редактора, наприклад, VSCode, або Notepad ++.

Після того як прошивка пристрою буде написана, можна її завантажити на пристрій. Перше завантаження прошивки завжди виконується кабелем, наступні можна завантажувати уже бездротово. Для першої прошивки підключіть плату до комп’ютера, де запущено ESPHome, та виконайте команду:

esphome run web_control.yaml

Встановлення інформаційної панелі:

pip install tornado esptool esphome dashboard config/

Після введіть адресу пристрою, на якому встановлено Docker та порт 6052. Наприклад 192.168.0.2:6052.

Docker

Для використання ESPHome як Docker-контейнер, встановіть Docker. У терміналі або CMD встановіть контейнер ESPHome:

docker pull esphome/esphome

Після запустіть майстер налаштувань ESPHome.

docker run —rm -v "${PWD}":/config -it esphome/esphome wizard livingroom.yaml

де livingroom — довільна назва файлу. Буде створено файл конфігурації у папці, де ви зараз знаходитесь. Після можна відредагувати файл за допомогою зручного для вас редактора, наприклад, VSCode або Notepad ++.

Після того, як прошивка пристрою буде написана, можна її завантажити на пристрій. Перше завантаження прошивки завжди виконується кабелем, наступні можна завантажувати уже бездротово. Для першої прошивки підключіть плату до комп’ютера, де запущено Docker, за допомогою USB-кабелю. Запустіть команду:

esphome run livingroom.yaml

На Linux команда повинна мати адресу USB-пристрою.

docker run —rm —privileged -v "${PWD}":/config —device=/dev/ttyUSB0 -it esphome/esphome run livingroom.yaml

де /dev/ttyUSB0 — адреса USB-пристрою. Дізнатись весь список пристроїв можна за допомогою команди dmesg | grep ttyUSB

Mac взагалі не може отримати доступ до хост-пристроїв USB. Тому він не може використовуватись для запису першої прошивки з Docker.

Встановлення інформаційної панелі

docker run —rm —net=host -v "${PWD}«:/config -it esphome/esphome

Після введіть адресу пристрою, на якому встановлено Docker та порт 6052. Наприклад6 192.168.0.2:6052.

ESP Web Tools та web.esphome.io

ESP Web Tools та аналогічний web.esphome.io — інструменти, що працюють з браузера. Браузер повинен підтримувати підключення USB пристроїв — Web serial, Google Chrome або Microsoft Edge.

Це, мабуть, найпростіший спосіб встановлення ESPHome. Все, що потрібно зробити — приєднати плату USB кабелем, натиснути connect, обрати порт та ввести дані Wi-Fi мережі. Запис конфігурації займає менш як хвилину.

Інструмент може:

  • завантажити лише базову конфігурацію. Це конфігурація для плати без підключених пристроїв. (Prepare for first use) Після приєднання до живлення плата автовизначиться в Home Assistant;
  • завантажити готову конфігурацію в форматі .bin.

*Якщо у вас немає Home Assistant, і ви не хочете чи не можете встановити ESPHome на комп’ютер, можна написати та скомпілювати за допомогою сервісу Play with Docker.

Майстер налаштувань

Коли ви встановили ESPHome, є два способи створити новий пристрій:

  • за допомогою графічного інтерфейсу інформаційної панелі;
  • за допомогою командного рядка. Така можливість є в Python та Docker інсталяцій.

Вперше майстер налаштувань запитає назву та пароль Wi-Fi мережі. При створенні нового пристрою потрібно вказати довільну назву пристрою, обрати платформу та тип плати. Коли пристрій створено, можна заповнювати конфігураційний файл. Для цього в графічному інтерфейсі потрібно натиснути Edit на пристрої.

Якщо пристрій створено за допомогою командного рядка, потрібно знайти створений YAML-файл.

Інтерфейс інформаційної панелі

Коли створюється конфігураційний файл пристрою .yaml, він з’являється в інформаційній панелі. При встановленні застосунку ESPHome, усі конфігурації знаходяться у директорії /config/esphome/. До неї зручно отримати доступ через додаток File Editor або Samba. Для кожного вузла є декілька дій:

  • UPDATE — ця кнопка з’явиться, якщо пристрій не оновлено;
  • EDIT — відкриває редактор конфігурацій;
  • LOGS — за допомогою цієї кнопки можна переглянути всі журнали, які виводить вузол;
  • Overflow menu (три крапки) — це випадне меню, яке дозволяє виконувати більше дій;
  • Validate — перевіряє правильність конфігурації;
  • Install — відкриває діалогове вікно встановлення. Дивись розділ встановлення прошивки;
  • Clean Build Files — видалення всіх створених файлів збірки (.bin). Іноді старі файли не видаляються, що може спричинити проблеми з компіляцією пізніше;
  • Delete — це видалить файл конфігурації (видалить пристрій).

Configuration YAML

Конфігурація EPHome максимально схожа до Home Assistant configuration.yaml. Майстер налаштувань створює початкову конфігурацію. Після можна додавати блоки роботи з сенсорами чи пристроями.

Наприклад, я хочу керувати лампочкою через 5 вольтове реле. Для цього використовується компонент switch та платформа gpio. Це дозволяє використовувати будь-який пін плати як вимикач.

switch:
  - platform: gpio
    name: "Реле лампа"
    pin: 5

Моя повна конфігурація виглядає ось так:

esphome:
  name: relay
  friendly_name: Relay DOU

esp8266:
  board: nodemcuv2

# Enable logging
logger:
  #level: VERY_VERBOSE

# Enable Home Assistant API
api:
  encryption:
    key: "sE+X65uSDG617KfmnNFPo5k0QRJnnwaziT6jvGK79Ss="

ota:
  password: "b52f42b3beb6f21097ba53c6e79d6fc5"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Relay Fallback Hotspot"
    password: "emYvyOMNPYOE"

captive_portal:
   
switch:
  - platform: gpio
    name: "Relay"
    pin: D3

web_server:
  port: 80

Як фізично підключити реле до nodemcu

Для прикладу підключення: я використовую NodeMCU V3 ESP8266 (CH340) та 5В 10A Songle реле з трьома контактами. Проте, яке це буде реле чи ESP — не принципово. Потрібно лише правильно підключити контакти.

Реле

ESP

S, або IN1 (сигнальний)

З’єднується з будь-яким цифровим піном ESP. У прикладі це D5

 (мінус), або GND (заземлення)

З’єднується з піном GND

+(плюс), або 3V (живлення)

З’єднується з піном 3V, або зовнішнім живленням від 3 до 5В

Якщо все підключено правильно, при увімкненні та вимкненні реле буде чути клацання. На вихід реле вмикається те, чим потрібно керувати — лампа, вимикач, або поставити в розрив ланцюга перед вилкою.

Встановлення прошивки

Коли конфігурація написана, можна завантажити її на плату. Є декілька способів це зробити:

  • за допомогою Wi-FI (OTA);
  • за допомогою USB, з’єднаним з будь-яким комп’ютером (необхідна підтримка web serial, ESPHome повинен відкриватись через HTTPS (мати SSL), можливо, необхідно встановити драйвер);
  • за допомогою USB до сервера або комп’ютера, де запущено ESPHome;
  • завантаження файлу прошивки (.bin) та подальше прошивання за допомогою ESPHome Web.

Успішна компіляція завершується зеленим повідомленням та фіолетовими параметрами плати нижче:

В результаті в інтерфейсі Home Assistant з’явився перемикач switch.relay_rele_lampa. Знайти усі сутності можна в інтерфейсі Home Assistant Налаштування >> Пристрої та сервіси >> вкладка Сутності.

За бажання його можна легко додати на інформаційну панель Home Assistant: Налаштування зведення >> Додати картку >> За сутністю.

Коли увімкнено компонент вебсервер, можна увійти у вебінтерфейс плати за допомогою IP адреси, або mDNS домену <name>.local/; IP-адресу та домен можна знайти, натиснувши на пристрої кнопку Logs.

Ось так виглядає вебінтерфейс плати:

Помилки компіляції

Перед вирішенням будь-якої помилки:

  1. Перевірте наявність оновлень.
  2. Перезавантажте сервер.

xtensa-lx106-elf-g++: fatal error: Killed signal terminated program cc1plus

compilation terminated.

*** [/data/relay/.pioenvs/relay/src/esphome/components/api/api_pb2.cpp.o] Error 1

Можливо завелике споживання оперативної пам’яті. Перевірити це можна у розділі Налаштування >> Система >> Устаткування.

Зменшити навантаження на оперативну пам’ять можна, якщо вимкнути усі застосунки. Якщо не допоможе, обмежити ESPHome виконанням лише одного процесу (default complete process limit).

Native API

Native API використовується ESPHome та Home Assistant. Він потрібен для спілкування з клієнтами за допомогою високооптимізованого мережевого протоколу.
Рядок api: у конфігураційному файлі дозволяє виявляти пристрої ESPHome у Home Assistant. Якщо використовується базовий конфіг ESPHome WEB, цей рядок уже присутній.

Вебсервер

Щоб увімкнути вебсервер ESPHome до конфігурації YAML потрібно додати рядки:

web_server:
  port: 80

Це дозволяє керувати пристроєм ESPHome за допомогою браузера. Працює з Home Assistant або без нього. За бажання, можна увімкнути вхід за логіном та паролем:

web_server:
  port: 80
  auth:
    username: admin
    password: !secret web_server_password

Рекомендується використовувати ESPHome через Home Assistant, проте додатково можна керувати та отримувати стан пристрою за допомогою REST запитів.

Якщо плата працює незалежно від Home Assistant, можна використовувати REST запити додатково до керування через вебінтерфейс.

Запит пишеться після URL-адреси пристрою за такою схемою:

/<domain>/<id>[/<method>?<param>=<value>]

domain — це, наприклад, тип компонента. Наприклад sensor або light.
id — ідентифікатор компонента. Можна або задати назву id, або дізнатись його з журналу, якщо він не вказаний. Щоб дізнатись ідентифікатор компонента можна встановити рівень журналу VERY_VERBOSE та знайти object_id: у ньому.

Команда для увімкнення реле виглядає так:

http://relay.local/switch/relay/turn_on

для вимкнення так:

http://relay.llocal/switch/relay/turn_off

Є дуже багато інструментів, щоб відправляти REST запити:

  • Postman програма на ПК та розширення Chrome;
  • Rested розширення Firefox;
  • Для iOS та Android можна використовувати різноманітні REST Api Client.

Я використовую Apple команди. Це дуже зручно, можна команду винести на початковий екран як застосунок або віджет.

Інтеграція з MQTT

MQTT — простий та ефективний протокол IoT, що працює за принципом видавець-підписник. Видавець відправляє повідомлення, підписник отримує. Спілкування відбувається у топіках (темах). Теми можна створювати, видаляти, підписуватись та відправляти повідомлення в них. Цим процесом керує брокер.

Mosquitto — один з найпопулярніших брокерів.
MQTT Explorer — корисна програма для дослідження топіків брокера. Компонент MQTT налаштовує підключення до брокера.

Примітка: якщо використовуєте MQTT, не використовуйте Native Api (видаліть стрічку api:), інакше плата перезавантажуватиметься кожні 15 хвилин.

Приклад конфігурації брокера:

mqtt:
  topic_prefix: boat
  discovery: false
  broker: 192.168.1.41
  port: 1883
  username: admin
  password: redacted
  discovery_prefix: homeassistant

Де topic_prefix: тема, в якій будуть публікуватись дані або інші теми з даними.
discovery: (не обов’язкове значення) автовиявлення пристрою в інтерфейсі Home Assistant.
broker: ip адреса брокера.
port: порт брокера.
username: та password: логін та пароль брокера.
discovery_prefix: (не обов’язкове значення) автовиявлення пристрою та сутностей в MQTT брокері Home Assistant.

Приклад публікації MQTT повідомлення в JSON форматі:

sensor:
  - platform: bme280
	temperature:
  	  name: "OutsideTemp"
  	  id: outside_temp
  	  oversampling: 16x
  	  on_value:
    	    - mqtt.publish_json:
        	  topic: "temperature"
        	  payload: |-
          	    root["OutsideTemp"] = id(outside_temp).state;

Де id — ідентифікатор. Довільна назва малими буквами латинкою, з нижнім підкресленням замість пробілу.
mqtt.publish_json: дозволяє публікувати MQTT повідомлення у JSON форматі (ключ — дані).
topic: публікує дані в існуючу тему, або створює нову.
payload: |- означає початок повідомлення.

Автоматизації ESPHome

Автоматизації — дуже потужний інструмент ESPHome. Автоматизації дозволяють виконувати дію за настання певної умови. Працюють як з Home Assistant, так і незалежно.

Наприклад, ця автоматизація дозволить увімкнути осушувач, коли натиснута кнопка, що приєднана до іншого піна цієї плати.

switch:
  - platform: gpio
    pin: GPIO3
    name: "Living Room Dehumidifier"
    id: dehumidifier1

binary_sensor:
  - platform: gpio
    pin: GPIO4
    name: "Living Room Dehumidifier Toggle Button"
    on_press:
      then:
        - switch.toggle: dehumidifier1

on_press — тригер, що спрацьовує коли натискається кнопка. Тригерів існує дуже багато, таких як: схід сонця, час, увімкнення/ вимкнення перемикача, клік, подвійний клік, після завантаження та перед вимкненням плати та інші.

then — після рядка then починається блок дій. У блоці можна вказати одну або декілька дій. Кожна дія відокремлюється тире. Дій також дуже багато: затримка, публікація MQTT, увімкнути, вимкнути лампу, вентилятор, повернути сервопривід або кроковий двигун, увійти в режим сну та інші.

# ...
on_press:
  then:
    - switch.toggle: dehumidifier1
    - delay: 2s
    - switch.toggle: dehumidifier1

Ця автоматизація дозволяє увімкнути або вимкнути осушувач, зачекати 2 секунди та повернути його до попереднього стану.

Ця автоматизація дозволяє увімкнути осушувач при досягненні 65° та вимкне при 50°:

sensor:
  - platform: dht
    humidity:
      name: "Living Room Humidity"
      on_value_range:
        - above: 65.0
          then:
            - switch.turn_on: dehumidifier1
        - below: 50.0
          then:
            - switch.turn_off: dehumidifier1
    temperature:
      name: "Living Room Temperature"

Цікаві проєкти

З приводу макетування усіх проєктів можна:

  • використовувати паяння та макетні плати;
  • замовити друковані PCB плати в Китаї та допаяти самостійно (вартість можна розрахувати в калькуляторі на сайті. Для невеликих плат ціна приблизно $5);
    обійтись без паяння і використовувати Dupont дроти для макетування та гарячий клей або breadboard.

Мультисенсор
Керування ролетами
Рахунок імпульсів лічильника
Перемикання музики за допомогою NFC тегів
Віддалене відкриття дверей гаража
Система крапельного поливу
Погодна станція (проєктів погодної станції величезна кількість)
Датчик якості повітря
Відстеження стану пральної машинки
Колонка

Більше цікавих проєктів дивіться на ESPHome у розділі DIY Examples, Форумі Home Assistant у категорії Share your project, тег esphome, на Instructables, Hackday чи Hackster.

Підтримувані плати та апаратні можливості

Усі описані сімейства плат випускаються багатьма компаніями. Через це існує велике різноманіття плат. В залежності від технічних характеристик плати, ESPHome може підтримувати такі апаратні можливості як: шини I2C, SPI, UART і CAN. Підтримуються такі протоколи зв’язку як Wi-Fi MQTT, Modbus, Bluetooth та BLE.

ESPHome підтримує усі плати ESP8266 та ESP32. Нижче наведені лише декілька популярних прикладів.

ESP8266 — це сімейство мікроконтролерів, китайської компанії Espressif з інтерфейсом Wi-Fi, що може виконувати користувацькі програми (в тому числі Arduino IDE) та має інструмент AT команд. Ця плата має зручний формфактор та велику кількість контактів. Я вважаю, що це одна з найкращих плат для початківців.

ESP-01 — найдешевша, і через це найпродаваніша плата Espressif. Не дуже зручна для початківців через відсутність USB. Проте можна використовувати USB TTL конвертер.

NodeMCU — одна з самих популярних плат. Чудово підходить для початківців, має багато контактів та багато посібників в інтернеті.

WeMos D1 Mini — одна з найменших плат розробки для модуля ESP8266.

ESP32 — сімейство двоядерних плат, потужніших та з більшою кількістю пам’яті ніж ESP8266, швидшим Wi-Fi, підтримується Bluetooth та BLE та має більшу кількість GPIO.

NodeMcu ESP32-WROOM-32S та 32D — популярні плати на Aliexpress, що часто використовуються в проєктах домашньої автоматизації. За формфактором дуже схожа на ESP8266 NodeMCU.

ESP32 також представлені в форматі міні. Наприклад, Wemos ESP32 S2 mini.
Цікавою для мене також є плата Wemos ESP32 C3 Pico та інші модифікації ESP C3, своїми мініатюрними розмірами і портом jst для підключення батарейки.

Я назвав найпопулярніші варіанти, проте є і багато інших плат зі своїми унікальними технічними характеристиками. Про ESP32 цікаво розповів блогер Андреас Шпісс у відео, наприклад, тут. А також у дуже інформативній таблиці. Обожнюю його.

RP2040 контролер розроблений компанією Raspberry Fondation. На основі цього мікроконтролера створені плати Raspberry Pi Pico та Pi Pico W. Остання має на борту Wi-Fi 2,4 ГГц та підтримується ESPHome.

Живлення

Живлення через USB. Зазвичай ESP живлять через кабель micro usb. Це забезпечує живлення 5В, а вбудований в плату регулятор захищає плату від перенавантажень. Можна живити плату будь-яким зручним способом: від блоку живлення 5 В, або Power Bank.

Живлення через контакт Vin + GND. Іншим способом живлення ESP32 є використання контакту Vin або широко відомого як контакт 5В. Цей контакт також підключений до вбудованого регулятора напруги та знижує поданий струм в 3.3В. Можна подавати напругу від 5 до 12В, однак рекомендовано не використовувати більше 6-7В, оскільки для роботи ESP32 потрібно лише 3,3В.

Контакт Vin також зручно використовувати із зовнішніми батареями та акумуляторами.

Для живлення можна використовувати:

  • літієві батареї;
  • літій-полімерні (LiPo) акумулятори;
  • літій-іоні (LiIon) акумумулятори;
  • нікель металогідридні (ni-mh) батареї;
  • LiFePO4 акумулятори.

Живлення через контакт 3.3 В + GND. Контакти 3,3В працює без регулятора напруги. Ні в якому разі не перевищуйте цю напругу інакше є ризик пошкодити плату. Обов’язково з’єднайте GND ESP із GND зовнішнього джерела живлення.

Живлення через JST конектор. Деякі плати, такі як ESP32 C3 pico мають JST конектор для підключення зовнішніх акумуляторів (часто на 3.7 В).

Детальніше у відео про живлення ESP Андреаса Шпісса тут, тут і тут.

Як почати

Щоб почати роботу з ESPHome:

  1. Оберіть проєкт, що вас цікавить.
  2. Купіть, або знайдіть необхідні плати, датчики та сенсори. За необхідності дроти Dupont (мама-мама, тато-мама), макетну плату, паяльник, припой, каніфоль.
  3. Встановіть ESPHome.
  4. Завантажте на плату початкову прошивку.
  5. Змініть файл конфігурації та завантажте його кабелем або бездротово.
  6. Якщо отримуєте помилки в процесі компіляції. Спробуйте перезавантажити Home Assistant або комп’ютер, де встановлено ESPHome, перевірте наявність оновлень. Якщо проблема залишилась, скопіюйте помилку та знайдіть інформацію про неї в інтернеті.

Якщо цей невеликий гайд був вам корисний, подякуйте донатом у фонд «Повернись живим».

👍ПодобаєтьсяСподобалось10
До обраногоВ обраному6
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Я правильно зрозумів що з конфігурації в yaml ESPHome за допомогою компілятора C++ створює прошивку для ESP? А є таке шоб ці yaml файли були безпосередньо на ESP? А то це ж заливати прошивку при кожній зміні конфігурації?

Так, конфігурацію потрібно перекомпільовувати при кожній зміні.

Але за власним досвідом перекомпіляція відбувається швидко, а заливати на esp ще швидше повітрям через OTA.

До речі, випадок що описуєте (файл лежить, як на флешці) працює на RPI Pico з Micropython. Можливо ще десь, але я не знаю.

Вітаю, чи маєте досвід компіляції скетчів Tasmota на Arduino IDE ?

Досвіду не маю. Але, якщо бажаєте озвучте вашу задачу, можливо зможу допомогти

Після паузи у два роки, не вдається провести компіляцію. Оновився Arduino IDE, також і скетч Tfsmota, і тепер помилки у відсутності бібліотек.

А бібліотеки, які просить Arduino ви завантажували? Перевірте їх наявність у менеджері бібліотек (пункт меню sketch >> Include library >> Manage Library). Якщо бібліотеки там завантажені, спробуйте видалити їх і встановити знову

Раніше в налаштуваннях IDE достатньо було додати шлях arduino.esp8266.com/...​age_esp8266com_index.json
Обрати саме плуту ESP8266. Усі бібліотеки наявні у папці lib, що в архіві скетчу.
Файл, на якому зупиняється компілювання, є у локальних бібліотеках.
#include // KNX Header files have to be global else compile fails -> lib/headers
Додавав його і в корень і в папку Ардуіно, але без змін.

Яку версію Tamara ви використовуєте? Пишуть що новіші версії видають помилку github.com/...​7/tasmocompiler/issues/91

То наче проблема в 2020 році. За цей час і IDE змінилось і версії tasmota з 9 до 13

До якої бібліотеки у Arduino претензії? Може видалити проблемну бібліотеку і завантажити її заново з інтернету, помістити у папку бібліотек? Зазвичай папка бібліотек на Windows знаходиться у папці Documets >> Arduino >> Library

#include // KNX Header files have to be global else compile fails -> lib/headers
compilation terminated.
exit status 1
Compilation error: esp-knx-ip.h: No such file or directory

Чи наявні бібліотеки з каталогу lib у каталозі Libary Arduino IDE? Може скопіювати їх туди?

Підкажіть, як вичитати топік MQTT при старті ESP ? інакше читає тільки при надходженні повідомлення

Можливо за допомогою автоматизації on_boot? esphome.io/...​ents/esphome.html#on-boot

Якщо хочете опишіть детальніше ваше завдання

так , я розумію, що

on-boot

, але що саме ? який параметр відповідає за читання топіку ?
власне, що я хочу — при рестарті ESP потрібно виставляти значення деяких сенсорів такими, які вони були до рестарту ...
так , можна писати в flash. але флеш перетирається при оновленні прошивки
також рестарт — це не просто перезавантаження, може бути вимкнуто живлення надовго
це проект — лічильник ел. енергії на PZEM-04 , і хочу синхронізувати його зі справжнім лічильником

Може так?

esphome:
  name: esp_name
  platform: ESP8266
  board: nodemcuv2

mqtt:
  broker: 'mqtt_server_ip'
  username: 'mqtt_username'
  password: 'mqtt_password'

sensor:
  - platform: mqtt
    name: "Ваш сенсор"
    state_topic: "mqtt_topic"
    unit_of_measurement: "Ваша одиниця виміру"
    value_template: "{{ value }}"
    on_boot:
      - mqtt.subscribe:
          topic: "mqtt_topic"
— platform: mqtt

— помилка, немає платформи такої
є

platform: mqtt_subscribe

, але немає автоматизації on_boot:
[on_boot] is an invalid option for [sensor.mqtt_subscribe].

Гадаю в моєму першому варіанті on_boot використаний не в тому місці. Має бути після board:

Може так спрацює?

esphome:
  name: esp_name
  platform: ESP8266
  board: nodemcuv2

  on_boot:
    priority: 600
    then:
      - mqtt.subscribe:
          topic: "mqtt_topic"

mqtt:
  broker: 'mqtt_server_ip'
  username: 'mqtt_username'
  password: 'mqtt_password'

sensor:
  - platform: mqtt_subscribe
    name: "Ваш сенсор"
    state_topic: "mqtt_topic"
    unit_of_measurement: "Ваша одиниця виміру"
    value_template: "{{ value }}"

нажаль
Unable to find action with the name 'mqtt.subscribe'

Можна спробувати без on_boot

esphome:
  name: esp_name
  platform: ESP8266
  board: nodemcuv2

mqtt:
  broker: 'mqtt_server_ip'
  username: 'mqtt_username'
  password: 'mqtt_password'

sensor:
  - platform: mqtt
    name: "Your Sensor"
    state_topic: "mqtt_topic"
    unit_of_measurement: "Your Unit of Measurement"
    value_template: "{{ value }}"
    
  - platform: template
    name: "Your Sensor Template"
    unit_of_measurement: "Your Unit of Measurement"
    icon: "mdi:your_icon"
    update_interval: 60s
    lambda: |-
      auto sensor = id(your_sensor);
      auto template_sensor = id(your_sensor_template);
      if (id(mqtt).has_state()) {
        // Якщо є стан MQTT, встановіть значення сенсора на останнє отримане значення
        auto value = id(mqtt).state;
        if (sensor.has_value() && value != sensor) {
          sensor = value;
        }
      } else {
        // Встановіть значення сенсора за замовчуванням, якщо MQTT не має стану
        sensor = 0.0;
      }
      return {sensor};

У цьому коді ми використовуємо сенсор MQTT для отримання значення з MQTT, а також використовуємо шаблонний сенсор для встановлення значення сенсора при старті ESP. У lambda функції ми перевіряємо наявність стану MQTT і встановлюємо значення сенсора відповідно до отриманого стану або значення за замовчуванням, якщо MQTT не має стану.

Дізнався, що підписка на топік виконуєтьтся автоматично, якщо MQTT вже налаштовано в ESPHome. Код той самий лише без on_boot

esphome:
  name: esp_name
  platform: ESP8266
  board: nodemcuv2

mqtt:
  broker: 'mqtt_server_ip'
  username: 'mqtt_username'
  password: 'mqtt_password'

sensor:
  - platform: mqtt_subscribe
    name: "Your Sensor"
    state_topic: "mqtt_topic"
    unit_of_measurement: "Your Unit of Measurement"
    value_template: "{{ value }}"

ні, не працює ... при рестарті не вичитує топік
доки там не оновиться значення — клієнт не бачить його

sensor:   - platform: mqtt_subscribe     name: "test Sensor"     topic: "test/topic"     state_topic: "test/state_topic"     unit_of_measurement: v

Спробуйте так:

sensor:
  - platform: mqtt
    name: "test Sensor"
    state_topic: "test/state_topic"
    unit_of_measurement: "v"

так вже пробував — немає платформи

mqtt
Platform not found: ’sensor.mqtt’.

А так?

sensor:
  - platform: mqtt_subscribe
    name: "test Sensor"
    state_topic: "test/state_topic"
    unit_of_measurement: "v"
    retain: true

так потрібно ключ topic:
і ми повернулись назад :)

sensor:
  - platform: mqtt_subscribe
    name: "test Sensor"
    state_topic: "test/state_topic"
    unit_of_measurement: "v"
    topic: "test/topic"
    retain: true

Вітаю. Як встановити конкретну версію esphome. Після оновлення з 2023.6.3 до 2023.8.2 мій BLE hub почав тупити, перезавантажуватись і в логах писати що та чи інша служба займає багато часу. Хочу відкатати версію назад і не знайшов якою командою

А як у вас встановлено esphome? Python, Docker, чи як додаток Home Assistant? Усі версії ESPHome є в офіційному репозиторії на GitHub. Вам потрібно знайти попередній реліз, завантажитити та встановити його. На якому етапі ви зараз?

Python на macOS,
sudo pip3 install esphome встановлює останню. Варіант з додаванням версії в кінці дає помилку

Спробуйте так

 pip install esphome==<version> 
без лапок, просто номер версії.
Версії тут pypi.org/...​phome/2023.8.0b4/#history

Дякую. Спрацювало.

pip install esphome==2023.6.0

Понизив версію. Все працює як раніше, поки оновлюватись не буду

Вітаю. Як встановити конкретну версію esphome. Після оновлення до 2023.8.3 мій ble hub довго завантажується та перезавантажується, постійнотвтлогах транслює mqtt connect OK. Я відкатати версію 2023.8.3 до старішої 2023.6.0 і т.д. Які працювали стабільно?

Дякую за україномовний контент на тему розумного будинку) До ESPHome користувався не Home Assistant, а іншою системою і там використовував на ESP прошивки Tasmota і ESPEasy, а після переходу на HA перейшов і на ESPHome) Дуже зручно використовувати в парі. Саморобні сенсорні вимикачі зроблені на базі Wemos S1 Mini, твердотільні реле, шилд для живлення від 12В і модифіковані власноруч кнопки HTTM, а ще модулі та датчики PZEM, DS18B20, BME280, PMS5003, MHZ-19B)

А з чого складається саморобний вимикач? Що таке кнопки НHTTM?

Конструкція складається з супортів та рамок Livolo для сенсорних вимикачів, далі за стеклом на монтажній платі запаяні сенсорні кнопки від Heltec, назва та в гуглі шукати якось так: httm series capacity touch module. В них я видалив вбудований smd світлодіод, бо у нього немає звотнього зв’язку, замість нього вставив туди прямокутний RGB-світлодіод залишивши загальний вивід, та синій з червоним. За замовчуванням світиться синій, а коли потрібно статус «увімкнено» відобразити, то додається червоний і виходить фіолетовий😁 на зворотньої стороні плати ще піни для конекторів Dupont і резистори для підтяжки та струмообмежувальні. Кнопки приклеєні клейовим пістолетом до скла . Живлення 12В в підрозетник йде по скрученій парі з щитка, далі шилд Wemos для живлення, Wemos S1 Mini, твердотільне реле і проводочки😄 Просто брати Livolo було не так цікаво😆

Просто брати Livolo було не так цікаво

Хахахаахахаха.

Оце заморочились... В мене у звичайні заглушки Legrand Valena Classic врізан звичайні ж совіцьки кнопки КМ1-1 і кетайські однокольорові світлодіоди. Виглядить кондово, олдово і вапщє. Мені такий дизайн подобається, але зайде не кожному.

А колись на Lua треба було кодити.
Доречі у якості MQTT брокера найкращій варіант все ж таки RabbitMQ із MQTT плагіном

Не мав з ним досвіду роботи. Можете пояснити чому RabbitMQ краще за Mosquito?

Ну може це власна думка.
RabbitMQ проект точно популярніший за Mosquito і краще комьюніті. Я коли пробував розгорнути і налаштувати Mosquito у ті часи виникли якісь труднощі (вже не пам`ятаю) із Rabbit все завелося з першого разу.
Плюс для серверного коду для роботи із Mosquito треба також підключати MQTT ліби — складніше знайти нормальну, із RabbitMQ це звичайні черги і клієнти вже написані під будь що.

Підкажіть в яких проектах ви використовуєте RabbitMQ? Ви працюєте зараз з MQTT протоколом? Які переваги цього брокера для вас? Що таке бібліотеки в RabbitMQ?

1. RabbitMQ раніше використовував в усіх проектах де потрібні були черги. В основному коли працював із Python використовував для Celery. Зараз переключився на Amazon SQS
2. Зараз не працюю. Це все було років 5 назад. Для промисловості ми використовували MSMQ із купленим адаптором. Для Pet проектів RabbitMQ — доречі пригадав що його легко було встановити у докері
3. Основна перевага що я міг відправляти месседжі із ESP по MQTT а отримувати їх у своїх серверних додатках через стандартний протокол використовуючи стандартні бібліотеки RabbitMQ для того ж Golang чи Python замість MQTT адапторів.

Круто! Дякую!

Я на ESP32 розробив колись домашнiй замок з вiдбитками.
Сам написав прошивку, розробив плату, та 3D моделi для друку.

Фiшки:
— Розробити замок, на вiдбитках пальцiв.
— WiFi.
— Web-iнтерфейс (на базi ESPUI).
— Управлiння користувачами.
— Розклад роботи.
— Репорти про змiну статусу на Viber.
— Звуковий модуль.
— Опiр вiдмикання (якщо хтось спробує вiдкрти дверi ключом, замок не дасть цього зробити).
— Не треба вандалити/перероблювати, дверi. Все монтуєця на звичайний дверний замок.
— Управлiння на вiдстанi або через Web-iнтерейс або через Viber-бота.
— Логи.

Мотивацiя: Спершу була — не давати дiтям ключi, щоб не змiнювати кожен раз серцевину коли ключi загублюють.

Ось мiй реалiзований проект замка на вiдбитках пальцiв (вiдео-демонстрацiя, фотки плати та iнше):
www.facebook.com/...​51192673/2757615204526071

Ось ще процесс розробки першої версiя яка працювала по радiканалу:
scontent.flis5-4.fna.fbcdn.net/...​2UE73436BnEUQ&oe=63A6BF09

Виклав на github бiблiотеку для роботи з сканерами для вiдбиткiв: github.com/...​77w/waveshare_fingerprint

Це звучить, як наче короткий переказ нашої наступної крутої Техстатті ;) Пишіть на [email protected], ми завжди чекаємо!

Обов’язково. Але треба знайти час на це.

Вау. Дякую за такий крутий коментар. Дозвольте декілька запитань.
Який датчик відбитку пальця використовували?
Для чого потрібен і як редагується розклад?
Що потрібно для реалізації звуку? Що таке звуковий модуль? Де зберігаються звукові файли?
Як організоване дистанційне керування?
Як реалізоване управління користувачами?
Наскільки це рішення надійне? Що станеться, якщо вимкнуть живлення?
Який сервоппивід використовується?
Чи можете ви поділитись кодом, 3d моделями?

Друге посилання не працює

Який датчик відбитку пальця використовували?

Capacitive сенсори бо вони бiльш надiйнi нiж оптичнi.
Спочатку був ADFRUIT R301T але я перепутав полярнiсть пiсля чого з ньго вийшов весь чарівний дим i вiн перестав працювати. Заказав транзистори але ще не повпаював.
Але в мене був ще один вiд Waveshare:
www.waveshare.com/...​ve-fingerprint-reader.htm
Вiн трохи з прибабахами. Довелось розiбратися як це обiйти (в кодi на Github це є див коммент: waveshare_fingerprint::unreset()). Пiсля цього все запрацювало.

Для чого потрібен і як редагується розклад?

Замок може по таймауту зачинятись автоматично. Наприклад хтось вийшов чи зайшов але лiньки нажати кнопку (з середини), чи ще раз просканувати вiдбиток.
У денний час автоматичне зчиненя не потрiбне.
Розклад редагуєця з Web iнтерфейсу замка. БД (sqlite) зберiгаеця на флешкi.

Що потрібно для реалізації звуку? Що таке звуковий модуль? Де зберігаються звукові файли?

Модуль вiд DF Robot: www.dfrobot.com/product-1741.html
Всi файли на ньому.

Як організоване дистанційне керування?

Через WebUI (звичайний forward порта через роутер) WebUI пiд паролем. Або через Viber бота, сам бот у мене на сайтi, сам бот вже по спецiальному протоколу вже смикає замок.
Звичайно потрiбен static IP вiд провайдера.

Як реалізоване управління користувачами?

Як вже писав вище БД (sqlite) на сторонi замка + флешка де все це зберiгається.
З WebUI можна додати/видалити/заблокувати користувача. Додати/видалити вiдбитки то що.

Наскільки це рішення надійне? Що станеться, якщо вимкнуть живлення?

В мене бiля дверей (коли я давно ще робив ремонт) є кабель живлення який йде через декiлка кiмнат аж до iнвертора на якому стоїть гелевий аккумулятор на 100Ah. Цей iнвертор багато що пiдтимує вдома у тому числi ще й замок.
А сам кабель живлення замка проходить в середенi дверей.

Який сервоппивід використовується?

SPT5535LV-360
Доречi, щоб не колхозити кінцевики (для того щоб детектити момент коли ригель замка дiйшов до кiнця). Я застосував датчик току (current sensor). Коли сервопривiд працює, мiкроконтроллер зчитує з нього показники i якщо вони перевищують деякий час якийсь рiвень, зупиняє серву. Чутливiсть та таймаут налаштовується з WebUI.

Чи можете ви поділитись кодом, 3d моделями?

Все проектування я робив в Fusion 360. Якщо пiдкажете як розшарити проект то чому б нi.
Деякi деталi потрiбно буде друкувати з нейлону.

Ось тут ще фотка процессу монтування (видно деякi компоненти)
www.facebook.com/...​5&set=pob.100008328540810

Вау! Це надзвичайно. Facebook не найкраще місце для поширення DIY проектів. Можу порадити опублікувати проект на сайтах накшталт hackaday.io, hackster.io, чи instructables.com

Підписатись на коментарі