Аппаратная часть
Аппаратная часть и конфигурация для прошивки описаны в следующей статье:
Особености моей прошивки
- Управление посредством 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 смотри следующую статью: