Авторизация
Регистрация

Напомнить пароль

Безумная розетка с мозгами лампочки. Пятничные эксперименты со здравым смыслом

В относительно недавнем материале был рассмотрен Реверс-инжиниринг копеечных умных лампочек, но только в теории. Пришла пора немного размяться и заняться практикой. Для этого на базе мозгов лампочки соберем розетку. Да-да! В полку HomeAssistant ожидается пополнение. Заинтересованных прошу под кат.

Прежде чем собирать какое-либо устройство, следует определиться с его назначением, списком требуемых материалов и примерным планом работы. Без этого набора лучше за инженерный проект не браться! Описывать буду в порядке хода работы.

Задумка

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

В моем случае мощность я буду измерять другим устройством и в другом месте, намного полезнее будет установить туда датчик движения. Дело в том, что я уже устанавливал умное устройство управления освещением в прихожую (см. Безумный радиошлюз для контроля освещения и многого другого), но как оказалось, покрытия его датчика движения не хватает для того, чтобы надежно фиксировать людей в нижней половине комнаты. А поскольку в прихожей необходимо снимать обувь… В общем, чтобы пофиксить эту досадную оказию, мне и понадобился еще один датчик на уровне ног. Так как информация с розетки будет поступать на центральный сервер умного дома напрямую, мне придется добавить лишь пару строчек в код автоматизаций, чтобы интегрировать новый сенсор. Очень удобно!

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

Идея с датчиком климата (температура и влажность) мне тоже понравилась, так что решил воплотить и ее.  

И вообще, кто мне запретит? Я тут свою розетку делаю, с мозгами лампочки и гирляндой сенсоров!

В прихожей у меня также расположены светильники на аккумуляторах из поста Автономный светильник с датчиком движения и освещения (подсветка полок). В какой-то момент заряжать их мне надоело, так что решил их запитать на постоянку. И тут как раз вспомнил о розетке — почему бы в нее не вмонтировать порт для запитки? Питания от стандартного БП должно быть за глаза и для контроллера с реле, и для подзарядки светильников. На том и порешил.

Реализация

С основными фичами ТЗ разобрались, теперь можно приступать к технической части. На основе имеющейся рассыпухи и модулей, набросал схему в KiCAD.

Схема

В качестве драйвера 5В реле выступает ULN2003. Достаточно дешевая (<10 р./штука) и универсальная сборка транзисторов (в принципе пригодна для коммутации любых небольших потребителей, даже униполярных шаговиков).

Датчиком температуры и влажности был выбран AM2320. Это крайне удобный, достаточно точный и дешевый сенсор, подключаемый по I2C. Удобство в том, что его можно подключить еще и по шине 1Wire (ВАЖНО, нужен подтягивающий резистор 5.1 кОм — у меня вместо него параллельные по 10 кОм). Это не только экономит выводы контроллера, но и в данном конкретном проекте вообще позволило хоть как-то приделать эту периферию. Об этом чуть позже расскажу.

Датчиком присутствия взял LD2420. Тому всего две причины: его относительно легко настроить прямо в интерфейсе умного дома, и у меня их много. Рекомендовать не могу. Довольно капризные и ужасно дружат с дешевыми сенсорами (неудивительно — скорость обмена UART 115200 бод, сильно забивают I/O), плохо калибруются (честно говоря, вообще не разобрался, может нужно на esp32 калибровать — там UART устойчивее), а значения Gate по умолчанию странноватые. И нет именно определения присутствия, только микродвижения. В общем, решил влепить что есть, благо лежать в прихожей не собираюсь.

И, наконец, венцом всей этой схемотехники выступил бывший мозг умной лампочки, чип BK7231N под маркировкой CB2L. 

Когда я писал предыдущий разбор, то нормально почитать даташит не удосужился, а зря. Оказывается, контроллер-то голый! Вернее, в нем не выведено никаких портов, ни I2C, ни SPI, только UART. И вроде бы ничего есть же эмуляция. Есть же?..

