Меню

Gps server своими руками

GPS-трекер для авто с отправкой данных на сервер с использованием GSM/GPRS шилда

Создаем GPS-трекер для авто. Необходимый функционал:

  1. отправка GPS-данных по GSM/GPRS на интернет-сайт с сохранением в базе данных;
  2. просмотр маршрута авто за определенный интервал времени на web-странице с использованием Яндекс.Карт;
  3. просмотр в реальном времени текущего положения авто на web-странице с использованием Яндекс.Карт.

2) SIM900 GSM/GPRS шилд для Arduino (бесплатно предоставлен сервисом ЖелеZona). Стоит около 20$

Начнем с описания модуля SIM900 GSM/GPRS.

Arduino GPRS/GSM Shield предоставляет вам возможность использовать сеть мобильной GSM связи для удаленного приема и передачи данных для Arduino-проектов. GPRS/GSM shield позволяет добиться этого с помощью одного из трех способов:

Рfссмотрим один из вариантов данного шилда – SIM900 Quad-Band GPRS shield (см. рис. 9.1) на основе чипа SIM900.

Основные характеристики GSM модуля SIM900:

  • четыре диапазона GSM 850/ 900/ 1800/ 1900 МГц;
  • класс передачи данных GPRS multi-slot class 10/8;
  • соответствие стандарту GSM фазы 2/2+;
  • класс мощности 4 (2 Вт в диапазонах 850/ 900 МГц) ;
  • класс мощности 1 (1 Вт в диапазонах 1800/1900 MГц) ;
  • управление AT командами (GSM 07.07 ,07.05 и фирменные AT команды SIMCom) ;
  • аудиокодеки HR, FR, EFR, AMR, подавление эха;
  • CSD до 14.4кбит/с;
  • PPP-стек;
  • встроенный стек TCP/IP, UDP/IP;
  • протоколы HTTP и FTP;
  • протокол защищенных сокетов SSL;
  • декодирование DTMF-тонов;
  • eMail — формирование и отправка электронных писем посредством АТ-команд;
  • SMS Autorun — исполнение АТ-команд, полученных по SMS от определенного абонента;
  • 2.5Mb user memory — встроенная память для пользовательских данных;
  • MMS — формирование, дополнение пользовательскими файлами и отправка с помощью АТ-команд;
  • AMR play — воспроизведение аудиофайлов в динамик или в сторону удаленного абонента;
  • Jamming Detection — функция обнаружения глушения сигнала;
  • FOTA — обновление прошивки модуля по беспроводному каналу;
  • Easy Scan — получение информации об окружающих базовых станциях без подключения SIM-карты;
  • PING — проверка доступности адреса в Internet посредством обмена ICMP пакетами;

Особенности данного шилда:

  • совместимость с Arduino Mega;
  • слот для карт SD ( включение/отключены при помощи перемычки);
  • программное и аппаратное обеспечение последовательного порта: может общаться с Arduino через последовательный порт программного обеспечения (D7 / D8) или последовательный порт (D0 / D1);
  • интерфейс FTDI;
  • слот батарейки для RTC.
  • 10 цифровых входов/выходов GPIO;
  • 2 ШИМ выхода;
  • I2C интерфейс

Данный шилд имеет два способа включения – аппаратный (кратковременное нажатие кнопки PWRKEY) и прграммный (используется выход D9 Arduino).

Получение GPS-данных

Модуль GPS V.KEL 16 один из самых дешевых и простых. Тем не менее имеет батарейку для сохранения данных о спутниках. По даташиту, холодный старт должен занимать 39 секунд, у меня это заняло примерно 20 минут. Следующий старт примерно 2 минуты. Назначение выводов

Основное, что можно делать с этим приемником — читать данные по протоколу NMEA с TX пина. Уровни — 5V,скорость — 9600 бод. Для подключения к Arduino используем программный UART на пинах 2 и 3. Для чтения данных используем библиотеку TinyGPS.

