ESPsmart » Документация

Документация

  • Устройство
    • -- Устройство
    • -- Датчики
    • -- Пины
    • -- Реле
    • -- Кнопки/Сухой контакт
    • -- Дисплей
    • -- Wi-fi
    • -- GSM-модуль
  • ESPsmart Control
    • -- Конфигурация по сети
    • -- Конфигурация через файлы
    • -- Виджеты
    • -- Правила
    • -- События
    • -- Переменные
    • -- Оповещение
    • -- 1-Wire
    • -- Реле
    • -- Статистика
    • -- Логи
  • Примеры


Устройство

Устройство — микроконтроллер выполняющий функции: сбора, хранения, передачу данных с датчиков через сеть, отработку запрограммированных сценариев с помощью управления реле, а также также интерактивное взаимодействие с пользователем посредством серверного ПО разработанного для управления и конфигурации устройства.


Датчики

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


Пины устройства

Пинами устройства являются все незадействованные в сервисной работе пины самого чипа устройства, либо пины расширителей портов, подключенный по шине I2C. Один расширитель портов имеет 16 пинов, которые могут быть использованы как на вход, так и на выход, а так же собственный адрес. Используя разные адреса, можно подключить до 8 расширителей портов.

Адресация пинов:

  1. Родные пины чипа имеют свой собственный номер плюс 200. Т.е. родной пин с номером 10 в логике устройства будет иметь номер 210. Если используется прошивка без поддержки расширителей портов, тогда используется чистая нумерация без прибавления 200.
  2. Пины расширителя нумеруются с нуля у расширителя с адресом 000b. Т.е. самый первый пин у расширителя с адресом 001b (A0=1, A1=0, A2=0) будет числиться под номером 16 в логике устройства.


Реле

Включают и выключают внешние приборы, например, свет или отопитель. Реле подключаются к пинам расширителя или к пинам чипа, которые умеют работать в режиме «выход».

У реле есть триггер принудительного включения, которым можно управлять извне. Это некоторая виртуальная переменная, привязанная к реле, значения которой можно менять снаружи одноимённой командой.

Реле работают по правилам – это некоторый список условий, которые проверяются упорядоченно по списку. В каждом условии может проверяться различный набор параметров, например, состояние датчиков или тех же триггера. На первом же успешном условии проверка по списку прекращается, и реле переходит в то состояние, которое привязано к этому условию. Например, условие может быть таким: «включить свет, если на улице темно». Или таким: «Запустить полив, если нажата кнопка».


Кнопки/Сухой контакт

Кнопки подключаются к пинам расширителя или к пинам чипа, которые могут работать в режиме «вход». Могут принимать участие как в проверке условий, так и в генерации событий. Для проверки в условиях кнопки имеют два устойчивых состояния «нажата» и «отпущена». Генерируемые события: «одинарное нажатие», «двойное нажатие», «длинное удержание».

Один из важных аспектов: кнопки работают не по событию/прерыванию в момент нажатия кнопки, а через опрос их состояния. Опрос происходит более 10 раз в секунду при штатной работе устройства, но иногда и этого может не хватить, если нажимать кнопки очень быстро. Например, если быстро (менее, чем за 0.05 сек) нажать и отпустить кнопку, то факт нажатия вообще не будет зафиксирован.

У кнопки есть три варианта событий: одинарное, двойное и длинное нажатия. В один момент может произойти только одно из этих событий. Например, если сработал двойной клик, то событий одинарного клика в процессе этих двух нажатий не случится. Длительное нажатие сработает через 2-3 сек после начала нажатия, если кнопку не отпускать всё это время.

Двойное нажатие сработает сразу же при втором нажатии (именно нажатии, а не отпускании), если оно произошло не более, чем через 0.5 сек после отпускания, а отпускание произошло не раньше, чем сработало длинное нажатие.

У одинарного нажатия более сложный алгоритм. Если у кнопки не установлено события для двойного и длинного нажатия, то событие одинарного нажатия сработает сразу в момент нажатия на кнопку. Если у нас есть событие для длинного нажатия, но нет события двойного нажатия, то событие одинарного произойдёт в момент отпускания кнопки. А если установлено событие двойного нажатия, т.к. нам надо дождаться его таймаута, то одинарный клик сработает только через 0.5 сек после отпускания кнопки. В этом случае будет ощущаться некоторая задержка реакции после нажатия.


