Учебник по flexible драйверу (Входящие данные)

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

AggreGate включает в себя драйверы для множества различных устройств, что упрощает их интеграцию в систему. В случаях, когда в AggreGate нет драйвера для определенного устройства (например, для устройства, использующего проприетарный протокол), существует несколько вариантов интеграции устройства. Первый вариант - написать плагин для AggreGate на Java, и хотя это просто, но трудоемко. Другой вариант - настроить один или несколько экземпляров flexible драйвера для обработки входящих данных в виде переменных или событий.

Введение в операцию с драйвером

В данном руководстве приведено множество выражений, использующих команду переменной окружения. В различных выражениях на эту переменную ссылается {env/command}. В AggreGate, использующем flexible драйвер, настроенный на получение входящих данных, эта переменная содержит данные, которые были получены и обрабатываются драйвером.

Настроить flexible плагин

Первым шагом будет настройка плагина драйвера Flexible для корректной маршрутизации входящих данных на определенное устройство Flexible драйвер. В корневом контексте откройте контекст Драйверы/расширения и выберите Редактировать свойства драйвера/расширения flexible драйвера.

Вы настроили глобальные конфигурации flexible драйвера на прием TCP-пакетов на порт 55040, интерпретацию каждой полезной нагрузки как кодированной в ASCII и пересылку полезной нагрузки на устройство flexible драйвера с идентификатором "1". В следующем разделе необходимо настроить устройство с идентификатором "1", которое будет далее обрабатывать входящие полезные нагрузки TCP.

Создание устройства

Чтобы создать flexible устройство, нажмите Добавить устройство из контекста Устройства в корневом контексте. Настройте устройство с помощью следующих параметров:

Имя свойства

Значение

Заметки

Драйвер устройства

Flexible

Текущее руководство предназначено для драйвера Flexible

Имя устройства

flexible_incoming

Это будет частью контекстного пути для ссылки на устройство в AggreGate.

Описание устройства

Входящее Flexible

Удобное для пользователя имя устройства.

Подключение

Входящее

Указывает, что данное устройство будет обрабатывать входящие соединения.

Идентификатор устройства

1

Текущее значение принимает строковое значение и должно соответствовать значению, указанному в Выражении результата чтения ID устройства на предыдущем шаге.

На следующем скриншоте показаны приведенные выше конфигурации, введенные в окно "Добавить устройство". Нажмите OK, чтобы сохранить и открыть страницу Свойства аккаунта устройства .

Кликните Отправить, чтобы отправить пакет на устройство с flexible драйвером AggreGate.

Использование Python для отправки пакета

  • Установите Python 3 на ту же машину, на которой запущен сервер AggreGate.

  • Сохраните приведенный ниже пример сценария в файле с именем sendpacket.py:

  • import socket

    # Set up the socket connection
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # Hostname or IP address where server is running
    host = 'localhost'
    # Port where Flexible Driver is configured to listen to incoming data
    port = 55040
    # Start connection
    s.connect((host, port))

    # Send data
    data = b'var: Update data with some arbitrary TCP data.'
    s.sendall(data)

    # Close the connection
    s.close()
  • Запустите сценарий из командной строки командой python3 sendpacket.py

Подтвердите, что пакет был принят устройством с flexible драйвером

  • Откройте контекстное меню устройства из корневого контекста и нажмите Управление устройством...

Используйте реальное имя устройства, созданного ранее в уроке. Если у вас
другое имя, скорректируйте контекстный путь.

Триггер события в flexible устройстве

Мы можем вызвать событие updateData, которое мы настроили выше, вместо обновления переменной, просто изменив данные, отправляемые на устройство.

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

contains({env/command}, "variable") ? 1 : (contains({env/command}, "event") ? 0 : 1)

Текущее выражение сначала проверяет, содержит ли команда строку "переменная". Если да, то оно принимает значение 1, и команда обрабатывается как обновление переменной. Если команда не содержит строку "переменная", выполняется проверка, содержит ли команда строку "событие". Если команда содержит строку "событие", выражение оценивается в 0, и команда обрабатывается как событие. Если ни "переменная", ни "событие" не присутствуют, по умолчанию устанавливается значение 1 и обновляется переменная.

Чтобы вызвать событие, просто измените содержимое тестового пакета так, чтобы оно содержало строку "event" и удалите строку "variable". Например: event: Текущее событие!

Используяотправитель пакетов , обновите данные в формате ASCII и HEX, как указано ниже:

Свойство

Значение

Описание

Имя

Test Packet

Если вы хотите сохранить пакет для повторного использования

ASCII

событие: Текущее событие!

Текст ASCII для отправки.

HEX

65 76 65 6e 74 3a 20 54 68 69 73 20 69 73 20 61 6e 20 65 76 65 6e 74 21

Автоматически закодированное HEX-значение указанного ASCII-текста.

Адрес

localhost

Хост или IP-адрес, на который следует отправить пакет.

Порт

55040

Порт, на который нужно отправить пакет

Задержка повторной отправки

0

Задержка перед повторной отправкой пакета

Тип связи

TCP

Тип соединения с сервером.

При использовании сценария Python обновите переменную данных, как указано ниже:

...
# Send data
data = b'event: Текущее событие!'
...

В Контекстном дереве AggreGate откройте контекстное меню Входящего flexible устройства и выберите Просмотр событий.

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

Отправьте пакет из программы Пакет Отправитель или запустите сценарий Python и убедитесь, что событие сработало:

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

Was this page helpful?