Типовой коннектор, работающий с платформой Peresvet. Запускается на контроллере ESP32. Логика работы:
При запуске коннектор по вебсокету устанавливает связь с платформой. Общение с платформой происходит по этому каналу.
Коннектор имеет асинхронную процедуру - цикл обмена данными с платформой. В этом же цикле происходит обмен ping/pong с платформой.
Коннектор имеет основную асинхронную процедуру - цикл управления.
Коннектор может работать самостоятельно, без платформы Peresvet.
Не используем прерывания от пинов, чтение производим в цикле.
Логика работы управляющей процедуры коннектора часто связана с использованием каких-либо констант. Поэтому для большей прозрачности работы, для удобства настройки в файле конфигурации вводится секция "consts", содержащая в виде ключ-значение имена констант и их значения.
Пример: контроллер управляет включением/выключением обогрева. Соответственно, в виде констант задаются две температуры: минимальная температура, при которой включается отопление и максимальная, при которой выключается.
Каждый тэг в платформе имеет атрибут prsTagSource. Атрибут предназначен для коннекторов и содержит конфигурацию, которая объясняет коннектору, как получать данные для данного тэга. Соответственно, формат атрибута для каждого типа коннектора - свой.
Для ESP-коннектора атрибут prsTagSource
должен представлять из себя json-конфигурацию со следующими ключами:
type
- тип тэга; возможные значения:const
,ds18B20
; значение по умолчанию -pin
;id
- идентификатор; для разных типов тэгов имеет разный смысл;refresh
- частота в миллисекундах, с которой будет считываться значение с пина (в случае, если режим пина - Pin.OUT)maxDev
- значимое отклонение между значениями тэга; допустим, тэг хранит значение температуры и нас интересуют значения, которые будут отличаться друг от друга минимум на 0,5 градуса, тогда присваиваем этому параметру значение 0.5 и если очередное считанное значение отличается от предыдущего переданного в платформу Peresvet меньше, чем на 0.5, то такое значение просто будет проигнорировано;pin
- параметры тэга, передаваемые в конструктор класса Pin; возможные ключи:id
- pin id;mode
- 1 (IN), 3 (OUT) (другие режимы пока не поддерживаются)value
- значение, записываемое в пин при инициализации (действительно для Pin.OUT режима);pull
- тип сопротивления при его наличии у пина: None, 2 (PULL_UP), 1 (PULL_DOWN);
Примеры возможных значений атрибута prsTagSource
для ESP-коннектора.
{
"type": "const",
"id": "const_name"
}
Тэг хранит значение константы const_name
. В случае, если от платформы приходит команда записи данных в такой тэг, то меняется значение константы
на контроллере.
{
"pin": {
"id": 5,
"mode": 1
}
}
Датчик температуры DS18B20:
{
"type": "ds18B20",
"id": [1, 2, 3, 4, 6, 7, 8],
"pin": {
"id": 15
}
}
Файл config.json имеет вид:
- {
"id": "<connector's id>", "server": "ws://<server>:<port>", "consts": {
"low_vent_temperature": 27, "high_vent_temperature": 32, "low_heat_temperature": 3, "high_heat_temperature": 5
}, "tags": {
"temperature": { }
}
}
При запуске коннектор
Обычный вход/выход