Дисплей

Отображает отладочную информацию в кратком виде: общую (соединение с контроллером, текущее время), данные по датчикам и состояние каждого реле.


WiFi-соединение

Подключение к устройству осуществляется через Wi-Fi соединение. Wi-Fi-сетей, к которым необходимо подключаться, можно указать несколько. В этом случае при невозможности подключения к первой в списке будет попытка подключиться к следующей, и т.д.

Если список сетей не задан, то используется стандартные две сети:
1. default (пароль: 12344321)
2. default2 (пароль: 12344321)


GSM-модуль

Через GSM-модуль так же возможен мониторинг и управление устройством. У GSM-модуля есть «белый список» номеров для входящих вызовов и SMS. По умолчанию он пустой. А когда он пустой, то разрешаются звонки и SMS с любых номеров. Когда в этом списке есть хотя бы один номер, обрабатываться будут только вызовы и SMS с указанных номеров.

При входящем вызове или SMS номер в систему передаётся именно в том виде, в котором он получен от оператора сотовой связи без изменений. При исходящем вызове или SMS номер так же передаётся оператору без преобразований.


ESPSMART CONTROL


Конфигурация по сети

Конфигурация и настройка устройства осуществляется удаленно по сети Интернет, когда устройство включено и на нем настроено Wi-Fi соединение. Основные параметры, такие как настройка Wi-Fi, регистрация пинов реле, кнопок и аналоговых датчиков можно задать в разделе "Конфигурация" системы ESPsmart Control. Важно отметить, если вы не хотите изменять настройки вашей сети Wi-Fi на настройки по умолчанию, то можете воспользоваться конфигурацией Wi-Fi с помощью конфигурационного файла.

Важно отметить правильность регистрации пинов для реле. Если вы используете расширитель портов, то пины с А0 по А7 это номера пинов 0-7, В0-В7 это номера пинов 8-14, если подключаются ещё расширители, то дальше по нарастающей А0-А7 это номера пинов 15-21, а В0-В7 номера пинов 22-28 и т.д. Если вы не используете ни одного расширителя портов, то можно указывать пины самой платы, они начинаются с 200, IO0 = 200, IO1 = 201 и т.д.

Аналоговые датчики всегда подключаются к пинам самой платы и регистрируются согласно их номеру GPIO. На плате ESP8266 есть всего один аналоговый пин A0. На ESP32 мы рекомендуем использовать пины GPIO 33, 34, 35, 36 и 39. Для качественной передачи данных с аналоговых датчиков необходимо устранить специфические проблемы, которые обусловлены электрическим сопротивлением. Сигнал по разным причинам может подвергаться зашумлению из-за нежелательных связей резистивного, емкостного, либо индуктивного характера.


Конфигурация через файлы

Команды, выполняющие настройку параметров работы устройства, продублированы работой с конфигурационными файлами. Сделано это, чтобы устройство можно было настроить без доступа к Wi-Fi.

Токен устройства, список WiFi-сетей, пины реле и кнопок хранятся в EEPROM. При включении устройства и наличии соответствующего файла конфигурации, настройки из файла переносятся в память, а сам файл удаляется.

Скачать сформированные файлы можно в системе ESPsmart Control в разделе "Конфигурация". Для внесения изменений достаточно записать файл/файлы на флеш карту, установить её обратно в устройство и включить его.


Виджеты

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


Правила

Набор правил для управления реле. Правила срабатывают согласно их приоритету сверху вниз. При срабатывании одного правила, правила расположенные ниже для выбранного реле пропускаются.

«Устройство включилось» – условие сработает только при старте устройства.

«Триггер реле» – проверит триггер «принудительное включение реле» на определённое значение или на любое установленное.

«Подключен к Wi-Fi с SSID» – проверит наличие подключения к определённой или любой wifi-сети.

«Соединение с Wi-Fi» - проверит наличие wifi-подключения к любой сети.

