Общее описание локального сервера

Локальный сервер представяет собой автономно работающий сервис под ОС семейства Linux (так называемый демон). Задачи, выполняемые локальным сервером:

  1. Подключение устройств по USB и TCP/IP (порт 4081 без шифрования и порт 4082 с SSL). По USB подключаются устройства, представленные в системе как виртуальные COM порты. Так же возможно подключение устройств через реальные COM порты, если они присутствуют в системе. По TCP/IP можно подключать конкретные устройства по имени хоста или IP адресу. Кроме того, можно настроить рассылку широковещательных сообщений о наличии сервера в сети (используется UDP порт 4081). При этом устройства могут обрабатывать такие сообщения и подключаться к локальному серверу самостоятельно.
  2. Сбор данных с датчиков. Под каждый датчик, данные с которого необходимо собрать и обработать, создается отдельное хранилище. При этом в зависимости от необходимости хранилища могут быть разных типов:
    1. Непрерывные. Данные пишутся непрерывно по мере поступления с устройства.
    2. Сессионные. Могут быть автоматическими или ручными, но использовать автоматические на локальном сервере как правило нет необходимости. Данные записываются в хранилище только после создания и открытия на запись отдельной сессии, имеющей свое имя и атрибуты. После остановки сессии запись данных прекращается. Данный тип хранилищ хорошо подходит для записи данных экспериментов или, например, лабораторных работ.
    3. Хранение последних N значений. Запись ведется непрерывно, но хранится только фиксированное число последних значений. При поступлении новых данных наиболее старые удаляются.
    4. Хранение последних N значений в памяти. Работает аналогично предыдущему типу, но данные хранятся в оперативной памяти и не записываются на диск вообще. Подходит для случаев, когда локальный просмотр и обработка данных не предполагаются.
  3. Подключение клиентских приложений локально (unix-сокет /tmp/wliotproxyd) или по протоколу TCP/IP (порт 4083 с обязательным шифрованием SSL).
  4. Экспорт собираемых данных во внешние сервисы, такие как облачный сервер Alterozoom, Thingspeak, Amazon и т.д. В некоторых случаях поддерживается также получение команд для устройств от внешнего сервиса.
  5. Локальная обработка данных. На данный момент поддерживается два способа локальной обработки поступающих данных: обработка внутри самого сервера с помощью скриптов, написанных на языке javascript, и обработка в отдельном приложении, подключающемся к локальному серверу как клиент и получающему уведомления о появлении новых данных. Для второго варианта разработана клиентская библиотека на языке С++ с использованием фреймворка Qt.

Файл настроек

Все настройки сервера делатся на две группы системные и внутренние. Системные находятся в файле /etc/wliotproxyd.ini, внутренние распределены по файлам в рабочей директории /var/lib/wliotproxyd. Как правило, вручную редактировать внутренние настройки нет необходимости, так как для их изменения существуют специальные команды сервера. Наоборот, системные настройки редактируются внешним текстовым редактором ОС и как правило только из-под аккаунта системного администратора.

Файл системных настроек представляет собой документ в .ini формате. Ниже приведен пример файла настроек.

[common]
server_name="Test server"
user=
group=

;address, 127.0.0.1 - local, 255.255.255.255 - broadcast
data_udp_export_address=127.0.0.1

;ssl vertificate and key
;to generate self-signed certificate, use openssl command, for example:
;$ openssl genrsa -out <key_file> 2048
;$ openssl req -x509 -new -key <key_file> -days 10000 -out <crt_file>
networkCrt=/etc/pki/tls/certs/wliotproxy.crt
networkKey=/etc/pki/tls/private/wliotproxy.key

Для интеграции локального сервера в ОС предоставлен файл wliotproxyd.service, при помощи которого можно зарегистрировать ЛС как сервис systemd и автоматически запускать ЛС при старте системы.

Консольный клиент и его команды

Для управления локальным сервером из командной строки Linux был разработан специальный консольный клиент wliotproxy. Он позволяет подключиться и управлять локальным или удаленным сервером. С использованием консольного клиента доступны следующие возможности:

  1. Подключение COM и TCP/IP устройств.
  2. Запрос для устройства списка датчиков и списка поддерживаемых команд.
  3. Отправка команд устройствам.
  4. Создание/удаление хранилищ, редактирование атрибутов хранилищ.
  5. Запрос данных из хранилищ.
  6. Управление сессиями для сессионных хранилищ, создание, запуск, остановка, удаление сессий, редактирование атрибутов сессий.
  7. Настройка экспорта данных из хранилищ во внешние сервисы.
  8. Регистрация виртуальных устройств и генерация измерених от них.
  9. Управление скриптами обработки данных.
  10. Управление внутренней конфигурацией сервера:
    1. Запрос и установка фильтра имен COM-портов, которые будут автоматически подключаться сервером при появлении.
    2. Запрос и установка списка TCP/IP устройств, которые будут автоматически подключаться сервером.
    3. Включение и выключение рассылки широковещательных UDP пакетов, сигнализирующих о присутствии ЛС в локальной сети.

В консольном клиенте присутствует строенная справка. Список команд клиента можно получить, выполнив
$wliotproxy --help

Здесь и в последующих примерах команд символ $ является приглашением командной строки в ОС Linux, который отображается, когда командная строка ожидает ввода команды пользователем. С клавиатуры его вводить не нужно.

Для получения справки по отдельной команде нужно выполнить
$wliotproxy --help <command>
или
$wliotproxy <command> --help
где "<command>" заменяется на конкретную команду.
Для упрощения работы с консольным клиентом прилагается файл wliotproxy_bash_completion.sh, который является скриптом автодополнения для bash_completion и должен быть положен в соответствующую папку с подобными скриптами (зависит от дистрибутива, например /etc/bash_completion.d/).

Инструкции

  1. Сборка и настройка локального сервера
  2. Управление локальным сервером с помощью консольного клиента