«Глупый» увлажнитель VS умный дом: подключаем «народный» увлажнитель к Home Assistant

mhxpwad9dfjcotwdsbc0s9wz8os.png


Привет, Хабр!
Наверное, многие из вас знают, насколько важно поддерживать качественный микроклимат в доме, одним из важных параметров которого является относительная влажность воздуха. Вот и я, года три назад, озаботился данным вопросом и приобрел увлажнитель воздуха Xiaomi Deerma Humidifier DEM-F628S (полный аналог DEXP HD-440). Увлажнитель оказался удачной конструкции и приемлемой ценной, что обеспечило ему «народную» популярность. Но, к сожалению, данный увлажнитель не поддерживает интеграцию в системы умного дома и вообще не имеет коммуникационных интерфейсов, я решил исправить этот недостаток и что у меня получилось — об этом далее.

Итак, что мы хотим?


Для начала, нам нужно определиться, что мы хотим делать с увлажнителем с помощью умного дома:

  1. Получать статусы увлажнителя (Вкл/выкл, режим работы, данные датчика, уровень воды в баке);
  2. Управлять питанием устройства, то есть включать и выключать;
  3. Выбирать уровень мощности увлажнителя.


Вскрытие покажет


Чтобы найти варианты реализации задуманного, нам необходимо вскрыть объект и изучить, как он работает. Ну что ж, давайте приступим, с детства люблю разбирать различные устройства. Разобьем на этапы разборки:

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

zpgdqmt4aecidbd2fir2eoktdgk.jpeg


Выкручиваем шурупы.

eg4pfuqcj11bofxirp3sxkbw_ao.jpeg


Затем нужно аккуратно удалить верхнюю крышку и вуаля, нам доступен внутренний мир увлажнителя!

jsmnhzsyyg5fgid1va9gkbqpl2m.jpeg


«Мозгом» нашего увлажнителя является вертикально расположенная плата, в которую подключены разъемы.

tgoh5skjcxkjlqhb4jq8u_4r_nk.jpeg


Чтобы беспрепятственно её демонтировать и изучить, необходимо убрать панель с ультразвуковым излучателем. Откручиваем четыре больших шурупа, которыми прикреплен модуль.

_2acn2i--y5ecwgy_pkyzmdqcx4.jpeg


Затем аккуратно отключаем все разъёмы от платы и осторожно вынимаем светофильтр индикатора, предварительно отщелкнуть защелки, которые показаны на фото.

pc5gnzcxg5fsdfsea5ymyikhl1w.jpeg


Ура! Мы достали плату и теперь можем её изучить. Как можно видеть, пружины выполняют роль антенн сенсорных кнопок управления.

bvzvuj0ma0ljtj9fwpcs1jb1_ye.jpeg


Так выглядит плата с обратной стороны.

tktalr1cffc6cbyemcmq0jpzivi.jpeg


Настало время волшебства


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

tw7achaqe_juoazmnucng--8cpy.jpeg


Описание точек подключения:

  1. Анод необходимого разряда;
  2. Катод индикации «Уровень воды минимум»;
  3. Катод индикации «Уровень мощности минимальный»;
  4. Катод индикации «Уровень мощности средний»;
  5. Катод индикации «Уровень мощности максимальный».


Точка J1–1 — это антенна сенсорной кнопки питания, она же выбор мощности. Алгоритм следующий:

Долгое нажатие включает или отключает увлажнитель, короткие нажатия изменяют режим мощности.


Эксперименты показали, что банальное замыкание антенны на GND вызывает срабатывание кнопки, то есть используя оптрон, припаяв его как можно ближе к антенне, мы можем управлять включением, выключением и выбором уровня мощности увлажнителя. К сожалению, варианты подключения ко встроенному датчику температуры/влажности я не смог найти, поэтому самым простым решением будет установка дополнительного датчика DHT22. В результате у меня вырисовывается следующая схема модуля для интеграции в Home Assistant, как вы могли догадаться, данный модуль построен на базе микроконтроллера esp8266, а так как мы извлекаем необходимые сигналы с динамического индикатора, то наиболее простым вариантом будет применение оптронов.

feboyhj3rcttpbwq-9xzaeqp628.jpeg


На фото вариант подключения шлейф и проверка моей концепции с помощью тестового навесного монтажа.

r3eahtnnpkfvbyxayxjqj-9ndww.jpeg


Ниже вариант изготовления печатной платы.

zherdgmzxoq7nrkogzxljh8q0ng.png


Немного магии и упорства и плата готова.

kiudbskqgqg14bkci62h11veiki.jpeg


Подключаем её к нашему увлажнителю, согласно принципиальной схеме.

jaxcrjfegg4wih0wxr18gyf1-ra.jpeg


И крепим её на боковой стенке корпуса с помощью двухстороннего скотча.

hb0poyhrl9c2s5fqjuu2n0iqx-0.jpeg


Не забываем про датчик DHT22. Разместим его на крышке, как показано на фото.

n9bun1pafcek9bn2beksk-41mqk.jpeg


Теперь дело за малым — собрать всё в обратной разборке последовательности.

Прошивка устройства


