Detritus/Dee – выключатели света – настройка MajorDoMo

Ранее

Объекты

Класс CLightControl:

Здесь status и switchStatus – это свойства автоматически обновляемые из MQTT и методами класса – для последующего использования в интерфейсе и скриптах
cmd – команда привязанная к MQTT

Пример метода turnOn:

// send to MQTT, to the 'cmd' topic
setGlobal($this->object_title.'.'.'cmd','1');

Пример метода toggleState:

$status = $this->getProperty('status');
if ($status == 1) {
 $this->callMethod('turnOff');
} else {
 $this->callMethod('turnOn');
}

Также определяются объекты данного класса:

Конфигурация MQTT

Каждая пара cmd и status имеет соответсвующую привязку к свойствам cmd и sta каждого из объектов:

Использование

Собственно использование заключается в вызове методов turnOn, turnOff, toggleState при желаемых событиях, а также отображение статуса из свойств status и switchStatus, либо привязка скриптов на смену данных свойств.

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

Эмуляция присутсвия дома в режиме отпуска – периодический вызов turnOn/turnOff по расписанию.

Также на плане помещений добавлено управление и графическое отображение статуса из status:

Dorfl – управление жалюзи – настройка MajorDoMo

Ранее

Объекты

Класс CBlinds:

Здесь posMax – это вручную задаваемое максимальное значение положения в модуле. Его следует уставновить равным MaxPos в конфигурации модуля. Используется в методах setOpen и setClose.

Свойства posPresetX – так же вручную задаваемые параметры воможных положений. Например у меня posPreset1 – это закрытие не до упора, для вечера, чтобы можно было видеть улицу в щель. posPreset2 – чуть более плотное закрытие без щели, но ролеты не до конца сомкнуты. Итп.

pos и isManuallyLocked – это свойства автоматически обновляемые из MQTT и методами класса – для последующего использования в интерфейсе и скриптах.

cmd – команда привязанная к MQTT.

Пример метода setOpen:

$posMax = $this->getProperty('posMax');
if (empty($posMax)) {
 $posMax = 60;
}
// send to MQTT, to the 'cmd' topic
setGlobal($this->object_title.'.'.'cmd','mva-'.$posMax);

Здесь вместо mva0, шлем mva-19 для того чтобы компенсировать проблему дрейфа: последовательное mvr19 и mvr-19 не вернет вточности в исходное положение, т.к. опускать легче и за 19 секунд ролета сместится на большее расстояние чем при подъеме за те же 19 секунд. Поэтому setOpen – это своего рода гарантированый возврат в полностью открытое положение, которое выполняется минимум раз в сутки. Для компенсации дрейфа можно было бы сделать подъем и за 20 секунд, или mva-1, но сделал mva-19 на случай отключения электричества – при этом сбросится внутренний счетчик положения, а при таком подходе модуль в любом случае откроет ролету полностью. Не забываем что если внутренний счётчик положения оказывается вне диапазона [0, MaxPos], модуль сбрасывает значение в крайнее положение. Т.е. после отработки mva-19, pos будет установлен 0.

Пример метода setPreset1:

if (!empty($this->getProperty('posPreset1'))) {
  // send to MQTT, to the 'cmd' topic
  setGlobal($this->object_title.'.'.'cmd','mva'.$this->getProperty('posPreset1'));
}

Также определены объекты данного класса с собственными значениями в posMax и posPresetX:

Конфигурация MQTT

Каждая пара cmd и pos имеет соответсвующую привязку к свойствам cmd и pos каждого из объектов:

Использование

Собственно использование заключается в вызове методов setOpen, setClose, setPresetX, toggleState при желаемых событиях, а также отображение статуса из свойств pos и isManuallyLocked.

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

В зале скрипт еще более запутанный – тут уже две ролеты: одна на окне, вторая на двери на террасу. Тут в правила добавлен телевизор – при включённом теливизоре окно прикрывается чтобы солнце не мешало. На двери настроено отложенное закрытие и установка в posPreset3 для предварительного “уведомления” о том что дверь будет заблокирована через 2 минуты.

Также на плане помещений добавлено управление и графическое отображение статуса из pos и isManuallyLocked:

Dee – одноканальный выключатель света – прошивка

