-
Notifications
You must be signed in to change notification settings - Fork 4
Gyver Lamp
Всем привет. Как уже писал ранее сделал подобную лампу, вот ее описание
Благодаря Алексу добавил еще спецефекты типа огня. И вот читая сообщество решил отконфигурировать такое же поведение
И так пред история, увлекся собственным умным домом и в какой то момент понял что невозможно поддерживать версии более 5 устройств, там улучшил там осталось, там протестировал, там нет,и бесконечный круг... И в итоге написал по моему мнению универсальную прошивку, которая покрыла все мой весь умный дом начиная от простых светильников и розеток и заканчивая погодными станциями и различными RF бриджами. Вот хорошо описанные примеры
Как написано на главной странице прошивка поддерживает след. устройства (на момент написания)
-
обычные свитчи/реле
-
диммируемые модули ШИМ, для управления яркостью
-
Датчики температуры влажности и давления (BME180, Dallas)
-
Кнопки, энкодеры
-
Oled и e-paper дисплеи
-
RF приемники и передатчики
-
Датчики движения
-
Серво двигатели
-
IR приемники и передатчики
-
различные LDR
Ну и собственно вокруг этого всего:
- Встроенный WEB сайт. Написанный на React JS
- OTA
- Интеграция с умным домом через протокол MQTT
- Нативная интеграция с Apple Home Kit
- Web сервиса
Итак в двух словах, имеем единую прошивку для всех устройств, разница в поведении определяеться конфигурационными файлами JSON, которые храняться в корне SPIFFS системы ESP, этим и определяя поведение.... Т.е. прошивку можно смело менять, файлы остаються и устройство продолжает работать как хотели
Итак центральный файл config.json
{"localhost":"LampFire","mqtt_host":"","mqtt_port":"1883","mqtt_user":"homekit","mqtt_pass":"031-45-154"}
Содержит имя хоста, и параметры подключение к MQTT, если собираетесь использовать
След центральный файл services.json, содержит список и характеристики подключенных устройств . Это массив след. вида
[{"service":"TimeController","name":"Time","enabled":true,"interval":1000,"timeoffs":7200,"dayloffs":3600,"server":"pool.ntp.org"},
{"enabled":true,"interval":1,"pin":23,"numleds":256,"service":"RGBStripController","name":"RGBStrip","issmooth":false,"manualtime":6000,"ismatrix":true,"matrixwidth":16,"matrixtype":8},
{"enabled":true,"interval":1,"pin":"","service":"ButtonController","name":"Button","defstate":false,"pins":[16]}
]
-
service: базовый элемент который собственно и определяет тип устройства
-
name : Имя устройства, важно, так как мы можем подключить несколько однотипных устройств
-
interval: частота срабатывания или опроса в миллисекундах. например для управления светильниками нужно небольшое значение, а для отсылки данных в интернет, конечно побольше. Собственно можно тюнить и не перегружать процессор
pin: номер пина к которому подключено устройство/датчик, для некоторых устройств их конечно несколько с разными именами,
ну и далее разные параметры специфичные для сервиса, сам сервис умеет выдавать параметры по умолчанию и Web сайт позволяет их редактировать, т.е. не надо смотреть в код
Опять же через Web сайт можно добавлять/удалять сервиса
Ну и следующий конфигурационный файл, triggers.json, это собственно взаимодействие между сервисами, т.е. когда что то в одном происходит, можно передать команду другому сервису
Как пример:
-
нажали кнопку
-
уровень освещенности достиг чего то
-
сработал таймер (о нем более детально будет позже)
-
RF приемник получил какой то конкретный сигнал
Вот пример триггера:
[{"type":"TimeToRGBStrip","source":"Time","destination":"RGBStrip","value":[{"isOn":false,"isLdr":false,"time":2300,"bg":1,"color":3432432,"fadetm":1000,"wxmode":-1}]},{"type":"ButtonToRgbStripMode","source":"Button","destination":"RGBStrip","modes":[0,56,58],"idx":0}]
-
type: тип триггера из имеющихся
-
source: От какого сервиса (имя)
-
destination: какому сервису (имя)
-
value: специфические значение и пороговые значения для данного типа триггера
В описанном примере мы определили тип триггера таймер, который управляет RGB лентой (WS2812) при наступлении 23:00 лампа будет переведена в яркость "bg":10, статический режим "wxmode":-1, цвет "color":3432432
Конечно же через Web сайт это можно задать не углубляясь в название и список параметров
Ну отдельное упоминание "time":2300 , могут быть простые значение ЧЧММ, т.е. каждый день в заданное время что то происходит, а может быть cron expression, тут уж можно развернуться и по месяцам и по дням недели. "fadetm":1000 плавность в миллисекундах перехода от текущего значения в заданное, т.е. например плавное повышение яркости
Ну и конечно, если вы используете нативный Apple Home Kit. он дабавляет возможностью определения сценариев с помощью внутренних средств, как пример из интересных плюшек включение по закату солнца....
Как пример выше, еще один триггер ButtonToRgbStripMode. Он реагирует на нажатии кнопки и переключает режимы лампы между 0,56,58. Собственно 0 выключено, 58 режим огня. Ну или определяйте сами
Итак все что остается сделать это собрать из кубиков готовое устройство
Шаги достаточно простые, после компиляции и залития прошивки (детально не описываю, все стандартно ) ESP запускается в известном режиме конфигурации соединения WiFi, все стандартно....
После подключения к сети , устройство само проверяет и докачивет файлы для встроенного Web сайта, беря последнюю версию с моей страницы Git Hub.
Далее запускаем встроенный файл менеджер (http:// ip address /browse) и можем залить config.json, triggers.json и services.json. Ну или использую сайт (корневой адрес) можем сконфигурировать через User Interface
Перегружаем и устройство работает
Через (http:// ip address /update) можем заливать новые версии прошивок
При сборке прошивки, собственно придется только один раз подправить config.h файл а именно:
#define ENABLE_NATIVE_HAP
///#define ENABLE_HOMEBRIDGE
это выбрать режим интеграции с умным домом нативный Apple ENABLE_NATIVE_HAP или MQTT ENABLE_HOMEBRIDGE Все вместе , не тестировал, по отдельности все прекрасно работает. Ну странно иметь MQTT и еще нативный Apple
В принципе все для ESP32, для ESP8266 есть нюансы, так как память ограничена не все сервиса "влазят" в одну прошивку, напомню если сервис и отключен его код есть в прошивке, соответственно надо будет подредактировать секцию ниже какие сервиса вы хотите оставить.
Теперь о лампе, в примерах выше я привел конфигурационные файлы, ну можно смотреть здесь По умолчанию сконфигурирована для нативной интеграции с Apple Home Kit. После подсоединения к сети вы сможете ее добавить в умный дом. Детали смотрите здесь
Ну и конечно написано все красиво, но в реалии есть баги, поэтому не судите, думаю идея понравилась Ну а баги надо править и улучшать. надеюсь на понимание и поддержку :)