Usm gps 2

Материал из WiKi - UserSide

Описание

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

Вторая версия модуля отличается от первой версии своей внутренней структурой. Теперь для каждого из GPS протоколов запускается свой независимый "слушатель", а в качестве сетевого ядра используется мощный асинхронный суперсервер, способный обрабатывать сотни тысяч TCP-соединений одновременно. Это делает модуль довольно стабильным и надежным.

Соглашение

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

Требования

Для работы предрелизной версии (alpha, beta) необходима версия USERSIDE не ниже 3.12.24

Для работы релизной версии (RC, release) необходима версия USERSIDE не ниже 3.13 (еще в разработке)

Поддерживаемые протоколы GPS-трекеров

На данный момент модуль поддерживает работу восьми протоколов. Ниже перечислены протоколы и модели GPS-устройств, работающих по этим протоколам.

OsmAnd

Порт по умолчанию: 5055

Поддерживаемые устройства: Данный протокол используется в основном мобильными приложениями, такими как OsmAnd, SendLocation, Locus Pro Android, Custodium, Traccar

GT02A

Порт по умолчанию: 5022

Поддерживаемые устройства: Данный протокол реализован в большом количестве "китайских" устройств, так что точно составить их список довольно сложно. Однако это один из самых распространенных протоколов, встречающихся в дешевых GPS-трекерах типа noname.

GT06

Порт по умолчанию: 5023

Поддерживаемые устройства: GT06, GT06N, GT09, Heacent 908, GT03A, GT03B, GS503, ET100, GT100, GT06D, GK301, JM01, JM08, GT02D, IB-GT102, CRX1, JV200, TP06A, BW08, TR06, JI09, Concox GT300, WeTrack 2

Meiligao

Порт по умолчанию: 5009

Поддерживаемые устройства: GT30i, GT60, VT300, VT310, VT400, GT30, GT30X, PST-AVL01, PT03, PT60, PT300X, PT30, GT-110P, GT-110K, GT-110M, GT-110ES, GT-110ZS, AVL-011, VT900, P008, GT 30, CT01, CT03, CT04, CT04-R, CT04-X, OCT600, MT01, MT02, PT01, PT03, VT1000, GSY007, T200, iStartek, VT310N

Autofon v4

Порт по умолчанию: 5079

Поддерживаемые устройства: AutoFon 4.4, AutoFon 4.5

Autofon v5

Порт по умолчанию: 5077

Поддерживаемые устройства: AutoFon SE, AutoFon SE+, AutoFon D, AutoFon D-Moto, AutoFon Dialog Mayak, AutoFon S, AutoFon GL Mayak

Autofon v7

Порт по умолчанию: 5099

Поддерживаемые устройства: AutoFon Alpha, AutoFon Alpha XL, AutoFon Alpha 2XL

Wialon

Порт по умолчанию: 5039

Поддерживаемые устройства: Wialon IPS, MasterKit, MasterKit BM8009, NeoTech TR­1000, а также по данному протоколу передает навигационную информацию сервис uonline.com.ua (если у вас есть трекеры, подключенные к этому сервису, то он может выступать в роли прокси-сервера, передавая информацию в модуль usm_gps_2)

OKO-NAVI

Порт по умолчанию: 5098

Поддерживаемые устройства: Все устройства компании OKO

MikroTik

Порт по умолчанию: 5200

Поддерживаемые устройства: Все, оснащенные модулем GSP, например, LtAP mini Протокол основан на передаче в HTTP-POST запросе данных в виде JSON:

{
  "tracker_id": "12345678",
  "lat": "N 12 34' 5.678",
  "lon": "E 87 65' 4.321",
  "speed": "1.234567 km/h",
  "heading": "128.039993 deg. True",
  "hdop": 122
}

Поэтому может использоваться не только для MikroTik.

Простейший скрипт, который следует добавить в планировщик MikroTik, предварительно изменив значения первых трех переменных:

{
:local trackerID "12345678" 
:local url "http://usm_gps-url-here/" 
:local port 5200
:local lat
:local lon
:local spd
:local heading
:local hdop
/system gps monitor once do={
    :set $lat $("latitude")
    :set $lon $("longitude")
    :set $spd $("speed")
    :set $heading $("true-bearing")
    :set $hdop $("horizontal-dilution")
}

/tool fetch mode=http url=$url port=$port http-method=post http-content-type="application/json" \
http-data=("{\"tracker_id\": \"".$trackerID."\",\"lat\": \"".$lat."\",\"lon\": \"".$lon."\",\"speed\": \"".$spd."\",\"heading\": \"".$heading."\",\"hdop\": 
\"".$hdop."\"}")
}

H02

Порт по умолчанию: 5013

Поддерживаемые устройства: H02, H-02A, H-02B, TX-2, H-06, H08, GTLT3, TK110, NT201, NT202, S31, LK109, LK106, LK208, LK206, LK310, LK206A, LK206B, MI-G6, CC830, CCTR, CCTR-630, AT-18, GRTQ, LK210

Установка модуля

Загрузка

Загрузите модуль из личного кабинета со страницы загрузок: http://my.userside.eu/customer/downloads Обратите внимание, что вам нужна именно вторая версия модуля usm_gps_2.x.x.

Разархивируйте содержимое архива, например, в каталог /var/userside/. В конечном итоге в каталоге /var/userside/ будет образован каталог usm_gps_2, содержащий файлы модуля. В дальнейших инструкциях будет использоваться именно каталог /var/userside/usm_gps_2. Если Вы расположили файлы в другом месте - учитывайте это при выполнении дальнейших инструкций.

Остановка и удаление старой версии

Удалите записи в crontab, относящиеся к старой версии модуля us_gps или usm_gps для Traccar. Остановите работу этих модулей. Убедитесь, что модули выгружены из памяти, а порт 5005, используемый старой версией модуля, не занят.

Файлы старой версии пока что лучше не удалять, пока не закончено тестирование новой версии модуля.

Установка Python3 и зависимостей

Для работы модуля необходим Python3. Минимальная версия, с которой работает модуль, пока неизвестна. Но лучше все же использовать последнюю версию, или хотя бы версию не ниже 3.4. Дальше будут указаны инструкции на примере Debian-like дистрибутивов Linux.

Установите python3, а также пакет python3-dev:

   sudo apt install -y python3 python3-dev

Установите пакетный менеджер pip3 любым из приведенных способов на выбор (какой сработает на вашем дистрибутиве):

   sudo python3 -m ensurepip
   sudo apt install python3-pip

Убедитесь, что вам доступны команды python3 -V (отобразит версию Python) и pip3 -V (отобразит версию пакетного менеджера). Если при вызове этих команд возникли проблемы (команда не найдена), то необходимо создать соответствующие символические ссылки для бинарных файлов, например, для python3.5 создать симлинк python3 - такое может быть в некоторых дистрибутивах или в FreeBSD.

Установите зависимости. Для этого необходимо перейти в каталог с файлами:

   cd /var/userside/usm_gps_2

Самый простой способ - установить зависимости глобально, как показано далее:

   pip3 install -r requirements.txt

Эта команда установит зависимости глобально в автоматическом режиме.

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

Настройка

Если это первая установка модуля usm_gps_2, то вам необходимо скопировать файл с примером конфигурации settings.ini-example под новым именем settings.ini:

   cp settings.ini-example settings.ini

Если же вы обновляете модуль usm_gps_2, то проверьте файл settings.ini-example на наличие новых параметров и добавьте их в свой settings.ini с нужными значениями.

Блок api

Данный блок содержит настройки подключения к ядру USERSIDE по средством API. Вам необходимо указать url вашего USERSIDE (без /oper/), а также key, который вы указали в конфигурационном файле userside/userside3/main/config/config.php в переменной $zapikey. Если ваш USERSIDE использует https соединение с самоподписанным сертификатом, то установите опцию ssl_verify в значение no.

Опция trackers_auth_required определяет необходимость аутентификации трекеров на сервере. Если она установлена в yes, то трекерам с серийными номерами (или IMEI), отсутствующими в USERSIDE, будет отказано в авторизации и данные с них не будут попадать в базу. Это рекомендуемый режим, необходимый для отсеивания трекеров, не зарегистрированных в системе. Если вам такое поведение не подходит, можете отключить аутентификацию трекеров, установив данную опцию в no.