Аппаратная часть

Аппаратная часть и конфигурация для прошивки описана в следующей статье:

Особености моей прошивки

  • Управление посредством MQTT брокера.
  • Рапорт о состоянии содержит информацию о положении выключателя – таким образом сервер может узнать положение переключателя.
  • Активирован Light-Sleep режим, что позволяет снизить потребление без ущерба в реакции на выключатели (потребелние снижено с 0.8w до 0.5w).
  • Имеет ряд настроек, которые позволяют достаточно гибко конфигурировать поведение модуля: можно инвертировать выключатель.
  • Возможность изменения настроек без необходимости разбирать и перепрошивать.

Рабочие режимы

  • Красный светодиод горит – модуль запитан и прошивка успешно инициализирована.
  • Синий светодиод моргает – модуль в режиме конфигурации. В этот момент открыта точка доступа с именем Dee-xxxxx. Страница конфигурации доступна по IP 192.168.4.1. Либо, если модуль не терял связь с настроенной сетью, можно открыть эту же страницу по IP модуля.
  • Синий светодиод горит – модуль подключен к сети и нормально работает.

Управление ручным выключателем

  • Имеется два основных режима работы: переключатель меняет состояние реле при каждом нажатии, либо переключатель включает/выключает только если он переведен в соответсвующее положение.
  • Перейти в режим конфигурирования: для этого необходимо быстро включить/выключить любой переключатель 5 или более раз.

Конфигурация

  • SSID, password – подключение к домашней WiFi сети
  • mqtt server, port, client name, user, password – подключение к MQTT брокеру. Важно! Client name должен быть уникальным. Этот же client name используется в качестве имени точки доступа и имени хоста.
  • mqtt output topic – топик для вывода статуса реле. Значения 0, 1 соответсвуют выключено, включено соответсвенно. Дополнительно может содержать точку в конце для обозначения положения переключателя.
    Примеры:
    ‘0.’ – реле открыто, переключатель нажат.
    ‘1’ – реле закрыто, переключатель не нажат.
    ‘1.’ – реле закрыто и переключатель нажат.
  • mqtt commands topic – топик для команд реле.
  • respect switch states – если установлено – нажатие переключателя включает свет. Если свет уже горел – то ничего не происходит. Выключение аналогично.
    Если флаг сброшен – каждая смена положения переключателя меняет состояние реле.
  • invert switch keys – меняет направление переключателя. Также влияет на вывод точки в выводе статуса.

Команды управления

  • 1 – включить свет (закрыть реле).
  • 0 – выключить свет (открыть реле).
  • set – перейти в режим конфигурации. Аналогично нажатию на кнопку ‘pairing’ на корпусе, либо быстрому включение/выключению переключателя более 5 раз.

Исходники

См GitHub: https://github.com/ai91/dee

Хотелось бы отметить что используется development ветка WiFiManager’а. Данная ветка позволяет запускать конфигуратор в неблокирующем режиме – ручной переключатель остается функциональным даже если сеть пропала/не настроена и модуль постоянно в режиме точки доступа. Мастер-ветка WiFiManager’а не умеет такого.

Более

Для примера конфигурации MajorDoMo смотри следующую статью:

Detritus – двухканальный выключатель света – прошивка

Аппаратная часть

Аппаратная часть и конфигурация для прошивки описана в следующей статье:

Особености моей прошивки

  • Управление посредством MQTT брокера.
  • Рапорт о состоянии содержит информацию о положении выключателя – таким образом сервер может узнать положение переключателя.
  • Активирован Light-Sleep режим, что позволяет снизить потребление без ущерба в реакции на выключатели (потребелние снижено с 0.8w до 0.5w).
  • Имеет ряд настроек, которые позволяют достаточно гибко конфигурировать поведение модуля: можно независимо инвертировать релешки и выключатели.
  • Возможность изменения настроек без необходимости разбирать и перепрошивать.

Рабочие режимы

  • Светодиод моргает – модуль в режиме конфигурации. В этот момент открыта точка доступа с именем Detritus-xxxxx. Страница конфигурации доступна по IP 192.168.4.1. Либо, если модуль не терял связь с настроенной сетью, можно открыть эту же страницу по IP модуля.
  • Светодиод горит – модуль подключен к сети и нормально работает.