«Соединение контроллера с сервером» – проверит наличие соединения с сервером-контроллером.

«Температура» – сравнит температуру термодатчика со значением.

«Шина 1-Wire» – сработает при подключение или отключение термодатчика к 1-Wire шине.

«Время работы устройства» – сравнит время работы устройства со значением (в секундах).

«Переменная» – сравнит значение переменной со значением.

«Кнопка/Сухой контакт» – проверит, нажата/отпущена ли кнопка, либо замкнут или разомкнут сухой контакт.

«Аналоговый датчик» – сравнит данные с аналогового датчика.



События

Cобытия для управления устройством, дисплеем, приводом, GSM-модемом, реле или другими устройствами. События не имеют приоритета и срабатывают в момент самого события. Генерируются различными сущностями (кнопками, реле, различными датчиками и т.п.), могут выполнять различные действия.

«Устройство включилось» – полностью закончилась инициализация при включении устройства

«Устройство подключилось к серверу» – устройство подключилось к серверу управления

«Управление через сеть» – появилось или пропало управление через сеть

«Соединение с Wi-Fi» – появилось или пропало соединение к любой wifi-сети

«Подключилось к Wi-Fi» – устройство успешно подключилось к wifi-сети

«Onewire устройство» – подключение или отключение onewire-устройства

«Реле» - включение или выключение определенного реле

«Кнопка/Сухой контакт (одиночное нажатие)» – одиночное нажатие на кнопку, либо контакт замкнут

«Кнопка/Сухой контакт (двойное нажатие)» – двойное нажатие на кнопку, либо контакт замкнут подобно двойному нажатию

«Кнопка/Сухой контакт (длинное нажатие)» – длинное (не менее 3 сек) нажатие на кнопку, либо контакт замкнут не менее 3 сек

«Переменная (установить значение)» - установка переменной в значение

«Переменная (окончание таймера)» - окончание цикла работы таймера у переменной

«GSM-модем (входящий вызов)» – входящий вызов с определенного или любого номера

«GSM-модем (входящая СМС)» - входящая СМС с определенного или любого номера (событие не генерируется при отправке сообщений вида «info», «relay», «temp», «do …»)

«Устройство» – подключение или отключение другого вашего устройства, которое передаёт вам свои данные

«По времени» - периодичность задания указывается текстовой строкой в том же формате, как и в файле crontab для Unix-систем. Отличие только в использовании секунд. Общий формат – через пробел указываются числами: секунда, минута, час, день месяца, месяц, день недели.

Каждая из этих величин указывается либо явно (например: 1), либо маской «*» (любая цифра), либо диапазоном (например: 5-8). После значения можно указать периодичность через дробь (например: /5). Также можно задать несколько вариантов, разделённых запятыми.

Пример указания каждой величины (например, «секунды»):
1 * * * * * – каждый раз, когда секунда равна «1»,
5-8 * * * * * – если значение секунды лежит в диапазоне от «5» до «8» включительно,
*/5 * * * * * – каждые 5 секунд («0», «5», «10» и т.д.)
4-15/5 * * * * * – каждые 5 секунд, начиная с «4» и заканчивая «15»-ой («4», «9», «14»),
4/5 * * * * * – эквивалентно записи: «4-59/5» - т.е. каждые 5 секунд, начиная с «4»,
5,6,9 * * * * * – только в «5»-ую, «6»-ую и «9»-ую секунды.

Пример «Выполнять каждую минуту»: 1 * * * * *
Пример «Выполнять раз в час в 30-ую минуту»: 0 30 * * * *
Пример «Выполнять каждые 3 минуты»: 0 */3 * * * *
Пример «Выполнять каждый день с 18:00 до 20:00 раз в час»: 0 0 18-20 * * *
Пример «Выполнять в 8:00 в рабочие дни»: 0 0 8 * * 1-5
Пример, который никогда не выполнится: 0 0 1 30 2 *


Действия в событиях

Реле (включить, выключить, переключить) - устанавливает для реле текущее состояние в on, off или переключает между ними.
Реле (включить триггер, выключить триггер, переключить триггер, обнулить триггер) - устанавливает для реле триггер «принудительное включение» в необходимое положение.

