/connectorESP

Typical connector for Peresvet

Primary LanguagePythonMIT LicenseMIT

connectorESP

Типовой коннектор, работающий с платформой Peresvet. Запускается на контроллере ESP32. Логика работы:

websocket

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

Обмен данными с платформой

Коннектор имеет асинхронную процедуру - цикл обмена данными с платформой. В этом же цикле происходит обмен ping/pong с платформой.

Процедура управления

Коннектор имеет основную асинхронную процедуру - цикл управления.

Самостоятельная работа

Коннектор может работать самостоятельно, без платформы Peresvet.

Прерывания

Не используем прерывания от пинов, чтение производим в цикле.

Константы

Логика работы управляющей процедуры коннектора часто связана с использованием каких-либо констант. Поэтому для большей прозрачности работы, для удобства настройки в файле конфигурации вводится секция "consts", содержащая в виде ключ-значение имена констант и их значения.

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

prsTagSource

Каждый тэг в платформе имеет атрибут 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

Файл 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": { }

}

}

start

При запуске коннектор

Обычный вход/выход