Формат сообщений
----------------
Сообщения от коннектора к платформе
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Запрос на получение полной конфигурации
"""""""""""""""""""""""""""""""""""""""
Сообщение посылается коннектором в платформу каждый раз после установления
связи с ней:

.. code-block:: python

    {
        "action": "prsConnector.get_configuration",
        "data": {
            "id": "<connector_id>"
        }
    }


Запись данных
"""""""""""""
Коннектор в этом сообщении отсылает данные в платформу.

.. code-block:: python

    {
        "action": "prsConnector.data_set.*",
        "data": {
            "data": [
                {
                    "tagId": "<tag_id>",
                    "data": [[], ]
                }
            ]
        }
    }

Сообщения от платформы коннектору
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. _full_config:

Полная конфигурация
"""""""""""""""""""
Это сообщение приходит коннектору в ответ на его запрос конфигурации.

.. code-block:: python

    {
        "action": "prsConnector.full_configuration",
        "data": {
            "prsActive": True,          # флаг активности коннектора, если = False, коннектор ничего не должен делать,
                                        # только ожидать от платформы сообщения с конфигурацией,
                                        # где этот флаг будет = True
            "prsEntityTypeCode": None,  # тип коннектора. Этот параметр никак не используется базовым классом коннектора.
                                        # в классах-наследниках может использоваться по любому усмотрению.
            "prsJsonConfigString": {    # базовая конфигурация коннектора. Если классам-наследникам необходима
                                        # дополнительная информация в конфигурации, её необходимо включать именно в этот
                                        # ключ.
                "source": {},           # способ подключения к источнику данных. Формат данного ключа целиком зависит
                                        # от конкретной реализации коннектора и должен быть описан в его документации.
                "log": {                # конфигурация журнала логов
                    "level": "INFO",
                    "fileName": "logs/prs_connector.log",
                    "maxBytes": 10485760,
                    "backupCount": 10
                }
            },
            "tags": {                                           # список тегов, привязанных к коннектору
                "<tag_id>": {                                   # идентификатор тега
                    "prsActive": True,                          # флаг активности тега
                    "prsJsonConfigString": {                    # информация по работе с тегом.
                                                                # Если классам-наследникам необходима дополнительная
                                                                # информация, то её необходимо включать в этот ключ.
                        "source": {},                           # способ получения данных тега из источника.
                                                                # Формат данного ключа целиком зависит
                                                                # от конкретной реализации коннектора и
                                                                # должен быть описан в его документации.
                        "maxDev": 0.5,                          # минимальное значимое отклонение значения
                        "JSONata": "<some jsonata expression>"  # выражение на языке JSONata, которое будет применено к
                                                                # считанным из источника данным
                    },
                    "prsValueTypeCode": 1                       # тип значений тега:
                                                                # 0 = int,
                                                                # 1 = float,
                                                                # 2 = str
                                                                # 4 = json
                }
            }
        }
    }

Изменение конфигурации коннектора
"""""""""""""""""""""""""""""""""
Коннектор получает это сообщение в случае, когда меняется его конфигурация в платформе.

.. code-block:: python

    {
        "action": "prsConnector.connector_configuration",
        "data": {
            "prsActive": True,
            "prsEntityTypeCode": None,
            "prsJsonConfigString": {
                "source": {},
                "log": {
                    "level": "INFO",
                    "fileName": "logs/prs_connector.log",
                    "maxBytes": 10485760,
                    "backupCount": 10
                }
            }
        }
    }

Удаление коннектора
"""""""""""""""""""
Коннектор получает это сообщение в случае, когда он удалён из иерархии.

.. code-block:: python

    {
        "action": "prsConnector.deleted",
        "data": {
            "id": "<UUID>"
        }
    }

Добавление нового тега(-ов) или изменение конфигурации тега(-ов)
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Коннектор получает данное сообщение, если в список тегов, по которым он должен получать сообщение,
добавляются новые теги или меняется конфигурация по существующим в списке тегам.

.. code-block:: python

    {
        "action": "prsConnector.tags_configuration",
        "data": {
            "tags": {
                "<tag_id>": {
                    "prsActive": True,
                    "prsJsonConfigString": {
                        "source": {},
                        "maxDev": 0.5,
                        "JSONata": "<some jsonata expression>"
                    },
                    "prsValueTypeCode": 1
                }
            }
        }
    }

Удаление тегов из списка
""""""""""""""""""""""""
Коннектор получает данное сообщение, если из списка тегов удаляются какие-либо теги.

.. code-block:: python

    {
        "action": "prsConnector.tags_deleted",
        "data": {
            "tags": ["<tag_id1>", "<tag_id2>"]
        }
    }