Переменная (сбросить) – сбрасывает значение переменной.
Переменная (установить) – устанавливает значение переменной N в X.
Переменная (увеличить на 1 до) – прибавляет к переменной N единицу: если X положительное число, то переменная будет циклично увеличиваться в диапазоне от 0 до X, при отрицательном значении – от X до 0.
Переменная (уменьшить на 1 до) – уменьшает переменную N на единицу: в диапазонах от X до 0 и от 0 до X при положительном и отрицательном X – соответственно.
Переменная (таймаут) – запускает таймер – каждую секунду значение будет увеличиваться в диапазоне от 0 до X, и через X секунд будет сгенерировано само событие, после чего переменная будет сброшена, а таймер остановлен.
Переменная (таймер) - запускает такой же, как и «timeout», таймер, но таймер не будет остановлен, а продолжит циклично генерировать само событие каждые X секунд.

Дисплей (переключить вперед) – переключить на следующую.
Дисплей (переключить назад) – на предыдущую страницу.
Дисплей (автоматическое переключение) – режим авто переключения страниц.

GSM-модуль (звонить) – звонит на указанный номер.
GSM-модуль (отправить смс на номер) - отправит на указанный номер SMS с введенным текстом.
GSM-модуль (сбросить вызов) - сбросит текущий вызов (актуально и для входящих, и для исходящих).
GSM-модуль (перезагрузить) – перезагрузит и переинициализирует модем (перезагрузка самого модема пока не реализована, но все остальные процедуры сброса и переинициализации выполняются).

Отправить на устройство - отправляет на устройство с токеном команду CMD, само устройство должно быть известно нашему устройству, для этого удалённое устройство должно что-либо отправлять нам (данные по датчикам, например).

Подкл. к следующему ssid в списке – переключает wifi к следующей сети из списка.

Перезагрузить устройство – перезагрузка устройства.


Условия в событиях

«Устройство включилось» – условие сработает только при старте устройства.

«Триггер реле» – проверит триггер «принудительное включение реле» на определённое значение или на любое установленное.

«Подключен к Wi-Fi с SSID» – проверит наличие подключения к определённой или любой wifi-сети.

«Соединение с Wi-Fi» - проверит наличие wifi-подключения к любой сети.

«Соединение контроллера с сервером» – проверит наличие соединения с сервером-контроллером.

«Температура» – сравнит температуру термодатчика со значением.

«Шина 1-Wire» – сработает при подключение или отключение термодатчика к 1-Wire шине.

«Время работы устройства» – сравнит время работы устройства со значением (в секундах).

«Переменная» – сравнит значение переменной со значением.

«Кнопка/Сухой контакт» – проверит, нажата/отпущена ли кнопка, либо замкнут или разомкнут сухой контакт.

«Аналоговый датчик» – сравнит данные с аналогового датчика.


Переменные

Переменные хранят какое-то целочисленное значение, которое может применяться в расписании, правилах и событиях, и над которым можно совершать какие-то операции. Максимальное количество задействованных переменных на одном устройстве составляет 254 шт.

Простейшие операции – добавление единицы и убавление на единицу с указанием цикличного предела до определенного предела. Т.е. «увеличивать на 1 до 3» означает, что как только переменная при увеличении превысит значение «3», будет сброшена в «0» и цикл пойдёт сначала.

Переменные могут быть запущены в режиме «таймер» - каждую секунду автоматически будет прибавляться единица, и как только значение достигнет заданной величины, таймер будет остановлен или сброшен в «0» с повторением цикла, а переменная сгенерирует соответствующее событие.

Переменные могут быть запущены в режиме «таймаут» - каждую секунду автоматически переменная будет уменьшаться на 1 единицу от заданной величины, и как только значение достигнет 0, таймаут будет остановлен, а переменная сгенерирует соответствующее событие.

В условиях переменные работают в двух вариантах: можно сравнивать с заданной величиной само значение переменной (больше/меньше/равно) либо можно сравнивать с заданным целым остаток от деления на другое заданное целое.


Оповещение

Оповещения по СМС и электронной почте о состоянии работы устройства, реле и термодатчиков. Оповещение возможно по указанному времени, либо в определенный интервал времени.


