Skip to content

Gyver Lamp

Yurik72 edited this page Jun 8, 2020 · 11 revisions

Всем привет. Как уже писал ранее сделал подобную лампу, вот ее описание

Благодаря Алексу добавил еще спецефекты типа огня. И вот читая сообщество решил отконфигурировать такое же поведение

И так пред история, увлекся собственным умным домом и в какой то момент понял что невозможно поддерживать версии более 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. После подсоединения к сети вы сможете ее добавить в умный дом. Детали смотрите здесь

Ну и конечно написано все красиво, но в реалии есть баги, поэтому не судите, думаю идея понравилась Ну а баги надо править и улучшать. надеюсь на понимание и поддержку :)

Clone this wiki locally