Опция hdop_threshold определяет пороговое значения для значения фактора потери горизонтальной точности позиционирования (HDOP). По умолчанию предустановленное значение = 10. Все полученные от трекера навигационные данные со значением HDOP выше порогового будут отброшены и не будут передаваться в USERSIDE. Вы можете настроить это пороговое значение на свое усмотрение, либо отключить, установив его значение в 100. Следующие значения HDOP принято считать стандартными: <1 - Идеально, 1..2 - Отлично, 2..5 - Хорошо, 5..10 - Посредственно, 10..20 - Плохо, >20 - Очень плохо. Чтобы в базу данных попадали только точки с нормальной точностью, установите пороговое значение в 5. При этом следует понимать, что если координаты были определены с погрешностью, превышающей указанный фактор потери точности, то эти координаты будут отброшены (в лог-файл попадет соответствующая запись об этом). Если протоколом GPS-трекера не предусмотрено вычисление и передача значения фактора потери точности в сторону сервера, то это значение принимается за 0.

Блок log

В данном блоке находятся настройки журналирования событий.

Опция path определяет путь к каталогу, в котором будет размещаться файл журнала модуля. Опция level определяет уровень журналирования от самого детального (для отладки) 1 до "критического" 5. Однако не рекомендуется в данном модуле использовать уровень журналирования выше 3 и лучше остановиться на выбранном по умолчанию уровне 2.

Опция to_console определяет назначение вывода событий журнала. Если опция включена (установлена в yes), то все журнальные записи будут выведены в консоль. Это может быть удобно при отладке модуля, а также является стандартным поведением для работы модуля в контейнере Docker. По умолчанию используется no.

Блок port

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

Также можно закомментировать неиспользуемые порты при помощи символов # или ; чтобы отключить работу протоколов. Например, если все ваши трекеры взаимодействуют по одному и тому же протоколу.

Первый запуск и отладка

Если вы первый раз запускаете модуль usm_gps_2, а также если возникли проблемы в работе, то выполните следующие действия.

  • В файле settings.ini в блоке log установите следующие значения:
   [log]
   level = 1
   to_console = yes
  • Запустите модуль вручную (предварительно убедившись, что модуль не загружен, а также супервизор отключен в crontab):
   python3 usm_gps.py
  • Вы должны увидеть в консоли примерно следующее:
   2018-04-25 12:37:16,604 | INFO     | *** Module usm_gps version 2.0.0-alpha-3 is starting...
   2018-04-25 12:37:16,801 | INFO     | GT02A protocol listener started at port 8822
   2018-04-25 12:37:16,802 | INFO     | GT06 protocol listener started at port 8833
   2018-04-25 12:37:16,802 | INFO     | MEILIGAO protocol listener started at port 8844
   2018-04-25 12:37:16,803 | INFO     | AUTOFON4 protocol listener started at port 8854
   2018-04-25 12:37:16,804 | INFO     | AUTOFON5 protocol listener started at port 8855
   2018-04-25 12:37:16,804 | INFO     | AUTOFON7 protocol listener started at port 8856
   2018-04-25 12:37:16,805 | INFO     | WIALON protocol listener started at port 8866
   2018-04-25 12:37:16,806 | INFO     | TELTONIKA protocol listener started at port 8877
   2018-04-25 12:37:16,806 | INFO     | OSMAND (Traccar) protocol listener started at port 5055
   2018-04-25 12:37:16,807 | INFO     | *** Module usm_gps was started and ready to receive connections. PID=13878
  • Подождите, пока трекеры начнут подключаться к модулю. Информацию об этом процессе вы будете наблюдать в консоли. Если подключение происходит корректно, авторизация трекеров выполняется верно, трекеры начинают присылать информацию, которая передается в USERSIDE корректно, то можно считать, что тестовый запуск прошел успешно. Если возникают какие-то проблемы на данном этапе, обратитесь пожалуйста в службу поддержки создав тикет или задайте вопрос сообществу в нашей Телеграм-группе.
  • Остановите работу модуля клавишами ctrl+c и восстановите настройки блока log файла settings.ini:
   [log]
   level = 2
   to_console = no

Теперь модуль готов к эксплуатации.

Эксплуатация модуля

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

