Предисловие
Некоторое время назад я увлекся темой умного дома. В процессе ремонта я специально подбирал умные светильники для всех помещений в квартире: точечные светильники Philips downlight в коридор, ванную и кухню, Yellight с фоновой подсветкой в спальню. Остальные источники света управляются с помощью выключателей от Aqara, либо посредством реле той же фирмы. Все это замечательно интегрировалось в Home Assistant. Однако, для гостиной был куплен светодиодный светильник от российской фирмы (скорее всего китайской сборки) с регулировкой яркости и теплоты света. Оснащается RF пультом, что не позволяет использовать для управления универсальный ИК-передатчик от Xiaomi.
Практика показала, что пультом мы практически не пользовались, он постоянно не под рукой или вообще куда-то завалился. Очень хотелось, чтобы и этим светильником можно было управлять из общего интерфейса Home assistant и использовать в автоматизациях. Поиск решений в интернете не принес результата, так что было принято решение делать все самостоятельно.
Попытка реверс-инжиниринга
Как это можно сделать?
Сначала думал перехватить, а после - подменить сигнал управления. Драйвер люстры имеет маркировку Bluetooth и RF2.4G. Официально заявленного приложения для телефона от производителя не существует. Попытка использовать приложение от подобных драйверов с Aliexpress не увенчалась успехом - люстра не реагировала на Bluetooth. Для работы по RF на самом драйвере и в пульте стоят микросхемы, которые очевидно связываются между собой, но маркировка на них отсутствует. Протокол их работы остается загадкой. Я даже написал в техподдержку, но ожидаемо в ответ тишина.
Был приобретен тот самый драйвер с АЛИ для экспериментов, чтобы попытаться подружить его с модулем ESP8266, а именно, установить Wemos D1 mini вместо приемной и управляющей микросхемы или платы. Но продавец не положил в комплект пульт ДУ, поэтому отследить сигналы управления не получилось. Понять, как работает драйвер "вслепую", у меня не хватило знаний... Поэтому переходим к следующему этапу.
По простому пути
Решил просто эмулировать нажатие кнопок на родном пульте ДУ. Разобрал пульт, прозвонил и нарисовал схему. Оказалось, что каждое нажатие на кнопку - это замыкание между собой двух ножек микросхемы.
Чтобы замыкать контакты с помощью ESP, необходимо использовать реле, либо оптопары. Слушать постоянные щелчки конечно же не хотелось, поэтому приобрел на Али модуль с восемью транзисторными оптопарами. Без доработки напильником не обошлось: с модуля для удобства подключения были выпаяны все клеммы, на входе напаяны штырьки, контакты "земли" соединены между собой. На выходе также припаяны штырьки к контактам V1-V8, на контактах G штырьки уже были - для замыкания перемычкой на общую землю.
Еще пришлось уменьшить номинал резисторов на выходе, иначе было очень большое сопротивление и нажатие не срабатывало.
Резисторы выпаивать не стал, просто припаял навесным монтажом 100 Ом параллельно (резисторы рядом с красными перемычками). Родные стоят 3 КОм, в параллели стало 97 Ом.
Далее снимаем все перемычки, кроме последней. Она нам понадобится для подачи питания на сам пульт. Это необходимо, потому что во время инициализации Wemos на некоторых пинах уже есть 5 вольт, а такие паразитные нажатия нам ни к чему. В коде программы установим задержку на подачу напряжения на пульт.
Собираем по схеме:
На самом пульте я аккуратно ножиком зачищал дорожки, идущие к микросхеме, лудил и припаивался проводом с ответной частью к штырьку.
Пишем программу для Wemos под ESPHome.
esphome: name: lustra platform: ESP8266 board: d1_mini on_boot: - delay: 5s - switch.turn_on: lustra_remote_power # Enable logging logger: baud_rate: 0 # Enable Home Assistant API api: password: "pass" ota: password: "pass" web_server: port: 80 wifi: ssid: "ssid" password: "pass" # Включить точку доступа если не подключится к WiFi ap: ssid: "Lustra Fallback Hotspot" password: "pass" captive_portal: sensor: - platform: wifi_signal # Уровень Wi-Fi сигнала положительным числом name: "signal_lustra" update_interval: 60s filters: - lambda: return x * (-1); #------------------------------------------------------------------------------ - platform: uptime # Время работы после последней перезагрузки name: uptime_lustra id: uptime_lustra switch: # на каждую кнопку после включения после 0.5 секунд отключается - platform: gpio pin: GPIO1 id: lustra_power_off name: "Power OFF" icon: "mdi:ceiling-light-outline" on_turn_on: - delay: 500ms - switch.turn_off: lustra_power_off - platform: gpio pin: GPIO3 id: lustra_power_on name: "Power ON" icon: "mdi:ceiling-light" on_turn_on: - delay: 500ms - switch.turn_off: lustra_power_on - platform: gpio pin: D3 id: lustra_brig_up name: "Brightness UP" icon: "mdi:ceiling-light-outline" on_turn_on: - delay: 500ms - switch.turn_off: lustra_brig_up - platform: gpio pin: D4 id: lustra_brig_down name: "Brightness DOWN" icon: "mdi:ceiling-light-outline" on_turn_on: - delay: 500ms - switch.turn_off: lustra_brig_down - platform: gpio pin: D5 id: lustra_light_colder name: "Colder" icon: "mdi:ceiling-light-outline" on_turn_on: - delay: 500ms - switch.turn_off: lustra_light_colder - platform: gpio pin: D6 id: lustra_light_hotter name: "Hotter" icon: "mdi:ceiling-light-outline" on_turn_on: - delay: 500ms - switch.turn_off: lustra_light_hotter - platform: gpio pin: D7 id: lustra_connect name: "Connect" icon: "mdi:ceiling-light-outline" on_turn_on: - delay: 500ms - switch.turn_off: lustra_connect - platform: gpio pin: D8 id: lustra_remote_power name: "Remote power" icon: "mdi:remote"
Не забываем менять пароли на свои. Алгоритм работы программы такой:
Через 5 секунд после включения, замыкается оптрон №8, подавая напряжение на пульт. Далее, нажимая на любой из переключателей, он отключится автоматически через 0.5 секунды, эмулируя одно нажатие пальцем. Кнопка, подключенная к D7, отвечает за подключение пульта к люстре. Ее нужно зажимать, поэтому она автоматически не отключается.
После перезагрузки, в Home assistant отображаются следующие сущности:
Заключение
Работа получившегося изделия меня полностью устраивает, теперь регулярно пользуемся всеми возможностями люстры, так как телефон всегда под рукой.
В процессе эксплуатации стало понятно, что эмулировать нажатия кнопок ON и OFF на пульте совершенно ни к чему - обратной связи нет и я не могу знать, включена ли люстра, если я не нахожусь рядом. Для включения/выключения люстры используется обычный выключатель Aqara. Так мне всегда наглядно видно в интерфейсе, работает люстра или нет.
Таким образом, на будущее если освободится два оптрона, думаю стоит использовать их под кнопки ночника и максимальной яркости.
Вот так выглядит карточка в интерфейсе HASS:
Несколько фотографий конечного устройства и расположения. В этой мини полочке в верхнем шкафчике кухни еще блок питания для подсветки кухни, реле для ее включения. На Wemos сидит еще дисплей 16х2 с отображением количества использованной фильтрованной воды за текущие сутки и датчик включения подсветки кухни. Но это уже не относится к теме управления люстрой. Если интересно - пишите, расскажу подробнее.
Моя первая статья и первое самостоятельное изделие для умного дома.
Спасибо за прочтение!
Недавно пробовал подобное подключать, тоже ноги на микросхеме пульта замыкал. Сначала через NPN транзисторы пробовал - работает. Что-то не понравилось не помню. Поменял на N-каналы - работает. Потом попробовал напрямую, прямо с контактов еспэшки на контакты микросхемы, через 1 ком поставил - работает. Походу все это ни к чему, колхоз, напрямую нормально. Уже пол года без сбоев.
Вы на один контакт микросхемы подаёте +5 вольт? А если замыкаете две ноги напрямую с есп, прошу рассказать как, очень интересно.
Не совсем понял вопрос. Ну примерно как у вас и описано. У меня не нужно было две ноги пульта замыкать, каждую ногу на землю сажалось, ну или pullup подтяжка и нулем управлять. Ну а если одновременно две ноги пульта, то можно отдельную кнопку создать, чтобы два сразу нажимала. Ну или две кнопки зажать, вы ведь так делаете?
Очень неплохо для первой статьи. Но я бы все-таки доковырял драйвер либо пошел по простому пути - поставил другой драйвер, что-то вроде диммера Shelly либо zigbee/wifi драйвера для светодиодных лент (в зависимости от того, на какое напряжение рассчитаны светодиоды. Судя по драйверу с али, там все-таки вольт 24).
Спасибо! Нет, посмотрите на фото родного драйвера, там напряжение вывода 120-205 вольт постоянки. А таких я не находил с wifi / zigbee. Но мне в личку написал человек с комментариями, как раз подсказал, куда копать, чтоб подключить есп прямо к микросхемам драйвера. Думаю попробовать, если получится - будет действительно элегантное решение с минимумом колхоза.
Обязательно, если получится сделать.
Там смысл в том, что на драйвере стоят микросхемы. Они имеет встроенный высоковольтный мосфет с выходом на ногах 5, 6. А регулировка осуществляется второй ногой. вот туда то и нужно подключить есп на контакт с ШИМ. И регулировать с помощью компонента cwww esp home
А у меня была идея попробовать через Miboxer WL-Box1 от Mi Light. Типа такого https://aliexpress.ru/item/32761798341.html?spm=a2g2w.productlist.0.0.7cad704atRMhTF&sku_id=62017171269">Miboxer. Вроде все необходимое в коробке имеется, но что с программной частью непонятно. Но чет так и не заказал даже
Порылся в сообществе HA.
Сначала нашел https://community.home-assistant.io/t/limitlessled-miboxer-wl-box1/148283/21">статью про то как miboxer легко связывают с tuya и затем через localtuya управляют в HA.
Но потом нашел ещё https://community.home-assistant.io/t/newer-miboxer-wl5-and-wl-box1-with-tuya/266886">статью и в ней написано, что можно обойтись esp8266 и NRF24L01+ создав свой хаб и для связи с HA использовать MQTT.
Инструкция как создать такой хаб и прошивка к нему https://github.com/sidoh/esp8266_milight_hub">тут.
Попробую собрать такой хаб на досуге.
Интересно. И непонятно зачем тут тогда вообще miboxer. Сочетание
esp8266 и NRF24L01+ и есть по сути
miboxer. Есть и пара статей на тему преобразования 2.4 RF в MQTT. https://github.com/rpakdel/arduino-esp8266-nrf-mqtt">Раз и https://zen.yandex.ru/media/two/umnyi-dom-majordomo-opyt-primeneniia-mysensors-mqtt-i-ds1820-shliuz-mqtt-gateway-5b557d7d4b58fc00a975b00a">два
ага, поэтому и написал в конце предыдущего сообщения, что можно создать свой хаб c mqtt загрузив готовую прошивку вместо miboxer + проброс через localtuya в ha
А,если попробовать в ЕСП
- platform: gpio
name: "Relay"
pin:
number: D5
inverted: true
mode: OUTPUT_OPEN_DRAIN
то наверное и опторазвязка не нужна, тогда pin просто замыкается на gnd .
И питание пульта можно сразу взять с ЕСП 3.3 вольта .
Аналогичная сейчас задача, все очень похоже. Но пошел по другому пути. Через СС2530 подаю ШИМ сигнал. Но есть пока не решенные проблемы. Одна из них, это значение 255 приводит к большому току, т.к. стандартный контроллер, когда включается и теплый и холодный выдает не более 2В на канал. 2 момент, это из-за того, что по факту в люстре нет нормальной гальванической развязки, есть существенные помехи и пульсации, в следствие чего WEMOS отказалась работать, а СС2530 - работает. Но в случае чего, не получится переспарить, т.к. после отключения питания на люстру, емкости еще какое-то время его питают и сколько нужно времени держать выключенным пока не разбирался. Проще микрокнопку где-то вынести, есть не видимые части.
На счёт реверс-инженеринга, может https://github.com/sidoh/esp8266_milight_hub/wiki/Radio-Configs">эта статья пригодится?
Я на android использую https://new.zscbled.com/app/download">SmartControl для управления подобной люстрой, драйвер которые так же имеет маркировку Bluetooth и RF2.4G
Существует приложение на андроид для управления подобным светильником по
bluetooth. Возможно можно узнать какой сигнал шлёт телефон для управления светильником ?
Спасибо за схемы и прошивку. Плата оригинального пульта отличается от указанной в статье, читается чип радио TLSR8367EP16. Купил доп пульт для повторения чего-то аналогичного, внешне одинаковые, а внутри схема другая (доп пульт имеет аналогичную плату как в статье) и не привязывается. Лампа кстати под другой ТМ LUMINARIA VOLNA SLIM DOUBLE 85W, но видать с одного китайского завода.
Только хотел написать про софт под андроид, но ссылки https://sprut.ai/client/user/profile/9197">xrays72 день назад уже указал, подходят обе проги с его поста. Учитывая невозможность привязать пульт к лампе, как у автора, этот софт ему не поможет. Хотя для купленного
драйвер с АЛИ без пульта возможно подойдет. Эта ссылка с QR кода картинок китайца на али, который продает драйверы для светильников, указана в статье. Судя по картинке, али драйверы лампы внутри аналогичны моей, только надписи на корпусе иначе нанесены. Где-то пару недель тестировал на андроиде, всё работает.
Пытался привязать лампу с помощью esp8266_milight_hub, который обсуждали выше, но ничего не вышло. По идее внутри .apk которые работают с лампой должны быть верные "частоты", "каналы" или "коды" что бы их можно было повторить, например, чере bluetooth ESP32 или тотже NRF24L01 с esp8266 ???
Кстати, удалось привязать 3 телефона с помощью QR кода который выдала софтина SmartControl (был привязан к лампе только один моб в первые 5 сек после подачи питания на светильник), в нем (QR коде) зашифрован текст
{"current_uuid":"46f0b210-8b6b-4558-829a-885733b43268"}
. Как я понимаю, этот уникальный uuid только нужен для привязки пульта к лампы в первые 5 секунд после подачи питания, а дальше стандартный код сигнала который прописан в софтине на своем канале 2.4g. Таким образом, два аналогичные светильника могут управляться одинаковыми пультами отдельно.
https://sprut.ai/static/media/cache/00/79/07/5/10497730/83156/1000x_image.jpg?1635883067" alt="1000x_image.jpg?1635883067" />
https://sprut.ai/static/media/cache/00/79/07/5/10497730/83159/1000x_image.jpg?1635883157" alt="1000x_image.jpg?1635883157" />
https://sprut.ai/static/media/cache/00/79/07/5/10497730/83160/1000x_image.jpg?1635883199" alt="1000x_image.jpg?1635883199" />
Кто-то делал управление пультом на зигби с помощью конфигураторы ptvo ? Есть неплохой пример и вроде бы как работает, но там максимум 8 контактов для управления оптопарами и задействовать можно не больше 5 (3 для непонятных задач, сигнал +- не шлют.
Светодиодные ленты из соединенных последовательно LED 2835. 5*50+5*80=650 светодиодов. Холодный и теплый белый пополам.
Драйвер с выходным напряжением DC132-198V собран на двух BP2958 + ny8a054. Каждый канал на свой цвет светодиода.
Микропроцессор NY8A054E имеет управление через ИК, соответственно пульт тоже ИК.
Буду пробовать смотреть сигнал на светодиоде пульта и эмулировать такой же через esp8266, подавая его на ножки фотодиода.
Приложение есть.
У меня две люстры данного производителя одну покупал в 20г., вторую 22г.
Обе с поддержкой bluetooth. Ещё два года назад, а скорее всего и раньше уже было приложение Smart Estares, правда скачивалось не из маркета а по ссылке из инструкции (QR). Так же работает с приложением LampSmart Pro (это приложение в инструкции ко всем новым моделям). С приложением люстра работает, но интеграции для HA по Bluetooth протоколу к сожалению не нахожу.
Для повышения живучести светодиодов есть смысл ограничить максимальные значения ШИМ программно.
Дополнительно подключаю выключатель на свободные входы ЕСП, в выключатель вставляю пружинку - теперь он кнопка. Но это не у всех прокатит, я предусмотрел ещё на стадии разводки электропроводки возможность перекоммутации выключателей, и напряжение 220 В у меня на них не приходит, а к светильникам дополнительно протянута слаботочка.
Издеваюсь над светильниками Estares без RGB.
Вот код:
output:
# Cold white
- platform: esp8266_pwm
pin: D7
max_power: 1
# Можно ограничить максимальный ток, например: max_power: 0.9
frequency: 1000 Hz
id: output_cold_white
# Warm white
- platform: esp8266_pwm
pin: D8
max_power: 1
frequency: 1000 Hz
id: output_warm_white
light:
- platform: cwww
name: "${plug_name} Light"
cold_white: output_cold_white
warm_white: output_warm_white
cold_white_color_temperature: 6536 K
warm_white_color_temperature: 2000 K
constant_brightness: false
restore_mode: RESTORE_DEFAULT_OFF
id: lamp_1
Тут хорошее направление https://rntlab.com/question/using-a-esp-32-to-controll-ble-led-light-controller/
https://play.google.com/store/apps/details?id=com.jingyuan.lamp
Т.к. оригинальное приложение от этой фирмы, уже даже попросту не открывается.
Если ваша люстра поддерживает управление с помощью приложения LampSmart Pro, то её можно подключить к Home Assistant и далее например к Яндексу/Алисе или другим голосовым помощникам.
Что нужно:
- Люстра Estares с поддержкой LampSmart Pro.
- Home Assistant с ESPHome
- Плата ESP32 с поддержкой Bluetooth. Не подойдут плате ESP8266 и ESP32-S2, т.к. в них нет модуля Bluetooth.
- Компонент с github - https://github.com/flicker581/esphome-lampsmart
В компоненте реализованы несколько версий протоколов подключения.
У меня сработал вариант v1a.
Это мой рабочий вариант конфигурации (добавляем в конец основной конфигурации):
----------------------------------------------------------------
external_components:
# shorthand
source: github://flicker581/esphome-lampsmart
lampsmart_pro_light:
light:
- platform: lampsmart_pro_light
name: Estares Europa
duration: 750
default_transition_length: 0s
variant: v1a
----------------------------------------------------------------
Прошиваем плату, заходим в Home Assistant, переходим в панель разработчика - службы. Находим службу esphome.*******_pair_*****
Выключаем люстру (настенным выключателем), включаем и на второй-третей секунде вызываете службу. Если свет моргнул, всё ок. Можно управлять люстрой.
С одной платы можно управлять раздельно несколькими люстрами. Для этого нужно в конфигурации указать несколько объектов light с другими именами.
Можно ли одной платой управлять одновременно несколькими люстрами не знаю.
Ещё особенности:
- Если вызывать службу на первой секунде после включения люстры - ничего не происходит, пробуйте сделать паузу.
- Если не получается с моей конфигурацией, прошейте с конфигурацией как у автора компонента. Правда у него по умолчанию параметр duration 200, у меня с такими значениями ничего не работало, поэтому поменял на 750.
- Я подключал две люстры и на одной из них при значениях яркости ниже 45% свет вовсе выключался. На такой случай в конфигурации задаётся параметр min_brightness: