Всем привет! Это проект, посвященный управлению моторизированными шторами, и их интеграции в системы умного дома (напр. [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). Этот проект был выделен в свою отдельную ветку и теперь развивается самостоятельно.