Recent Changes - Search:

Главная страница

Проекты

Статьи

Домашний WiFi роутер

Архив проектов

Загрузки

GitHub

SourceForge

edit SideBar

MOESSceneSwitch

Переключатель сцен.

Создан на базе MOES Wireless Scene Switch 23/32

Данный выключатель изначально сделан для ZigBee, но с помощью переходника удалось поставить в него модуль с nRF52. Удивительно, но у MOES есть модели такого же пульта для BT Mesh, но в продаже их найти невозможно.

MOES Scene Switch front MOES Scene Switch board

Концепция работы

Предлагается, как в оригинале, оставит 3 действия на кнопку: нажатие, двойное нажатие и длинное нажатие.

  • Каждая кнопка - это отдельный BT Mesh узел, на который можно настроить Publish - адрес, куда будут отправлять запросы.
  • Каждый узел представляет собой Scene Client.
  • Поддерживаться будет только сообщение Scene Recall Unacknowledged.
  • При выборе одно из трех действий, серверу будет отправляться сообщение установить сцену с одним из трех номеров. К сожалению, пока не ясно, какие это будут номера. Не существет стандартного способа в Mesh спецификации установить номера сцен для клиента. Варианты решения этой проблемы будут высказаны ниже.
  • Соответственно, поскольку питание пульта идет от батареек, нужно реализовать его ка Low Power Device, с поддержкой Friendship.
  • Несколько кнопок и светодиодов нужно сделать системным:
    • При очень длительном нажатии (более 10с) на одну из системных кнопок происходит переход в соответствующий режим.
    • Мигание соответствующего светодиода под кнопкой сигнализирует о нахождении устройства в специальном режиме.
    • Один из светодиодов используется для вывод PIN кода при подключении.
  • предусмотрены следующие виды индикации:
    • короткое мигание светодиода под соответствующей кнопкой - в сеть отправлена команда Recall
    • постоянное мигание системного светодиода (под первой кнопкой) - устройство работает, но не подключено к сети.
    • постоянное мигание светодиода быстрого опроса (под второй кнопкой) - устройство находится в состоянии быстрого опроса друга. Этот режим нужен для комфортной настройки моделей, чтобы не ждать ответ слишком долго. В данном режиме происходит повышенный разряд батареи, поэтом он ограничен по времени.
    • постоянное мигание светодиода BLE конфигурации (под третьей кнопкой) - устройство находится в режиме привязки номеров сцен к кнопкам. Mesh в этом режиме не работает.

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

  • Устройство не в сети и находится в режиме System Off.
    • При нажатии любой кнопки, устройство включается и переходит в режим Reset с последующей инициализацией.
    • После инициализации, устройство понимает что находится в Unprovision режиме и ждет начала процедуры provisioning, и одновременно запускает таймер на какое-то время, например, 5 мин.
    • Если по истечению таймера процедура provisioning не заканчивается, то устройство уходит в System Off.
    • После окончания процедуры provisioning, устройство начинает поиcк friend-ноды. В этом состоянии тоже повышенное энергопотребление (около 700мкА), так что мы снова запускаем таймер, но на меньшее время (около 10-30сек), и выключаемся, если за это время friend нода была не найдена. Одновременно, отображаем это состояние как-то светодиодом.
    • Если Friend нода была найдена, то устройство само переходит в режим пониженного энергопотребления. Дальнейшее отключение может быть нецелесообразным.
  • Устройство в сети, friend нода не установлена, находится в режиме System Off.
    • При нажатии любой кнопки, устройство включается и переходит в режим Reset с последующей инициализацией.
    • После инициализации, устройство понимает что находится в сети, но не подключена к friend ноде. В этом случае снова повторяется процедура поиска friend ноды с последующим выключение в случае неудачи.
  • Устройство в сети, friend нода установлена, находится в режиме System Off.
    • При нажатии любой кнопки, устройство включается и переходит в режим Reset с последующей инициализацией.
    • После инициализации, устройство понимает, что полностью настроено, определяет, какая клавиша была нажита (и каким образом) и отправляет соответствующее сообщение (Scene Recall) соответсвующей ноде.

Предполагается, что в качестве клиента будут выступать не сколько другие узлы сети, вроде розеток или выключателей, сколько Home Assistant, в котором будет ограниченно реализован сервер сцен, и который будет тупо переводить сообщения Recall во внутренние эвенты. Впрочем, с обычными устройствами пульт тоже должен работать.

Если посчитать, что у-во должно работать 160 дней от одной батарейки CR2032, то в режиме ожидания оно должно потреблять не более 45мкА. В документации написано, что потребление после установки Friendship может опускаться до 20-30мкА, что нас полностью устраивает.

Дальнейшее изучение показало, что к контроллеру NRF52840 нужно подключить дополнительный низкочастотный кварц, иначе потребление не будет опускаться ниже 470мкА. В качестве выхода, можно перейти на менее точный, но и менее прожорливый RC генератор. С ним ток уменьшится до 11мкА со всплесками потребления. Эти всплески, видимо, и дают средние 20-30мкА. Но я все-таки решил переделать переходник для модуля E73 с возможностью допайки внешнего кварца.

Откуда брать номера сцен для кнопок

Кастомная модель для настройки.

Предлагается разработать кастомный протокол, для привязки действия кнопки и номера сцены. Увы, но никем, кроме нас это поддерживаться не будет.

Generic Property

Можно использовать модель Generic Property для привязки действия кнопки и номера сцены. К сожалению, ID свойств тоже стандартизированы и тем нет, ни номера действия, но номера сцены. Придется все-равно городить кастомщину.

Константа

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

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

Специальный режим BLE конфигурации

В конце-концов было принято решение реализовать специальный режим BLE конфигурации. При длительном нажатии (более 10с) на 3-ю кнопку, устройство переходит в режим BLE, регистрирует кастомный сервис и ждет передачи специальной конфигурационной структуры. По истечении определенного времени (60с) устройство снова переходит в режим Mesh узла.

TODO: Описать протокол и структуру.

Ссылки

Edit - History - Print - Recent Changes - Search
Page last modified on September 14, 2026, at 08:12 am