Ну если эмуляция и есть, то не в текущей версии LibreTiny. Тут-то мой сенсор AM2320 и должен был покинуть чат, но повезло, что я нашел его даташит со схемой для 1Wire. Потому-что 1Wire-то как раз эмулируется без проблем.

Примечание

Кстати, схема изначально была немного другая. Я пробовал эмулировать UART на пинах контроллера для LD2420, но это работало настолько нестабильно, что я просто вынужден был перейти на аппаратный UART. Это возможно только в случае отключения логов api в прошивке, иначе датчик сойдет с ума.

По итогу имеем следующий список деталей:

  1. CB2L (или любой аналогичный)
  2. Реле с 5В питанием, 220В 10А, 2 шт.
  3. Драйвер реле ULN2003
  4. Блок питания 5В (нашел какой-то из неиспользуемых)
  5. Преобразователь в 3.3 вольта LM1117. Нестареющая классика.
  6. Сенсор климата AM2320
  7. Датчик присутствия LD2420

Ну и всяких там конденсаторов с резисторами и прочего по мелочи.

Предварительная прошивка

Чтобы не морочиться с пайкой программатора на смонтированную схему, обычно контроллер прошивается без ничего. Общий принцип описан в статье про реверс-инжиниринг. Здесь оставлю схему. Она от другого контроллера, но названия пинов те же.

Вкратце, понадобится программа ITChipTool (не забудьте замкнуть пин CEN на землю когда попросит!), UART-программатор и базовая прошивка, которую генерирует ESPHome. В ней нет пинов, но имплантируется связь через API и прошивка по воздуху. Это реально удобнее, чем морочиться с проводами. Шить конечную прошивку в общем случае не рекомендую. Хотя бы потому, что она будет спамить неверные показания в историю умного дома при включении.

В моем случае у меня все время выдавало какую-то ошибку, так что я даже подумал в какой-то момент, что ничего не выйдет. В итоге на пятидесятый раз прошило. В общем, не теряйте надежду!

Пайка

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

Так или иначе, собрал я все довольно быстро. Силовая часть отделена от логической, сенсор вывел на проводе подальше, чтобы он все-таки измерял температуру среды, а не электроники. В качестве порта для питания светильников использовал выпаянный разъем флоппи-привода. Можно было и круглым обойтись, но флоппи-разъем фиксируется в гнезде, да и чего он просто так валяется?.. 

Прошивка

Теперь, когда есть базовая схема без подключения 220В, в пору писать и тестировать прошивку. Углубляться сильно не буду, все конфиги стандартные. Гуглятся буквально на раз-два у каждого сенсора. Собственно, я и нагуглил. Часть, сгенерированную ESPHome с паролями я пропущу.

uart:
  id: uart_bus
  # Используем аппаратные пины UART1
  tx_pin: TX1  # или явно GPIO11
  rx_pin: RX1  # или явно GPIO10
  baud_rate: 115200
  parity: NONE
  stop_bits: 1

ld2420:
  uart_id: uart_bus
###############################################################################

number:
  - platform: ld2420
    presence_timeout:
      name: Detection Presence Timeout
    min_gate_distance:
      name: Detection Gate Minimum
    max_gate_distance:
      name: Detection Gate Maximum

###############################################################################

button:
  - platform: shutdown
    name: "Shutdown"
  - platform: restart
    name: "Restart"
  - platform: safe_mode
    name: "Restart (Safe Mode)"

  - platform: factory_reset
    disabled_by_default: True
    name: "Factory Reset ESP"
    id: factory_reset_all

  - platform: ld2420
    apply_config:
      name: Apply Config
    factory_reset:
      name: Factory Reset
    restart_module:
      name: Restart Module
    revert_config:
      name: Undo Edits

select:
  - platform: ld2420
    operating_mode:
      name: Operating Mode

