Всем привет!
Это проект, посвященный управлению моторизированными шторами, и их интеграции в системы умного дома (напр. Home Assistant или OpenHab).
Проект развивается в основном в двух областях:
- Программная часть (прошивка для контроллера на базе ESP8266 / ESP32)
- Механическая часть (3д-модели для превращения обычных рулонных штор в моторизованные).
А теперь немного подробнее...
Я стараюсь поддерживать работоспособность всех функций на обеих платформах. Основные отличия между ними:
- На 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 или OpenHab (через MQTT)
- "Обновления по воздуху" (OTA updates). Не нужно снимать и разбирать контроллер для обновления прошивки. Веб-интерфейс уведомляет о наличии новых обновлений.
- Сохранение положения каждой шторы в энергонезависимой ПЗУ (после отключения питания не нужно заново калиброваться или выставлять позицию)
- Управлением всеми подключенными моторами в параллель (асинхронная работа с шаговыми двигателями)
- Watchdog (автоматический рестарт контроллера в случае зависания)
- Автоматическое поддержание подключения к MQTT серверу и переподключение в случае проблем с сетью
- Низкое энергопотребление в режиме простоя (обмотки двигателя не держатся под напряжением во время остановки)
- Поддержка DHCP по WiFi
Управление:
Калибровка крайних позиций:
После соединения с сетью "esp-xxxx" автоматически откроется Captive Portal:
Настройте тут пины для нужных двигателей и для механических кнопок Вверх/вниз (или выключите, если не используется).
Если не хотите использовать MQTT, просто не вводите адрес MQTT сервера при конфигурации в Captive Portal.
Принцип работы:
- Команды для управления шторами контроллер слушает в топике
ESP_Blinds/<chip_id>/in
(JSON) - Обновления о позиции и своём состоянии контроллер отправляет в
ESP_Blinds/<chip_id>/out
(JSON) - Отдельные топики для моторов (
/outN
) отключены в целях оптимизации MQTT общения, но если в вашей интеграции они нужны - их можно включить.
В контроллере реализована функция MQTT auto-discovery с префиксом по-умолчанию (требует как минимум версии HA v2021.11). Она поможет автоматически обнаружить контроллер штор и настроить все объекты с правильной конфигурацией.
В случае, если этот вариант вам не подходит, вы можете настроить всё вручную. Смотрите примеры конфигураций ниже.
Пример конфига для интеграции 2х штор в Home Assistant (замените "chip_Id" Chip id вашего контроллера - его можно подглядеть в сообщении о регистрации - /ESP_Blinds/register
):
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 варианта переделки рулонных штор из Леруа Мерлен в моторизованные:
- для старого образца крепления. Похоже их почти уже не продают.
- для нового образца (скоро опубликую). Крепёжные отверстия совпадают с оригинальными деталями, поэтому шторы могут быть легко превращены в моторизованные и обратно.
Модели для 3д печати доступны каталоге 3d_parts
или напрямую на Thingiverse
- Добавить поддержку других шаговиков и драйверов (предлагайте в issues каких)
- Добавить больше возможностей по конфигурации в Web UI (чтобы не приходилось сбрасывать все настройки, чтобы попасть в Captive Portal)
- Подготовить универсальные печатные платы для более простой сборки самого контроллера
- Есть идея? добавляйте тут в issues
Этот проект изначально был основан на работе товарища @nidayand - как форк от его репозитория.
К сожалению проект поддерживал только ESP8266 и управление 1 двигателем, плюс давно не обновлялся. Я добавил поддержку Platformio (для более удобной разработки), нескольких моторов, а позже и ESP32 (чтобы можно было подключить более 2х моторов к одному контроллеру). Это было опубликовало под версией 1.4.x.
Вскоре захотелось более удобного управления двигателями, простой конфигурации контроллера без правки прошивки, но изначальный код был малопригоден для поддержания, хотя и работал. В результате произошёл большой рефакторинг прошивки - были выделены новые классы, зоны ответственности.
Фактически стало понятно, что от старого проекта почти ничего не осталось (непереработанным остался только лишь Web UI). Этот проект был выделен в свою отдельную ветку и теперь развивается самостоятельно.