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

Локальный сервер представяет собой автономно работающий сервис под ОС семейства 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.

Пользователи и права доступа

Локальный сервер работает в многопользовательском режиме, при котором есть множество пользователей с возможностью объединения в группы. Каждым устройством владеет какой-то пользователь, при этом владелец устройства может управлять разрешениями на доступ к устройству других пользователей.

После первого запуска ЛС автоматически будет добавлен суперпользователь с id 0 и именем root, но не будет задан его пароль, поэтому подключиться удаленно не получится. Суперпользователь имеет доступ ко всем устройствам, пользователям и группам на сервере.

При работе с сервером с помощью консольного клиента на том же ПК, где установлен сам локальный сервер, автоматически происходит идентификация суперпользователя без необходимости ввода пароля. При работе с сервером удаленно по сети TC/IP (например, из приложения для ОС Windows) нужно явно указывать имя и пароль пользователя.

 

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

Все настройки сервера делатся на две группы системные и внутренние. Системные находятся в файле /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 пакетов, сигнализирующих о присутствии ЛС в локальной сети.
  11. Управление пользователями и правами доступа к устройствам.

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

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

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

Инструкции

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