###############################################################################
binary_sensor:
  - platform: ld2420
    has_target:
      name: Presence
  - platform: gpio
    pin: P8
    name: "Присутствие в прихожей"
    
text_sensor:
  - platform: ld2420
    fw_version:
      name: LD2420 Firmware
  - platform: template 
    name: ${friendly_name} uptime 
    lambda: |- 
      int seconds = (id(uptime_sec).state); 
      int days = seconds / (24 * 3600); 
      seconds = seconds % (24 * 3600);  
      int hours = seconds / 3600; 
      seconds = seconds % 3600; 
      int minutes = seconds /  60; 
      seconds = seconds % 60; 
      return { (String(days) +" д. " + String(hours) +" ч. " + String(minutes) +" мин.").c_str() }; 
    icon: mdi:clock 
    update_interval: 113s 

sensor:
  - platform: ld2420
    moving_distance:
      name : Moving Distance
  - platform: uptime   
    name: ${name}-uptime 
    id: uptime_sec 
    internal: true 
  - platform: wifi_signal 
    name: ${name}-WiFi-Signal" 
    update_interval: 60s

  - platform: dht
    pin: P7
    temperature:
      name: "Температура в прихожей"
      id: hallway_temperature
    humidity:
      name: "Влажность в прихожей"
      id: hallway_humidity
    update_interval: 60s
################################################################################ 
switch:
  - platform: gpio 
    pin: P24
    inverted: True
    restore_mode: RESTORE_DEFAULT_ON
    id: outlet1
    name: "Розетка 1"

  - platform: gpio 
    pin: P26
    id: outlet2
    restore_mode: RESTORE_DEFAULT_ON
    inverted: True
    name: "Розетка 2"

Думаю, все названия говорят сами за себя. Для LD2420 предусмотрены дополнительные фичи вроде перезагрузки контроллера или его самого в целях отладки.

Проверил — все работает. Реле щелкают, датчик климата корректно показывает, присутствие фиксируется — идем дальше.

Корпус

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

Розетка состоит из двух частей — собственно, круглых гнезд для электрических вилок и ободка. Гнезда я оставил как есть, а вот обод расширил, чтобы поместить в него электронные кишочки.

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

Но быстро одумался, и низ расширил. 

Поскольку размеры макетки я изначально прикинул так, чтобы в сборе с БП оно не было сильно шире исходного корпуса розетки, мне оставалось только примерно попасть в габариты распаянного флоппи-разъема. Чтоб не запарывать большую деталь при печати (или не колхозить), отверстие я сделал пошире, а для разъема уже после печати вымерял размеры рамы. 

Мелкую раму перепечатать не жалко пару раз, а фиксируется она вполне жестко. 

Далее накидал крышку с фиксацией на трении, но с небольшим заусенцем, чтобы фиксировалась поплотнее.

Оставалась самая простая часть — выключить свет и на клеммных разъемах подключить схему к сети...

«Самая простая часть»

В общем, выключая свет, разбираю розетку, а там...

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

Обе пластины я распилил и вывел провода. К счастью, фиксация пластин сохранилась и контакт сильно не ухудшился.

Чуть позже до меня дошло, что хватило бы и одной клеммной группы, вторая-то все равно запараллелена на ноль. Но фарш обратно не прокрутишь, как говорится...

Делал я все это в темноте. Нет, не темной-темной ночью на темной-темной улице, просто в прихожей темно из-за отсутствия окон, а еще не летний сезон. Естественно, взял с собой подсветку в виде аккумуляторного прожектора (отличная, кстати, штука — есть про нее обзор), но все равно на полу с ярким бьющим по глазам светом не сильно удобно на длинной дистанции.

А еще долго пытался все провода с клеммами уложить, чтобы они удобно разбирались потом, и чтобы не мешали сборке. В итоге часа 4 возился с этой частью. Мораль? Быть предусмотрительнее во время планирования!

Интеграция

Теперь, когда розетка полностью работает (а включилось все без сюрпризов), интегрируем ее, как и планировалось, в умный дом. Для этого я добавил на страничку прихожей графики и переключатели, отвечающие за работу розетки.