Микро ПО модуля разрабатывалось в среде Arduino IDE. Для конфигурации устройства используется web интерфейс. При первом включении устройство создаст Wi-Fi точку доступа, при подключении к ней, пользователя автоматически «перенесёт» на страницу конфигурации устройства, благодаря технологии Captive Portal. Станица входа, по умолчанию пароль «Admin».

1zghxnw_owlipwsk-c-fcaq3d10.png


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

huervaihjg7nickgz_tltgq2ci8.png


При включении увлажнителя появляется функция выбора мощности увлажнителя.

ublpyjngqt4h3_5qgc0jzx957qs.png


Страница конфигурации подключения с использованием протокола MQTT.

lhel0lvcwq4lih_h3svg76xbmtk.png

Интеграция в Home Assistant


Чтобы интегрировать наш увлажнитель в Home Assistant, необходимо настроить MQTT подключение и разрешить отправку данных при конфигурации модуля. Затем в Home Assistant отредактировать файл configuration.yaml, добавив в секцию mqtt следующий код:

sensor:
    - name: "Датчик температуры увлажнителя"
      unique_id: 5bc54f8b-7d41-4774-bfce-e98e92409d3e
      state_topic: "humiditer/jsondata"
      unit_of_measurement: "°C"
      value_template: "{{ value_json.temp }}"
      device_class: temperature  
    - name: "Датчик влажности увлажнителя"
      unique_id: 5bc54f8b-7d41-4774-bfce-e98e92409d3f
      state_topic: "humiditer/jsondata"
      unit_of_measurement: "%"
      value_template: "{{ value_json.hum }}"
      device_class: humidity  
switch:
    - name: "Питание увлажнителя"
      unique_id: 5bc54f8b-7d41-4774-bfce-e98e92409d38
      state_topic: "humiditer/jsondata"
      command_topic: "humiditer/control"
      value_template: "{{ value_json.chanel1 }}"
      payload_on: "0"
      payload_off: "0"
      state_on: "On"
      state_off: "Off"
    - name: "Режим мин"
      unique_id: 5bc54f8b-7d41-4564-bfce-e98e92409d38
      state_topic: "humiditer/jsondata"
      command_topic: "humiditer/control"
      value_template: "{% if value_json.chanel1 == 'On' and value_json.level2 == '0' and value_json.level3 == '0' %} On {% else %} Off {% endif %}"
      payload_on: "1"
      state_on: "On"
      state_off: "Off"
    - name: "Режим сред"
      unique_id: 5bc54f8b-7d41-4764-bfce-e98e92409d38
      state_topic: "humiditer/jsondata"
      command_topic: "humiditer/control"
      value_template: "{% if value_json.chanel1 == 'On' and value_json.level2 == '1' and value_json.level3 == '0' %} 1 {% else %} 0 {% endif %}"
      payload_on: "2"
      state_on: "1"
      state_off: "0"
    - name: "Режим макс"
      unique_id: 5bc54f8b-7d41-4784-bfce-e98e92409d38
      state_topic: "humiditer/jsondata"
      command_topic: "humiditer/control"
      value_template: "{% if value_json.chanel1 == 'On' and value_json.level2 == '1' and value_json.level3 == '1' %} 1 {% else %} 0 {% endif %}"
      payload_on: "3"
      state_on: "1"
      state_off: "0"
      #конец увлажнителя


Теперь добавим карточку нашего увлажнителя на панель управления Home Assistant, предварительно создав карточку «Объекты» и в текстовом редакторе вставить следующий код:

type: entities
entities:
  - entity: sensor.datchik_temperatury_uvlazhnitelia
  - entity: sensor.datchik_vlazhnosti_uvlazhnitelia_2
  - entity: binary_sensor.uroven_vody
  - entity: switch.rezhim_min
  - entity: switch.rezhim_sred
  - entity: switch.rezhim_maks
  - entity: switch.status_uvlazhnitelia
title: Увлажнитель воздуха
state_color: true


В итоге, мы должны получить что-то подобное:

02bhkup7l9m9vau4polpwzv2wp0.png


В данном примере используется имя корня топика «humiditer», что указывается при конфигурации устройства.

Подводим итоги


У нас получилось достаточно простое и бюджетное решение для интеграции «народного» увлажнителя воздуха в системы умного дома. Описанная в статье схема управления без нареканий проработала уже более двух лет, использовался навесной монтаж, но для статьи я решил изготовить полноценную печатную плату. Теперь давайте подсчитаем наши затраты:
Комплектующие:

  1. Микроконтроллер esp8266 — 1 шт $1.15;
  2. Оптрон EL817 — $2.42 (цена за 100 шт);
  3. Линейный стабилизатор HT7333-A SOT23 — $1.9 (цена за 20 шт);
  4. Датчик DHT22 (он же AM2302) — 1 шт $1.4;
  5. Прочие компоненты < $1.


Итого, примерный бюджет на реализацию: $8.

Демонстрация работы


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

Ссылки к статье:



Возможно, захочется почитать и это:
b5pjofdoxth14ro-rjsrn7sbmiy.png

© Habrahabr.ru