Класс BaseConnector

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

Атрибуты

_loop - петля событий.

_config_from_platfrom - полная конфигурация, полученная от платформы.

_tag_cache - кэш тегов вида:

{
    "<tag_id>": {
        "JSONataExpr": Jsonata(),
        "last_value": ...
    }
}

Если коннектору нужно дополнить кэш своими данными, то необходимо переопределить метод _create_tag_cache.

_logger - журнал сообщений.

_data_queue - очередь данных для отправки в платформу. Метод _read_tags сам должен помещать новые данные в эту очередь.

Методы

async def _read_tags(self) - абстрактный метод в базовом классе, который необходимо переопределить в классах-наследниках.

Реализует всю работу с источником данных.

Запускается как отдельная задача.

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

Метод должен помещать в очередь _data_queue данные, прочитанные из источника. Формат сообщений:

{
    "data": [
        {
            "tagId": "<tag_id>",
            "data": [
                [value, timestamp, quality_code]
            ]
        }
    ]
}

где:

value - прочитанное из источника значение тега, обязательный параметр;

timestamp - метка времени, обязательный параметр;

quality_code - код качества, необязательный параметр;

При разрыве связи с источником данных метод должен записать для каждого тега значение None с текущей меткой времени и с кодом качества 102 - разрыв связи с источником данных.

async def _create_tag_cache(self, tag_id: str) - метод создания кэша для тега. Метод вызывается в следующих случаях:

  • при старте коннектора, когда для каждого тега из конфигурации создаётся кэш;

  • когда от платформы приходит сообщение о том, что к коннектору привязан новый тег;

  • при изменении конфигурации тега: в этом случае сначала вызывается метод _remove_tag_cache.

Предупреждение

Если тег неактивен (атрибут prsActive = True), то кэше тега не создаётся, хотя метод _create_tag_cache вызывается.

Если при создании кэша тега необходимо сделать дополнительную работу, то переопределение метода должно иметь вид:

async def _create_tag_cache(self, tag_id: str):
    super()._create_tag_cache(tag_id)
    # дополнительная работа

В этом случае гарантируется, что тег tag_id уже находится в списке тегов в конфигурации:

self._config_from_platfrom.tags[tag_id]

async def _remove_tag_cache(self, tag_id: str) - метод вызывается при удалении тега из списка привязанных к коннектору тегов, либо при изменении конфигурации тега: кэш тега удаляется, потом создаётся снова.

Если при удалении тега из списка необходимо сделать какую-либо дополнительную работу, то переопределение метода должно иметь вид:

async def _remove_tag_cache(self, tag_id: str):
    # дополнительная работа

    super()._remove_tag_cache(tag_id)

В этом случае гарантируется, что тег ещё находится в списке и кэш его неудалён.