Управление ручным выключателем

  • Имеется два основных режима работы: переключатель меняет состояние реле при каждом нажатии, либо переключатель включает/выключает только если он переведен в соответсвующее положение.
  • Перейти в режим конфигурирования: для этого необходимо быстро включить/выключить любой переключатель 5 или более раз.

Конфигурация

  • SSID, password – подключение к домашней WiFi сети
  • mqtt server, port, client name, user, password – подключение к MQTT брокеру. Важно! Client name должен быть уникальным. Этот же client name используется в качестве имени точки доступа и имени хоста.
  • mqtt output topic 1 – топик для вывода статуса реде L1. Значения 0, 1 соответсвуют выключено, включено соответсвенно. Дополнительно может содержать точку в конце для обозначения положения переключателя.
    Примеры:
    ‘0.’ – реле открыто, соответсвующий переключатель нажат.
    ‘1’ – реле закрыто, переключатель не нажат.
    ‘1.’ – реле закрыто и переключатель нажат.
  • mqtt commands 1 topic – топик для команд реле L1.
  • mqtt output topic 2 – топик для вывода статуса реле L2.
  • mqtt commands 2 topic – топик для команд реле L2.
  • swap relays – инвертирует привязку реле L1/L2 к переключателям S1/S2.
  • respect switch states – если установлено – нажатие переключателя включает свет. Если свет уже горел – то ничего не происходит. Выключение аналогично.
    Если флаг сброшен – каждая смена положения переключателя меняет состояние реле.
  • invert switch keys – меняет направление переключателей. Также влияет на вывод точки в выводе статуса.

Команды управления

  • 1 – включить свет (закрыть реле).
  • 0 – выключить свет (открыть реле).
  • set – перейти в режим конфигурации. Аналогично нажатию на кнопку ‘pairing’ на корпусе, либо быстрому включение/выключению переключателя более 5 раз.

Исходники

См GitHub: https://github.com/ai91/detritus

Хотелось бы отметить что используется development ветка WiFiManager’а. Данная ветка позволяет запускать конфигуратор в неблокирующем режиме – ручной переключатель остается функциональным даже если сеть пропала/не настроена и модуль постоянно в режиме точки доступа. Мастер-ветка WiFiManager’а не умеет такого.

Более

Для примера конфигурации MajorDoMo смотри следующую статью:

Dorfl – управление жалюзи – прошивка

Аппаратная часть

Аппаратная часть и конфигурация для прошивки описаны в следующей статье:

Особености моей прошивки

  • Управление посредством MQTT брокера.
  • Приблизительно знает состояние/положение жалюзи (ролеты). Полностью открытые жалюзи – это условный 0. Если нажать кнопку закрытия и держать одну секунду – это 1. Каждый раз когда вы вручную нажимаете выключатель для открытия или закрытия – модуль считает время и автоматически обновляет свое состояние (и рапортует в MQTT). Т.е. сервер может узнать текущее положение (полностью открыты, закрыты на треть, либо полностью) и посылать команды для более точного позиционирования. Можно послать команду относительного положения (типа “включи реле закрытия на 3 секунды”), либо абсолютного (“перемести в положение 6 секунд от полностью открытого”. При этом модуль не будет полностью открывать чтобы начать осчет 6 секунд, а переместит в нужном направлении на необходимое количество секунд относительно текущего положения). Т.к. положение считает модуль, а не сервер, то исключена неточность позиционирования из-за сетевых задержек (потеряна связь, либо MQTT-брокер лагает, итп).
  • Также рапорт о состоянии содержит информацию о положении выключателя – таким образом сервер может узнать нажата ли кнопка.
  • Активирован Light-Sleep режим, что позволяет снизить потребление без ущерба в реакции на выключатели (потребелние снижено с 0.8w до 0.5w).
  • Имеет ряд настроек, которые позволяют достаточно гибко конфигурировать поведение модуля: можно инвертировать координаты отсчета (“0” будет полностью закрытые), можно независимо инвертировать релешки и выключатели.
  • Возможность изменения настроек без необходимости разбирать и перепрошивать.