Также необходимо добавить логику запрета выключения света, если сенсор в розетке фиксирует человека. Вначале это зависело только от сенсора в хабе.

Теперь добавим в прошлую автоматизацию условие от нового сенсора в пункте «И если». Также учел, если сенсор по каким-то причинам станет недоступным.

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

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

Итоги

Думаю, очевидно, что проект не предусматривает полного повторения, ибо некоторые аспекты сделаны колхозно, а другие начерно. Еще в цвет не попал… Моей задачей было собрать устройство под свою среду, что благополучно и было сделано. Оно работает уже где-то месяц без нареканий, потому сам подход (хаб с множеством сенсоров) могу рекомендовать. И чип лампочки, хоть и не без ограничений, вполне подходит для небольших DIY-проектов. Сейчас, глядя на девайс, добавил бы индикаторы включенных розеток. Ну и само собой сделал бы на печатной плате...

В дальнейшем хочу потыкать BLE-стек у этого самого контроллера лампочки. По идее, с его помощью можно организовать крайне дешевый беспроводной датчик, или подключить как хаб. В LibreTiny такое не предусмотрено, а тыкать голый камень пока что лень. В любом случае, спасибо, что зашли. Приятного вечера (утра, дня, ночи)!

 

Добавить в избранное
+45 +69
свернутьразвернуть
Комментарии (32)
RSS
+
avatar
+3
  • l1bbcsg
  • 20 марта 2026, 23:02
Программирование автоматизации такого рода девайса лучше делать на самом ESPHome, а состояния и кнопки уже проборосить в HA отдельно. Так у вас свет продолжит включаться пока роутер или сервер недоступны.
+
avatar
0
  • vedroid
  • 21 марта 2026, 15:10
ESPHome это ведь не программирование (тем более они вроде не так давно удалили поддержку кастомных компонентов). А вот программирование чипов для самоделок в настоящее время лучше делать на Rust используя github.com/embassy-rs/embassy. Например, под Puya py32 тоже есть HAL/Embassy (еще не пробовал, но уже заказал горсть PY32F002 на пробу), а не только под самые популярные. Готов принимать минусы от давно сидящих на всяких Сях и не желающих приобщаться к прекрасному потому что «и так хорошо».
+
avatar
+3
  • l1bbcsg
  • 21 марта 2026, 15:47
Ничего там не удалили, директории только переставили и валидации добавили по сути.
Программировать там хоть на декларативном ямле можно, он сам по себе полон по Тюрингу похоже, хоть на лямбдах (это и в посте есть). Ну и компоненты можно писать на любой архитектуре и в любой парадигме.
+
avatar
+1
  • vedroid
  • 21 марта 2026, 18:39
Конфигурировать/декларировать это не программировать, в моем понимании. А компоненты, сомневаюсь что хотя бы 1% пользователей этой поделки/абстракции пишут собственные компоненты. Это не значит что я негативно обношусь к ESPHome, штука полезная — популяризирует поделко-делание, выручит с простыми бытовыми задачами и в хобби подспорье.
+
avatar
+2
Вы не особо углублялись, я вижу. Esphome позволяет писать собственные компоненты при наличии желания. Просто 95% потребностей закрываются уже написанными + пару лямбд, если не хватает — для углубления логики.
+
avatar
0
  • vedroid
  • 21 марта 2026, 19:33
Не углублялся и не смогу — потому что от Сишки воротит. B целом не думаю что лочить себя на подобную поделку как Esphome в собственной разработке это хорошая идея, но для простых поделок норм.
+
avatar
+1
А каким образом «лочить»? ESPHome создан для сверхбыстрой разработки кода для умных устройств на esp-подобных контроллерах. Это удобно, потому что решение все-в-одном и разрабатывать 5 минут. Ни о какой энергоэффективности на стеке вай фай говорить смысла нет, поэтому на выигрыш микроамперов на тактах процессора как-то странно намекать.
+
avatar
+1
  • vedroid
  • 21 марта 2026, 21:08
