Як налаштувати електронну годівничку через ESPHome + Home Assistant

Усім привіт. У цій публікації покажу, як зробити дешеву електронну годівничку для шиншил та інших малих гризунів в ESPHome та керувати нею з Home Assistant. російський військовий корабель, пішов нах***!

Ідея статті з’явилась з потреби дистанційно пропорційно дозувати корм.

ESPHome — це проєкт, що дозволяє замість коду писати просту конфігурацію yaml для дешевих Wi-Fi контролерів esp8266 та esp32.

Для роботи нам знадобиться прозора пляшка з широким горлом, сервопривід (у мене mg90s, або використовуйте дешевший sg90), дюпон дроти 10 см мама-тато, NodeMCU ESP8266 (в моєму випадку це NodeMCU V3 ESP8266 (CH340)), кабель micro-USB, клей-пістолет, скотч та стяжки за бажанням. Вартість проєкту приблизно 300 грн. З програмної частини нам знадобиться Home Assistant.

Встановлення ESPHome

Для встановлення ESPHome необхідно перейти в Home Assistant >> Конфігурація >> Додатки знизу справа натиснути кнопку магазин доповнень, в пошуку знайти додаток ESPHome. Відкрити його та натиснути кнопку «Встановити». Також за бажання можна відобразити додаток на бічній панелі.

Підключення сервоприводу до ESP

Сервопривід

ESP8266

Помаранчевий (сигнальний)

До pin D7 в прикладі

Червоний (живлення)

до pin 3.3v

Коричневий, або чорний (заземлення)

до pin GND

Створення пристрою

Для створення нового пристрою потрібно відкрити додаток ESPHome та натиснути зелену кнопку «New device» >> Continue, дати назву пристрою, обрати тип esp8266. Після повідомлення про успішне створення конфігурації натиснути Skip.

Конфігурація ESP

Для редагування конфігурації пристрою необхідно натиснути кнопку Edit на створеному пристрої та вставити готову конфігурацію нижче.

esphome:
  name: esphome-web-dc88e5
 
esp8266:
  board: nodemcuv2
 
# Enable logging
logger:
 
# Enable Home Assistant API
api:
  services:
    - service: control_servo
      variables:
        level: float
      then:
        - servo.write:
            id: my_servo
            level: !lambda 'return level / 100.0;'
 
ota:
 
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
 
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esphome-Web-Dc88E5"
    password: "LW78e7mAashv"
 
captive_portal:
 
output:
  - platform: esp8266_pwm
    id: pwm_output
    pin: D7
    frequency: 50 Hz
 
servo:
  - id: my_servo
    output: pwm_output

Ось готова конфігурація yaml:

У розділі Wi-Fi потрібно змінити !secret wifi_ssid на назву власної Wi-Fi мережі. !secret wifi_password змінити на її пароль.

В полі board необхідно вписати nodemcuv2 Якщо на контроллері написано nodemcuv3, тип плати все одно має бути nodemcuv2.

Поле Api дозволяє створити службу Home Assistant, яка контролюватиме обертання сервоприводу зі значеннями обертання від −100 до 100:

services:
    - service: control_servo
      variables:
        level: float
      then:
        - servo.write:
            id: my_servo
            level: !lambda 'return level / 100.0;'

Інформація в кінці файлу свідчить про те, що сигнальний (помаранчевий) провід серво приєднаний до виходу D7. Якщо потрібно змінити фізичний порт підключення на контролері, він має бути змінений після слова pin:

output:
  - platform: esp8266_pwm
    id: pwm_output
    pin: D7
    frequency: 50 Hz
 
servo:
  - id: my_servo
    output: pwm_output

Завантаження прошивки

Підключіть ESP кабелем micro-USB до комп’ютера. В ESPHome на пристрої натисніть кнопку install, оберіть варіант «Plug into this computer» Рекомендую виконувати завантаження за допомогою кабелю браузер Google Chrome. Після того як ви завантажите прошивку, контролер буде доступний дистанційно (кабель знадобиться лише для живлення).

Зачекайте приблизно 10 хвилин, доки прошивка завантажиться в контролер.

Налаштування Home Assistant

Щоб керувати сервоприводом з інтерфейсу Home Assistant, потрібно створити слайдер, що матиме стартове значення 0, крок 1 та зможе змінювати значення від −100 до 100.

Для цього в кінець файлу configuration.yaml потрібно додати:

input_number:
  servo_control:
	initial: 0
	min: -100
	max: 100
	step: 1
	mode: slider

Після потрібно перезавантажити Home Assistant. Зробити це можна у пункті меню Інструменти для розробників у вкладці YAML розділ «Перевірка конфігурації».

Щоб засинхронізувати повзунок Home Assistant з сервоприводом в кінець configuration.yaml також потрібно додати таку автоматизацію та перезавантажити Home Assistant.

