Перейти к основному содержимому

Организация совместных данных на сервере

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

Клиенты (смартфоны и планшеты) могут иметь общий доступ к одним и тем же данным на сервере, каждый клиент может изменять совместные данные (shared data) и изменения должны отражаться на сервере и у всех остальные клиентов. Клиенты могут терять связь с сервером, в этом случае актуальность данных невозможно обеспечить, но при подключении данные в клиенте должны автоматически обновиться (синхронизироваться).

Решение: В этом случае разрабатывается один проект для сервера и один или несколько проектов для панелей. Проект сервера интегрируется в каждый проект панели.

Описание примера

На панели имеются два поля "Hours" и "Minutes" для ввода времени. При нажатии на ввод данные отправляются в iRidium server в виртуальные каналы, далее по событию запускается скрипт virtual_to_virtual(), который записывает полученные данные в виртуальные тэги. Время отображается на всех панелях, которые подписаны на данные в этих тэгах. Кроме того, виртуальные тэги сохраняются в базе данных сервера.

Shared_data(1).png

Таким образом каждый клиент (панель) имеет возможность изменять время, все изменения сохраняются в базе данных и в реальном времени отображаются на экране каждого клиента.

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

  1. Создайте проект для сервера.

  2. Перейдите на вкладку I/O и создайте необходимое количество виртуальных каналов и виртуальных тэгов совместных данных (shared data). У каждого канала должен быть соответствующий тэг. Задайте одинаковые имена для соответствующих пар каналов и тэгов.

Virtual.png

  1. Создайте скрипт для шлюзования.
function virtual_to_virtual(in_Type, in_Name, in_Value) {  
IR.SetVariable("Server.Tags." + in_Name, in_Value);
return in_Value;
}

Подробнее:Шлюзование данных между виртуальным каналом и тэгом.

  1. В свойствах виртуальных каналов в параметре Script Modifier укажите функцию шлюзования virtual_to_virtual().

Virtual_channel_params.png

  1. Настройте каждый виртуальный тэг в соответствии с требования задачи.

Virtual_tag_params.png

  • Access: Public

  • Persist: Yes

  • Store in DB: None / Signed 32bit / Float 64bit / String UTF-8

  • DB Save Strategy: Deadband / Interval

Подробнее: Переменные драйвера и сервера.

примечание

Вы можете сохранять тэги в базу данных, но для организации совместных данных это не является обязательным.

  1. Сохраните проект сервера.

Создание и настройка проектов панелей

  1. Создайте проект панели.

  2. Добавьте драйвер для связи с iRidium server и затем укажите файл проекта сервера (проект сервера должен открыт в iRidium studio в этот момент).

Project_integration.png

  1. Выделите драйвер сервера, станет доступна кнопка Sync With Server Project для получения списка всех виртуальных тэгов сервера. Нажмите эту кнопку.

Sync_with_server_project_first.png

Подробнее: Визуализация управления iRidium server

  1. Настройте параметр Save Value When Disconnected - желаемое поведение виртуальных тэгов в панели при отключении от сервера: True - запомнит последнее значение тэга, False - принудительно сделает значение тэга пустым.

Feedback_params.png

  1. Добавьте графические элементы:
  • элементы для ввода данных, например, типа Edit Box,

  • элементы для вывода данных, например, типа Label (Type: Button, Hit: PassThrough).

Shared_data_GUI(1).png

  1. Путём перетаскивания виртуальных каналов драйвера "iRidium Server" на графические элементы для изменения данных свяжите их друг с другом по событию Enter или Release (в зависимости от типа графического элемента).

  2. Путём перетаскивания виртуальных фидбеков драйвера "iRidium Server" на графические элементы для отображения данных свяжите их друг с другом с записью в свойства Text или Value (в зависимости от типа графического элемента).

  3. Задайте IP-адрес сервера.

iridium_server_address.png

  1. Сохраните проект.

;;;note Вы можете создать несколько проектов панели, и можете использовать один и тот же проект для разных устройств, при этом конфликт не возникнет. :::

Запуск проектов

  1. Запустите проекты на устройствах в любом порядке. Вы можете использовать для этого эмулятор i3 pro и iRidium server для Windows.

  2. Вы можете проверить, как ведет отображение данных в случае отключения и повторного подключения клиента к серверу.

  3. Вы можете также попробовать остановить сервер (закрыть приложение сервера), затем снова запустить его и убедиться, что совместные данные сохраняются (при условии, что Persist = Yes).

Синхронизация проектов

Рекомендуется сначала закончить разработку виртуальных каналов и тэгов в проекте сервера и затем начать использовать их в проекте панели. Однако в процессе разработки проекта панели можно вносить изменения в проекте сервера, благодаря следующим возможностям.

  • Обновление виртуальных каналов и тэгов в проекте панели (синхронизация проектов сервера и панели)

Если в процессе разработки проектов панели и сервера изменился состав виртуальных каналов и тэгов в проекте сервера, то изменения не отразятся в проекте панели автоматически, не смотря на то, что проекты интегрированы. Для обновления списка каналов и тэгов необходимо в проекте панели выбрать драйвер сервера, станет доступна кнопка Sync With Server Project . Нажмите её и список виртуальных каналов и тэгов заново считается из проекта сервера.

Sync_with_server_project.png

  • Переименование каналов и тэгов в проекте сервера

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

  • Переименование файла проекта сервера

После переименования файла проекта сервера откройте оба проекта в iRidium studio, затем просто обновите параметр Source Project драйвера сервера в проекте панели.

Source_project.png

  • Раздельная работа с файлами проектов

Так как синхронизация проектов сервера и панели производится вручную, можно работать с проектами по отдельности, например, два разработчика могут работать с проектами на разных компьютерах. Для запуска проекта панели наличие проекта сервера не требуется.