1-Wire

1-Wire — двунаправленная шина связи для устройств с низкоскоростной передачей данных.

Датчики DS18B20

Датчики DS18B20 собирают данные температуры из внешней среды и передают её на контроллер. Они постоянно сканируются, а полученные значения их параметров сохраняются в памяти и могут быть использованы в логике управления (правила, события) реле или взаимодействия с другими устройствами.

Для работы с датчиком его необходимо предварительно зарегистрировать в системе. Для этого подключаем его на шину 1-Wire (см. схему подключения ESP8266, ESP32), в случае правильного подключения датчик автоматически инициализируется и появится в списке незарегистрированных датчиков. Присваиваем ему имя и регистрируем в системе.

Ключи RW1990

RW1990 - электронная перезаписываемая заготовка предназначена для копирования ключей-таблеток iButton стандарта Dallas DS1990A. Широко применяются в ключах от домофона.

Для работы с ключом его необходимо предварительно зарегистрировать в системе. Подключаем TM считыватель на шину 1-Wire (см. схему подключения ESP8266, ESP32). Подносим ключ к считывателю и удерживаем 2-3 секунды. Код с ключа автоматически считается устройством и появится в списке незарегистрированных ключей. Далее нажимаем "Добавить в активные".


Статистика

Статистика о состоянии работы реле и датчиков. Для сбора и отражения графиков необходимо предварительно зарегистрировать в системе реле и датчики.


Логи

Отладочная информация в текстовом виде, касающаяся работы устройства.


Примеры

Наша система - это «конструктор» со множеством настроек, который позволяет реализовывать разнообразные сценарии. При первом знакомстве она может показаться сложной, но это не так. В примерах мы постараемся раскрыть различные моменты работы и настройки системы.


Контроллер домофона на ESP8266/ESP32

Наша система поддерживает работу c считывателем для ключей TM (Touch Memory). Подключаем к модулю ESP8266/ESP32 флешкарту с часами, реле для управления дверью и TM считыватель согласно нашей схеме.

1. В разделе «Конфигурация» регистрируем ПИН, которому подключено реле. Назовем его «Входная дверь».

2. Нажимаем "Синхронизировать"

3. Открываем раздел «1-Wire»

4. Подносим и удерживаем ключ к считывателю TM в течении 4 секунд

5. Ключ появится в списке не зарегистрированных ключей

6. Добавляем ключ в систему

7. Переходим в раздел «Переменные»

8. Создадим новую переменную «Замок двери». Она нам понадобится, чтобы включить реле на небольшой промежуток времени и автоматически его отключить

9. Переходим в раздел «Правила». В правилах важно учитывать приоритет, поэтому правило «По умолчанию» всегда одно и должно располагаться ниже остальных правил для реле.

10. Создадим правила для реле «Входная дверь». Если «Переменная» > 0, то «Включить». Если «По умолчанию», то «Отключить».

11. Осталось описать событие. Переходим в раздел «События»

12. Создаем событие. В событии выбираем «1-Wire устройство» → «Входная дверь» → «Появилось на шине»

13. В действии выбираем «Переменную» → «Замок двери» → «Таймаут» → «1»

14. Нажимаем "Синхронизировать"

Принцип работы переменной по «Таймаут» основан на уменьшении её значения на единицу за каждую секунду от заданного значения. В нашем случае переменная изменит свое значение в 0 через 1 секунду. Поэтому наше реле проработает ровно 1 секунду и выключится. Если мы, к примеру, установим значение 5, то переменная будет изменять свое значение каждую итерацию 4, 3, 2, 1, 0 за 5 секунд, что увеличит работу реле уже до 5 секунд. Почему так? Реле включается и выключается, так как есть правила, одно из которых указывает, что если переменная больше 1, то реле необходимо включить, в противном случае, реле всегда выключено.


Освещение на ESP8266/ESP32

Вариантов решений множество. Мы рассмотрим частный случай, позволяющий рассмотреть принципы работы с нашей системой. В рамках примера, мы будем использовать модуль ESP32 с расширителем портов, блок реле, выключатели и аналоговый фоторезистор для измерения освещенности в комнате. Собираем устройство согласно нашей схеме: разводим фазу от реле на освещение, выключатели подключаем (предварительно немного модернизируя их), к аналоговому порту подключаем фоторезистор.

