Статья

Сенсорные выключатели для штор и ESPHome

У одного из наших товарищей @Indig0_prophecy, были сенсорные выключатели для управления шторами под EweLink. Проблема с этими выключателями в том, что они то недокручивают шторы, то перекручивают, и настройке это не поддается. Ну и сложно интегрировать это дело в Home assistant. Он предложил мне эти выключатели для опытов. Возможно ли их перешить на EspHome?

Сначала сделаю небольшой обзор этих выключателей.

Внешность выключателей достаточно стандартная, такого рода сенсорных девайсов много на алиэкспресс. Пластик качественный, передняя панель стеклянная. Собраны плотно, ничего не люфтит и не скрипит. У меня внешне точно такие же выключатели света Girier.
Корпус под стандартный круглый подрозетник. Сзади красуется название фирмы King Art и минимальные характеристики. А также предупреждение, что надо электричество отключать при установке, ну и лучше это доверить профессионалам.
Внутреннее устройство тоже распространенное, состоит из двух плат: силовой и управляющей. На управляющей плате разведен ESP8285, в качестве WiFi моста, контроллер Nuvoton, отвечающий за логику работы. Есть светодиод состояния сети в левом верхнем углу, и каждый сенсор подсвечен двумя светодиодами: синим и красным.
С другой стороны платы ещё один контроллер, заведующий сенсорными кнопками. Зачем такой винегрет - одним китайцам известно. Со всем этим справилась бы и Еспха. Одно радует, что выведены пины TX RX GPIO0, подписанный как SW.
Силовая плата содержит импульсный неизолированный источник питания на 5 вольт. Силовые дорожки дополнительно залужены.
Также на плате силовые реле на 10 А. Контакты для зажима проводов. Причем эта плата, скорее всего, устанавливается и в обычных выключателях света.

Ну что ж, подключим USB-UART переходник к подписанным дорожкам, и пробуем прошить. ЕСП входит в режим прошивки и стартует, но постоянно отваливается на середине прошивки где то. Это происходит потому, что второй контроллер Nuvoton постоянно шлет посылки в COM порт. Для того, чтобы этот контроллер не мешал, замыкаем площадку RES1 на землю и тормозим контроллер. Дальше дело пошло. Стал пробовать залить интеграцию Tuya MCU. Но эта интеграция ничего не увидела, что естественно, протоколы у Tuya и Ewelink разные. Попробовал интеграцию UART устройств. Нашел, что скорость обмена 19200, и посылки представляют из себя текстовые AT команды. Но что-то ничего не получилось. Пробовал и Tasmota - там нашел библиотеку, переделанную от диммера KingArt. Нифига не работает нормально. В процессе этих мытарств дошла мысль, что даже если получится что-то, но время открытия и закрытия зашито в контроллере Nuvoton и, соответственно, это изменить никак не получится. Обсудив с хозяином выключателей, решил выковырять контроллер Nuvoton. Контроллер, который отвечает за сенсорные кнопки, выдает постоянно высокий уровень, а при касании сенсора - низкий. Очень удобно использовать GPIO0 GPIO2. Тем более они рядом.

Удалил контроллер. Взял тонкий обмоточный провод и подпаялся к GPIO4, GPIO0, GPIO2 и GPIO12, GPIO14, благо они все на одной стороне и рядом нет элементов. Светодиод состояния висит на GPIO13.
Проложил эти провода по краю платы и подпаялся к выводам отсутствующего контроллера. Индикацией сенсоров пришлось пожертвовать. Так как я уже прошил EspHome, то адаптер не нужен, перепрошивка по воздуху.

Дальше накидал прошивку. Использовал компонент Time based cover. Мне кажется, что он лучше всего подходит. Время открытия и закрытия можно точно подобрать. Сделал бинарные сенсоры на кнопки, и два свича для управления реле. Обнаружился небольшой косяк. Если, допустим, нажать открытие и сразу же нажать закрытие, включенными получаются оба реле. Поэтому в свичах включил interlock, чтоб исключить эту ситуацию. GPIO0 на среднем сенсоре. Если перешивать по проводу, то нужно коснуться середины.

esphome: name: cover platform: ESP8266 board: esp8285 logger: baud_rate: 0 #disable logging over uart wifi: ssid: "WiFi" password: "Password" ap: ssid: "Captive" password: "1234567890" captive_portal: web_server: status_led: pin: GPIO13 # Enable Home Assistant API api: password: "1" ota: password: "1" cover: - platform: time_based name: "Time-Based Cover" id: cover_1 open_action: - switch.turn_on: open_cover_switch open_duration: 30sec #время открытия close_action: - switch.turn_on: close_cover_switch close_duration: 30sec #время закрытия stop_action: - switch.turn_off: open_cover_switch - switch.turn_off: close_cover_switch switch: - platform: gpio pin: GPIO12 id: open_cover_switch #реле открытия interlock: [close_cover_switch] - platform: gpio pin: GPIO14 id: close_cover_switch #реле закрытия interlock: [open_cover_switch] binary_sensor: #сенсорные кнопки - platform: gpio pin: number: GPIO4 inverted: true id: open_1 on_press: then: - cover.open: cover_1 - platform: gpio pin: number: GPIO0 inverted: true id: stop_1 on_press: then: - cover.stop: cover_1 - platform: gpio pin: number: GPIO2 inverted: true id: close_1 on_press: then: - cover.close: cover_1

Побаловался по-разному с выключателем, работает четко. Никаких проблем. В НА залетел сразу, веб морда тоже работает. Решил побаловаться с подсветкой. Светодиоды подключены так, что при подаче высокого уровня горит синий светодиод, при подаче низкого - красный. Подключил к выходам транзисторных ключей. Ключи по схеме открытого коллектора. Соответственно, для включения реле они замыкают на землю. Подсветка клавиш заработала. Соответственно, пока реле включено - горит красным, потом - синим. Средний сенсор подключил на 3.3 вольт. Только синий получается. В таком варианте единственная проблема - этой подсветкой никак нельзя управлять. В общем вдохнул новую жизнь в выключатели. Теперь можно все гибко регулировать. Сейчас отправлю выключатели обратно хозяину, думаю, позже в комментах он отпишется.

1

Ильмир, гигантское спасибо за проделанную работу!!! Как придут и поставлю на место - обязательно сниму видео работы из ХА и вживую.

Спасибо что есть такие люди как ты.


Вернуться назад
Вернуться назад