alias: Write Servo Value to ESP
trigger:
  - platform: state
    entity_id:
      - input_number.servo_control
condition: []
action:
  - service: esphome.esphome_web_dc88e5_control_servo
    data_template:
      level: "{{ trigger.to_state.state | int }}"
mode: single

Після можна вперше перевірити, що усе працює. Для цього потрібно перейти в той же пункт «Інструменти» для розробників вкладка «Служби». Оберіть службу control_servo та встановіть рівень в межі 100 −100.

Створення сцени

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

Для створення сцени потрібно перейти в конфігурація >> автоматизації та сцени >> вкладка сцени >> додати сцену. Придумати довільну назву сцени (у мене назва servo_open), обрати піктограму та область (кімната будинку).

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

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

Створення автоматизації

Автоматизація дозволить відкривати і закривати кришку в заданий період часу. Для створення автоматизації потрібно перейти в Конфігурація >> Автоматизації та сцени >> вкладка автоматизації >> додати нову автоматизацію >> почати з порожньої автоматизації

Потрібно обрати тригер час. Тригером буде час годування шиншил (в мене це 21:00).
Також потрібно додати умову повторення автоматизації щодня. Для цього в розділі умови також потрібно обрати час та в останньому полі обрати усі дні тижня.

В розділі дії потрібно обрати «Активувати сцену» та обрати раніше створену сцену. servo_open

Після потрібно встановити час затримки відкритої кришки. Для цього потрібно обрати пункт очікування спливання часу. В моєму випадку це 200 мілісекунд.

Також, якщо на телефоні встановлено мобільний додаток Home Assistant можна налаштувати сповіщення. Для цього потрібно в розділі «Дії» обрати пункт виклик служби notify.notify.

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

Додавання картки до інтерфейсу Home Assistant

Щоб можна було годувати шиншил вручну і не переходити в автоматизації, можна створити картку інтерфейсу. Для цього в пункті меню «Огляд» потрібно натиснути три крапки зверху справа та обрати «Налаштувати зведення». Після, знизу праворуч натиснути на кнопку «Додати картку».

Обрати картку «Кнопка». У вікні, що відкрилось, натиснути знизу кнопку «редактор коду» та вставити код. Де потрібно замінити назву автоматизації на свою. Назву автоматизації можна знайти в Конфігурація >> Автоматизації та сцени >> Сутності. В пошуку ввести слово automation та знайти потрібну.

show_name: true
show_icon: true
type: button
tap_action:
  action: call-service
  service: automation.trigger
  service_data:
	entity_id: automation.test_feeder
hold_action:
  action: more-info
icon: mdi:paw
name: Погодувати шиншил

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

Складання докупи

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

Сервопривід у мене закріплений пластиковою стяжкою і також залитий клеєм. Якщо сильно перетягнути сервопривід, він може не працювати.

Контролер ESP у мене з’єднаний дротами та прикручений скотчем (щоб шиншили не надгризли дроти) Не дуже гарно, але практично. На фото зняв частину скотчу для тесту.

При першому використанні «тестувальники» вказали на недоліки конструкції. Шиншили можуть відкривати кришку зубами, тому для захисту механізму відкриття від незаконного проникнення можна використати половину пляшки на 1.5 л.

Я розрізав її дно на чотири частини, вставив пляшку-годівничку всередину та залив з’єднання гарячим клеєм. Виглядає не дуже привабливо, але працює чудово.

Живлення контролера можна організувати через дріт micro-USB, приєднавши його до блоку живлення або powerbank. Замість класичного powerbank можна використати powerbank під батарейку типу 18650.

Для кріплення годівнички можна використати пластмасові стяжки, мідний дріт (наприклад, зіпсований ethernet-кабель), пластмасовий дріт для підв’язування рослин, резинки для грошей або кріплення для поїлок.

Відео роботи годівнички можна подивитись тут.

Сподобалась стаття? Подякуй донатом у фонд «Повернись живим».

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

👍ПодобаєтьсяСподобалось7
До обраногоВ обраному3
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

Довго намагався запустити сервопривід з HomeAssistant доки не розібрався що у статті не вистачає інформації як засинхронізувати input_number.servo_control з esphome_web_dc88e5_control_servo

треба було додати automation:

alias: Write Servo Value to ESP
trigger:
  - platform: state
    entity_id:
      - input_number.servo_control
condition: []
action:
  - service: esphome.esphome_web_dc88e5_control_servo
    data_template:
      level: "{{ trigger.to_state.state | int }}"
mode: single

Допомогла ця стаття siytek.com/...​o-example/#Add-automation

Дякую за уточнення, додам до статті. До написання мене надихнула ця стаття Siytek. Якщо ви робите годівничку для гризунів вам варто знати, що показана конструкція корпусу не досконала. Мої шиншили в перший день перегризли дроти, що йшли поверх пляшки під скотчем та зняли пластмасовий поворотний елемент.

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