1. В разделе «Конфигурация» в поразделе «Реле» регистрируем пины, к которым подключены наши реле. Называем их «Комната» и «Коридор». В подразделе «Кнопка/Сухой контакт» регистрируем выключатели. Присваиваем им имена «Выключатель комната», «Выключатель коридор» соответственно.

2. В подразделе «Аналоговые датчики» регистрируем наш датчик. Назовём его «Уровень освещенности».

3. В разделе переменная зарегистрируем новую переменную «Принудительное включение».

4. Для управления реле с помощью панели ESPsmart Control добавим виджеты.
Открываем раздел «Виджеты».
Нажимаем кнопку «Добавить виджет»
Создаем виджеты «Форс» для реле «Свет комната», аналогично для «Свет коридор».

Добавим физическое управление реле с помощью выключателей. Переходим в раздел события и добавим новые события.

5. Если произошло событие «Кнопка/сухой контакт» → «Выключатель комната» → «Одиночное нажатие/замыкание», то действие «Реле» → «Свет комната» → «Переключить триггер».

6. Если произошло событие «Кнопка/сухой контакт» → «Выключатель коридор» → «Одиночное нажатие/замыкание», то действие «Реле» → «Свет коридор» → «Переключить триггер».

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

7. Добавим новое события Если произошло событие «Кнопка/сухой контакт» → «Выключатель коридор» → «Длинное нажатие/замыкание», то действие «Реле» → «Свет коридор» → «Отключить триггер». К действию добавим, дополнительное действие «Реле» → «Свет комната» → «Отключить триггер».

8. Аналогично сделаем для выключателя в спальне. Если произошло событие «Кнопка/сухой контакт» → «Выключатель комната» → «Длинное нажатие/замыкание», то действие «Реле» → «Свет коридор» → «Отключить триггер». К действию добавим, дополнительное действие «Реле» → «Свет комната» → «Отключить триггер».

Добавим немного автоматики. Если порог освещенности в комнате превысил определенное значение, а свет включен, то выключим его.

9. Добавим правило для реле «Свет комната» Если «Аналоговый датчик» → «Уровень освещенности» > 2000 → «Отключить», также добавим дополнительное условие к правилу «Состояние реле» → «Состояние включено». Правило расположим выше правил созданных виджетом «Форс», задав ему более высокий приоритет.

Так как правила всегда идут в приоритете над событиями, то при превышении порога освещенности в 2000 мы не сможем включить свет в комнате никаким способом, до тех пор, пока порог освещенности в комнате не опуститься ниже. Что же делать?

10. Добавим к нашему правилу по аналоговому датчику еще одно дополнительное условие. Если «Переменная» → «Принудительное включение» != 1. Теперь добавим новые события, которые будем изменять значение переменной 1/0.

11. Если произошло событие «Кнопка/сухой контакт» → «Выключатель комната» → «Двойное нажатие/замыкание», то действие «Переменная» → «Принудительное включение» → «Установить» → 1. Добавим условие, если «Переменная» → «Принудительное включение» = 0.

12. Если произошло событие «Кнопка/сухой контакт» → «Выключатель комната» → «Двойное нажатие/замыкание», то действие «Переменная» → «Принудительное включение» → «Установить» → 0. Добавим условие, если «Переменная» → «Принудительное включение» = 1.

Таким образом по двойному нажатию на «Выключатель комната» мы будем переключать значение переменной 1/0, другими словами включать/отключать работу по правилу.

В рамках данного примера, хотелось бы еще рассмотреть довольно важное событие «По времени». К примеру, значение переменной «Принудительное включение» мы будем автоматически изменять на 0 ежедневно в 3 часа 15 минут ночи, тем самым активируя работу по правилу для фоторезистора.

13. Добавим новое событие по «По времени» → «0 15 3 * * *», действие «Переменная» → «Принудительное включение» → «Установить» → 0.

14. Нажимаем «Синхронизировать».




Скоро новые примеры...