惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Full Disclosure
Recorded Future
Recorded Future
T
Tenable Blog
S
Securelist
C
CERT Recently Published Vulnerability Notes
T
Threatpost
S
Schneier on Security
A
Arctic Wolf
The Hacker News
The Hacker News
C
CXSECURITY Database RSS Feed - CXSecurity.com
Know Your Adversary
Know Your Adversary
P
Privacy International News Feed
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Register - Security
The Register - Security
Cisco Talos Blog
Cisco Talos Blog
AWS News Blog
AWS News Blog
K
Kaspersky official blog
T
True Tiger Recordings
T
Threat Research - Cisco Blogs
V
Vulnerabilities – Threatpost
P
Palo Alto Networks Blog
T
The Exploit Database - CXSecurity.com
小众软件
小众软件
B
Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Azure Blog
Microsoft Azure Blog
Cyberwarzone
Cyberwarzone
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tor Project blog
Spread Privacy
Spread Privacy
Malwarebytes
Malwarebytes
P
Proofpoint News Feed
F
Fox-IT International blog
F
Fortinet All Blogs
P
Privacy & Cybersecurity Law Blog
G
GRAHAM CLULEY
量子位
Latest news
Latest news
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 叶小钗
Project Zero
Project Zero
T
Tailwind CSS Blog
N
Netflix TechBlog - Medium
Martin Fowler
Martin Fowler
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
I
Intezer
博客园_首页
腾讯CDC
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
Darknet – Hacking Tools, Hacker News & Cyber Security

Все публикации подряд на Хабре

