#1 2020-06-11 13:43:57

YK
Участник
Зарегистрирован: 2020-02-26
Сообщений: 21

IOT, Умный дом на ESP32/ESP8266/ESP8255(Sonoff)

И так пред история, увлекся собственным умным домом и в какой то момент понял, что невозможно поддерживать версии более 5 устройств, там улучшил там осталось, там протестировал, там нет,и бесконечный круг... И в итоге написал по моему мнению универсальную прошивку, которая покрыла все мой весь умный дом начиная от простых светильников и розеток и заканчивая погодными станциями и различными RF бриджами.

Ну и конечно же конек всего этого нативная интеграция в Apple Home Kit.  Все  устройства у меня интегрированы и управляются через Apple Home.  Но так как не все используют Apple в прошивке есть возможность использовать MQTT для интеграции с другими системами. Благо практически все продвинутые уже их поддерживают

Вот хорошо описанные примеры

Лампа
https://www.instructables.com/id/Bed-Room-Lamp-Ws2812/

[MEDIA=youtube]Ja1Og2USEgE[/MEDIA]


Погодная станция

https://www.instructables.com/id/ESP32-Weather-Station-Solar-Powered/



еще одна лампа с термометром

https://www.instructables.com/id/Accu-Multicololred-LED-Lamp-With-Weather/



Как написано на главной странице прошивка поддерживает след. устройства (на момент написания)

- обычные свитчи/реле

- диммируемые модули ШИМ, для управления яркостью

- Датчики температуры влажности и давления (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 есть нюансы,  так как память ограничена не все сервиса "влазят" в одну прошивку, напомню если сервис и отключен его код есть в прошивке, соответственно надо будет подредактировать секцию ниже какие сервиса вы хотите оставить.



Теперь еще один пример об огненной лампе Gyver Lamp, она уже получила большое распространение и даже уже кажеться китайцы ее делают.
в примерах выше я привел конфигурационные файлы, ну можно смотреть здесь

По умолчанию сконфигурирована для нативной интеграции с Apple Home Kit. После подсоединения к сети вы сможете ее добавить в умный дом. Детали смотрите здесь

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

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

P.S. Если кому интересно могу на заказ доработать

Быстрое сообщение

Введите сообщение и нажмите Отправить

Подвал раздела