Лочить — в смысле поставить себя в рамки навязанные ESPHome. И например если потом захочется сделать что-то не по канонам ESPHome, то будет больно или вообще невозможно без переписывания всего на generic решение. Вендор-локинг понятие вы думаю знаете, вот я об этом. Кроме того, навязываются определенные инструменты, которые не все хотят использовать в 21 веке (сишка как пример).
+
avatar
+2
Я физически не смогу установить то, что вы предлагаете, на esp8266 или bk7231n. Мне их выбросить? Я не хочу. Дома штук 50 таких железок. Исхожу из практических соображений, а не из теоретических возможностей Rust и совместимых MCU.
+
avatar
+1
  • vedroid
  • 21 марта 2026, 21:45
Очевидно я писал о новой разработке, а не о поддержке существующего зоопарка или использовании железок из старых запасов. Но например новые ноды можно добавлять уже на современном железе и где бегает раст, все равно там ведь общение нод вероятно по стандартному протоколу происходит. Кстати, это пример того как вы залочили/завязали себя на ESPHome. И еще уточнение, говоря о непринятии ESPHome для моих личных задач имел в виду наличие некой частной логики в задачах (и возможность расширения это логики без использования сишки), а не просто типовые задачи по настройке умного дома.
+
avatar
-1
  • serdio
  • 22 марта 2026, 14:17
В процессе компиляции «yaml» генерируется набор исходников на C++ который вы можете использовать как generic решение.
+
avatar
+2
Вот Вас «воротит» от одного из обычных языков программирования. И возможности декларативного программирования Вы высокомерно обзываете «конструктором, а не инструментом программирования».

А кого-то вот — воротит от высокомерных зазнаек. Которые, будучи не в силах освоить инструмент, начинают его громкогласно поносить. Активно навязывая окружающим велосипеды собственного «изобретения» — неудобные, неподдерживаемые — зато собранные из новомодных блестящих деталек, смотанных синей изолентой.
+
avatar
0
  • vedroid
  • 22 марта 2026, 03:53
Не заметил чтобы я кому-то навязывал велосипеды, речь о кастомной логике (и расширении ее без сишки) — если кастомной логики нет, то ESPHome и для меня тоже приемлемая штука. Очевидно у нас разные понятия программирования, и это нормально. На личности я не переходил, в отличие от вас, но высказываю свое мнение об инструментах и подходах к разработке. Лучше бы по делу что-то написали — например на чем вам нравится пилить поделки и на чем нет.
+
avatar
+1
А какой датчик присутствия из этих LD посоветуете? Покупать готовую коробку за 10-20 баксов как-то жаба не позволяет.
+
avatar
+2
Думаю, ld2450 неплох. Закрывает несколько зон сразу плюс трекинг до трех объектов. Правда у него скорость 256000 бод, младшие контроллеры могут не справиться. Но модуль имеет бортовой Bluetooth и можно подключить напрямую к серверу через компонент. Было бы питание.
+
avatar
+4
  • 00svd00
  • 21 марта 2026, 03:38