Миграция с ingress-nginx: выбор нового контроллера Как мы «взломали» MasterSCADA4D: выкинули стандартные блоки и заставили SCADA работать на SVG Ожидание: сделать ИИ-примерочную обоев за 2 дня. Реальность: пришлось добучать свою модель на SD Как мы тестируем в Профи.ру: почему у нас нет пирамиды, зато есть ромб и матрица Об Open-source — спасителе человечества и kernel-сообществе пророке его… ТОП-10 сайтов мебельных магазинов: лучшие UX-решения и приемы юзабилити QSEAL: новый подход в резервном копировании средствами СХД Книга: «Windows Server 2022. Полное руководство по администрированию» Нейросети для работы с Excel: Выбираем ИИ для создания таблиц и написания формул Совместимость Test IT и RedOS: опыт автоматизации сборки, тестирования и сертификации RAG-Anything: Как собрать по-настоящему мультимодальный RAG Как я готовился к Certified Kubernetes Security Specialist (CKS) в 2026 году Я держал кафе 16 лет и кормил полгорода. Потом пришли зумеры и всё посыпалось Go Computer. История удивительного планшета из 1992 года с графическим интерфейсом Экономия GPU-часов в 2,5 раза, уход ИИ в бэкенд и новые стандарты агентских систем: ML-дайджест Что скрывается за AI-стратегией SAP, Oracle и Palantir: зачем корпоративному ИИ семантическое ядро Почему RAG — фундамент любой AI-трансформации Персонализация как баг Одна на 9 команд: как я внедряла квартальное планирование в трайбе, который сопротивлялся переменам После ИИ писать код руками ощущается уже не как норма Языковые модели без машинного обучения Обмен через интернет между мобильными приложениями ТСД и 1С От плановых ремонтов к предиктивному обслуживанию: дорожная карта для главного инженера Параллельный импорт техники закрыли или нет? Юридический разбор Резервное электрообеспечение для ЦОДов: патенты в мире и в России 256 зелёных тестов на нерабочем коде. Так выглядит «услужливый клерк» внутри нейросети Бизнес-аналитика для сети из 300 аптек: прогноз продаж и другие показатели Impact Analysis в дизайн-системе: как мы сделали CI осмысленнее, а review понятнее Топ-5 лучших нейросетей 2026 года: полный список на любой случай в SpeShu.AI Что делает сотрудников по-настоящему эффективными: процессы, знания или технологии Как за один вечер я написал сервис инвентаризации оргтехники для филиальной сети из 16 локаций Склад нанимает — и не может остановиться. Дефицит складских работников в 2026 году: причины и решения Шёл за утечкой памяти, нашёл утечку диска: SXSSFWorkbook без dispose() в Apache POI Штраф в размере 155 000 рублей получил владелец сайта по заявлению Роскомнадзора Индивидуальный план развития: от формальной процедуры к инструменту управления экспертизой команды Как понять, что вы не управляете финансами, а просто смотрите на цифры Водоросли и микропластик Масштабирование LLM: от одного чипа до ЦОДа. Глава 3. Траснформеры Бомба замедленного действия взорвалась: эпоха ИИ «бери сколько унесёшь» закончилась Стимпанк как часть жизни. История паровых двигателей и место, которое они занимали в мире в XIX-XX веках. Часть 2 288-ядерный Xeon 6+ и другие серверные CPU От OCR к смыслу: как мы научили модель понимать, кто кому отец, мать, жених и свидетель Насколько плох был Intel iAPX 432 — проверяем на практике Приручаем железо: внедряем DevOps в промышленной разработке Когда Reality не хватает: добавляем Hysteria2 + Salamander в iOS-мессенджер, и как всегда грабли по дороге (ч.2) Разработчики не экстрасенсы: как мы перестали приносить туман вместо ТЗ Дайджест C++: новости, полезные материалы и “свой язык” на десерт Ещё один репозиторий моделей для Archi 10 простых шагов, чтобы создать позиционирование для продукта Загадочная поэма древнего Китая, работающая как компьютер CLOUD Act, GDPR и ваш DNS: что на самом деле может ваш провайдер Ускоряем и оптимизируем numpy, pandas, scipy и sklearn Idempotency keys: 5 граблей, которые мы поймали на проде Gamedev. Парсинг данных из Google Sheets и Excel в json без привлечения программистов Nano Banana Google AI: как использовать Нано Банана для генерации и редактирования изображений Два игрока на весь российский рынок ИИ: что показал ЦИПР-2026 Менеджер ресурсов ЯНДЕКС 360 (YANDEX 360) промокоды июнь 2026: промокод Yandex 360 скидка 40% на годовые тарифы Open-Source инструмент для автоматического перевода книг Ищу ранних тестировщиков для Android-версии agent harnesses Не используйте LLM для текста Увеличиваем продажи без слез аналитика Оптимизация запросов к PostgreSQL: 5 неочевидных настроек для продакшена 45 лет тюрьмы за DROP TABLE и переход Карпатого в Anthropic Планирование движения для ровера на ходовой Ackerman'а Революция в изучении языков Java — быстрая. Ваш код может таким не быть Как я опоздал на конкурс OpenAi с новой архитектурой нейросети Быстрые интеграции в 1С: прощайте, бесконечные переделки Как получить субсидию 300 миллионов от Минпромторга? preIPO Anthropic, OpenAI, SpaceX. Разбираемся — стоит ли участвовать? Entaxy ION + OPC UA: два способа получить данные с промышленного оборудования Память на миллион, а толку ноль: как мы спасали ИИ-агента от «тупости» РСЯ, AdSense или myTarget: что на самом деле в 2026 приносит больше денег сайту и причем тут монетизаторы Практическое построение сервисов на Go под реальный трафик PostgreSQL и аналитика: что меняется, когда хранилище становится общим Codex за 5 месяцев 2026: мой топ-5 релизов, что не зашло и где OpenAI обогнал Anthropic Как создать короткое видео с помощью нейросетей: Полный гайд по Veo 3.1, Kling 3.0 и Happy Horse 1.0 Алгоритм проверок физлиц от экс сотрудника ФНС Как ИИ портит резюме студентам Системные вызовы в сфере ИТ в 2026: стратегический взгляд для ИТ-руководителей Вайбкодинг заканчивается на localhost: как я строю SaaS для цифровизации коттеджных поселков с Codex Производственные риски в небольшом кастомном производстве. С чем я сталкивалась и как научилась это учитывать Подключаем ИИ органы чувств: bash-демон, пайка и самосознание на Raspberry Pi Я хотел повторить Growing Neural CA за вечер. Ушёл месяц Промт для генерации текста без ИИ следа — как писать уникальные тексты через нейросеть От capabilities к AppArmor: что реально остановит атакующего в контейнере CactOS Вектора интересов: как находить настоящую мотивацию и усиливать команды Цена безопасности [Перевод] Цена безопасности “Рубик” от пет-проекта до прода или ITIL 4 для строительно-торговых центров Чего ждать (и не ждать) от ремейка AC4 Black Flag Архитектурный тупик корпоративного хранения: почему смена модели не снимает ограничений и что с этим делать Атаки через подрядчиков, дефицит кадров и квест с импортозамещением: главные вызовы ИБ в 2026 году Я не оставлю детям наследства Почему порты стали «дверями» в сервер, и кто решил, что SSH будет 22 Почему зарубежные разработчики чипов возвращаются на китайские фабрики Как у меня НЕ получился торговый бот на Polymarket Проектирование архитектуры в нотации ArchiMate с использованием ИИ. Часть 2
Есть ли жизнь на фазе: откуда берёт энергию умный выключатель без подключённой нейтрали
IvanSlivin ( · 2026-05-27 · via Все публикации подряд на Хабре

Есть ли жизнь на фазе: откуда берёт энергию умный выключатель без подключённой нейтрали

Уровень сложностиСредний

Время на прочтение16 мин

Охват и читатели3.1K

Кейс

Салют, Хабр!

Я Иван, HW TPM Умного дома Сбер. В прошлом году мы разработали линейку электроустановочных изделий AtlasDesign Smart. И это отличные устройства. Но… не все пользователи, которым понравился умный выключатель из линейки, могут установить его. Потому что для него обязательна нейтраль, она же ноль.  

Сегодня мы добавили в линейку более универсальное устройство — умный выключатель с опциональной нейтралью. Эта разработка оказалась сложнее. В статье рассказываем о новых захватывающих проблемах, с которыми столкнулись. Сколько лампочек нужно, чтобы одна команда разработала выключатель? Как обучить устройство незаметно воровать электроэнергию? Как выстроить прошивку для Zigbee-устройства, которое может быть и роутером, и спящим (и почему через три месяца мы немного расстроились)?

Спойлер: мы по-прежнему топим за нейтраль. Если есть техническая возможность, лучше подключать с ней или даже проложить её с нуля квартире.

Hardware: воруя электричество

Два абзаца о нейтрали для тех, кто не в контексте вопроса нейтрали или забыл. Кто помнит — можно пропустить.

Скрытый текст

Квартир и домов без нейтрали вовсе не бывает — фаза и ноль в любом случае есть. Но чаще всего нейтраль не заходит в подрозетник выключателя, а идёт из щитка  непосредственно к источнику света. Так сложилось исторически: ранее выключатель был пассивным размыкателем, и его просто ставили в разрыв фазного провода. Это позволяло сэкономить кабель при строительстве. Большинство застройщиков до сих пор делают разводку электропроводки в квартире без нейтрали к выключателям.

Бета-тест выключателей с опциональной нейтралью показал, что даже не чуждые технике люди путают нейтраль с заземлением и подключают устройство через заземление. Это — самый простой способ выбить дифавтомат (УЗО).  

Типичная для подрозетника выключателя картина: фаза плюс два (для двухклавишного) провода к люстре

Типичная для подрозетника выключателя картина: фаза плюс два (для двухклавишного) провода к люстре

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

Откуда взять электроэнергию, если всё, что у нас есть — это фаза? Единственный вариант — незаметно воровать её у лампы. Но чем больше мощности мы забираем, тем вероятнее лампа это заметит. И станет мстить: загораться, если была отключена, или мерцать, когда включена. Оба варианта пользователю не понравятся. 

Выходит, выключатель без нейтрали должен потреблять так мало, чтобы питающий его микроток, который проходит через лампу, не вызывал побочных эффектов. Осталось выяснить, сколько это — «мало». Мы закупили более 30 маломощных светодиодных ламп-бестселлеров и экспериментально выяснили, сколько тока можно пропустить через лампу, прежде чем начнутся проблемы.

Вывод: чем меньше собственное потребление выключателя без нейтрали, тем лучше пользователю. Кстати, именно поэтому на рынке почти нет устройств с опциональной нейтралью на таких беспроводных протоколах, как Wi-Fi или Matter over Wi-Fi. Все они используют энергоэффективные протоколы — Zigbee, Thread, Bluetooth. 

Как же подключить последовательно с лампой ещё одну нагрузку — выключатель — так, чтобы, если лампа обесточена, он продолжал работать? Вот какая схема получилась в итоге.

Главный коммутирующий компонент умного устройства — электромеханическое реле. Когда свет не горит, оно разомкнуто. Но лампа, даже выключенная, всё равно обладает некоторой проводимостью; напряжение между контактами реле — 220 В. Значит, мы можем черпать здесь энергию.

После подключения к контактам диодного моста, выпрямления напряжения и преобразования до нужных нам 3,3 В получился источник питания микроконтроллера. На схеме это БП 1. Он перманентно утягивает у лампы мощность в крохотных объёмах, так, чтобы проходящий ток не заставил её гореть или мигать. Эту энергию выключатель тратит на поддержание Zigbee-соединения плюс запасает впрок в ожидании, когда потребуется щёлкнуть реле. 

Допустим, пользователь включил свет. Теперь цепь замкнута, а значит, БП 1 зашунтирован реле и лишён возможности воровать у лампы энергию. Но она по-прежнему нужна. Так в схеме появляется второй источник питания — БП 2. Он набирает энергию благодаря мощному полевому транзистору, который установлен последовательно с реле и размыкает цепь на очень короткое время. Размыкание происходит в начале синусоиды, пока напряжение низкое. Это позволяет поставить низковольтный «полевик» с очень низким сопротивлением открытого канала, чтобы максимально сократить выделение тепла на больших токах (10 А).

Скрытый текст

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

Дополнительно в схеме появился конденсатор — на рисунке это С1. Он:

  1. Обеспечивает работу бистабильного реле. Оно не требует мощности на поддержание своего состояния — только на переключение. Но лампа, особенно маломощная, не даст нам нужного количества энергии в моменте. Поэтому выключатель медленно, по чуть-чуть накапливает энергию в конденсаторе.

  2. Сглаживает скачки потребления. Когда выключатель подключён без нейтрали, он становится спящим Zigbee-устройством, поэтому периодически просыпается и задаёт вопрос Zigbee-координатору: «Что новенького?». Потребление во время этой короткой, но важной активности на три порядка выше, чем во сне. Без конденсатора лампа (гипотетически) могла бы начать вспыхивать во время сеанса связи.

Software: мультироль, средний ток и пейринг   

Мультироль

В выключателе с опциональной нейтралью прошивка сама определяет её наличие/отсутствие и переходит в соответствующий режим работы. Если нейтраль есть, умный выключатель Сбер выступает в Zigbee-сети роутером — не только принимает данные, но и передаёт другим устройствам. В Zigbee-сети роутеры позволяют расширить покрытие сети в квартире, увеличивают устойчивость сигнала и дальность передачи.

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

Роль должна была определяться при старте по факту наличия нейтрали. Но SDK от Silabs этого не предусматривал: тип устройства (router / sleepy end device / non-sleepy end device) задаётся константой на этапе компиляции и не может меняться в рантайме.

И при этом в SDK всё же нашёлся механизм динамической смены роли — Test Harness. Это специальная сборка, которую Silabs предоставляет для сертификации Zigbee-устройств: она позволяет менять тип ноды на лету, чтобы прогонять устройство через разные тестовые сценарии. Но Test Harness — вспомогательный инструмент, а не основа для продуктового кода. Он имеет специфическую конфигурацию и не поддерживает полный набор функций, нужных конечному устройству. Тем не менее, это был последний недостающий элемент! 

За основу мы взяли стек, умеющий работать и как router, и как sleepy end device. В тех местах, где SDK делает исключение для динамической смены роли в Test Harness, добавили собственный дефайн SBDV_MULTIROLE!

#if defined SL_CATALOG_ZIGBEE_TEST_HARNESS_Z3_PRESENT || defined SBDV_MULTIROLE
sli_zigbee_af_zigbee_pro_network *sli_zigbee_af_current_zigbee_pro_network = NULL;
#else
const sli_zigbee_af_zigbee_pro_network *sli_zigbee_af_current_zigbee_pro_network = NULL;
#endif

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

Хороший пример — функция sl_zigbee_af_sleep. Стек решает, можно ли устройству заснуть, сравнивая тип ноды с пороговым значением. Но тип ноды — константа компиляции, и если прошивка собрана как роутер, условие никогда не выполнится: устройство не заснёт никогда, даже если в рантайме переключилось в спящее устройство:

 bool stack_is_ok_to_nap =
          sli_zigbee_stack_ok_to_nap() &&
          ((sl_zigbee_network_state() == SL_ZIGBEE_JOINED_NETWORK)
               ? (sli_zigbee_node_type >= SL_ZIGBEE_SLEEPY_END_DEVICE)
               : (SLI_ZIGBEE_PRIMARY_NETWORK_DEVICE_TYPE == SLI_ZIGBEE_NETWORK_DEVICE_TYPE_SLEEPY_END_DEVICE));

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

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

… спустя несколько месяцев после реализации прошивки в SDK Silabs появилось официальное решение для динамического переключения ролей. Мы испытали сильные чувства. Такое бывает в разработке.

Средний ток в основном режиме

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

С опорой на тот же тестовый набор ламп мы определили уровень желаемого среднего потребления: 50 мкА в домене питания +3,3 В. Требовалось определить интервал поллинга — периодичности пробуждения устройства — который даст нам этот уровень. После исследований, отладки, проверки, тестов стало ясно, что средний ток потребления соответствует требуемому при интервале поллинга 2 сек. 

Отладка и проверка производится на Product Development Kit (PDK) — отладочной плате продукта. Она разрабатывается раньше, чем самый первый прототип, чтобы команда прошивки могла заранее начать работу.

PDK: отладочная плата без высоковольтной части, что позволяет безопасно дебажить прошивку. Nordic Power Profiler Kit II подключается вместо одного из джамперов для профилирования потребления продукта

PDK: отладочная плата без высоковольтной части, что позволяет безопасно дебажить прошивку. Nordic Power Profiler Kit II подключается вместо одного из джамперов для профилирования потребления продукта

Разреженный пейринг

Для всё той же цели — снизить энергопотребление — мы пересмотрели процедуру пейринга. Обычно он происходит без пауз между поиском открытых сетей на разных каналах, причём энергию потребляют и приём-передача сигнала, и индикация. Нашей целью в том же домене +3,3 В было потребление менее 5 мА. (На деле можно было и меньше, но тогда процедура пейринга становилась длиннее и нестабильнее). 

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

Ниже — профили потребления в пейринге до и после оптимизации.

Среднее значение — 8,91мА

Среднее значение — 8,91мА

Среднее значение — 4,11мА

Среднее значение — 4,11мА

В результате мы получили возможность снизить среднее потребление не только в ходе пейринга, но и Rejoin/Network Move — процедур возврата в сеть или поиска сети. Теперь во время Rejoin/Network Move устройство делает между сканированием каналов паузы произвольной длины. Ровно такой, чтобы обеспечить оптимальное соотношение между скоростью работы и средним потреблением.

Hardware: о КПД и трансформаторах  

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

  • мощности, которая нужна устройству для функционирования: Zigbee-команд, включения-выключения и проч., разделённой на КПД источников питания;

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

Таким образом, в выключателе нужно добиться максимального КПД источников и минимального тока покоя… при этом не завалив тесты на электромагнитную совместимость (ЭМС) — как по эфиру, так и по проводам. Здесь начались проблемы: как только мы достигали высокого КПД, падала ЭМС, и наоборот. 

Выяснили, что проблемы с ЭМС создает источник питания БП 1 — в нем всё портит кастомный трансформатор. Попробовали разные ферриты, направления намотки и экранирующие обмотки. В очередной итерации получилось сбалансировать три показателя, намотав трансформатор вручную, но... наш производитель, говоря языком ГОСТов, «моточных изделий» сообщил, что станки не смогут так мотать. Добиться оптимума удалось после четырёх итераций.

Один из проваливших тест трансформаторов. На графике — текущий уровень помех и допустимые границы. Видно, что и средний уровень помех от источника БП1 выключателя, и квазипиковый превышают нормы CISPR 32-2015 в широком диапазоне частот. Слева L, справа N

Один из проваливших тест трансформаторов. На графике — текущий уровень помех и допустимые границы. Видно, что и средний уровень помех от источника БП1 выключателя, и квазипиковый превышают нормы CISPR 32-2015 в широком диапазоне частот. Слева L, справа N

Трансформатор, который смог. Слева L, справа N. Нормы CISPR 32-2015 выполнены с запасом

Трансформатор, который смог. Слева L, справа N. Нормы CISPR 32-2015 выполнены с запасом

Кроме того, на больших токах потребления (например, при ZigBee пейринге) КПД источников питания максимален, но в основном режиме работы среднее потребление падает на три порядка. КПД становится ниже, и главный вклад в энергопотребление начинает вносить ток собственного потребления источника. Он способен свести на нет все оптимизации на стороне прошивки. Чтобы минимизировать ток покоя, мы провели отдельное исследование по схемотехнике: 

  • нашли источники питания с минимальным потреблением тока;

  • минимизировали собственное потребление всей схемы выключателя.

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

Software: zero-crossing detection

Одно из преимуществ умного выключателя Сбер — это детектор перехода сетевого напряжения через ноль: технология zero-crossing detection (ZCD). Она позволяет размыкать реле непосредственно перед переходом напряжения или тока через ноль, чтобы избежать электрической дуги. Нет дуги — выше ресурс реле, а значит, и выключателя. 

В прошлой статье мы рассказали, как это реализовано с точки зрения hardware. С точки зрения software нам нужен был таймер. Теоретически в нашем распоряжении было целых два: таймер FreeRTOS в прошивке и аппаратный с большим приоритетом в чипе. Однако механизм zero-crossing detection требовал точности около 100 мкс. Выходит, что опираться в нём на два вышеупомянутых таймера нельзя — в нужный момент они могут заниматься какой-то более приоритетной задачей.

Решение — переписать драйвер реле с использованием аппаратного таймера и его блоков сравнения/захвата (capture/compare). Плюс использовать механизм роутинга пинов в чипе, который позволяет соединить любую ножку почти с любым периферийным блоком. В итоге:

  • таймер запускается при приходе фронта с ножки ZCD в момент, когда ток или напряжение пересекают ноль.

  • Соответствующий регистрам сравнения CC0 и CC1 выход генерирует высокий и низкий уровни соответственно на ножке управления реле с необходимыми задержками T1 и T2. Через Т1 таймер автоматически выставляет высокий уровень на ножке управления реле, через Т2 — низкий. Реле переключается. При этом максимальная задержка переключения — 20 мс, или один период синусоиды (то есть абсолютно незаметна).

Задержки от фронта сигнала ZCD до начала импульса переключения реле подбирались экспериментальным путём с помощью осциллографа. Технология перекочевала из предыдущего варианта умного выключателя в выключатель с опциональной нейтралью с одним только изменением: в нём сразу два сигнала. Один показывает, когда напряжение пересекает ноль, а другой — когда ток пересекает ноль. Замыкается реле в момент пересечения нуля напряжением, размыкается — когда ток пересекает ноль. Точнее, и то, и то происходит примерно за 1 мс до пересечения, чтобы механический дребезг контактов успел закончиться.

Выключение реле. Розовый луч, он же канал — график тока через нагрузку. Кстати, после размыкания реле появляется синусоида на синем луче. Это то самое напряжение в разрыве реле, которым питается БП 1

Выключение реле. Розовый луч, он же канал — график тока через нагрузку. Кстати, после размыкания реле появляется синусоида на синем луче. Это то самое напряжение в разрыве реле, которым питается БП 1

Включение реле. Напряжение — синий луч. После пересечения нуля переходим с питания от БП 1 на питание от БП 2, нагрузка включена, пошёл ток (розовый луч)

Включение реле. Напряжение — синий луч. После пересечения нуля переходим с питания от БП 1 на питание от БП 2, нагрузка включена, пошёл ток (розовый луч)

Речь в защиту нейтрали

Если вы прокладываете проводку заново, разница стоимости в прокладке проводки с нейтралью и без в двухкомнатной среднестатистической квартире составит примерно 600 ₽. При этом нейтраль позволяет получить все опции умного выключателя. Вот сравнение двух вариантов подключения умного выключателя.

Ещё один небольшой минус подключения выключателя без нейтрали: невозможно включить и сразу же выключить свет, а у двухклавишного выключателя — щёлкнуть двумя клавишами одновременно. Дело в том, что для переключения бистабильного реле из одного состояния в другое требуется много энергии; для нагрузки это резкий бросок тока. Изменить этот факт нельзя, он продиктован механическими свойствами реле. Следовательно, нужно программно разнести два события нажатия клавиш.

С помощью прошивки мы установили задержку при переводе реле из одного состояния в другое и сразу же обратно / срабатывание двух реле. Она составляет около 500 миллисекунд. За это время конденсатор успевает подзарядиться, и выключатель безопасно берёт оттуда энергию. 

Итого, если вы делаете капитальный ремонт, стоит попросить электрика подвести нейтральный провод в каждый подрозетник. Это стоит совсем недорого, но существенно расширяет возможности автоматизации в квартире.

Как проверяют выключатели?

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

Ручной тест выключатель с честью прошёл, спасибо слаженной работе схемотехников и разработчиков прошивки.

В стандартный план тестирования устройства входит:

  • проверка электрических характеристик всего продукта и отдельных узлов: перегрева на максимальной нагрузке, производительности при подключении с нейтралью — в общей сложности 30-40 тестов.

  • Радиочастотные тесты приемника и передатчика.

  • Тесты на электромагнитную совместимость. О них частично рассказывали выше. В этот пул входит, например, устойчивость к высоковольтным «иголочкам» в питании. 

  • Проверка в разных условиях окружающей среды: холодный старт при -20 ℃ и другие.

  • Механические тесты: устойчивость окраски, долговечность кнопки, маятниковый тест клавиш…

  • Проверка прочности упаковки.

Например, маятниковый тест из механических — это способность устройства выдержать девять ударов непосредственно по нему молотом-маятником. Умные выключатели Сбер сделаны из поликарбоната, а не АБС; они выглядят деликатными, при этом очень прочные. Ведь в реальных условиях свет зачастую выключают ударом ладони, а если выключатель на уровне опущенной руки (по «евростандарту») — коленом. 

Oddly satisfying

Oddly satisfying

И то же самое на видео.

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

Unit-тесты — это базовый уровень. Они запускаются автоматически при каждой сборке на обычном Linux-сервере. Код компонентов при этом изолирован: вместо настоящих реле, кнопок и Zigbee-стека подставляются их программные заглушки — моки. Это позволяет быстро и точно проверить логику каждого элемента по отдельности: как драйвер реле реагирует на команды? Как обработчик кнопок различает короткое нажатие и удержание? Как приложение связывает нажатие клавиши с переключением нагрузки через Zigbee-атрибут OnOff, учитывая при этом блокировку от детей (Child Lock) и режим Decouple Relay? Покрытие кода оценивается и поддерживается на каждом шаге; если новый код не покрыт тестами, это будет явно отражено.

Тесты на устройстве — следующий уровень. Прошивка работает на настоящем микроконтроллере и напрямую управляет реальной периферией: переключает реле, использует аппаратные таймеры, работает с энергонезависимой памятью. Всё, что невозможно адекватно проверить моками на сервере, проверяется здесь — на актуальном железе. Стенд полностью интегрирован в CI/CD: раннер прошивает устройство, запускает тесты и читает результат через UART. Каждая сборка с изменениями платформенных компонентов проходит полный цикл тестирования на устройстве.

E2E-тесты — финальный автоматизированный уровень. Устройство помещается в настоящую Zigbee-сеть, скрипт проверяет его уже как конечный продукт: пейринг, включение/выключение нагрузки, блокировку от детей, OTA-обновление с проверкой версии прошивки после загрузки — словом, весь путь, который пройдёт устройство в руках пользователя. Короткий набор таких тестов можно запустить в любой момент, а полный прогон работает по расписанию — ночью или по требованию. Результаты собираются в Allure-отчёт, где видно историю прогонов, тренды по стабильности и конкретные упавшие проверки.

Когда QA дают свой ок, разработка официально завершена. Устройство отправляется в производство. Его первый этап — прошивка модулей. Она происходит в burning station, специально разработанной для линейки электроустановочных изделий. Она позволяет прошивать микроконтроллеры не по одному, а по четыре штуки за раз, и одновременно добавлять в них серийные номера (SN). Их станция заносит в соответствующую область flash-памяти модуля, сканируя QR-коды с SN на модулях.

Просто хочется похвастаться

Просто хочется похвастаться

После прошивки и монтажа плат необходимо проверить их перед финальной сборкой в корпус. Для этого разработана специальная джига, своеобразный аналог тестового набора маломощных ламп. В специальные гнёзда на джиге помещаются печатные платы — питания и Zigbee; вместо лампы подключён тестовый резистор. Оператор, нажав рычаг, соединяет платы, и они условно начинают работать как продукт. По падению напряжения на резисторе делаем вывод о собственном потреблении. 

Далее собираем всё вместе — пластиковый корпус, платы, клавиши — и наносим на корпус маркировку с SN. На последнем этапе нужно проверить весь функционал продукта, добавить информацию о продукте в нашу базу данных, и финально, залочить микроконтроллер. Мы называем этот этап чемберными тестами. Почему так — рассказывали на Хабре здесь.

Проводных интерфейсов у готового выключателя нет, поэтому для его перевода в разные режимы и считывания данных сделали эмуляцию консоли через Zigbee. Конечно, проверяем и качество связи по Zigbee.

На фото — чембер: промышленный компьютер с ZigBee-донглом, ещё одна джига для фиксации и быстрого подключения выключателя, источник точного переменного напряжения, сканер QR-кодов (чтобы считывать SN) и монитор, на котором видны результаты всех тестов каждого устройства.

Это самый важный и ответственный этап производственного тестирования, проверке подвергаются 100% продуктов. В среднем чемберное тестирование занимает порядка 40 секунд на каждый выключатель. Зато после этого этапа мы знаем: покупатель получит качественный продукт.

Software: режимы в мобильном приложении и интеграция в другие умные дома  

Чтобы использовать устройство было удобнее, пришлось внести доработки в мобильное приложение Салют. Если на момент Zigbee-пейринга нейтральный провод не подключён к устройству, оно переходит в режим «без нейтрали», и в приложении появляется специальная настройка — три режима работы без нейтрали:

  • «Антимерцание» — для нагрузки от 3 до 8 Вт. Устройство в этом режиме выступает спящим устройством, которое просыпается с периодичностью в две секунды. Индикатор работает вполсилы: короткая вспышка по нажатию на кнопку или при получении команды включить/выключить свет.

  • «Быстрая реакция» — для нагрузки более 9 Вт. В этом режиме интервал поллинга вчетверо ниже. С индикацией ситуация та же, что в предыдущем режиме.

  • «Быстрая реакция и индикатор» — для нагрузки примерно от 20 Вт. Выключатель не спит вовсе, хотя выступает end-устройством, не роутером; индикатор работает постоянно. 

Мощность нагрузки указана условно; многое зависит от её, нагрузки, качества. Пользователь может выбрать, какой из режимов использовать, и далее менять их с опорой на особенности конкретной подключённой к умному устройству нагрузки и опыта использования разных режимов. А в рамках интеграции ZigBee2MQTT можно отдельно конфигурировать каждый из параметров, которые в приложении собраны в режимы: интервал поллинга, работу индикатора.

Три слова о ZigBee2MQTT. Покупатели линейки AtlasDesign Smart используют их не только в Умном доме Сбер, но и в других. А мы стараемся обеспечить максимальную совместимость, чётко следуя открытому стандарту Zigbee 3.0. Поэтому устройства можно подключить к:

  1. Умному дому Сбер: умный хаб и интеллектуальная колонка SberBoom Home поддерживают Zigbee-подключение. Здесь функциональность раскрывается наиболее качественно и полно.

  2. Zigbee2MQTT и системам на его основе. Мы выпускаем и поддерживаем официальные конвертеры, в свежем релизе 2.10.0 новые выключатели уже работают. Функционал практически такой же, как в приложении Салют. 

  3. Spruthub. Тут для устройств Сбера тоже есть шаблоны, всё работает из коробки. Мы плотно работаем с командой Spruthub; свежие прошивки электроустановочных устройств автоматически раскатываются в Spruthub-е. Обновленные выключатели в скором времени будут поддержаны. 

Заключение

Умные встраиваемые электроустановочные изделия — это более продвинутая фаза развития умного дома: дома, который владелец проектирует ещё до ремонта, изначально понимая, что ему нужен этот уровень комфорта. В этом проекте обязательно нужен универсальный выключатель, способный работать с любым типом электропроводки в доме (и симпатичный: для линейки AtlasDesign Smart подходят рамки серии AtlasDesign из коллекций Classic, Antique, Art, Nature). А если ремонт уже сделан — умными выключателями можно заменить обычные. 

Мы продолжаем развивать линейку электроустановочных изделий и уже знаем, что следующим устройством будет умное Zigbee-реле для скрытой установки в подрозетник. Что будет дальше? Автоматический выключатель на din-рейку в формате модульного оборудования, диммер для света, беспроводной выключатель на батарейках? Принимаем идеи в комментариях.

P.S. Я люблю нейтраль.

В подготовке статьи участвовали: Степан, Алексей, Дмитрий (команда разработки прошивки)