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.
  • Одну кнопку и один светодиод нужно сделать системным:
    • При очень длительном нажатии на системную кнопку происходит сброс устройства;
    • Светодиод предупреждает о том, что настройки устройства будут сброшены;
    • Светодиод используется для вывод PIN кода при подключении.
  • TODO: предусмотреть индикацию неподключения к сети.

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

  • Устройство не в сети и находится в режиме 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мкА, что нас полностью устраивает.

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

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

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

Generic Property

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

Scene Register Get

Можно, с помощью сообщения Scene Register Get получить список всех доступных сцен на сервере и назначить первые три на действия кнопки. Однако, мы не можем настраивать порядок сцен на сервере, а следовательно, сцены к действиям будут привязываться хаотично. К тому же, непонятно как часто пульт должен опращивать сервер, чтобы сохранять актуальность список. Слишком частые запросы могут быстро посадить батарею.

Константа

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

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

Ссылки

Edit - History - Print - Recent Changes - Search
Page last modified on June 26, 2024, at 11:12 pm