Модуль рассчитан на постоянное функционирование. Предполагается, что модуль постоянно находится в оперативной памяти и постоянно обслуживает соединение. Но контроль правильности этого процесса все же необходим.

  • Убедитесь, что модуль остановлен после тестового запуска и выполните запуск модуля через супервизор:
   python3 usm_gps_supervisor.py
  • Супервизор попытается определить наличие модуля в оперативной памяти, но, так как его там нет, он произведет запуск модуля, о чем сообщит в консоль сообщением вроде:
   Process #### not found. Restarting.
  • Убедитесь, что модуль загрузился и работает:
   ps -p `cat usm_gps.pid`
  • Также проверьте, что файл журнала создался и в него выполнены первые записи:
   tail /var/log/userside/usm_gps.log
  • После этого запустите супервизор еще раз и убедитесь, что он просто завершил работу, ничего не написав в консоль:
   python3 usm_gps_supervisor.py

Теперь можно настроить автоматический запуск супервизора.

Автоматический запуск супервизора

Просто добавьте в crontab запись, запускающую супервизор раз в 10 минут.

   */10 * * * *    root    python3 /путь_к_модулю/usm_gps_supervisor.py >> /var/log/userside/usm_gps_cron.log 2 >> /var/log/userside/usm_gps_cron_error.log

По мере работы супервизора будут созданы дополнительные файлы журналов usm_gps_cron.log и usm_gps_cron_error.log, в которые будет записываться информация о работе супервизора. По содержимому этих файлов можно будет определить факт перезагрузки модуля, что может быть вызвано падением модуля или перезагрузкой системы. Эта информация может пригодиться для диагностики проблем работы модуля.

Не забудьте настроить ротацию логов для каталога /var/log/userside

TL;DR

  • Убедитесь, что версия USERSIDE не ниже 3.12.24 для модуля версий v2.0.0-alpha, v2.0.0-beta или не ниже 3.13 для модулей версий v2.0.0-RC и релиза.
  • Скачайте модуль usm_gps_2 v2.0.0 из личного кабинета и извлеките из архива в /var/userside (или любую другу по вашему усмотрению). В итоге файлы модуля должны находиться в /var/userside/usm_gps_2. Перейдите в этот каталог.
  • Установите python3, python3-dev, pip3
   sudo apt install -y python3 python3-dev python3-pip
  • Важно. Проверьте доступность символической ссылки python3, выполнив:
   python3 -V
  • Если символическая ссылка не доступна, создайте ее вручную (например, если у вас pyhon версии 3.5):
   ln -s /usr/bin/python3.5 /usr/bin/python3
  • Скопируйте пример конфигурационного файла с именем settings.ini
   cp settings.ini-example settings.ini
  • Настройте settings-ini. Укажите параметры подключения к API Userside, настройте номера портов. Порты не должны повторяться. Неиспользуемые протоколы можно закомментировать.
  • Для тестового запуска настройте settings.ini таким образом, чтобы журнал выводился в консоль в полной детализации:
   [log]
   level = 1
   to_console = yes
  • Запустите модуль и убедитесь, что все слушатели протоколов, необходимые вам, запустились на нужных портах. Это будет видно в журнале, который выводится в консоль:
   python3 usm_gps.py
  • Убедитесь, что ваши трекеры подключаются к модулю, авторизация трекеров проходит успешно и данные с модуля попадают в USERSIDE. Если что-то работает не так, как ожидалось, обратитесь в техподдержку или к сообществу в Телеграме.
  • Если все работает верно, остановите работу модуля ctrl+c и верните настройки журналирования в settings.ini:
   [log]
   level = 2
   to_console = no
  • Теперь больше никогда не запускайте модуль вручную. Для этого существует супервизор. Запустите супервизор. Он отработает, запустит модуль и завершит свою работу.
   python3 usm_gps_supervisor.py
  • Убедитесь, что модуль запустился, логи пишутся, трекеры соединились и начинают взаимодействовать, в Userside появилась информация:
   ps -p `cat usm_gps.pid`
   tail -f /var/log/userside/usm_gps.log
  • Если все в порядке - добавляйте супервизор (не модуль) в cron раз в 10 минут. Он будет проверять наличие модуля в оперативной памяти и запускать его, если он вдруг не окажется там.
   */10 * * * *    root    python3 /путь_к_модулю/usm_gps_supervisor.py >> /var/log/userside/usm_gps_cron.log 2 >> /var/log/userside/usm_gps_cron_error.log
  • Настройте ротацию логов