Рабочие режимы

  • Светодиод моргает – модуль в режиме конфигурации. В этот момент открыта точка доступа с именем Dorfl-xxxxx. Страница конфигурации доступна по IP 192.168.4.1. Либо, если модуль не терял связь с настроенной сетью, можно открыть эту же страницу по IP модуля.
  • Светодиод горит – модуль подключен к сети и нормально работает.

Управление ручным выключателем

  • Заблокировать дистанционное управление в полностью открытом/закрытом положении: если оставить ручной выключатель в нажатом положении, то управление по сети заблокировано.
  • Заблокировать дистанционное управление в произвольном положении: для блокировки в промежуточном состоянии, необходимо из выключеного состояния быстро включить-выключить-включить любой из переключателей. При этом переключатель остается включеным и управление по сети заблокировано (но реле не срабатывает).
  • Перейти в режим конфигурирования: для этого необходимо быстро включить/выключить любой переключатель 5 или более раз.
  • Даже если переключатель оставить в нажатом положении, то реле автоматически откроется через MaxPos секунд.

Конфигурация

  • SSID, password – подключение к домашней WiFi сети
  • mqtt server, port, client name, user, password – подключение к MQTT брокеру. Важно! Client name должен быть уникальным. Этот же client name используется в качестве имени точки доступа и имени хоста.
  • mqtt position output topic – топик для вывода текущей позиции. Значение в диапазоне [0, maxPos]. Значение – целочисленое количество секунд от полностью открытых жалюзи. Значение посылается при открытии реле (не важно каким образом было сработано – дистанционно, либо переключателем) и при нажатии на переключатель. Если запись была инициирована переключателем, значение содержит точку в конце.
    Примеры:
    ‘0’ – жалюзи полностю открыты
    ’30’ – положение 30 секунд (означает что закрывались как минимум 30 секунд, но может и больше если MaxPos = 30)
    ’30.’ – положение 30 секунд и переключатель нажат (т.е. управление по сети заблокировано).
  • mqtt commands topic – топик для команд.
  • blinds max pos – максимальная позиция жалюзи.
  • invert zero-position – инвертирует реле для открытия/закрытия. По-умолчанию L1 для открытия, L2 для закрытия.
  • invert switch keys – инвертирует клавиши переключателя. По-умолчанию S1 для открытия, S2 для закрытия.
  • disable manual lock – если блокировка от быстрого включения/отключения/включения мешает, можно её отключить установив этот флаг.

Команды управления

  • mvr<XXX> – переместить жалюзи в относительное положение XXX. Где XXX может быть отрицательным. Если XXX отрицательное – жалюзи открываются. Если положительное – закрываются. Абсолютное значение XXX – это количество секунд закрытия реле.
    Примеры:
    mvr5 – замкнуть реле L2 на 5 секунд (закрытие)
    mvr-60 – замкнуть реле L1 на 60 секунд (открытие)
    mvr0 – разомкнуть оба реле. Т.е. фактически остановка.
    Внимание: модуль берет на себя разрешение конфликтов и гарантирует невозможность одновременного закрытия обоих реле. Т.е. последовательное mvr5 mvr-5 не сожгёт двигатель, а всего-лишь прервёт/отменит первую команду.
  • mva<XXX> – переместить жалюзи в абсолютное положение XXX. Где XXX может быть отрицательным либо положительным. Если XXX вне диапазона [0, MaxPos], то после XXX секунд внутреннее значение положения будет установлено в 0 либо MaxPos.
    Примеры:
    mva0 – полностью открыть жалюзи.
    mva5 – доведет жалюзи от текущего положение до 5 секунд относительно полностью открытого. Если текущее положение 3, то будет держать L2 замкнутым в течении 2 секунд. Если текущее положение 9, то будет держать L1 замкнутым в течении 4 секунд.
    mva60 – полностью закрыть жалюзи. Будет держать замкнутым L2 в течении 60 секунд, и по истечении 60 секунд установит положение в MaxPos.
    mva-60 – полностью открыть жалюзи. Будет держать замкнутым L1 в течении 60 секунд и по истечении установит положение в 0.
  • set – перейти в режим конфигурации. Аналогично нажатию на кнопку ‘pairing’ на корпусе, либо быстрому включение/выключению переключателя более 5 раз.