Отправка данных на сервер (GSM/GPRS shield)

Подключаемся к Arduino к контактам 7 и 8.

Для получения страницы по определенному URL нужно послать следующие команды:
AT+SAPBR=1,1 //Открыть несущую (Carrier)
AT+SAPBR=3,1,»CONTYPE»,»GPRS» //тип подключения — GPRS
AT+SAPBR=3,1,»APN»,»internet.beeline.ru» //APN, для Билайна — internet
AT+HTTPINIT //Инициализировать HTTP
AT+HTTPPARA=»CID»,1 //Carrier ID для использования.
AT+HTTPPARA=»URL»,»http:/. ru/gps_tracker/gps_tracker1.php?id_avto=?N&lat=XXXXXlon=YYYYY» //Собственно URL, после sprintf с координатами
AT+HTTPACTION=0 //Запросить данные методом GET
AT+HTTPREAD //дождаться ответа
AT+HTTPTERM //остановить HTTP

Предусмотрим еще один момент — при написании серверной части и web-интерфейса предусмотрим получение и вывод результатов для нескольких модулей (id_avto=N), поставим переключатель на 3 позиции, что позволит получать информацию от 8 транспортных средств.

Вид GPS-трекера в сборе. + добавлена батарея LiPo для перестановки, например на велосипед

Написание скетча на Arduino

Чтобы не отправлять данные во время стоянки транспортного средства, отправлять будем данные, только если GPS дынные будут изменяться на значение, указанное в константе MINCANGE.

Интервал отправки данных — константа INTERVALSEND мсек. Наличие двух активных программных последовательных портов приводит к ошибкам получения/отправки данных, поэтому приходится переключать состояние программных последовательных портов для работы с каждым шилдом.

В процедуре setup() — выбор номера модуля для отправки данных на сервер (id_avto=) — считывается их трехпереключателей

Отправка данных на сервер — обработчик скрипт gps_tracer1.php. Скрипт обрабатывает GET-данные и записывает их в базу данных.

WEB-интерфейс

Web-интерфейс -отображение на Яндекс.Картах текущего (последнего переданного) положения либо маршрута за выбранный период.

Текущее положение — метка , на балуне время для данной метки.

При построении маршрута по меткам строится полигон, на балуне для каждой метки отображается время. Для быстрого построения страницы предусмотрена константа максимального количества меток, следующие метки подгружаются кнопками > и 18.10.2015 0 1

Читайте также:  Броши для шапки своими руками

Источник

IT science

Был куплен у китайцев такой трекер:

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

Сразу оговорюсь, содержать свой сервер для одного устройства получится дороже (в моем случае $5 и безграничное количество устройств), чем платить за чужой (от 80 руб. за устройство).

Поискав готовые решения, я наткнулся на проект https://www.traccar.org, проект открытый, есть исходники на github https://github.com/traccar/traccar

для начала я проверил работоспособность прибора, для этого написал короткий скрипт на php, по сути, это сокет сервер, который слушает порт 999 и выводит в консоль всю информацию, которая приходит

через NAT на роутере открыл порт наружу