В завивимости от задачи. ld2420 самый простой и кондовый, питается от 3v3 (можно повешать на родной стаб еспшки) из коробки поддерживается в esphome, но не особо точный и периодически делает мозги. ld2410s интересен очень низким энергопотреблением (0.45мкА), но последний раз когда интересовался — поддержки не было, да и в любом случае, в комбо с esp-шками не особо интересно — они сами уже слишком прожорливы, там уже какая-нибудь nrf-ка нужна или изгаляния с глубокой спячкой.
Ну и лично у меня самый лучший опыт был с ld2412s (не путать с ld2412 который с антеннами в виде крестов — старая версия, работает криво, снят с производства), поддержка там правда через сторонние библиотеки и калибруется только с приложения для телефона, зато очень точный и стабильный. Ну и да, тоже можно запитать от 3v3
Ну и если нужно впинуть невпихуемое — можно глянуть старенький ld2410B, он тоже норм и при этом очень узкий, можно во всякие кабель-каналы его засовывать или в рамочки от выключателей. При этом вполне сносно работает чисто через BLE канал, т.е. можно распихать несколько таких сенсоров и обслуживать одной ESP-шкой
+
avatar
+1
Тут стоит заметить, что я недавно на озоне приценивался и как раз хотел купить нечто такое — 2410B, 2412s. И нашел, что по цене они не сильно отличаются от 2450 (по крайней мере, не катастрофически). А 2450 — наиболее универсален и пригоден для сложных автоматизаций + есть определение присутствия. Он может заменить сразу несколько датчиков. Кстати, говорят, что старые 2410b стали активно подделывать. UART-протокол подделок отличается и они нормально не интегрируются. Такие вот новости.
+
avatar
+4
  • kovax
  • 21 марта 2026, 08:16
WiFi девайсам свойственно теряться на ровном месте, особенно на подобных «мозгах» (кучу розеток перешил на ЕСПХом) и выкинул в итоге все практически, перешел на зигби девайсы…
+
avatar
+4
  • serdio
  • 21 марта 2026, 10:03
У меня абсолютно противоположный опыт. zigbee бывает отваливается, особенно после пропадания питания, а wifi (перешитые на ЕСПХом) работают без проблем.
+
avatar
+1
У меня в целом такая же статистика. Разные wifi лампочки (дешевые tuya и yeelight) с поддержкой локального управления крайне редко сходят с ума (разве что если интеграция после обновок HA отваливается). А вот zigbee-устройства ведут себя ровно на свою цену. Добрая часть дешевых zigbee-розеток/лампочек не поддерживают часть функций (Failed to execute routing table и тп) и отваливаются без причины. И проблема не в сигнале/координаторе, а именно в устройствах. Пришлось пересесть на акаровские лампочки — с ними проблем нет. Вообщем от устройств и кривизны прошивок зависит.
+
avatar
+1
  • kovax
  • 21 марта 2026, 19:32
ну я туя девайсы совместимые шил — без шиться, с туей работают, а в НА теряются(((
Дома давно акара система — работает годами без проблем, но что по вафле (освещение), а зигби акара в НА все — тоже работает стабильно.
+
avatar
+1
  • serdio
  • 28 марта 2026, 20:36
а в НА теряются(((
как они могут теряться? что вы вкладываете в слово «теряться»?
+
avatar
+1
  • kovax
  • 29 марта 2026, 11:37
девайс есть, а показаний от него нет…
+
avatar
-1
  • serdio
  • 31 марта 2026, 12:36
надо было разобраться где происходит «потерялася я» © Гадя

может в роутере ограничение на кол-во wifi клиентов? может уровень сигнала wifi слабый и клиенты отключаются (или переключаются на fallback AP)?
+
avatar
-1
  • kovax
  • 31 марта 2026, 14:11
нет
+
avatar
+1
  • F2QYQ
  • 21 марта 2026, 18:33
После боли и страданий с wifi Tuya перешёл на Zigbee, теперь кайфую.
+
avatar
+1
Честно, видел нечто подобное с OpenBeken. С Esphome — нет. Бывает, подвисает подключение если перезапустить wifi. Но не более. Давно пересели? Может, проблема со старыми версиями.
+
avatar
+1
  • kovax
  • 21 марта 2026, 19:27
с ноября 2025, да и с оригинальной прошивкой дешевые розетки и пакетники с алика отваливаются, но по разному — чаще терялось соединение намертво — только переключение к точке доступа(((( зигби работают четко.
+
avatar
+2
  • vedroid
  • 23 марта 2026, 00:09
ULN2003
Кстати если кто не знает у этого чипа есть более современная замена — TPL7407L (меньшие потери и выше эффективность).
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.