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 смотри следующую статью:

Добавить комментарий