дальше приступаем к настройкам трекера (брал с этого сайта http://miradmin.ru/gps-tracker-sinotrack-st-901/), далее транслирую то что использовал сам (команды отправляются смс сообщениями)

  1. Регистрируем номер телефона, с которого будем управлять устройством
    899977777770000 1
    89997777777 — номер телефона
    0000 — пароль (по умолчанию четыре ноля)
    1 — номер ячейки (можно зарегистрировать до 3 телефонов)
  2. Меняем пароль, конечно же
    77712340000
    777 — команда
    1234 — новый пароль
    0000 — старый пароль
  3. Меняем часовой пояс
    8960000E03
    896 — команда
    0000 — пароль
    E03 — часовой пояс Москвы
  4. Выбираем режим передачи данных (SMS или GPRS)
    7100000
    710 — команда для GPRS
    0000 — пароль
  5. Настройка точки доступа для GPRS
    Мегафон: 8030000 internet gdata gdata
    МТС: 8030000 internet.mts.ru mts mts
    Билайн: 8030000 internet.beeline.ru beeline beeline
    ТЕЛЕ2: 8030000 internet.tele2.ru
    0000 — пароль
  6. Задаем интервалы отправки сообщений на сервер при включенном зажигании и в режиме оффлайн
    800000 5
    каждые пять секунд при включенном зажигании
    8090000 300
    каждые пять минут при выключенном
    0000 — пароль
  7. Настройка спящего режима
    SLEEP0000 5
    после выключения зажигания через пять минут устройство «заснет», перестанет присылать сообщения на сервер, но будет реагировать на смс и звонки
    0000 — пароль
  8. Настройка сервера данных
    8040000 123.123.123.123 999
    123.123.123.123 — ip адрес сервера
    999 — порт сервера
    0000 — пароль

после указанных настроек я стал получать сообщения с трекера:

отлично! осталось создать сервер и транслировать данные туда

для начала я выбрал площадку для размещения виртуального сервера, делал на DigitalOcean
если хотите помочь нам и получить $25 на счет, воспользуйтесь реферальной ссылкой https://m.do.co/c/74f25c68fa79

используйте самый дешевый Droplet за $5 в месяц с ubuntu на борту

дальше в сжатой форме будут только команды для установки недостающих компонент и настройки конфигураций

$ apt-get update
$ apt-get upgrade
$ apt-get install mc

$ apt-get install mysql-server mysql-client

далее запускаем mysql, настраиваем пароль пользователя root и создаем базу с пользователем для работы traccar

не забудьте указать свои
root_password — пароль root
user_password — пароль пользователя traccar_user

USE mysql;
UPDATE USER SET authentication_string=PASSWORD(«root_password») WHERE USER=’root’;
FLUSH PRIVILEGES;

CREATE DATABASE traccar DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE USER ’traccar_user’@’localhost’ IDENTIFIED BY ’user_password’;
GRANT ALL ON traccar.* TO ’traccar_user’@’localhost’;
FLUSH PRIVILEGES;
EXIT;

качаем и устанавливаем сервер

на момент написания статьи была актуальная версия 4.6, посмотреть версию можно тут https://github.com/traccar/traccar/releases/

настраиваем конфиг, приводим к виду ниже, не забудьте заменить user_password на тот, который указывали выше

смотрим запустился ли сервис

если все хорошо, получаем следующий вывод

теперь можно подключиться непосредственно к web интерфейсу
http://ip_адрес_droplet:8082

по-умолчанию вводим:
Email: admin
Пароль: admin

не забудьте настроить наше устройство для передачи данных на сервер, для этого отправьте СМС
8040000 123.123.123.123 5013
123.123.123.123 — ip адрес нашего Droplet
5013 — порт сервера
0000 — пароль трекера

Важно! Трекер Sinotrack ST-901 использует протокол H02? соответственно указываем порт 5013.

В web интерфейсе добавляем устройство (левый верхний угол)

Имя: имя нашей машинки
Идентификатор: номер трекера (ID под штрих кодом)

через некоторое время машина появится на карте

Все! Для работы этого более чем достаточно!

Дальше пойдет дополнительная информация (необязательные опции)

  1. Для начала создал нового пользователя, чтобы не подключаться все время как admin
  2. Изменил единицы измерения скорости (в узлах скорость не очень)
    зашел Аккаунт — Атрибуты — добавить
  • Имя: Единица скорости
  • Значение: км/ч
  1. Сервер — Слой карты указал «Яндекс Карты», работают быстрее и стабильнее

Важная для меня опция — это ssl подключение к web интерфейсу, не хочется чтобы мой трафик мог видеть или менять оператор связи. Для этого вам понадобится доменное имя, и доступ к настройкам DNS, подтверждённый ssl сертификат не получится выпустить на ip адрес.

Читайте также:  Арболит своими руками по госту

Для начала, создаем в DNS запись A, где для нашего домена (например, car.domain.ru) ассоциируем ip адрес нашего Droplet.

настраиваем nginx в режиме reverse proxy и подключаем Let’s Encrypt

$ apt-get install nginx
$ cd /etc/nginx
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/cert.key -out /etc/nginx/cert.crt

приводим конфиг к следующему виду, не забудьте заменить в четырех местах car.domain.ru на ваш домен

Важно сделать именно так, в web интерфейсе используется WebSocket, который тоже надо правильно транслировать через прокси.

Теперь вы можете открывать в браузере вашу карту по имени https://car.domain.ru и весь трафик к серверу и обратно будет шифроваться.

И самая малость, сделаем красиво, добавим подтвержденный сертификат. Нам поможет certbot (https://certbot.eff.org).

$ apt-get install software-properties-common
$ add-apt-repository universe
$ add-apt-repository ppa:certbot/certbot
$ apt-get update

$ apt-get install certbot python-certbot-nginx
$ certbot —nginx

далее будет предложено указать e-mail, выбрать найденные домены из конфигурации и сделать редирект http на https автоматически.

проверим автоматический выпуск сертификата:

не забудьте добавить задание в crontab для автоматического перевыпуска сертификатов.

Например, каждого первого числа месяца, в 3 часа 12 минут будет попытка перевыпустить сертификат.
Добавьте строчку в конце (не забудьте, что в crontab нужно оставлять последнюю пустую строку).

Источник

Пилим сервер GPS мониторинга OpenGTS

Введение

Задача смастерить сервер удаленного GPS/GPRS мониторинга подвижных объектов способный работать с различными моделями GPS трекеров.

Сервер должен:

  • Принимать данные от трекеров: id трекера; время создания пакета данных;
    данные GPS: координаты, скорость, высота, азимут и т.п.;
    данные всяких датчиков: едет/стоит, одометр, кол-во топлива, различные цифровые и аналоговые датчики и т.п.
    Большинство трекеров шлет данные через TCP/UDP на предварительно указанный в настройках трекера IP адрес/порт.
  • Складывать данные в базу данных.
  • Отдавать данные клиентам, чтоб у них на мониторе была карта с мониторимыми объектами.
    Информация о состоянии объектов(стоянка/движение, топливо, датчики и т.п.).
    Возможность получать отчеты по положению/состояниям за промежутки времени.

В данный момент мы пользуемся доморощенным сервером. Не проблема прикрутить к нему разные трекеры, но у него нет клиентской Web морды, только админка базы данных. Клиенты любуются на свои автомобили с помощью отдельной клиентской программы которую не удобно поддерживать.

Как всегда, хочется готового решения за даром.
OpenGTS (автор Martin D. Flynn) единственное opensource решение удовлетворяющее всем требованиям. Существует в двух ипостасях opensource и enterprise за деньги. Сделан из MySQL/MSSQL, Java (ORM базы данных, клиентский/админский веб интерфейс, сервер принимающий данные от трекеров), TomCat.
Полное описание установки/настройки — http://www.opengts.org/OpenGTS_Config.pdf,
форум,
Wiki(требует регистрации на sourceforge).

Здесь было описание установки OpenGTS, но такая длинная статья на хабр не влезла, пришлось установку урезать. Если интересно, пишите в коментах, выложу отдельную статью.

Готовимся пилить

Разобраться в OpenGTS(8Мб исходников — wellcome to Java) без навигации по коду трудно.
Немного помогают javadoc http://www.geotelematic.com/javadocs/index.html Или собрать локально
>ant javadocs
Результат будет лежать в ./OpenGTS_2.2.6/javadocs
Но лучше использовать Eclipse, удобная навигация по коду + отладка.
Здесь http://opengts.org/OpenGTS_Eclipse.pdf рассказано как сделать чтоб OpenGTS собирался и вообще все делал из под Eclipse.
Более простой вариант в Eclipse’е создать проект на основе ANT’овского build.xml, редактировать в Eclipse, собирать в командной строке.
Для отладки запускать что надо(сервер или TomCat) давая Java’e отладочный ключик.
Я вставил ключик в ./OpenGTS_2.2.6/bin/runserver.pl
#—- remote debug;
$Command .= » -Xdebug -Xrunjdwp:transport=dt_socket,address=8998,server=y «;
#вставить перед:
# — Java Main start-server command

Подробности спросить у Google: eclipse java remote debug.

Пригодится гляделка MySQL базы чтоб понять попали данные в базу или нет.

Мастерим сервер для трекера не поддерживаемого OpenGTS на примере сервера для трекера MoniCar

http://www.monicar.ru/files/OpenGTS_monicar_server.zip там только те файлы которые я менял. Структура директорий в архиве повторяет OpenGTS. Места изменений можно найти поискав комментарии ‘imatveev13’ и ‘ivm’.
Когда я пишу «см. файл» имеется в виду файл из этого архива. Когда я пишу «делаем что то с файлом» имеется в виду файл из установленного OpenGTS.

Сервера поддерживаемых трекеров лежат в ./OpenGTS_2.2.6/src/org/opengts/servers
Там мы наблюдаем:

  • aspicore
  • gtsdmtp — для трекеров поддерживающих протокол OpenDMTP от автора OpenGTS. Таких трекеров не существует, есть ПО для мобильных телефонов с GPS которое превращает телефон в трекер.
  • icare
  • sipgear ZhongShan SIPGEAR Technology Co, Ltd
  • template — заготовка для изготовления сервера
  • template_old — заготовка для изготовления сервера старая

Серверы трекеров OpenGTS не включенные в дистриб.:

  • трекер MoniCar: сервер MoniCar
  • MeiTrack trackers: GT30, GT30X, GT60, VT300, VT310.: север meitrack
  • Teltonika GH1202: teltonika_gh1202.rar с форума OpenGTS
  • Teltonika FM Tracking-devices: TrackClientPacketHandler.java с форума OpenGTS
Читайте также:  Датчик уровня сыпучих материалов своими руками

Как видите, серверов не густо, автор OpenGTS переместил поддержку популярных трекеров от производителей которые ему не забашляли в enterprise версию. Купленный на e-bay за $100 трекер, скорее всего, в списке отсутствует. А мне был нужен сервер под свой трекер.

Принимаемся мастерить свой сервер. Этот рассказ не подразумевает что читатель, исполняя инструкции, выточит сервер MoniCar. Предполагается что читатель скопирует из архива с сервером директорию monicar куда надо, подправит build.xml и dcservers.xml, соберет, попробует, а рассказом будет пользоваться как пояснением при изготовлении своего сервера.

Копируем директорию template в monicar.
В build.xml добавляем
target name=»compile.servers»
target name=»monicar»
Как добавлять см. build.xml в выше упомянутом сервере MoniCar

В dcservers.xml добавляем
DCServer name=»monicar»
(подробности см. там же)

Во всех файлах новой директории меняем
org.opengts.servers.template;
на
org.opengts.servers.monicar;

Наш новый сервер собирается командой
>ant monicar
и запускается командой
>bin/runserver.pl -s monicar -i
Ключ -i для интерактивного режима, удобно при отладке. Сервер вывалит на консоль кучу отладочной информации и будет ждать данных от трекера, но, пока, сервер не умеет парсить данные. Поэтому останавливаем сервер Ctrl-C и продолжаем пилить.

Поскольку трекер MoniCar шлет данные в виде ASCII строк, в файле Constants.java пишем
public static final boolean ASCII_PACKETS = true;

Как парсить бинарные пакеты данных см. ниже.

Здесь формат данных нашего трекера.
Разбор ASCII данных происходит в TrackClientPacketHandler.java в функции parseInsertRecord_ASCII_1
Трекер MoniCar шлет данные в виде ASCII строки в которой поля разделены символом ‘;’. Распихиваем поля по элементам массива строк
String fld[] = s.split(«;», -1);
Наш трекер, для экономии GPRS трафика, настраивается на посылку только нужных полей. Первое поле в пакете — битовое поле в котором состояние каждого бита говорит включена посылка соответствующего поля или нет. Поскольку не встречал такой фичи у других трекеров, скорее всего, вам это не понадобится, но для протокола
long fieldMask = StringTools.parseLong(fld[0], 0L);
Этот цикл бежит по битам fieldMask и определяет какие поля есть в пакете данных.
for( int i = 0; i

Получаем уникальный идентификатор(uniqueID) трекера приславшего данные
String modemID = fld[1].toLowerCase();

Под комментарием
/* find Device */
кучка строчек проверяющих наличие трекера с соответствующим уникальным идентификатором в базе данных. Узнает deviceID и какому аккаунту принадлежит трекер. Админ аккаунта должен занести трекер в базу.

Создаем экземпляр класса EventData
EventData.Key evKey = new EventData.Key(accountID, deviceID, 0 , StatusCodes.STATUS_LOCATION);
EventData evdb = evKey.getDBRecord();

Пихаем данные в созданный экземпляр класса в таком духе
evdb.setSpeedKPH(StringTools.parseDouble(fld[fieldCount],0.0));
Второй параметр(0.0) в StringTools.parseDouble(fld[fieldCount],0.0) это значение по умолчанию, на случай если кривую строку подсунули.
Командуем положить данные в базу
device.insertEventData(evdb);

Собираем наш сервер и получаем ошибку в строке
evdb.setFuelTotal(fuelTotal);
говорящую что у класса EventData нет метода setFuelTotal().

Автор OpenGTS заготовил огромную кучу(>100) полей для всевозможных данных от трекера(см. ./OpenGTS_2.2.6/src/org/opengts/db/table/EventData.java). Из жалости к нашему бедному MySQL, по умолчанию(см. StandardFieldInfo), используются только поля имеющие отношение к местоположению машины. Но мы, из принципа, хотим все поля. Где то в недрах конфигурационных файлов, вроде, есть опции подключающие дополнительные поля. Но эта возможность не документирована, а код перед нами.
Открываем EventData.java и учиняем свое описание таблицы
private static final DBField AllFieldInfo[] = <
//сюда копипастим нужные дополнительные поля
>
public static DBFactory getFactory()
<
[. ]
//EventData.StandardFieldInfo
EventData.AllFieldInfo

Теперь можно взять скрипт изображающий трекер MoniCar monicar_dummy.pl.txt и полюбоваться как по Питеру, странным маршрутом, поедая топливо и дрыгая цифровыми входами ездит машина.

Только правильных показаний уровня топлива мы не увидим. OpenGTS подразумевает что трекер присылает данные о количестве топлива в баке, но тупой трекер не знает как вольты на одном из аналоговых входов, к которому подключен датчик топлива, связаны с уровнем топлива. Для преобразования вольт в литры нужна тарировочная таблица. Я(изготовитель трекера) мог бы запихать тарировочную таблицу в трекер, но считаю это не правильным. Эта таблица связана не с трекером, а с датчиком и топливным баком автомобиля. Предположим на одном из автомобилей трекер сломался, заменили на другой. Если таблица в трекере, оператору мониторинга придется новый трекер настраивать: раскопать тарировочную таблицу, залить в трекер, а если датчик не один? Не только топливному датчику, но любому аналоговому, может потребоваться таблица. А если трекер от стороннего производителя и не поддерживает тарировочной таблицы? Тарировочная таблица любого аналогового датчика должна храниться в базе данных и преобразованием должен заниматься сервер.

Источник

Adblock
detector