Здравствуйте, уважаемые читатели моего блога!
Не так давно мой умный дом претерпел разительные изменения, хоть ничего не предвещало беды – всего-то перестала работать Алиса в связке с Home Assistant.
Но локальная проблема быстра переросла в глобальную – в итоге я обновил Home Assistant и настроил всё с нуля. Бэкап, увы, не восстановился, так как разрыв в версиях был приличным.
В ходе работ появилось желание сделать какое-нибудь устройство умным, но вот с самим устройством определиться я не мог. Бытовая техника в доме достаточно сложная и дорогая, чтобы в неё лезть, да и устройства были неподходящими.
Отказ от ответственности!
Автор статьи не несёт ответственности за последствия вмешательства в электрический прибор.
Всё описанное здесь Вы делаете на свой страх и риск.
При наличии гарантии на техническое средство – она будет аннулирована производителем.
Поиск устройства для эксперимента
Интереса ради решил найти примеры в интернете и наткнулся на видео с увлажнителем воздуха. На вид ничего сложного – припаялись к кнопке и имитировали её нажатие с помощью какой-то ESP.
Зашёл на WB и начал искать подходящий вариант для модернизации. Мне понравился вариант за 600 рублей (в качестве бонуса – питание от USB, что упрощало задачу).
Сделал заказ и получил увлажнитель, смочил фильтры, залил воду и включил в зарядку на один ампер. Всё отлично заработало.
Разборка увлажнителя и его модернизация
Работает увлажнитель следующим образом – одно нажатие на кнопку включает самый мощный режим увлажнения + подсветку, два нажатия – туман выходит попеременно из каждого генератора тумана, три нажатия – туман выходит одновременно из двух генераторов, но с паузой.
Четвертое нажатие выключает увлажнитель.
Разбирается увлажнитель воздуха элементарно – вставляем металлический предмет между пластиком в районе ушей и раздвигаем пластмассу (болтов нет, всё на пластиковых штырьках).
Внутри видим маленькую плату увлажнителя. Решил узнать напряжение на контактах платы – взял мультиметр, отсоединил генераторы тумана (важно) и включил питание.
Замер кнопки показал, что на ней 5 вольт (что не давало повторить опыт парня, который я ранее посмотрел на видео) – под рукой у меня была плата nodemcu с esp8266 – на цифровых контактах там не более 3,3 вольта – именно поэтому нельзя подключить её к кнопке напрямую.
Зато сразу определился с питанием платы – есть два пустых контакта (сверху-слева) с 5 вольтами от USB.
Для того, чтобы подключиться к кнопке, использовал транзистор 2N2007, он отлично подошёл для решения указанной задачи (я не Левша, поэтому когда он пришёл в пункт выдачи, я был в шоке от его размера – реально чуть больше блохи).
Вооружившись паяльником, я решил припаять транзистор напрямую к плате, соединив контакт S – с землёй кнопки, а D – с её плюсом. Управляющий контакт G соединил с контактом D2 nodemcu с помощью провода (не самый элегантный вариант, но что делать).
Касательно настройки nodemcu – подключил её usb проводом к компьютеру, открыл esphome web и выполнил первичную инициализацию.
Далее на сервере умного дома (у меня orange Pi 3 LTS) развернул docker с esphome (примеры команд на официальном сайте) и залил на nodemcu следующую конфигурацию:
esphome:
name: esphome-web-65b316
friendly_name: ESPHome Web 65b316
min_version: 2025.11.0
name_add_mac_suffix: false
esp8266:
board: esp01_1m
# Enable logging
logger:
# Enable Home Assistant API
api:
# Allow Over-The-Air updates
ota:
- platform: esphome
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
switch:
- platform: gpio
id: btn_press
pin: GPIO4
restore_mode: ALWAYS_OFF
internal: true
# Глобальная переменная для хранения режима (0–3)
globals:
- id: current_mode
type: int
restore_value: true
initial_value: '0'
# Текстовый сенсор для отображения режима словами
text_sensor:
- platform: template
name: "Humidifier Mode"
id: humidifier_mode_text
lambda: |-
switch (id(current_mode)) {
case 0: return {"Выключено"};
case 1: return {"Максимум"};
case 2: return {"Низкий"};
case 3: return {"Средний"};
default: return {"Неизвестно"};
}
# Скрипты для нажатий
script:
- id: press_button
mode: queued
then:
- switch.turn_on: btn_press
- delay: 200ms
- switch.turn_off: btn_press
- lambda: |-
id(current_mode) = (id(current_mode) + 1) % 4;
// обновляем текстовый сенсор
switch (id(current_mode)) {
case 0: id(humidifier_mode_text).publish_state("Выключено"); break;
case 1: id(humidifier_mode_text).publish_state("Максимум"); break;
case 2: id(humidifier_mode_text).publish_state("Низкий"); break;
case 3: id(humidifier_mode_text).publish_state("Средний"); break;
}
- id: turn_off
mode: queued
then:
- lambda: |-
while (id(current_mode) != 0) {
// Нажимаем кнопку через MOSFET
digitalWrite(4, HIGH);
delay(200);
digitalWrite(4, LOW);
delay(500);
// обновляем режим
id(current_mode) = (id(current_mode) + 1) % 4;
// обновляем текстовый сенсор
switch (id(current_mode)) {
case 0: id(humidifier_mode_text).publish_state("Выключено"); break;
case 1: id(humidifier_mode_text).publish_state("Максимум"); break;
case 2: id(humidifier_mode_text).publish_state("Низкий"); break;
case 3: id(humidifier_mode_text).publish_state("Средний"); break;
}
}
# Кнопки для Home Assistant
button:
- platform: template
name: "Humidifier Press"
icon: "mdi:gesture-tap-button"
on_press:
then:
- script.execute: press_button
- platform: template
name: "Humidifier Turn Off"
icon: "mdi:power"
on_press:
then:
- script.execute: turn_off
Так как я не знаю состояние увлажнителя, nodemcu считает его режимы от 0 до 3. Соответственно, выключение – это последовательное переключение режима до 0 (да, с кнопкой на самом увлажнителе в данной реализации синхронизации нет).
Далее собрал увлажнитель и запустил. В качестве питания взял зарядку на 2 ампера (1 ампер – уже маловато).
В Home Assistant установил интеграцию ESP Home, она автоматически нашла устройство.
И вот я управляю увлажнителем через смартфон – ура!
Что можно улучшить?
На данный момент увлажнитель не имеет обратной связи с кнопкой – стоит нажать на неё, и режимы собьются.
Решить эту проблему можно установкой оптопары (требуется изучить этот вопрос более детально), может, позже решусь на это, а пока потестирую работу увлажнителя без данной доработки.
После тестирования можно создать автоматизацию, которая включает увлажнитель при падении влажности и выключает по достижению заданного значения.
На этом прощаюсь с Вами! Хорошего времени суток и до новых встреч.
UPD 04.01.2026 г.
Всё таки не мог я спокойно жить без обратной связи увлажнителя.
Вчера вечером понял, что никакая оптопара не нужна, достаточно разорвать управляющую линию кнопки от микроконтроллера увлажнителя и поручить NodeMCU управлять ею.
Таким образом и решается проблема рассинхронизации увлажнителя.
Отпаял транзистор от кнопки, вскрыл дорожки и припаял транзистор к ним.
Разрезал управляющую дорожку выше контакта D транзистора и соединил контакт D4 с кнопкой.
Место вмешательства в плату теперь выглядит следующим образом:
В завершении покрыл места вмешательства и NodeMCU цапонлаком.
В код выше вставил дополнительный блок отвечающий за кнопку.
# Физическая кнопка
binary_sensor:
- platform: gpio
pin:
number: GPIO2 # D4
mode: INPUT_PULLUP
inverted: true
name: "Physical Button D4"
internal: true
filters:
- delayed_on: 30ms
on_press:
then:
- script.execute: press_button