Исходники

См GitHub: https://github.com/ai91/dorfl/

Хотелось бы отметить что используется development ветка WiFiManager’а. Данная ветка позволяет запускать конфигуратор в неблокирующем режиме – ручной переключатель остается функциональным даже если сеть пропала/не настроена и модуль постоянно в режиме точки доступа. Мастер-ветка WiFiManager’а не умеет такого.

Более

Для примера конфигурации MajorDoMo смотри следующую статью:

Dee – аппаратная часть одноканального реле

Аппаратная основа – китайский модуль для управления светом от LoraTap.

Мозг модуля – TYWE3S, основывающийся на ESP8266.

Как и в случае с двухканальным модулем, оригинальная прошивка работает через облако tuya. По тем же причинам что описаны в статье про тот модуль, будем шить собственную прошивку.

Для прошивки необходим rs232 интерфейс с 3.3v. Я использовал FTDI.

Для подключения нам нужны 5 контактов.

TYWE3SFTDI
VCCVCC
GNDGND
RXTX
TXRX
IO0GND

Подключение тривиально. Но не забываем выставить 3.3v на FTDI модуле. Для загрузки модуля в режиме прошивки, необходимо при подаче питания замкнуть IO0 на землю.

В модуле используются следующие GPIO:

GPIO Режим Описание
0outRed LED (1 – on, 0 – off)
4inSwitch (1 – released, 0 – pressed)
12inPairing button (1 – released, 0 – pressed)
13outRelay (0 – open, 1 – close)
16outBlue LED (1 – off, 0 – on)

Подпаиваться, к сожалению, практически невозможно. Выпаивать/впаивать для отладки совершенно не хотелось. Поэтому пришлось нарисовать и распечатать накладку. Модель выложил на Thingiverse.

В Arduino Studio необходимо выставить следующие параметры:
Generic ESP8266 Module, CPU 80MHz, Crystal 26MHz, Flash Size 1MB

Прошивать будем Dee:

Dorfl/Detritus – аппаратная часть двухканального реле

Аппаратная основа – китайский модуль для управления жалюзи/ролетами от LoraTap.

Мозг модуля – TYWE2S, основывающийся на ESP8285.

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

В официальном магазине модуль представлен в двух версиях: V1 и V2. Я заказал оба и после инспекции могу отметить следующую разницу: качество производства и пайки в V2 выше. Тем не менее, с точки зрения схемотехники и компонентов – обе версии идентичны. Основное различие – в прошивке. V2 поддерживает переключатели с фиксацией положения, а V1 возвратные. Учитывая эту разницу и нижеследующее – смысла в переплате за V2 я особо не вижу.

Оригинальная прошивка нас не интересует. Она работает через облако tuya. Во-первых это зависимость от доступа в интернет. Во-вторых возможные лаги. В-третьих доступ к управлению из своего софта затруднен (хоть энтузиасты и активно реверсят). Ну и в-четверых внутренний параноик не доверяет свой уют для доступа из наружи. Поэтому будем “ломать”. 🙂

Для прошивки необходим rs232 интерфейс с 3.3v. Я использовал FTDI.

Для подключения нам нужны 5 контактов.

TYWE2SFTDI
VCCVCC
GNDGND
RXTX
TXRX
IO0GND

Подключение тривиально. Но не забываем выставить 3.3v на FTDI модуле. Для загрузки модуля в режиме прошивки, необходимо при подаче питания замкнуть IO0 на землю.

В модуле используются следующие GPIO:

GPIOРежимОписание
3outLED (1 – off, 0 – on)
4inswitch S1 (1 – released, 0 – pressed)
5inswitch S2 (1 – released, 0 – pressed)
12outrelay L1 (0 – open, 1 – close)
13inpairing button (1 – released, 0 – pressed)
14outrelay L2 (0 – open, 1 – close)

Подпаиваться весьма удобно. Во время разработки/тестирования я собрал следующий макет (во время подачи питания 220v, не забывайте отключать FTDI от комьютера! На фото он отключен.)

В Arduino Studio необходимо выставить следующие параметры:
Generic ESP8285 Module, CPU 80MHz, Crystal 26MHz, Flash Size 1MB

Шить будем два варианта: