UDP сервер сбора GPS данных

Данное программное обеспечение распространяется на условиях лицензии GPL3+

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

Данное программное обеспечение используется совместно со следующим клиентом, или аналогичным, который передаёт информацию по протоколу UDP в следующем формате:

  1. UID пользователя
  2. Время от начала эпохи UNIX (секунды)
  3. Широта (градусы и доли градуса)
  4. Долгота (градусы и доли градуса)
  5. Скорость (м/с)
  6. Азимут (градусы)
  7. Точность (метры)
  8. Высота (метры)
  9. Набор флагов (два числа) первое число: 0 - GPS точка, 1 - GSM точка; второе число: 0 - точка из кеша, 1 - сквозная точка, не из кеша
  10. Заряд батареи (%), также в этом поле передаются события: включение трекера - 127, cоединение с интернет - 109, подключение зарядного устройства - 107, подключение устройства по USB - 108, отключение от интернет - 105, запуск сервиса gpsmta - 110, переключение питания на аккумулятор - 106.
  11. Температура батареи (градусы Цельсия)
  12. Статус батареи: 1 - заряжается, 0 - не заряжается
  13. Вторая линия: не используется и всегда 0

Пример содержимого UDP пакета от клиента: 123456789 1401610649 45.32175 32.14598 25 139 25 115 00 75 25 0 0

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

Пример содержания UDP пакета от сервера: 1401610649

Использование: gpsdgs [ПАРАМЕТР]
        --version – отображение номера версии gpsdgs и завершение
        --debug – включение вывода отладочных сообщений в стандартный выход
        --help – отображение этой подсказки и завершение

/etc/gpsdgs.conf — файл параметров. При отсутствии файл будет сформирован при первом запуске со значениями по умолчанию (требуются привилегии root):
Значения по умолчанию:
        debug=1 – режима отладки (приоритет ниже чем у параметра командной строки)
        udpport=5300 – порт UDP
        dbname=gpsdata – используемая база данных
        dbhost=localhost – адрес сервера postgresql
        dbport=5432 – порт сервера postgresql
        dbuser=gpsuser – пользователь для подключения к базе данных
        dbpass=gpsu – пароль для подключения к базе данных

Ошибки:

  1. Если в UDP пакете поля идентификатора пользователя и штампа времени содержат данные, которые уже соответствуют какой-либо записи в таблице, то ответный пакет отправляется. Но, эта проверка производится некорректно.

Cвяжитесь с Татарко Михаил для исправления ошибок и опечаток.

Скачать

gpsdgs-1.0.4

Тестирование

Добавьте тестового пользователя с uid=0 в таблицу users:

INSERT INTO users VALUES (0,' ',' ',' ',' ',1,0);

Используйте gpsdgs-bench для тестирования:

gpsdgs-bench <домен или ip адрес> <udp порт> [количество пакетов (1-1000, умолчание=50)]

Клиент отправляет пакеты очень быстро и повторяет отправку пока не получит ответ от сервера. Не удивляйтесь, что пакетов отправляется намного больше, чем принимается.

~ # gpsdgs-bench lumi.pw 5300 1000
Connect to: 194.87.92.77:5300
current:783	total:25898	receive:1000	left:0
Client send 25898 request at 3.393917s. (~7630.711 rps)
Server send 1000 answer at 3.393877s. (~294.648 aps)

Затем удалите мусор из таблиц users и data:

DELETE FROM users WHERE uid='0';
DELETE FROM data WHERE uid='0';

Coverity Scan Build Status