Всем привет!
Это проект, посвященный управлению моторизированными шторами, и их интеграции в системы умного дома (напр. [Home Assistant](https://www.home-assistant.io/) или [OpenHab](https://www.openhab.org/)).
Проект развивается в основном в двух областях:
1. Программная часть (прошивка для контроллера на базе ESP8266 / ESP32)
2. Механическая часть (3д-модели для превращения обычных рулонных штор в моторизованные).
А теперь немного подробнее...
# Прошивка для ESP8266 / ESP32
Я стараюсь поддерживать работоспособность всех функций на обеих платформах.
Основные отличия между ними:
- На ESP8266 доступно меньше пинов. Тут можно подключить только 2 шаговых двигателя к одному контроллеру (используя 8 пинов).
- ESP32 даёт возможность подключить 4 (или даже больше?) шаговых двигателя к одному контроллеру (используя 16 пинов).
Если вам нужно подключить 1-2 мотора - можете смело брать плату на основе более дешевого и простого ESP8266 (Wemos D1 mini, Node MCU и т.д.).
## Основные возможности моей прошивки
- Поддержка доступных шаговых двигателей 28BYJ-48 (лучше использовать 12 вольтовые версии)
- Управление неограниченным кол-вом шаговых двигателей (ограничение в 4 мотора стоит по-умолчанию для более удобного UI). Фактически ограничены только аппаратно - кол-вом пинов.
- Возможность задать скорость вращения (моторы на 12 вольт могут обеспечить бОльшую скорость)
- Возможность задать все основные настройки на этапе запуска системы через Captive WiFi Portal (используемые моторы, пины, скорость моторов, настройки MQTT и т.д.)
- Веб-интерфейс для выставления крайних точек и управления шторами (в том числе адаптирован под мобильные устройства)
- Возможность подключения внешнего механического выключателя для управления шторами (с возможностью остановки штор в нужной позиции).
- Поддержка MQTT (как для управления шторами, так и для настроек крайних положений - полная замена Web UI)
- Простая интеграция с популярными системами умного дома вроде [Home Assistant](https://www.home-assistant.io/) или [OpenHab](https://www.openhab.org/) (через MQTT)
- "Обновления по воздуху" (OTA updates). Не нужно снимать и разбирать контроллер для обновления прошивки. Веб-интерфейс уведомляет о наличии новых обновлений.
- Сохранение положения каждой шторы в энергонезависимой ПЗУ (после отключения питания не нужно заново калиброваться или выставлять позицию)
- Управлением всеми подключенными моторами в параллель (асинхронная работа с шаговыми двигателями)
- Watchdog (автоматический рестарт контроллера в случае зависания)
- Автоматическое поддержание подключения к MQTT серверу и переподключение в случае проблем с сетью
- Низкое энергопотребление в режиме простоя (обмотки двигателя не держатся под напряжением во время остановки)
- Поддержка DHCP по WiFi
## Web-интерфейс
Управление:
Калибровка крайних позиций:
## Captive Portal
После соединения с сетью "esp-xxxx" автоматически откроется Captive Portal:
Настройте тут пины для нужных двигателей и для механических кнопок Вверх/вниз (или выключите, если не используется).
## MQTT
*Если не хотите использовать MQTT, просто не вводите адрес MQTT сервера при конфигурации в Captive Portal.*
Принцип работы:
- Команды для управления шторами контроллер слушает в топике `ESP_Blinds//in` (JSON)
- Обновления о позиции и своём состоянии контроллер отправляет в `ESP_Blinds//out` (JSON)
- Отдельные топики для моторов (`/outN`) отключены в целях оптимизации MQTT общения, но если в вашей интеграции они нужны - их можно включить.
## Интеграция с HomeAssistant
В контроллере реализована функция MQTT auto-discovery с префиксом по-умолчанию (требует как минимум версии HA v2021.11). Она поможет автоматически обнаружить контроллер штор и настроить все объекты с правильной конфигурацией.
В случае, если этот вариант вам не подходит, вы можете настроить всё вручную. Смотрите примеры конфигураций ниже.
Пример конфига для интеграции 2х штор в Home Assistant (замените "_chip_Id_" Chip id вашего контроллера - его можно подглядеть в сообщении о регистрации - `/ESP_Blinds/register`):
```yaml
cover:
- platform: mqtt
name: "Штора 1"
device_class: "blind"
command_topic: "ESP_Blinds/_chip_Id_/in"
set_position_topic: "ESP_Blinds/_chip_Id_/in"
set_position_template: '{"num": 1, "action": "auto", "value": {{ 100 - position }} }'
position_topic: "ESP_Blinds/_chip_Id_/out"
position_template: '{{ value_json.position1 }}'
payload_open: '{"num": 1, "action": "auto", "value": 0}'
payload_close: '{"num": 1, "action": "auto", "value": 100}'
payload_stop: '{"num": 1, "action": "stop", "value": 0}'
position_open: 0
position_closed: 100
optimistic: false
- platform: mqtt
name: "Штора 2"
device_class: "blind"
command_topic: "ESP_Blinds/_chip_Id_/in"
set_position_topic: "ESP_Blinds/_chip_Id_/in"
set_position_template: '{"num": 2, "action": "auto", "value": {{ 100 - position }} }'
position_topic: "ESP_Blinds/_chip_Id_/out"
position_template: '{{ value_json.position2 }}'
payload_open: '{"num": 2, "action": "auto", "value": 0}'
payload_close: '{"num": 2, "action": "auto", "value": 100}'
payload_stop: '{"num": 2, "action": "stop", "value": 0}'
position_open: 0
position_closed: 100
optimistic: false
```
Аналогично добавляются все остальные шторы.
# Механическая часть
Наиболее распространённый вариант использует двигатели 28BYJ-48, но фактически вы можете использовать любые шаговые двигатели с управлением по 4м контактам (двигатели с двумя обмотками).
28BYJ-48 чаще всего используют вместе с драйвером ULN2003 (лучше на 12 вольт, он даёт бОльший крутящий момент).
Я разработал 2 варианта переделки рулонных штор из Леруа Мерлен в моторизованные:
1. для старого образца крепления. Похоже их почти уже не продают.
2. для нового образца (скоро опубликую). Крепёжные отверстия совпадают с оригинальными деталями, поэтому шторы могут быть легко превращены в моторизованные и обратно.
Модели для 3д печати доступны каталоге `3d_parts` или напрямую на [Thingiverse](https://www.thingiverse.com/thing:4093205/)
# Планы развития
* Добавить поддержку других шаговиков и драйверов (предлагайте в issues каких)
* Добавить больше возможностей по конфигурации в Web UI (чтобы не приходилось сбрасывать все настройки, чтобы попасть в Captive Portal)
* Подготовить универсальные печатные платы для более простой сборки самого контроллера
* Есть идея? добавляйте тут в issues
# История проекта
Этот проект изначально был основан на работе товарища @nidayand - как форк от его [репозитория](https://github.com/nidayand/motor-on-roller-blind-ws).
К сожалению проект поддерживал только ESP8266 и управление 1 двигателем, плюс давно не обновлялся. Я добавил поддержку Platformio (для более удобной разработки), нескольких моторов, а позже и ESP32 (чтобы можно было подключить более 2х моторов к одному контроллеру). Это было опубликовало под версией 1.4.x.
Вскоре захотелось более удобного управления двигателями, простой конфигурации контроллера без правки прошивки, но изначальный код был малопригоден для поддержания, хотя и работал.
В результате произошёл большой рефакторинг прошивки - были выделены новые классы, зоны ответственности.
Фактически стало понятно, что от старого проекта почти ничего не осталось (непереработанным остался только лишь Web UI). Этот проект был выделен в свою отдельную ветку и теперь развивается самостоятельно.